标题:C语言ACM竞赛题 为什么最后一个for循环去掉结果就能输出出来,加上就爆掉了
只看楼主
洛秋
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-1-27
结帖率:100%
已结贴  问题点数:20 回复次数:6 
C语言ACM竞赛题 为什么最后一个for循环去掉结果就能输出出来,加上就爆掉了
假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
Input
输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。
Output
对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。
每个测试实例后面跟一个空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1

下面是我的代码
为什么最后一个for循环去掉结果就能输出出来,加上就爆掉了,,感觉没问题的啊
#include<stdio.h>
int main()
{
    int n,m,i,j,count,flag,count1;
    double sum,avg,sum1,avg1,b[100];
    int a[100][100];//i&m  j&n
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        sum=0;
        avg=0;
        flag=0;
        count1=0;
        for(i=0; i<m; i++)
        {
            for(j=0; j<n; j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(j=0; j<n; j++)
        {
            for(i=0; i<m; i++)
            {
                sum=sum+a[i][0];
            }
            avg=sum/m;
            flag++;
            if(flag==1)
            {
                printf("%.2lf",avg);//学生平均成绩
            }
            else
            {
                printf(" %.2lf",avg);
            }
        }
        printf("\n");
        flag=0;
        for(i=0; i<m; i++)
        {
            for(j=0; j<n; j++)
            {
                sum1=sum1+a[0][j];
            }
            avg1=sum1/n;
            b[i]=avg1;
            flag++;
            if(flag==1)
            {
                printf("%.2lf",avg1);//学科平均成绩
            }
            else
            {
                printf(" %.2lf",avg1);
            }
        }
        printf("\n");
        
        /*count=0;
        for(j=0; j<n; j++)
        {

            for(i=0; i<m; i++)
            {
                if(a[i][j]>=b[i])
                    count++;
            }
            if(count==m)
            {
                count1++;
            }
        }
        printf("%d\n\n",count1);*/
    }
    return 0;
}
搜索更多相关主题的帖子: for 学生 平均 成绩 printf 
2018-01-27 13:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
测试没爆
2018-01-27 16:08
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
得分:5 
回复 楼主 洛秋
你试着输一下别的数据——首先第一幅图是你的“学生平均成绩结果”是错的;第二幅是我的,你可以验证

而且你的运行结果一直完不了,下面第一个是你的,第二个是我的

然后下面的是你“学生平均成绩结果”这部分的问题

最后是我的代码
程序代码:
#include<stdio.h>
int main()
{
    int n,m,i,j,count,flag,count1;
    double sum,avg,sum1,avg1,b[100];
    int a[100][100];//i&n人数 j&m科目
        sum=0;
        sum1=0;
        avg=0;
        //flag=0;
        count1=0;
        scanf("%d%d",&n,&m);
   
        for(i=0; i<n; i++)
        {
            for(j=0; j<m; j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i=0; i<n; i++)
        {
            sum=0;
            for(j=0; j<m; j++)
            {
                sum=sum+a[i][j];     //学生的平均成绩 
            }
            avg=sum/m;
            printf(" %.2lf",avg);
        }
        printf("\n");  
        
        for(i=0; i<m; i++)
        {
            sum1=0;
            for(j=0; j<n; j++)
            {
                sum1=sum1+a[j][i];    //学科平均分 
            }
            avg1=sum1/n;
            printf(" %.2lf",avg1);
        }
        printf("\n");

    return 0;
}



[此贴子已经被作者于2018-1-27 17:24编辑过]

2018-01-27 17:22
洛秋
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-1-27
得分:0 
回复 3楼 选调生

为什么我的就是这样。。后面爆了,,同样的代码
2018-01-28 12:54
洛秋
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-1-27
得分:0 
回复 3楼 选调生
还有个问题。。为什么我头文件已经调用math.h头文件然后在后面我使用abs函数就报错用fabs函数就不报,,abs不是整数取绝对值嘛,我上面设的int啊
2018-01-28 13:01
pydlq
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:129
专家分:488
注 册:2017-9-5
得分:3 
回复 4楼 洛秋
可能是因为你们两数组一个是a[m][n]一个是a[n][m]
试试看我的完整代码你可以运行不
程序代码:
#include<stdio.h>
int main()
{
    int m,n,a[50][10],i,j,count,flag;
    double avgn,sumn,avgm,summ,b[10];
    while(scanf("%d%d",&n,&m)==2)
    {
        count=0;
        for(i=0;i<n;i++)                   //每行输入一个学生的各科成绩
            for(j=0;j<m;j++)
                scanf("%d",&a[i][j]);
        for(i=0;i<n;i++)                   //输出每个学生的平均成绩
        {
            sumn=0;
            for(j=0;j<m;j++)
                sumn+=a[i][j];
            avgn=sumn/m;            
            printf("%-7.2lf  ",avgn);
        }
        putchar(10);
        for(i=0;i<m;i++)
        {
            summ=0;
            for(j=0;j<n;j++)
                summ+=a[j][i];
            avgm=summ/n;
            b[i]=avgm;
            printf("%-.2lf  ",avgm);
        }
        putchar(10);
        for(i=0;i<n;i++)                  //统计全部成绩超过平均成绩的学生数
        {
            flag=1;
            for(j=0;j<m;j++)
            {
                if(a[i][j]<b[j])
                {
                    flag=0;
                    break;
                }        
            }
            if(flag)
                count++;
        }
        printf("%d\n\n",count);            
    }
    return 0;
}
2018-01-28 14:07
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
得分:9 
回复 5楼 洛秋
把你的代码基本没变多少给改了,“学生平均成绩”那个循环,你要是不谢j写0,就导致一个人的时候是对的,>=两个人就有问题。我都有注释你看。
程序代码:
#include<stdio.h>
int main()
{
    int n,m,i,j,count,flag,count1;
    double sum,avg,sum1,avg1,b[100];
    int a[100][100];//i&m  j&n
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        sum=0;
        avg=0;
        flag=0;
        count1=0;
        //一般都习惯把人(n)放在二维数组的第一个分数组里 
        /*我发现你都把人放在第二个分数组里了,我把你所有的问题改了后发现还是有问题,但我把人放前面,成绩放后面就什么都好了。。。。。额 */ 
        for(i=0; i<n; i++)   
        {
            for(j=0; j<m; j++)  
            {
                scanf("%d",&a[i][j]);
            }
        }
        for(i=0; i<n; i++)
        {
            sum=0;    //这里要重置sum
            for(j=0; j<m; j++)
            {
                sum=sum+a[i][j];   //这里不能写0,写j,你写0的话,第二次循环j++就没起到作用 
            }
            avg=sum/m;
            flag++;
            if(flag==1)
            {
                printf(" %.2lf",avg);//学生平均成绩
            }
            else
            {
                printf(" %.2lf",avg);
            }
        }
        printf("\n");
        flag=0;
        for(i=0; i<m; i++)
        {
            sum1=0;    //这里sum1你都没给初始值 ,要赋0 
            for(j=0; j<n; j++)
            {
                sum1=sum1+a[j][i];
            }
            avg1=sum1/n;
            b[i]=avg1;
            flag++;
            if(flag==1)
            {
                printf(" %.2lf",avg1);//学科平均成绩
            }
            else
            {
                printf(" %.2lf",avg1);
            }
        }
        printf("\n");
    
        for(i=0; i<n; i++)
        {
            count=1;
            for(j=0; j<m; j++)
            {
                if(a[i][j]<b[j])
                {
                    count=0;
                    break;
                }
            }
            if(count==1)
                count1++;
        }
        printf("  %d\n\n",count1);
    }
    return 0;
}
2018-01-28 19:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-484478-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.168663 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved