作业帮 > 综合 > 作业

用循环实现统计5个学生的平均成绩和总成绩

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/05/12 19:46:31
用循环实现统计5个学生的平均成绩和总成绩

1楼写的我看不懂啊、、、、
用循环实现统计5个学生的平均成绩和总成绩
/*这个项目的核心是对存放学员信息的结构数组的操作*/
#includestdio.h
/*首先创建一个学员信息的结构*/
struct student
{
int num; //学号
char name[20]; //姓名
float score[3]; //三门课的成绩
float ave; //三门课的平均成绩
}stu[50];//声明一个结构类型的数组
/*定义录入学员信息的录入函数.因为要给结构数组stu[]赋值,
所以是有返回值的,返回类型是一个结构*/
struct student input()
{
struct student in;
int i;
float sum=0;
printf("\n 学号:");
scanf("%d",in.num);//注意,这里的in.num它是一个成员变量,是个变量,所以''别忘了
printf(" 姓名:");
fflush(stdin);
gets(in.name);
printf(" 三门课的成绩 \n");
/*用一个循环来为score[]赋值并累加成绩*/
for(i=0;i3;i++)
{
printf(" 成绩%d:",i+1);
scanf("%f",in.score[i]);
sum+=in.score[i];
}
in.ave=sum/3;//计算出平均成绩
return in;
}
/*定义显示学员信息的函数*/
void display(struct student *s,int n)
{
int i;
printf("\n 学号\t姓名\t平均成绩\n");
for(i=0;in;i++,s++)//指针循环遍历结构数组时,要让指针也++
{
printf(" %d\t%s\t%5.2f\n",s-num,s-name,s-ave);
}
}
/*定义按学员平均成绩排序的函数*/
void sort(struct student *s,int n)
{
int i,j;
struct student d;//定义一个中间交换变量
for(i=0;in;i++)
{
for(j=0;jn-1-i;j++)
{
if((s+j)-ave(s+j+1)-ave)
{ //交换的是结构数组里的结构变量
d=*(s+j);
*(s+j)=*(s+j+1);
*(s+j+1)=d;
}
}
}
}
/*定义插入函数*/
void insert(struct student *s,int n)
{
int i,j;
struct student in;
printf("\n 请输入要插入的学员信息");
in=input();
for(i=0;in;i++,s++)
{
if(s-avein.ave)//前面定义的排序函数是个降序排列,所以寻找一个比插入的平均成绩小的位置
break;
}
if(in)
{
for(j=n;ji;j--)
{
*(s+j)=*(s+j-1);//为插入的结构变量留出位置,其他结构变量往后移一位
}
*(s+i)=in;
}
else//当插入的平均成绩最低时
{
for(j=n;j0;j--)
{
*(s+j)=*(s+j-1);
}
*(s+0)=in;
}
}
/*定义删除函数*/
void delet(struct student *d,int n)
{
int i,j,no;
printf("\n 请输入要删除学员的学号:");
scanf("%d",no);
for(i=0;in;i++,d++)
{
if(d-num==no)
break;
}
if(i=n)
printf("\n 没有该学员.\n");
else
{
d=d-i;
for(j=i;jn;j++)
{
*(d+j)=*(d+j+1);
}
}
}
void main()
{
int i,count=0;//count用来统计输入学员的个数
char ans;
float sum=0;
/*由于不确定学员个数,所以用“回答 y or n ”
来确定是否继续输入学员信息*/
printf("\n 请输入所有学员的信息");
ans='y';
while(ans=='y')
{
if(count=50)
{
stu[count]=input();//调用录入函数
count++;
printf("\n 是否还要输入学员信息?(y/n)");
fflush(stdin);
ans=getchar();
}
else
printf("\n 学员的个数已超过了最多人数50");
}
printf("\n 排序前的学员信息如下:");
display(stu,count);//调用显示学员信息函数,传递的参数是结构数组和学员的个数
sort(stu,count);//调用排序函数
printf("\n 排序后的学员信息如下:");
display(stu,count);
printf("\n 是否要插入新学员?(y/n)");
fflush(stdin);
ans=getchar();
while(ans=='y')
{
insert(stu,count);//调用插入函数
count++;//插入一个,学员的人数也要加一个
printf("\n 是否还要插入新学员?(y/n)");
fflush(stdin);
ans=getchar();
}
printf("\n 插入新学员后的学员信息如下:");
display(stu,count);
printf("\n 是否要删除某个学员?(y/n)");
fflush(stdin);
ans=getchar();
while(ans=='y')
{
delet(stu,count);//调用删除函数
count--;//删除一个,学员的人数也要减一个
printf("\n 是否还要删除某个学员?(y/n)");
fflush(stdin);
ans=getchar();
}
printf("\n 删除某个学员后的学员信息如下:");
display(stu,count);
}