输入n个学生信息(n不超过20),每个学生信息包括学号、姓名、语文成绩、英语成绩、数学成绩和平均成绩。要求:
(1) 使用aver子函数计算每个学生的平均成绩 ;
(2) 使用update子函数实现根据提供的学号将该学生的姓名修改为指定字符串,如果修改成功返回1,否则返回0 ;
(3) 使用insert函数实现在下标为0的位置上插入一条指定的学生信息 ;
(4) 使用sort子函数实现根据学生的平均成绩进行排序 。
题目所给代码如下:
#include "stdio.h"
#include "string.h"
struct student
{
int num;
char name[10];
int computer,english,math;
double average;
};
void input(struct student a[],int n);
void output(struct student a[],int n);
void aver(struct student a[],int n);
int update(struct student a[],int n,int num,char name[]);
void insert(struct student a[],int n,struct student s);
void sort(struct student a[], int n);
main()
{
int n,result;
struct student a[20],s= {2001, "yyy",60,76,80,72};
scanf("%d",&n);
input(a,n);
aver(a,n);
output(a,n);
result=update(a,n,1002,"wang");
if(result==1) printf("Success\n");
else printf("Fail\n");
insert(a,n,s);
n=n+1;
output(a,n);
sort(a,n);
output(a,n);
}
void input(struct student a[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d %s %d %d %d",&a[i].num,a[i].name,&a[i].computer,&a[i].english,&a[i].math);
}
void output(struct student a[],int n)
{
int i;
for(i=0; i<n; i++)
printf("%d %s %d %d %d %.2lf\n",a[i].num,a[i].name,a[i].computer,a[i].english,a[i].math,a[i].average);
}
/*你的代码会出现在这里*/
参考答案如下:
void aver(struct student a[],int n)
{
int i;
for(i=0;i<n;i++)
a[i].average=(a[i].computer+a[i].english+a[i].math)/3.0;
}
int update(struct student a[],int n,int num,char name[])
{
int i;
for(i=0;i<n;i++)
{
if(a[i].num==num)
{
strcpy(a[i].name,name);
break;
}
}
if(i<n) return 1;
else return 0;
}
void insert(struct student a[],int n,struct student s)
{
int i;
for(i=n;i>0;i--)
a[i]=a[i-1];
a[0]=s;
}
void sort(struct student a[],int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j].average>a[j+1].average)
{
struct student p=a[j];
a[j]=a[j+1];
a[j+1]=p;
}
}
}
}
以题目为论,且不谈主函数和输入输出函数。
aver函数:
首先得知a数组以及数组长度n,引入i,通过平均数的公式,很容易得到学生表中各个学生的平均成绩。
update函数:
首先得知a数组以及数组长度n,通过遍历结构体中的num变元进行判断,如果是我们要更改姓名的学号,因为名字是字符串,所以要用strcpy函数进行字符串的交换,如果交换成功即输出Success,反之输出Fail。
insert函数:
首先得知a数组以及数组长度n,通过移位法将所有数据向右移动一位,将a[0]空出来,再让学生信息填充进a[0]中。
sort函数:
首先得知a数组以及数组长度n,通过冒泡排序法,将平均数的数值从小到大交换,要注意是交换整个数组而不是单个平均数变元。
你学会了吗?