小江933 2022-12-09 18:02 采纳率: 100%
浏览 88
已结题

链表问题统计,追加,删除

问题遇到的现象和发生背景

有木有人知道这问题怎么改呀,非常感谢
(6)“分类统计输出”模块:统计输出各专业人数、男女生人数、学生平均年龄和平均入学成绩;
void census(struct STU *ps,,int length);
(7)“追加学生信息”模块:完成增加一个学生信息的功能,同时考虑学生人数的变化如何处理;
int add(struct STU *ps,int length);
(8)“删除学生信息”模块:完成删除一个学生信息的功能,同时考虑学生人数的变化如何处理;

img

#include <stdio.h>
#define NUM 100

struct STU
{
    char spec[20];   //专业
    char Number[8];  //姓名
    char name[20];   //姓名
    int age;         //年龄
    char sex;        // M 代表男性  W代表女性
    float score      // 入学分数
};

void census(struct STU *ps,int length);
//添加学生
int add(struct STU *ps,int length);
int delete(struct STU *ps,int length);
int main()
{
    return 0;
}

void census(struct STU *ps,int length)
{
    int male_count=0; //男生数量

    int spec1=0, spec2=0, spec3=0, spec4=0; //各专业统计数,
    int total_age=0; //年龄总数
    float total_score=0; //总成绩
    for(int i = 0; i < length-1; i++)
    {
        //如果是男性,则男性数量加1
        if(ps[i]->sex == 'M')
        {
            male_count++;
        }

        //以下根据实际专业情况进行分别统计处理
        switch(ps[i]->spec)
        {
        case "语文":
            spec1++;
            break;
        case "数学":
            spec2++;
            break;
        case "英语":
            spec3++;
            break;
        case "历史":
            spec4++;
            break;
        }

        total_age+=ps[i]->age;
        total_score+=ps[i]->score;
    }

    printf("男生人数为:%d\n", male_count);
    printf("女生人数为:%d\n", length- male_count);
    printf("专业1人数为:%d\n", spec1);
    printf("专业2人数为:%d\n", spec2);
    printf("专业3人数为:%d\n", spec3);
    printf("专业4人数为:%d\n", spec4);
    printf("平均年龄为:%.2f\n", total_age/length);
    printf("平均入学成绩为:%.2f\n", total_score/length);

}

int add(struct STU *ps,int length)
{
    int count;
    STU std;
    printf("您需要添加几个学生信息:");
    scanf("%d",&count);
    if((length+count)>= NUM )
    {
        printf("该数量添加后将超出系统限制");
        return 1;
    }
    for(i = 0; i < count; i++)
    {
        printf("请输入第 %d 个学生的信息\n",i+1);
        printf("学号(1000):");
        scanf("%s",&std.Number);
        fflush(stdin);
        printf("姓名:");
        scanf("%s",std.name);
        fflush(stdin);
        printf("性别:");
        scanf("%c",&std.sex);
        fflush(stdin);
        printf("年龄:");
        scanf("%d",&std.age);
        fflush(stdin);
        printf("专业:");
        scanf("%s",&std.spec);
        fflush(stdin);
        printf("入学成绩:");
        scanf("%f",&std.score);
        fflush(stdin);
        if(*len < NUM)                            //100为数组长度
        {
            ps[length+i] = std; //将添加的学生信息存储到数组中, 如果使用链接,此处操作不同
            //如果使用链表,则循环到链表的最后,用最后一个节点的next指向新的节点
        }
    }
    return length
}
int delete(struct STU *ps,int length)
{
    char[] no;
    printf("请输入要删除学生的编号:\n");
    scanf("%s",&no);
    int j,m = length+10;
    //循环整个数组
    for(j = 0; j < length; j++)
    {
        //检查是否有适合的学号
        if(stu[j].no == no)
        {
            m = j;
            //从当前记录开始,循环到最后一项
            for(; m < length-1; m++)
            {
                //后项覆盖前项,完成删除
                stu[m] = stu[m+1];
            }
            //总长度减1,完成后结束删除动作
            length--;
            break;
        }
    }
    //如果m的值都没被改动过,说明根本没找到过,报错
    if(m > length)
    {
        printf("学号输入错误,未查找到学号[ %d ]\n",no);
    }
    return length;
}

  • 写回答

1条回答 默认 最新

  • 浪客 2022-12-09 18:39
    关注

    错误提示给的很明显了,比如35行的分号输成中文分号了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月9日
  • 已采纳回答 12月9日
  • 创建了问题 12月9日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效