写好了学生成绩单表格程序,但还有些问题,求指教!!!!!!!
这是我这两天写的代码,运行完输入后DOS窗口就没反应了,请大家帮忙看看
- C/C++ code
#include<stdio.h>#define num 3struct list {char name[8]; //学生名字 int number; //学号 float subject[3]; //科目成绩 float average; //平均分 }student[num]; //num个学生void getlist(struct list student[]);void max(struct list student[num], int *Math, int *Chi, int *Eng);void maxA(struct list student[num], int *Ave);void print(struct list student[num],int, int, int, int);void main(){ int maxMath=0, maxChi=0, maxEng=0, maxAve=0; int *m, *c, *e, *a; m=&maxMath, c=&maxChi, e=&maxEng, a=&maxAve; getlist(student); //实现数据的输入 max(student, m, c, e); //使 m,c,e分别指向的对象分别存入各科目成绩最好的同学的下标 maxA(student, a); //使a指向的对象存入平均分最好的同学的下标 print(student, maxMath, maxChi, maxEng, maxAve); //实现输出}void getlist(struct list student[num]){ int i; for(i=0;i<num;i++) { int j; float sum; printf("input %d student list!\n",i+1); printf(">>>>number :");scanf("%d",&student[i].number); while(getchar()!='\n') continue; //清空输入行 printf(">>>>>>name :");gets(student[i].name); printf(">>>>>>Math :");scanf("%f",&student[i].subject[0]); printf(">>>Chinese :");scanf("%f",&student[i].subject[1]); printf(">>>English :");scanf("%f",&student[i].subject[2]); for(j=0;j<3;j++) //计算平均分 { sum += student[i].subject[j]; } student[i].average = sum/3.0; }}void max(struct list student[num], int *Math, int *Chi, int *Eng){ int i, j, k=0; int Max; //标记 for(j=0;j<3;i++,k++) 先将科目分别比较 { Max=0; for(i=0;i<9;i++) 将同一科目的学生比较 { if(student[i].subject[j]<student[i+1].subject[j]) { Max=i+1; //将最高分学生的下标赋给Max } } if(k=0) *Math=Max; else if(k=1) *Chi=Max; else *Eng=Max; }}void maxA(struct list student[num],int *Ave){ int i; *Ave=0; for(i=0;i<9;i++) { if(student[i].average < student[i+1].average) *Ave=i+1; //将平均分最高的student下标赋给*Ave指向的对象 }}//输出函数还没整理好void print(struct list student[num],int nice_Math,int nice_Chiese,int nice_English,int so_well) { int i, j; printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); printf(" NO name Math Chinese English\n"); printf("nice math: %03d %8s %.2f",student[nice_Math].number, student[nice_Math].name,\ student[nice_Math].subject[0]); printf("nice math: %03d %8s %.2f",student[nice_Chiese].number, student[nice_Chiese].name,\ student[nice_Math].subject[0]); printf("nice math: %03d %8s %.2f",student[nice_English].number, student[nice_English].name,\ student[nice_Math].subject[0]); printf("nice math: %03d %8s %.2f ", student[so_well].number, student[so_well].name, student[so_well].average); for(i=0;i<num;i++) { printf("%03d",student[i].number); printf("%8s",student[i].name); for(j=0;j<3;j++) { printf(" %.2f",student[i].subject[j]); } } printf("\n>>>>>>>>>>>>>>>>>>>>>>END!>>>>>>>>>>>>>>>>>>>>>>>>\n");}
[解决办法]
- C/C++ code
void getlist(struct list student[num]){ int i; for(i=0;i<num;i++) { int j; [color=#FF0000]float sum;[/color] printf("input %d student list!\n",i+1); printf(">>>>number :");scanf("%d",&student[i].number); while(getchar()!='\n') continue; //清空输入行 printf(">>>>>>name :");gets(student[i].name); printf(">>>>>>Math :");scanf("%f",&student[i].subject[0]); printf(">>>Chinese :");scanf("%f",&student[i].subject[1]); printf(">>>English :");scanf("%f",&student[i].subject[2]); for(j=0;j<3;j++) //计算平均分 { [color=#FF0000]sum += student[i].subject[j]; [/color] } student[i].average = sum/3.0; }}
[解决办法]
for (j = 0; j < 3; i++, j++) 先将科目分别比较 k改成j 应该就是这个位置错了
[解决办法]
- C/C++ code
#include<stdio.h>#define num 3struct list { char name[8]; //学生名字 int number; //学号 float subject[3]; //科目成绩 float average; //平均分}student[num]; //num个学生void getlist(struct list student[]);void max(struct list student[num], int *Math, int *Chi, int *Eng);void maxA(struct list student[num], int *Ave);void print(struct list student[num],int, int, int, int);void main(){ int maxMath=0, maxChi=0, maxEng=0, maxAve=0; int *m, *c, *e, *a; m=&maxMath, c=&maxChi, e=&maxEng, a=&maxAve; getlist(student); //实现数据的输入 max(student, m, c, e); //使 m,c,e分别指向的对象分别存入各科目成绩最好的同学的下标 maxA(student, a); //使a指向的对象存入平均分最好的同学的下标 print(student, maxMath, maxChi, maxEng, maxAve); //实现输出}void getlist(struct list student[num]){ int i; for(i=0;i<num;i++) { int j; float sum = 1; printf("input %d student list!\n",i+1); printf(">>>>number :");scanf("%d",&student[i].number); while(getchar()!='\n') continue; //清空输入行 printf(">>>>>>name :");gets(student[i].name); printf(">>>>>>Math :");scanf("%f",&student[i].subject[0]); printf(">>>Chinese :");scanf("%f",&student[i].subject[1]); printf(">>>English :");scanf("%f",&student[i].subject[2]); for(j=0;j<3;j++) //计算平均分 { sum += student[i].subject[j]; } student[i].average = sum/3.0; }}void max(struct list student[num], int *Math, int *Chi, int *Eng){ student[0]; student[1]; student[2]; int nSubject = 0 , nStudent = 0; int nMax[3] = {0}; for ( ; nSubject < 3 ; ++ nSubject ) { nMax[nSubject] = ( student[nStudent] ).subject[nSubject]; for( ; nStudent < num ; ++ nStudent ) { if ( nStudent + 1 < num ) { if ( nMax[nSubject] < (student[nStudent + 1]).subject[nSubject] ) { nMax[nSubject] = (student[nStudent + 1]).subject[nSubject]; } } } nStudent = 0; } *Math = nMax[0]; *Chi = nMax[1]; *Eng = nMax[2];}void maxA(struct list student[num],int *Ave){ int i; *Ave=0; for(i=0;i<9;i++) { if(student[i].average < student[i+1].average) *Ave=i+1; //将平均分最高的student下标赋给*Ave指向的对象 }}//输出函数还没整理好void print(struct list student[num],int nice_Math,int nice_Chiese,int nice_English,int so_well) { int i, j; printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); printf(" NO name Math Chinese English\n"); printf("nice math: %03d %8s %.2f",student[nice_Math].number, student[nice_Math].name,\ student[nice_Math].subject[0]); printf("nice math: %03d %8s %.2f",student[nice_Chiese].number, student[nice_Chiese].name,\ student[nice_Math].subject[0]); printf("nice math: %03d %8s %.2f",student[nice_English].number, student[nice_English].name,\ student[nice_Math].subject[0]); printf("nice math: %03d %8s %.2f ", student[so_well].number, student[so_well].name, student[so_well].average); for(i=0;i<num;i++) { printf("%03d",student[i].number); printf("%8s",student[i].name); for(j=0;j<3;j++) { printf(" %.2f",student[i].subject[j]); } } printf("\n>>>>>>>>>>>>>>>>>>>>>>END!>>>>>>>>>>>>>>>>>>>>>>>>\n");}