编写程序:从键盘上输入10名学生的姓名及三科考试成绩和总成绩,排序并输出。
具体要求:
① 使用结构体数组实现。
② 用户自定义函数输入学生的信息和输出结果;
③ 自定义函数排序
④ 在main函数中调用这些函数
#include<stdio.h>
int i,j;
#define N 10
struct stu{
char name[5];
int sco[3];
int sum;
};
struct stu s[10],temp[10];
void input(struct stu s[],int n)
{
for(i=0;i<n;i++)
{
printf("请输入第%d位同学的姓名和三科成绩:",i+1);
scanf("%s%d%d%d",&s[i].name,&s[i].sco[0],&s[i].sco[1],&s[i].sco[2]);
s[i].sum=s[i].sco[1]+s[i].sco[2]+s[i].sco[0];
}
}
void output(struct stu s[],int n)
{
for(i=0;i<n;i++)
{
printf("姓名:%s 三科成绩:%d %d %d 总成绩:%d\n",s[i].name,s[i].sco[0],s[i].sco[1],s[i].sco[2],s[i].sum);
}
}
void sort(struct stu s[],int n)//选择排序
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(s[i].sum<s[j].sum)
{
temp[0]=s[i];
s[i]=s[j];
s[j]=temp[0];
}
}
}
}
int main()
{
input(s,N);
sort(s,N);
output(s,N);
return 0;
}
以下是使用typedef稍加简化的写法:
#include<stdio.h>
int i,j;
#define N 10
typedef struct stud{
char name[5];
int sco[3];
int sum;
}stu;
stu s[10],temp[10];
void input(stu s[],int n)
{
for(i=0;i<n;i++)
{
printf("请输入第%d位同学的姓名和三科成绩:",i+1);
scanf("%s%d%d%d",&s[i].name,&s[i].sco[0],&s[i].sco[1],&s[i].sco[2]);
s[i].sum=s[i].sco[1]+s[i].sco[2]+s[i].sco[0];
}
}
void output(stu s[],int n)
{
for(i=0;i<n;i++)
{
printf("姓名:%s 三科成绩:%d %d %d 总成绩:%d\n",s[i].name,s[i].sco[0],s[i].sco[1],s[i].sco[2],s[i].sum);
}
}
void sort(stu s[],int n)//选择排序
{
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(s[i].sum<s[j].sum)
{
temp[0]=s[i];
s[i]=s[j];
s[j]=temp[0];
}
}
}
}
int main()
{
input(s,N);
sort(s,N);
output(s,N);
return 0;
}
运行结果: