2 qq 26440903 qq_26440903 于 2016.01.16 02:41 提问

统计学生成绩的c,编译没报错,运行错误
c

#include
/*这是一个查询学生成绩的程序,查询数学,英语,语文,计算并算出总成绩*/
/*首先,显示输入学生人数,然后显示输入各科成绩,最后按照学号排序输出各科
成绩。最后计算并显示出各科成绩的平均值,最大值,最小值*/
/*在main函数中既有printf1函数,scanf函数,printf2函数,arg函数,min函数
max函数*/
void input(double s[][4],int n);
void output(double s[][4],int n);
double max(double s[][4],int n,int i);

double min(double s[][4],int n,int i);
double avg(double s[][4],int n,int i);
int main()
{
int i,number;
double grade[100][4];
char pro[4][10]={"数学","英语","语文","总成绩"};
printf("请输入学生的人数:") ;
scanf("%d",&number);
input(grade,number);
output(grade,number);
for(i=0;i<=4;++i)
{
printf("%s最高成绩为%.2f",pro[i],max(grade,number,i));
printf("%s最低成绩为%.2f",min(grade,number,i));
printf("%s平均成绩为%.2f",avg(grade,number,i));
printf("\n");
}
return 0;
}

void input(double s[][4],int n)
{
printf("输入学生的成绩按照(高数,英语,c语言的次序输入)\n");
/*转义字符*/
int i;
for(i=0;i<n;i++)
{
scanf("%1f %1f %1f",&s[i][0],&s[i][1],s[i][2]);
s[i][3]=s[i][2]+s[i][1]+s[i][0];
}
}
void output(double s[][4],int n)
{
printf("输入的学生成绩为:\n");
printf("学号\t高数\t英语\tc语言\t总分\n");
int i;
for(i=0;i<n;i++)
{
printf("%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",i,s[i][0],s[i][1],s[i][2],s[i][3]);
}
}
double max(double s[][4],int n,int j)
{
double m=s[0][j];
int i;
for(i=1;i<n;i++)
if(m<s[i][j])
m=s[i][j];
return m;
}
double min(double s[][4],int n,int j)
{
double m=s[0][j];
int i;
for(i=1;i<n;i++)
if(m+s[i][j])
m=s[i][j];
return m;
}
double avg(double s[][4],int n,int j)
{
double sum= s[0][j];
int i;
for(i=1;i<n;i++)
sum+=s[i][j];
return sum/n;
}

5个回答

caozhy
caozhy   Ds   Rxr 2016.01.16 07:17

错误太多了,直接给你修改好了。


#include<stdio.h>
 /*这是一个查询学生成绩的程序,查询数学,英语,语文,计算并算出总成绩*/
 /*首先,显示输入学生人数,然后显示输入各科成绩,最后按照学号排序输出各科
 成绩。最后计算并显示出各科成绩的平均值,最大值,最小值*/
 /*在main函数中既有printf1函数,scanf函数,printf2函数,arg函数,min函数
 max函数*/ 
void input(double s[][4],int n); 
void output(double s[][4],int n);
double max(double s[][4],int n,int i);  
double min(double s[][4],int n,int i);
double avg(double s[][4],int n,int i); 
int main() 
{
    int i,number;
    double grade[100][4];
    char pro[4][10]={"数学","英语","语文","总成绩"};
    printf("请输入学生的人数:") ;
    scanf("%d",&number);
    input(grade,number);
    output(grade,number);
    for(i=0;i<4;++i)
    {
        printf("%s最高成绩为%.2f",pro[i],max(grade,number,i));
        printf(" %s最低成绩为%.2f",pro[i],min(grade,number,i));
        printf(" %s平均成绩为%.2f",pro[i],avg(grade,number,i));
        printf("\n");
    }
    return 0;
}

