用C 语言解答,求大神完整过程,谢谢了!

用C语言解答,求大神完整过程,谢谢了!1)某班有若干个学生(假设为10),每个学生的信息包括学号、姓名、三门课的成绩,从键盘输入这些学生的信息,要求打印出三门课总平均成绩... 用C 语言解答,求大神完整过程,谢谢了!1)某班有若干个学生(假设为10),每个学生的信息包括学号、姓名、三门课的成绩,从键盘输入这些学生的信息,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、三门课的成绩、平均分数)。要求:
a.用average函数求总平均分;
b.用max函数找出最高分的学生数据;
c.总平均分和最高分学生的数据都在主函数中输出。
展开
 我来答
黑丶雨
2016-08-21 · TA获得超过554个赞
知道小有建树答主
回答量:406
采纳率:80%
帮助的人:389万
展开全部
/*注意事项:输入时注意格式,否则会出错.希望能帮到你*/
#include <stdio.h>
#include <stdlib.h> 

typedef struct data data;

struct data
{
    int stu_num;
    char name[10];
    float chinese;
    float math;
    float com;
    data *next;
};
    
float average(data *x);
data *max(data *x);

int main(void)
{
    data *first = NULL;
    data *current = NULL;
    data *last = NULL;
    data *student = NULL;
    int i = 0;
    
    for(i = 0; i < 10; ++i)
    {
        if(!(current = (data*)calloc(1,sizeof(data))))
        {
            printf("内存不足!\n");
            exit(1); 
        }
        printf("请输入第%d个学生的学号:",i+1);
        scanf(" %d",&current->stu_num);  
        printf("请输入第%d个学生的姓名:",i+1);
        scanf(" %s",current->name);
        printf("请依次输入第%d个学生三个科目的成绩(科目间隔空格):",i+1);
        scanf(" %f %f %f",&current->chinese,&current->math,&current->com);
        current->next = NULL; 
        if(first == NULL)
            first = current;
        else
            last->next = current;
        last = current;
    }
    
    student = max(first);    
    printf("\n所有学生三个科目的总平均分为:%f\n\n总分最高的学生信息如下:\n\n学号:%d\n姓名:%s\n语文成绩:%.2f\n数学成绩:%.2f\n计算机成绩:%.2f\n平均成绩:%.2f\n",average(first),student->stu_num,student->name,student->chinese,student->math,student->com,(student->chinese+student->math+student->com)/3);
    
    while(first)
    {
        last = first;
        first = first->next;
        free(last);
    }
    
    return 0;
}

float average(data *x)
{
    data *head = x;
    float sum = 0;
    
    while(head)
    {
        sum += head->chinese + head->math + head->com;
        head = head->next;
    }
    
    return sum/30;
}

data *max(data *x)
{
    data *head = x;
    data *max_stu = NULL;
    float result = 0;
    
    while(head)
    {
        if(result < head->chinese + head->math + head->com)
        {
            max_stu = head;
            result = head->chinese + head->math + head->com;
        }
        head = head->next;
    }
    
    return max_stu;
}
更多追问追答
追问
请问我怎么写是否可以呢,但是最后输出的时候有点不对
追答
哪里不对呢
百度网友39bfc54
2016-08-21 · 超过18用户采纳过TA的回答
知道答主
回答量:97
采纳率:100%
帮助的人:28.4万
展开全部
#include<stdio.h>
#include<stdlib.h>
 
#define MAX 10
typedef struct studnet
{
int studnet_ID[2];
char name[10];
int Math;
int Chinese;
int English;
int Total;
int avg;
}studnets;

int max(int num[MAX])
{
int i,flag=0,max=0;
for(i=0;i<MAX;i++)
{
if(max<num[i])
{
max=num[i];
flag=i;
}
}
return flag;
}

void avg(studnets std[MAX],int num[MAX])
{
int i;
for(i=0;i<MAX;i++)
{
std[i].avg=num[i]/3;
}
}

int main()
{
studnets std[MAX];
int i,j,num[MAX];
printf("请输入个人信息:\n");
printf("学号\t姓名\t数学\t语文\t英语\n");
for(i=0;i<MAX;i++)
{
scanf("%d%d",&std[i].studnet_ID[0],&std[i].studnet_ID[1]);
scanf("%s",std[i].name);
scanf("%d",&std[i].Math);
scanf("%d",&std[i].Chinese);
scanf("%d",&std[i].English);
std[i].Total=std[i].Math+std[i].Chinese+std[i].English;
num[i]=std[i].Total;
}
j=max(num);
avg(std,num);
printf("\n");
printf("最好成绩:\n");
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
printf("%d%d\t%s\t%d\t%d\t%d\t%d\t%d\n",std[j].studnet_ID[0],std[j].studnet_ID[1],std[j].name,std[j].Math,
std[j].Chinese,std[j].English,std[j].Total,std[j].avg);
return 0;
}
更多追问追答
追答

因为就10个人,所以我就偷懒了。 学号输入的时候要用空格隔开。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cjj796
2016-08-21 · TA获得超过8701个赞
知道大有可为答主
回答量:1.3万
采纳率:68%
帮助的人:3332万
展开全部
你好!用VC6可以吗?程序什么时间要
追问
vc 6是什么?我用devc++
这么做是否可以呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式