小江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日

悬赏问题

  • ¥15 软件定义网络mininet和onos控制器问题
  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。