首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言之数组的有关问题

2012-04-06 
c语言之数组的问题有一个 3 行 5 列的数组,编写程序从键盘输入数据,并找出二维数组中最大元素的值及其行、

c语言之数组的问题
有一个 3 行 5 列的数组,编写程序从键盘输入数据,并找出二维数组中最大元素的值及其行、列下标。
#include <stdio.h>
main(void)
{
int a[3][5], c, d, s=0, t=0, max;
  for(c=0; c<3; c++)/*向数组赋值*/

for(d=0; d<5; d++)
{
scanf("%d", &a[c][d]);
}
}
max=a[0][0];/*用打擂台算法*/
  for(c=0; c<3; c++)

for(d=0; d<5; d++)
{
if(a[c][d]>max)
{
max=a[c][d];/*获得数组最大值*/
s=c+1;/*对应的行(数组从0开始+1)*/
t=d+1;/*对应的列*/
}
}
}
printf("最大值%d行%d列%d \n", max, s, t);
}
第一句如果改成int a[3][5], c, d, s, t, max;
就是不给s和t赋0值,就会出错,s和t的值在后面不是已经有c+1和d+1赋值了?前面赋值0起到什么作用呢?

[解决办法]
初始化数据而已
如果不初始化的话,s,t开始时就是内存里的垃圾值
按你的算法,如果a[0][0]是最大,就不会进入s=c+1那里,那么最后打印时s,t还是垃圾值;
[解决办法]
考虑一种特殊的情况是,如果for循环里的if(a[c][d] > max)在整个过程中都得不到执行的话,最后printf的时候 s, t 就是未初始化的。
[解决办法]
变量在第一次使用之前一定要初始化。

最好是在定义变量时就初始化,除非完全确定后面会有该变量的初始化动作(在使用前)。

不过最好的习惯还是定义变量既初始化。

根据语言标准,使用未初始化的变量,会导致未定义的程序行为,还是遵守规则吧。

热点排行