逝s 2022-05-23 10:28 采纳率: 100%
浏览 67
已结题

c语言程序无法正常运行

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct SUBJECT{

char clas[20];
float num;
struct SUBJECT *next;

}Sub;

typedef struct student{

long id;
char name[20];
Sub *clas;
float Snum;

}stu;

void input(int n,int N,stu student[]);//录入成绩、学号和姓名
float Eadd(stu p[],float Esum[30],int n,int N,float Eaver[30]);//计算每个学生的总分和平均分
float Sadd(stu p[],int n,int N,float Saver[6]);//计算每门课程的总分和平均分

int main(){
int n,f,N;
stu student[n];
float Eaver[30],Saver[6],Esum[30];
printf("请输入学生人数:");
scanf("%d",&n);
printf("请输入科目的数量:");
scanf("%d",&N);
printf(" 1.input recorf\n 2.caculate total and Eaverage score of every course\n 3.caculate total and Eaverage score of every student\n ");

do{
printf("请选择操作:");
scanf("%d",&f);
switch(f){
case 1:input(n,N,student);break;
case 2:Eadd(student,Esum,n,N,Eaver);break;
case 3:Sadd(student,n,N,Saver);break;

    default:break;
    }        

}while(f!=0);
return 0;
}

void input(int n,int N,stu p[]){
char a;
Sub *c;
for(int i=0;i<n;i++){

    printf("第%d个同学的学号:",i+1); 
    scanf("%ld",&p[i].id);
    printf("姓名:");
    scanf(" %s",p[i].name);

    for(int j=0;j<N;j++){
        
        c=(Sub *) malloc (N * sizeof(Sub));
        printf("当前所录入的科目:"); 
        scanf("%s",c->clas);
        printf("请输入%s同学的%s的成绩:",p[i].name,c->clas);
        scanf("%f",&c->num);
        a=getchar();
        
        if(p[i].clas==NULL){
            p[i].clas=c;
        } 
        
        else{
            c->next=p[i].clas;
            p[i].clas=c;    
        }
                    }
}
free(c);

}

float Eadd(stu p[],float Esum[30],int n,int N,float Eaver[30]){
stu *q=p;
for(int i=0;i<N;i++){
for(int j=0;j<n;j++){

        Esum[i]=q[i].clas->num;
        q[i].clas=q[i].clas->next;
    }        
}

for(int i=0;i<n;i++){
    
    Eaver[i]=Esum[i]/(float)N;
}
printf("计算完成\n");

}

float Sadd(stu p[],int n,int N,float Saver[6]){
stu *q=p;
for(int i=0;i<n;i++){
for(int j=0;j<N;j++){

        p[i].Snum += q[i].clas->num;
        q[i].clas = q[i].clas->next;
    }
}

for(int i=0;i<N;i++){
    
    Saver[i]=p[i].Snum/(float)n;
}

printf("计算完成\n");

}

img

这个程序单独执行选项2和选项3时可以执行,但是2和3没法都执行

  • 写回答

2条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-05-23 14:45
    关注

    我跑了一遍,只发现了int n,f,N;其中n没有初始化

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    typedef struct SUBJECT{
        char clas[20];
        float num;
        struct SUBJECT *next;
    }Sub;
    
    typedef struct student{
        long id;
        char name[20];
        Sub *clas;
        float Snum;
    }stu;
    
    void input(int n,int N,stu student[]);//录入成绩、学号和姓名
    float Eadd(stu p[],float Esum[30],int n,int N,float Eaver[30]);//计算每个学生的总分和平均分
    float Sadd(stu p[],int n,int N,float Saver[6]);//计算每门课程的总分和平均分
    
    int main(){
        int n = 10,f,N;
        stu student[n];
        float Eaver[30],Saver[6],Esum[30];
        printf("请输入学生人数:");
        scanf("%d",&n);
        printf("请输入科目的数量:");
        scanf("%d",&N);
        printf(" 1.input recorf\n 2.caculate total and Eaverage score of every course\n 3.caculate total and Eaverage score of every student\n ");
        
        do{
            printf("请选择操作:");
            scanf("%d",&f);
            switch(f){
                case 1:
                    input(n,N,student);
                    break;
                case 2:
                    Eadd(student,Esum,n,N,Eaver);
                    break;
                case 3:
                    Sadd(student,n,N,Saver);
                    break;
                default:
                    break;
            }        
        }while(f!=0);
        return 0;
    }
    
    void input(int n,int N,stu p[]){
        char a;
        Sub *c;
        for(int i=0;i<n;i++){
            printf("第%d个同学的学号:",i+1); 
            scanf("%ld",&p[i].id);
            printf("姓名:");
            scanf(" %s",p[i].name);
            for(int j=0;j<N;j++){
                c=(Sub *) malloc (N * sizeof(Sub));
                printf("当前所录入的科目:"); 
                scanf("%s",c->clas);
                printf("请输入%s同学的%s的成绩:",p[i].name,c->clas);
                scanf("%f",&c->num);
                a=getchar();
                
                if(p[i].clas==NULL){
                    p[i].clas=c;
                } 
                else{
                    c->next=p[i].clas;
                    p[i].clas=c;    
                }
            }
        }
        free(c);
    }
    
    float Eadd(stu p[],float Esum[30],int n,int N,float Eaver[30]){
        stu *q=p;
        for(int i=0;i<N;i++){
            for(int j=0;j<n;j++){
                Esum[i]=q[i].clas->num;
                q[i].clas=q[i].clas->next;
            }        
        }
        for(int i=0;i<n;i++){
            
            Eaver[i]=Esum[i]/(float)N;
        }
        printf("计算完成\n");
    }
    
    float Sadd(stu p[],int n,int N,float Saver[6]){
        stu *q=p;
        for(int i=0;i<n;i++){
            for(int j=0;j<N;j++){
                p[i].Snum += q[i].clas->num;
                q[i].clas = q[i].clas->next;
            }
        }
        for(int i=0;i<N;i++){
            Saver[i]=p[i].Snum/(float)n;
        }
        printf("计算完成\n");
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月31日
  • 已采纳回答 5月23日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了