呼叫C达人,C程序设计,题目找出一个二维数组中得鞍点,即该位置上的元素在该行上最大、在该列上最小

[复制链接]
查看11 | 回复5 | 2011-9-19 01:23:44 | 显示全部楼层 |阅读模式
#includestdio.hintmain(){inth,l,a[4][4],maxh[4],maxl[4],z[4],n,k;printf(\"请输入数组:\");for(h=1;h=3;h){for(l=1;l=3;l){scanf(\"%d\",a[h][l]);}}maxh1=a[1][1],maxh2=a[2][1],maxh3=a[3][1];//maxh1为第一行第一个,maxh2为第二行第一个,以此类推//for(h=1;h=3;h){for(l=1;l=3;l){if(a[h][l]maxh[h]){maxh[h]=a[h][l];z[h]=l;}}}//求出每行最大,并记录,每行最大的数在第几列//maxl1=a[1][1],maxl2=a[1][2],maxl3=a[1][3];//这里是为每列的第一个//for(l=1;l=3;l){for(h=1;h=3;h){if(a[h][l]maxl[h])maxl[h]=a[h][l];}}//这是求每列最大//if(maxh1==maxl[z1])//这是求每行的最大和相对应列数的最小看是否相等//{printf(\"第一行有鞍点:%d\",maxh1);}elseprintf(\"第一行没有鞍点。\");if(maxh2==maxl[z2]){printf(\"第二行有鞍点:%d\",maxh2);}elseprintf(\"第二行没有鞍点。\");if(maxh3==maxl[z3]){printf(\"第三行有鞍点:%d\",maxh3);}elseprintf(\"第三行没有鞍点。\");printf(\"\\n\");return0;}哪错了崩溃了求求啊
回复

使用道具 举报

千问 | 2011-9-19 01:23:44 | 显示全部楼层
1、你的赋值语句maxh1=a[1][1],maxh2=a[2][1],maxh3=a[3][1];错了,不是maxh1而是maxh[1],剩下的以此类推,不是maxl1,而是maxl[1]2、你漏了一行一列,数组的下标是从0开始的,也就是说你的所有循环都不能从1开始,要从0开始,而且要加上maxh[0]=a[0][0],上面的maxh1=a[1][1],maxh2=a[2][1],maxh3=a[3][1];改成maxh[1]=a[1][0],maxh2=a[2][0],maxh3=a[3][0];maxl[0]=a[0][0]上面的maxl1=a[1][1],maxl2=a[1][2],maxl3=a[1][3]改成maxl[1]=a[0][1],maxl2=a[0][2],maxl3=a[0][3]比如for(h=1;h=3;h),要改为for(h=0;h=3;h)3、还有你的求列最大值,for(l=1;l=3;l){for(h=1;h=3;h){if(a[h][l]maxl[h])maxl[h]=a[h][l];}}这是根据求行最大值改过来的吧,人家行最大值是可以用maxh[h]来存,你一个列最大值也用maxl[h]凑什么乱子,你到底是行啊还是列啊,改成maxl[l];4、if(maxh1==maxl[z1])这句中,你的maxh没用下标,maxl到是用了,z又没用。。。改为if(maxh[1]==maxl[z[1]]),其他的一样,自己改吧5、如果你只想用4阶的数组存放3阶的矩阵。。。那么好吧,虽然浪费了一点,但是程序至少通了,那样的话前面说的从0开始和给maxh[0]、等相关变量的赋值你都可以忽略,只改数组下标和循环就行了貌似应该没有什么问题了。。。
回复

使用道具 举报

千问 | 2011-9-19 01:23:44 | 显示全部楼层
少了数组的[]。maxh[1]=a[1][1],maxh[2]=a[2][1],maxh[3]=a[3][1];maxl[1]=a[1][1],maxl[2]=a[1][2],maxl[3]=a[1][3];if里面也是如此。
回复

使用道具 举报

千问 | 2011-9-19 01:23:44 | 显示全部楼层
你这个程序乱七八糟啊,你明明定义的是四行四列数组,可是输入数组的时候却是三行三列,maxh1,maxh2,maxh3,你根本就没有定义,你先把这些改完了,试试,不行的话再问我补充一点,假如你定义了a[20],那么他的数组元素是从a[0]到a[19].
回复

使用道具 举报

千问 | 2011-9-19 01:23:44 | 显示全部楼层
我先指出你程序中的错误(我先把你的注释删掉,否则有点乱),最下面是我修改好的程序(我的编译器输出中文时有点问题,所以改成了简单的英文,望见谅)。#includestdio.hintmain(){inth,l,a[4][4],maxh[4],maxl[4],z[4],n,k;printf(\"请输入数组:\");for(h=1;h=3;h){for(l=1;l=3;l){scanf(\"%d\",a[h][l]);//输入没有取地址符号}}maxh1=a[1][1],maxh2=a[2][1],maxh3=a[3][1];//maxh数组使用错误for(h=1;h=3;h){for(l=1;l=3;l){if(a[h][l]maxh[h]){maxh[h]=a[h][l];z[h]=l;}}}maxl1=a[1][1],maxl2=a[1][2],maxl3=a[1][3];//maxl数组使用错误for(l=1;l=3;l){for(h=1;h=3;h){if(a[h][l]maxl[h])maxl[h]=a[h][l];//maxl应该是存储每一列的最小元素,则不应该是maxl[h],而是maxl[l]}}if(maxh1==maxl[z1])//z数组使用错误,应该是z[1],下同{printf(\"第一行有鞍点:%d\",maxh1);}elseprintf(\"第一行没有鞍点。\");if(maxh2==maxl[z2]){printf(\"第二行有鞍点:%d\",maxh2);}elseprintf(\"第二行没有鞍点。\");if(maxh3==maxl[z3]){printf(\"第三行有鞍点:%d\",maxh3);}elseprintf(\"第三行没有鞍点。\");printf(\"\\n\");return0;}//==================================//这是我修改好的程序//==================================#includestdio.hintmain(){inth,l,a[4][4],maxh[4],maxl[4],z[4],n,k;printf(\"pleaseenter3*3datas\\n\");for(h=1;h=3;h){for(l=1;l=3;l){scanf(\"%d\",}}maxh[1]=a[1][1],maxh[2]=a[2][1],maxh[3]=a[3][1];for(h=1;h=3;h){for(l=1;l=3;l){if(a[h][l]maxh[h]){maxh[h]=a[h][l];z[h]=l;}}}maxl[1]=a[1][1],maxl[2]=a[1][2],maxl[3]=a[1][3];for(l=1;l=3;l){for(h=1;h=3;h){if(a[h][l]maxl[h])maxl[l]=a[h][l];}}if(maxh[1]==maxl[z[1]]){printf(\"1--%d\\n\",maxh[1]);}elseprintf(\"1no\");if(maxh[2]==maxl[z[2]]){printf(\"2--%d\\n\",maxh[2]);}elseprintf(\"2no\\n\");if(maxh[3]==maxl[z[3]]){printf(\"3--%d\\n\",maxh[3]);}elseprintf(\"3no\\n\");printf(\"\\n\");return0;}
回复

使用道具 举报

千问 | 2011-9-19 01:23:44 | 显示全部楼层
建议把判断是否是最大值最小值放到一个函数里面写,这会比较清楚
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行