C 语言的一道改错题目 题目说有 4 个错误,前 3 个错误不管他 主要是第四个
编程输入 10 个数,找出其中的最大值及其所在的数组下标位置。(4 个错误)
int FindMax(int num[], int n, int *pMaxPos);
main()
{
int num[10], maxValue, maxPos, minValue, minPos, i;
printf("Input 10 numbers:\n ");
for (i=0; i<10; i++)
{
scanf("%d", num[i]); //加取地址符号
}
maxValue = FindMax(num, 10, maxPos); //加取地址符号
printf("Max=%d, Position=%d\n",maxValue, maxPos);
}
int FindMax(int num[], int n, int pMaxPos); //去掉分号
{
int i, max;
max = num[0];
/*主要是这第四个错误 老师说要增加初始化语句*pMaxPos=0 说是逻辑上的错误,这个时候不加这一条语句程序已能正常运行并实现功能
我只想知道这个真的算一个错误吗?/
for (i = 1; i < n; i++)
{
if (num[i] > max)
{
max = num[i];
*pMaxPos = i;
}
}
return max;
}
1
wy315700 2015-12-12 09:02:35 +08:00
max 有初始值,如果后面的都 < max
那么 *pMaxPos=i 就不会被执行 |
2
aivier 2015-12-12 09:02:45 +08:00
不懂 C ,只知道 JavaScript 不这样做变量会变成 NaN(Not a Number)
|
3
Hyperion 2015-12-12 09:09:19 +08:00
不应该是函数实现的时候,最后一个指针参数类型错误吗?
要不要初始化指针式是规矩问题。 |
4
fractal314 2015-12-12 09:42:35 +08:00 via Android
测试一下 10 9 8 7 6 5 4 3 2 1 这组数就可以了
|
5
zmj1316 2015-12-12 09:53:09 +08:00
可能未被初始化,顺便一提 lz 发帖前应该预览一下,不然不知道 MD 就是这种结果 2333
|
6
iamleung 2015-12-12 10:07:48 +08:00
假设 FindMax 的实现函数,最后那个参数错误只是笔误;
然后,程序之所以正常运行,在于未初始化的 maxPos 被编译器默认成 0 了,当它被作为参数传给 FindMax 函数时,相当于*pMaxPos=0 ,所以即使输入 10 9 8 7 6 5 4 3 2 1 ,输出结果也是对的; 但是,如果碰上某些编译器或者使用某些编译参数,使得不给未初始化变量赋 0 ,而是随机值,那程序就会出错 |
7
Comdex 2015-12-12 11:29:07 +08:00
最好初始化
|
8
Shy07 2015-12-12 17:46:23 +08:00
算, pMaxPos 只在 if 语句中赋值,如果没有满足 if 语句的条件,那么 pMaxPos 就不会被赋值,这时候必须有容错处理
|