void input(double s[][4],int n)
{
    printf("输入学生的成绩按照(高数,英语,c语言的次序输入)\n");
    /*转义字符*/ 
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%lf %lf %lf",&s[i][0],&s[i][1],&s[i][2]);
        s[i][3]=s[i][2]+s[i][1]+s[i][0];
    }
}
void output(double s[][4],int n)
{
    printf("输入的学生成绩为:\n");
    printf("学号\t高数\t英语\tc语言\t总分\n");
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",i,s[i][0],s[i][1],s[i][2],s[i][3]);
    }
}
double max(double s[][4],int n,int j)
{
    double m=s[0][j];
    int i;
    for(i=1;i<n;i++)
    if(m<s[i][j])
    m=s[i][j];
    return m;
}
double min(double s[][4],int n,int j)
{
    double m=s[0][j];
    int i;
    for(i=1;i<n;i++)
    if(m>s[i][j])
    m=s[i][j];
    return m;
}
double avg(double s[][4],int n,int j)
{
    double sum= s[0][j];
    int i;
    for(i=1;i<n;i++)
    sum+=s[i][j];
    return sum/(double)n;
}



caozhy
caozhy 回复筱燃: 我这里测试都没问题。注意输入成绩是空格分隔。
接近 2 年之前 回复
caozhy
caozhy 回复筱燃: 那应该是你的VC6.0没有打补丁和操作系统不兼容。
接近 2 年之前 回复
qq_26440903
qq_26440903 按照你说的改好了,可是还是运行错误,直接抱学生程序.exe停止运行。
接近 2 年之前 回复
qq_26440903
qq_26440903 谢谢
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.01.16 07:00
    printf("%s最高成绩为%.2f",**pro[i]**,max(grade,number,i));
    printf("%s最低成绩为%.2f",min(grade,number,i)); //这里姓名的参数呢???
    printf("%s平均成绩为%.2f",avg(grade,number,i)); //一样的道理
u013427969
u013427969   2016.01.16 18:44

给你个建议,可以学一下gdb调试

u013427969
u013427969   2016.01.16 18:44

给你个建议,可以学一下gdb调试

baidu_32457989
baidu_32457989   2016.01.19 11:38

void input(double s[][4],int n);
void output(double s[][4],int n);
double max(double s[][4],int n,int i);

double min(double s[][4],int n,int i);
double avg(double s[][4],int n,int i);

int main()
{
int i,number;
double grade[100][4] = {0.0};
char pro[4][10]={"数学","英语","语文","总成绩"};
printf("请输入学生的人数:") ;
scanf("%d",&number);
input(grade,number);
output(grade,number);
for(i=0;i<=4;++i)
{
printf ("%d\n",i);
printf("%s最高成绩为%.2f",pro[i],max(grade,number,i));
printf("%s最低成绩为%.2f",pro[i],min(grade,number,i));
printf("%s平均成绩为%.2f",pro[i],avg(grade,number,i));
printf("\n");
}
return 0;
}

void input(double s[][4],int n)
{
printf("输入学生的成绩按照(高数,英语,c语言的次序输入)\n");
/*转义字符*/
int i;
for(i=0;i<n;i++)
{
scanf("%lf %lf %lf",&s[i][0],&s[i][1],&s[i][2]);
s[i][3]=s[i][2]+s[i][1]+s[i][0];
}
}

void output(double s[][4],int n)
{
printf("输入的学生成绩为:\n");
printf("学号\t高数\t英语\tc语言\t总分\n");
int i;
for(i=0;i<n;i++)
{
printf("%d\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n",i,s[i][0],s[i][1],s[i][2],s[i][3]);
}
}

double max(double s[][4],int n,int j)
{
double m=s[0][j];
int i;
for(i=1;i<n;i++)
if(m<s[i][j])
m=s[i][j];
return m;
}

double min(double s[][4],int n,int j)
{
double m=s[0][j];
int i;
for(i=1;i<n;i++)
if(m+s[i][j])
m=s[i][j];
return m;
}

double avg(double s[][4],int n,int j)
{
double sum= s[0][j];
int i;
for(i=1;i<n;i++)
sum+=s[i][j];
return sum/n;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!