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