C 语言老师的一道改错题目的问题

2015-12-12 08:55:13 +08:00
 yuann72

C 语言的一道改错题目 题目说有 4 个错误,前 3 个错误不管他 主要是第四个

编程输入 10 个数,找出其中的最大值及其所在的数组下标位置。(4 个错误)

include <stdio.h>

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;
}

2291 次点击
所在节点    问与答
8 条回复
wy315700
2015-12-12 09:02:35 +08:00
max 有初始值,如果后面的都 < max
那么 *pMaxPos=i 就不会被执行
aivier
2015-12-12 09:02:45 +08:00
不懂 C ,只知道 JavaScript 不这样做变量会变成 NaN(Not a Number)
Hyperion
2015-12-12 09:09:19 +08:00
不应该是函数实现的时候,最后一个指针参数类型错误吗?

要不要初始化指针式是规矩问题。
fractal314
2015-12-12 09:42:35 +08:00
测试一下 10 9 8 7 6 5 4 3 2 1 这组数就可以了
zmj1316
2015-12-12 09:53:09 +08:00
可能未被初始化,顺便一提 lz 发帖前应该预览一下,不然不知道 MD 就是这种结果 2333
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 ,而是随机值,那程序就会出错
Comdex
2015-12-12 11:29:07 +08:00
最好初始化
Shy07
2015-12-12 17:46:23 +08:00
算, pMaxPos 只在 if 语句中赋值,如果没有满足 if 语句的条件,那么 pMaxPos 就不会被赋值,这时候必须有容错处理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/242980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX