| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3386 人关注过本帖
标题:关于n个学生m门成绩的一个问题
只看楼主 加入收藏
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
结帖率:92.31%
收藏
已结贴  问题点数:10 回复次数:20 
关于n个学生m门成绩的一个问题
#include<stdio.h>
#define N 10
#define M 3
int main()
      {
         int i,j;
          int a[N][M];
          for(i=0;i<N;i++)
               for(j=0;j<M;j++)
                  scanf("%d",a[i][j]);
          int max=a[0][0];
           for(j=0;j<M;j++)
         {
            for(i=0;i<N;i++)
            {
                  if(a[j][i]>max)
                 max=a[j][i];
             }
          printf("第%d门课的最高分为%d\n",j++,i++);
          }
         return 0;
     }
这个是小弟写的,调试都没问题,但是在输入30组数据后,无法显示结果,奇怪,求大侠支招
搜索更多相关主题的帖子: max include return 
2012-07-31 18:51
waja
Rank: 2
等 级:论坛游民
帖 子:53
专家分:52
注 册:2012-7-27
收藏
得分:2 
请注意你的for 循环中的,M N 是你想要的循环吗
2012-07-31 19:25
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:2 
scanf("%d",a[i][j]);

呵呵
2012-07-31 19:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
这种scanf()的错误也能犯,就不叫调试没问题。调试不是检查语法,让编译器通过那么简单,它包括验证输入输出数据是否切实按预期流经计算机的检查,你首先要做的调试,其实正是检测输入的30组数据是否按预期那样分布在设定的数组中,要通过添加调试代码来确定的,那才叫调试。首先检查输入是否正确,其次检查输出,如果输入正确而输出不正确,才到检查运算逻辑的步骤。你连第一步调试都没做,就说调试没问题。

授人以渔,不授人以鱼。
2012-07-31 20:08
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
要通过添加调试代码来确定的?小弟不是很明白哈,另外,我发现上面那个逻辑还是出现错误,修改过来后输出的的结果如下,请帮看下,好无奈
 for(j=0;j<M;j++)
         {
            for(i=0;i<N;i++)
            {
                 max=a[0][j];
                 if(a[i][j]>=max)
                 max=a[i][j];

             }
          printf("最高分为a[%d][%d]=%d\n",i,j,max);
          }
         return 0;
tony兄帮忙检查下这个逻辑,输出来结果总是不对,但分析逻辑我觉得没错啊
2012-07-31 21:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把输入的数据挑特征的printf()出来看看是不是正确,比如你这个scanf(),只要随便输出一个a[0][0]就马上能发现不对劲,自然知道查书看怎么改。

至于你的逻辑,你试着把所写的代码用文字描述一次,看跟自己设计时心中所设想的模型和动作是否一致。比如,为什么要设计成这样的二维数组?比较的哪门功课?是每个人的各科最高分还是所有人的某科最高分?输出的时候,输出什么?这些问题,你的代码能回答得清楚吗?

授人以渔,不授人以鱼。
2012-07-31 21:15
流氓小强
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2012-7-31
收藏
得分:2 
呵呵,我也是新手,改了下下,貌似行得通了,你瞅瞅。
#include<stdio.h>
#define N 5
#define M 3
int main()
{
    int i,j,k;
    int a[N][M];
    for(i=0;i<N;i++)
        for(j=0;j<M;j++)
        {
            printf("a[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
        }
        int max[N],temp;
        for(j=0;j<M;j++)
        {
            for(i=0;i<N;i++)
                for(int k=i+1;k<N;k++)
                {
                    if(a[k][j]>a[i][j])
                    {
                        temp=a[i][j];
                        a[i][j]=a[k][j];
                        a[k][j]=temp;
                    }
                }
                max[j]=a[0][j];
                printf("第%d门课的最高分为%d\n",j+1,max[j]);
        }
        return 0;
}
2012-07-31 22:05
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
我是这样想的 for(j=0;j<M;j++)
         {
            for(i=0;i<N;i++)
            {
                 max=a[0][j];
                 if(a[i][j]>=max)
                 max=a[i][j];

             }
          printf("最高分为a[%d][%d]=%d\n",i,j,max);
          }
         return 0;
j=0的时候,表示第一门功课,赋予max=a[0][0],再进行循环,比较N个学生在第一门功课的最高分,在i=9<10的时候输出这个最高分对应的功课号和学号.....写出来时上面的写法吧....
2012-07-31 22:06
流氓小强
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2012-7-31
收藏
得分:0 
你比较的算法貌似不对耶,再好好想想咯。加油。
2012-07-31 22:08
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
收藏
得分:0 
第7楼将j=0,j=1,j=3的3列数据进行排序,由大至小进行排列,则每列的最大值为a[0][j],这样可以,我赋予每列的第一个是最大值,再将每列后面的值即a[i][j]与a[0][j]比较大小,大的赋予max,这样行得通吧
2012-07-31 22:14
快速回复:关于n个学生m门成绩的一个问题
数据加载中...
 
   



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

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