c语言的问题 a. 定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域; C语言 用结构体类型数组编程实现输入5个学生的学号姓名平时成...

作者&投稿:真成 (若有异议请与网页底部的电邮联系)
c语言的问题 a. 定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域; 浏览次数:80次悬赏分:30 | 离问题结束还有 5 小时 | 提问者:zfpkf1990
a. 定义一个结构体类型数组,结构体类型含有学号、姓名和成绩三个域;
b. 将文本文件的内容读入到结构体数组中;
c. 显示成绩最高的人的学号、姓名和成绩(如果有相同的人要全部显示);
d. 显示平均成绩、高于、低于和等于平均成绩的人数;
e. 显示成绩为优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)的人数和所占百分比;

发到我邮箱 305221826@qq.com 十分感谢

/*自己写 的,已经发多一份到你的邮箱!*/

#include "stdio.h"
#include "stdlib.h"
typedef struct stutttt
{ /*定义结构体*/
char name[50];
char num[50];
double score;
}stu;
stu student,s[1000];
int n;
double max;
double average;
char fileI[20] = "stuin.txt";
char fileO[20] = "stuout.txt";
int cmp( const void * a, const void * b )
{
if(((stu*)a)->score < ((stu*)b)->score) return 1;
else return -1;
}

void Sort()
{
qsort(s,n,sizeof(stu),cmp);
}

