有10个学生,每个学生的数据包括学号、姓名、3门功课的成绩。从键盘输入10个学生的数据,要求按平均成绩降序显示出所有学生的数据(包括学号、姓名、3门课成绩、平均成绩),并将其写入文本文件(TXT)中。
参考:
#include "stdio.h"
#define N 10
struct student{
int id;
char name[20];
int kaoqun;
int biaoxian;
int zuoye;
float avg;
}stud[N],t;
int main()
{
int i,j;
for(i=0;i<N;i++){
printf("请输入第%d个学生信息\n",i+1);
scanf("%d %s",&stud[i].id,&stud[i].name);
fflush(stdin);
scanf("%d %d %d",&stud[i].kaoqun,&stud[i].biaoxian,&stud[i].zuoye);
stud[i].avg = (stud[i].kaoqun+stud[i].biaoxian+stud[i].zuoye)/3.0f;
}
//倒叙排序
for (i = 0; i < N - 1; i++){
for (j = 0; j < N - 1 - i; j++){ //按成绩对学生信息进行排序
if (stud[j].avg < stud[j + 1].avg){ //整型数字的比较
t = stud[j];
stud[j] = stud[j + 1];
stud[j + 1] = t;
}
}
}
//打印
printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\t\n");
for (i = 0; i < N; i++){
printf("%d\t", stud[i].id);
printf("%s\t", stud[i].name);
printf("%d\t", stud[i].kaoqun);
printf("%d\t", stud[i].biaoxian);
printf("%d\t", stud[i].zuoye);
printf("%f \n", stud[i].avg);
}
return 1;
}
定义学生结构体,以及学生信息数组,用scanf输入学生信息,同时计算总成绩,除以3就是3门课平均成绩。用冒泡排序对平均成绩进行排序。然后用fopen打开文件,fprintf逐行写入学生信息
不知道你这个问题是否已经解决, 如果还没有解决的话:有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
#include<stdio.h>
#define N 10
struct student
{
char num[6];
char name[20];
float score[3];
float avr;
}stu[N];
int main()
{
int i,j,maxi;
float sum,max,average;
for(i=0;i<N;i++)
{
printf("input message of student %d:\n",i+1);
printf("No.:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("score %d:",j+1);
scanf("%f",&stu[i].score[j]);
}
}
average=0;
max=0;
maxi=0;
for(i=0;i<N;i++)
{
sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{
max=sum;
maxi=i;
}
}
average/=N;
printf(" No. name score1 score2 score3 average\n");
for(i=0;i<N;i++)
{
printf("%5s%10s",stu[i].num,stu[i].name);
printf("%9.2f",stu[i].score[0]);
printf(" %9.2f",stu[i].score[1]);
printf(" %9.2f",stu[i].score[2]);
printf(" %8.2f\n",stu[i].avr);
}
printf("average=%5.2f\n",average);
printf("The highest score is:student %s,%s.\n",stu[maxi].num,stu[maxi].name);
printf("His scores are :%6.2f,%6.2f,%6.2f,average:%5.2f.\n",stu[maxi].score[0],
stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);
}
#include<stdio.h>
struct student {
int num;
char name[30];
int score[3];
double ave;
};
int main() {
int n = 10, i, j;
struct student stu[n], t;
for(i = 0; i < n; i++) {
scanf("%d %s %d %d %d", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
stu[i].ave = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
}
for(i = 0; i < n - 1; i++) {
for(j = 0; j < n - 1 - i; j++) {
if(stu[j].ave < stu[j + 1].ave) {
t = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = t;
}
}
}
FILE *fp;
fp = fopen("score.txt", "w");
for(i = 0; i < n; i++) {
printf("%d %s %d %d %d %.2f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
fprintf(fp,"%d %s %d %d %d %.2f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].ave);
}
fclose(fp);
return 0;
}