读书人

写好了学生成绩单表格程序但还有些有

发布时间: 2012-06-22 16:16:32 作者: rapoo

写好了学生成绩单表格程序,但还有些问题,求指教!!!!!!!
这是我这两天写的代码,运行完输入后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");} 

读书人网 >C语言

热点推荐