void Pnt()
{
int i;
for(i=0;i<n;i++)
{
printf("%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
}
printf("\n");
}

void Read()
{
n = 0;
FILE *fp;
if((fp=fopen(fileI,"r"))==NULL)
{ /*以只读打开文件*/
printf("cannot open file");
getchar();
exit(0);
}
while( fscanf(fp,"%s%s%lf\n",s[n].num,s[n].name,&s[n].score)!=EOF /* 从文件读*/ )
{
n++;
}
fclose(fp);
}

void Solve()
{
int i;
int h=0,e=0,l=0;
int m90_100 = 0,m80_89 = 0, m70_79 = 0,m60_69=0,m0_59=0;
char sss[81] = "";/*"--------------------------------------------------------------------------------";*/
FILE * fp;
if((fp=fopen(fileO,"w"))==NULL)
{ /*以只读打开文件*/
printf("cannot open file");
getchar();
exit(0);
}
average = 0;
max = 0;
for(i=0;i<n;i++)
{
if( s[i].score > max ) max = s[i].score;
average += s[i].score;
}
average /= n;
puts("最高分的人:");
fputs("最高分的人:\n",fp);
for(i=0;i<n;i++)
{
if( s[i].score < average ) l++;
else if( s[i].score > average ) h++;
else e++;

if( s[i].score>=90 ) m90_100++;
else if( s[i].score>=80 ) m80_89 ++;
else if( s[i].score>=70 ) m70_79 ++;
else if( s[i].score>=60 ) m60_69 ++;
else m0_59 ++;

if( s[i].score < max ) continue;
printf("%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
fprintf(fp,"%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
}
printf("\n");
fprintf(fp,"\n");
printf("平均成绩:%lf\n",average);
printf("高于平均 %d 人\n",h);
printf("等于平均 %d 人\n",e);
printf("低于平均 %d 人\n",l);
fprintf(fp,"平均成绩:%lf\n",average);
fprintf(fp,"高于平均 %d 人\n",h);
fprintf(fp,"等于平均 %d 人\n",e);
fprintf(fp,"低于平均 %d 人\n",l);
puts("");
fputs("",fp);
printf("优秀(90~100) %d 人数, 百分比;%%%lf\n",m90_100,100.0*m90_100/n);
printf("优秀(80~89 ) %d 人数, 百分比;%%%lf\n",m80_89 ,100.0*m80_89 /n);
printf("优秀(70~79 ) %d 人数, 百分比;%%%lf\n",m70_79 ,100.0*m70_79 /n);
printf("优秀(60~69 ) %d 人数, 百分比;%%%lf\n",m60_69 ,100.0*m60_69 /n);
printf("优秀(00~50 ) %d 人数, 百分比;%%%lf\n",m0_59 ,100.0*m0_59 /n);
fprintf(fp,"优秀(90~100) %d 人数, 百分比;%%%lf\n",m90_100,100.0*m90_100/n);
fprintf(fp,"优秀(80~89 ) %d 人数, 百分比;%%%lf\n",m80_89 ,100.0*m80_89 /n);
fprintf(fp,"优秀(70~79 ) %d 人数, 百分比;%%%lf\n",m70_79 ,100.0*m70_79 /n);
fprintf(fp,"优秀(60~69 ) %d 人数, 百分比;%%%lf\n",m60_69 ,100.0*m60_69 /n);
fprintf(fp,"优秀(00~50 ) %d 人数, 百分比;%%%lf\n",m0_59 ,100.0*m0_59 /n);
fclose(fp);
printf("\n结果已经写入文件%s\n",fileO);
}

main( )
{
int i;
Read();
Solve();
/* printf("来自文件的数据:\n");*/
/* Pnt();*/
/* Sort();*/
/* printf("按分数降序排序后的数据:\n");*/
/* Pnt();*/
getchar();
}

你这是做什?用excel表格做嘛

用c语言写:定义一个学生结构体(包含姓名,学号,语文,数学,外语,总分)。定义一个学生结构体数组。~

#include struct student { char name[20]; int idnum; float score[3]; //分别存三科成绩 double total; // 总分};struct student * highscore(struct student *s, int n){ int i; struct student * high = s; for(i = 0; i total = (s+i)->score[0] + (s+i)->score[1] + (s+i)->score[2]; if(high->total total) high = s+i; } return high;}main(){ struct student *s, student[5]; // 录入学生信息 for(s = student; s name); printf("学号:"); scanf("%d", &s->idnum); printf("语文 数学 英语:
"); scanf("%f %f %f", &(s->score[0]), &(s->score[1]), &(s->score[2])); } // 输出学生信息 printf("
学生信息
姓名学号语文数学英语
"); for(s = student; s name, s->idnum, s->score[0], s->score[1],s->score[2]); // 计算学生总分病返回总分最高的学生信息 s = highscore(student, 5); printf("
总分最高的学生是:%s,学号:%d
成绩:语文:%.1f数学:%.1f英语:%.1f总分:%.1f
", s->name, s->idnum, s->score[0], s->score[1],s->score[2], s->total);}

#include #include #define ARRAY_LEN 100 /*数组长度*/typedef struct { int no; /*学号*/ char name[ARRAY_LEN]; /*姓名*/float score1; /*平时成绩*/float score2; /*期中成绩*/float score3; /*期末成绩*/float totalScore; /*学期成绩*/} student;/*初始化*/void initInfo (student stu[], int *stuNum) {*stuNum = 2; /*学生人数设定*/}/*输入学生信息*/void inputInfo (student stu[], int stuIndex) {int i;printf ("第%d名学生↓
", stuIndex+1);printf ("学号:");scanf ("%d",&stu[stuIndex].no);printf ("姓名:");scanf ("%s",&stu[stuIndex].name);printf ("平时成绩:");scanf ("%f",&stu[stuIndex].score1);printf ("期中成绩:");scanf ("%f",&stu[stuIndex].score2);printf ("期末成绩:");scanf ("%f",&stu[stuIndex].score3);putchar ('
');}/*计算学期成绩*/void calculationScore (student stu[], int stuIndex) {float sco1Ratio = 0.1; /*平时成绩比例*/float sco2Ratio = 0.2; /*期中成绩比例*/float sco3Ratio = 0.7; /*期末成绩比例*/stu[stuIndex].totalScore = stu[stuIndex].score1 * sco1Ratio +stu[stuIndex].score2 * sco2Ratio +stu[stuIndex].score3 * sco3Ratio;}/*输出学生成绩*/void printInfo (student stu[], int stuIndex) {int i;printf ("%d",stu[stuIndex].no);printf ("%s",stu[stuIndex].name);printf ("%.2f",stu[stuIndex].score1);printf ("%.2f",stu[stuIndex].score2);printf ("%.2f",stu[stuIndex].score3);printf ("%.2f",stu[stuIndex].totalScore);putchar ('
');}int main (void) {int stuNum,i;student stu[ARRAY_LEN];initInfo (stu,&stuNum);/*输入、计算*/puts ("请输入学生信息:");putchar ('
');for (i=0; i<stuNum; i++) {inputInfo (stu,i);calculationScore (stu,i);}putchar ('
');printf ("%d名学生成绩输入完毕!", stuNum);putchar ('
');puts ("================================================================
");/*输出*/puts ("学号姓名平时成绩期中成绩期末成绩学期成绩");for (i=0; i<stuNum; i++)printInfo (stu,i);getch (); /*屏幕暂留*/return 0;}运行结果
以下图示改为2名学生,上方源代码为题主要求的5名学生