c语言作业:输入m名学生的n门课程的考试成绩,输出每位学生n门课程的平均成绩以及每门课程的平均成绩

c语言作业:输入m名学生的n门课程的考试成绩,输出每位学生n门课程的平均成绩以及每门课程的平均成绩。请教各位大神!

#include <stdio.h>
#include <malloc.h>
#define xk 3   //定义学科的数目,我这边初始3门学科测试,你想要多,改这个数字就行

typedef struct stu_info
{
    int c[xk];//该学生所有科目成绩
    float ave;//该学生所有科目的平均分
    struct stu_info *next;
}STUIFO;
STUIFO *insertSTUIFO(STUIFO *stuHead,STUIFO *stuTail);// 录入一条学生信息
void printfStu(STUIFO *stuHead);
int main()
{
    STUIFO *stuHead=(STUIFO *)malloc(sizeof(STUIFO));
    stuHead->next=NULL;
    STUIFO *stuTail=NULL;

    while(1)
    {
        stuTail=insertSTUIFO(stuHead,stuTail);
        if(stuTail==NULL)
            break;
    }
    printfStu(stuHead);
    return 0;
}
void printfStu(STUIFO *stuHead)//打印信息
{
    int i;
    float sum=0;
    STUIFO *stuHeadSave=stuHead;
    printf("\n\n所有学生%d门课程的平均分为:",xk);
    while(stuHead->next!=NULL)
    {
        printf("%.2f ",stuHead->next->ave);
        stuHead=stuHead->next;
    }


    printf("\n\n各门课程的平均分为:");
    for(i=0;i<xk;i++)
    {
        stuHead=stuHeadSave;
        sum=0;
        while(stuHead->next!=NULL)
        {
            sum=sum+stuHead->next->c[i];
            stuHead=stuHead->next;
        }
        printf("%.2f ",sum/xk);
    }
}
STUIFO *insertSTUIFO(STUIFO *stuHead,STUIFO *stuTail)// 录入一条学生信息   返回录入成功尾节点   输入负数返回NULL用于判断输入结束
{
    int i,sum=0;
    STUIFO *stuNew=(STUIFO *)malloc(sizeof(STUIFO));
    stuNew->next=NULL;
    printf("请分别输入一名学生的%d科成绩(输入负数结束输入)",xk);
    for(i=0;i<xk;i++)
    {
        scanf("%d",&(stuNew->c[i]));
        if((stuNew->c[i])<0)
            return NULL;
        sum=sum+stuNew->c[i];
    }
    stuNew->ave=(float)sum/xk;
    if(stuHead->next==NULL)
        stuHead->next=stuNew;
    if(stuTail!=NULL)
        stuTail->next=stuNew;
    stuTail=stuNew;
    return stuTail;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-03
#include <stdio.h>
#include <string.h>
struct stu
{
char name[32];

int english;

int chinese;

int math;
.....n门课程
};
void main(void)
{
int i,score,average;

char NAME;

struct stu *STU[m] //m为已知的学生个数
for(i=0;i<M;i++)

{
STU = malloc(struct stu);

printf("请输入第%d个学生的姓名",i+1);
scanf("%s",&NAME);

strcpy(STU[1]->name,NAME);

printf("english :")

scanf("%d",&score);

STU[i]->english = score;

...........依次类推
}

printf("要查询的学生姓名:")

scanf("%s",NAME);
for(i = 0,i < m;i++)
{
if(!(strcmpa[i]->name,NAME)
{
average = (STU[i]->english+STU[i]->chinese+STU[i]->math)/n;
}

}
for(i=0;i<m;i++)

{
free(a[i]);

}
exit(1);

}本回答被提问者和网友采纳
第2个回答  2018-03-01
c语言学生成绩我来写
相似回答