CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

请大家看这是怎么回事

楼主cocodou(阿毛)2003-01-03 12:53:24 在 C/C++ / C语言 提问

要求出一个数组中的元素,在所在行以及所在列都是最大,即求鞍点。  
  程序如下:  
  #define   N   10  
  #define   M   10  
  #include   <conio.h>  
  main()  
  {  
      int   a[N][M],i,j,m,n,k,max,maxj,flag;  
      printf("Please   Input   The   Row   Number:");                                         //输入行数    
      scanf("%d",&n);  
      printf("Please   Input   The   Colnum   Number:");                                   //输入列数    
      scanf("%d",&m);  
      printf("\n");  
      for(i=0;i<n;i++)  
          {  
              printf("Enter   the   elements   of   %d   colnum:",i+1);                 //按行输入元素    
              for(j=0;j<m;j++)  
                  scanf("%d",&a[i][j]);  
          }  
      for(i=0;i<n;i++)                                           //输出矩阵    
          {      
              for(j=0;j<m;j++)  
                  printf("%5d",a[i][j]);  
              printf("\n");  
          }  
      for(i=0;i<n;i++)  
          {  
              max=a[i][0];  
              for(j=0;j<m;j++)                                   //找各行中的最大数    
                  if(a[i][j]>max)  
                      {  
                          max=a[i][j];  
                          maxj=j;  
                      }  
              flag=1;  
              for(k=0;k<n;k++)                                 //将各行中的最大数与同一列的其他元素比较    
                  if(max<a[k][maxj])    
                      flag=0;    
              if(flag)          
                  printf("The   element   of   (%d,%d)---%d   is   a   saddle   point.\n",i+1,maxj+1,max);  
              else   if(flag=0)  
                  printf("No   saddle   point.\n");  
          }  
      getch();  
  }  
   
  这样的运行结果是正确的。可是大家注意到没有,最后的那个else   if   语句后面是flag=0  
  语法是错误的!但是如果改成flag==0,或这只写else,运行结果就不正确了.再输出鞍点的同时,也总是同时输出No   saddle   point的信息。只有在else   if(flag=0)这种错误的语法下是正确的,请大家帮看一下是怎么回事?  
  问题点数:20、回复次数:7Top

1 楼zalyer(小照)回复于 2003-01-03 13:06:56 得分 0

flag=0这一句不是语法错误,他是先给flag赋0,然后再判断的。在这里flag为0.  
  但你说的其他情况我不知道是怎么搞的Top

2 楼langziji(大象)回复于 2003-01-03 13:50:51 得分 20

printf("No   saddle   point.\n");  
  这一句应该在遍历所有的行才能输出,所以可以用一个计数变量count来标记鞍点的数量,最后判断输出。Top

3 楼lizhijun(云中漫步)回复于 2003-01-03 15:07:37 得分 0

同意楼上的。补充:  
  1):  
  else   if(flag=0)  
                printf("No   saddle   point.\n");  
  这句应该没有语法错误,但存在语义错误,实际上,if的判断条件只是一个赋值表达式,它的值为0,所以,永远不会输出"No   saddle   point”信息的。解决的办法是基本同上,只是在他的句子最后加上:“No   saddle   point”否。  
  2)因为上面的语义错误,故即使按你的代码运行,在矩阵不存在鞍点时,程序不回输出No   Saddle   point的信息。  
  3)代码可以这样修改:  
  ………………//同原代码  
      int   count=0;  
      for(i=0;i<n;i++)  
          {  
              max=a[i][0];  
              for(j=0;j<m;j++)                                   //找各行中的最大数    
                  if(a[i][j]>max)  
                      {  
                          max=a[i][j];  
                          maxj=j;  
                      }  
              flag=1;  
              for(k=0;k<n;k++)                                 //将各行中的最大数与同一列的其他元素比较    
                  if(max<a[k][maxj])    
                      flag=0;    
              if(flag)          
                  {  
                  count++;  
                  printf("The   element   of   (%d,%d)---%d   is   a   saddle   point.\n",i+1,maxj+1,max);  
                  }  
          }  
    if(count==0)  
          printf("No   saddle   point.\n");  
  ……//同原代码Top

4 楼cocodou(阿毛)回复于 2003-01-03 15:33:48 得分 0

thanks   a   lot!!Top

5 楼Davidzhuhua(David)回复于 2003-01-03 16:12:06 得分 0

我的建议最好是将flag定义为boolean   型。他的功能才能体现出来。最后就可以用if(flag)   or   if   (!flag)来判断。Top

6 楼SwordMan2001(天笑2001)回复于 2003-01-03 16:23:44 得分 0

其实  
  else   if(flag=0)  
                  printf("No   saddle   point.\n");  
  与  
  else   {  
        flag=0;  
        printf("No   saddle   point.\n:);  
  }  
  语意相同,不知源代码中为何那样书写。Top

7 楼lizhijun(云中漫步)回复于 2003-01-03 19:40:23 得分 0

我发现了一个问题:   langziji   里面后两个音节为“自己”Top

相关问题

  • 请看看这是怎么回事?
  • 请看看这是怎么回事?
  • 请看这是怎么回事?About BDE.
  • 高手请看这是怎么回事?
  • 请看源码,这是怎么回事?
  • 请高手看看这个错误是怎么回事?
  • 请帮忙看看这是怎么回事?
  • 请大家看看:http://www.cpxhw.com这个网站是怎么回事?
  • 请帮我看看这个错误代码是怎么回事
  • 请进来看看这是怎么回事?

关键词

  • maxj
  • max
  • 输入
  • 所在
  • scanf
  • flag
  • printf
  • please input
  • define
  • number

得分解答快速导航

  • 帖主:cocodou
  • langziji

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo