读书人

函数的应用,该如何解决

发布时间: 2012-04-04 16:38:51 作者: rapoo

函数的应用
第五个函数体不知道哪里错了?这个程序是要求输出各科平均分,并且排名的。
# include <stdio.h>
# include <stdlib.h>
# include <string.h>

struct stud
{int num;
char name[10];
float score[3];
}student[3];
/*定义结构体*/

void main()
{float average1[30];int i;
struct stud student[3];struct stud input();
void use2(struct stud *);
void use3(struct stud *);
void use4(float average1[]);
void use5(struct stud student);
/*调用结构体的声明*/

int a;
printf("请对数据包进行操作\n");
printf("1:输入 2:求平均值1 3:求平均值2 4:排序 5:输出\n");
printf("输入数字:\n");
scanf("%d",&a);
/*输入要进行的操作的代号*/

while(a!=6)
{
switch(a)
{
case 1:{for(i=0;i<3;i++) student[i]=input();}printf("恭喜已完成操作\n");break;
case 2:use2(&student[0]);printf("恭喜已完成操作\n");break;
case 3:use3(&student[0]);printf("恭喜已完成操作\n");break;
case 4:use4(average1);printf("恭喜已完成操作\n");break;
case 5:{for(i=0;i<3;i++) use5(student[i]);};printf("恭喜已完成操作\n");break;
default:printf("error\n");
}
printf("请继续输入要进行的操作的代号\n");
scanf("%d",&a);
}
}
/*主程序结束*/

struct stud input()
{printf("输入一个学生的数据:学号、姓名、三次成绩\n");
int i;
struct stud student;
scanf("%d",&student.num);
gets(student.name);
for(i=0;i<3;i++)
scanf("%f",&student.score[i]);
return student;
}
/*第一个调用结构体的内容*/

void use2(struct stud *)
{int i;float average1[3],sum1;
for(i=0;i<3;i++)
{ sum1=0;
sum1=student[i].score[0]+student[i].score[2]+student[i].score[3];
average1[i]=sum1/3;
}
}
/*第二个调用结构体的内容*/

void use3(struct stud *)
{
int i;float average2[3],sum2;
for(i=0;i<3;i++)
{ sum2=0;
sum2=sum2+student[i].score[1];
}
average2[0]=sum2/3;
for(i=0;i<3;i++)
{ sum2=0;
sum2=sum2+student[i].score[2];
}
average2[0]=sum2/3;
for(i=0;i<3;i++)
{ sum2=0;
sum2=sum2+student[i].score[3];
}
average2[0]=sum2/3;
}
/*第三个调用结构体的内容*/

void use4(float average1[])
{int i,j;float t;
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
{ if(average1[i]>average1[j])
t=average1[i];
average1[i]=average1[j];
average1[j]=t;
}
}
/*第四个调用结构体的内容*/

void use5(student)
{printf("%s",student[1].name);
}
/*第五个调用结构体的内容*/


[解决办法]

C/C++ code
# include <stdio.h># include <stdlib.h># include <string.h>struct stud{    int num;    char name[10];    float score[3];}student[3];/*定义结构体*/void main(){    float average1[30];int i;    struct stud student[3];    struct stud input();    void use2(struct stud *);    void use3(struct stud *);    void use4(float average1[]);    void use5(struct stud student);    /*调用结构体的声明*/        int a;    printf("请对数据包进行操作\n");    printf("1:输入 2:求平均值1 3:求平均值2 4:排序 5:输出\n");    printf("输入数字:\n");    scanf("%d",&a);    /*输入要进行的操作的代号*/        while(a!=6)    {        switch(a)        {        case 1:            {                for(i=0;i<3;i++)                     student[i]=input();            }            printf("恭喜已完成操作\n");            break;        case 2:            use2(&student[0]);            printf("恭喜已完成操作\n");break;        case 3:use3(&student[0]);printf("恭喜已完成操作\n");            break;        case 4:use4(average1);            printf("恭喜已完成操作\n");            break;        case 5:            {                for(i=0;i<3;i++)                     use5(student[i]);            };            printf("恭喜已完成操作\n");            break;        default:printf("error\n");        }        printf("请继续输入要进行的操作的代号\n");        scanf("%d",&a);    }}/*主程序结束*/struct stud input(){    printf("输入一个学生的数据:学号、姓名、三次成绩\n");    int i;    struct stud student;    scanf("%d",&student.num);    fflush(stdin);    gets(student.name);    for(i=0;i<3;i++)        scanf("%f",&student.score[i]);    return student;}/*第一个调用结构体的内容*/void use2(struct stud *){    int i;float average1[3],sum1=0;    for(i=0;i<3;i++)    {                sum1=student[i].score[0]+student[i].score[2]+student[i].score[3];    }    average1[i]=sum1/3;}/*第二个调用结构体的内容*/void use3(struct stud *){    int i;    float average2[3],sum2;    sum2=0;    for(i=0;i<3;i++)    {                 sum2=sum2+student[i].score[1];    }    average2[0]=sum2/3;    sum2=0;    for(i=0;i<3;i++)    {                 sum2=sum2+student[i].score[2];    }    average2[1]=sum2/3;    sum2=0;    for(i=0;i<3;i++)    {                sum2=sum2+student[i].score[3];    }    average2[2]=sum2/3;}/*第三个调用结构体的内容*/void use4(float average1[]){    int i,j;float t;    for(i=0;i<3;i++)        for(j=i+1;j<3;j++)        {             if(average1[i]>average1[j])                t=average1[i];            average1[i]=average1[j];            average1[j]=t;        }}/*第四个调用结构体的内容*/void use5(struct stud studen){    printf("%s\n",studen.name);}/*第五个调用结构体的内容*///程序本身没错了  但是逻辑就不晓得了 

读书人网 >C语言

热点推荐