for循环遇到困难
#include<stdio.h>
main()
{
int a[]={9,8,7,6,7,8,9};
int n=10,k,*p;
p=a;
for(k=0;k<=4;k++)
if ((*(p+k))<n)
n=*(p+k);
printf("%d",n);
}
为什么输出的是6。。。我算出来是7啊
我把我的思路写出来。帮我看看我哪里错了啊
------------------------------------------------
第一次执行循环
当k=0时。。 *(p+k) = *(p+0) = (a的首地址) =9
9<10
所以执行下面的 n=*(p+k);
n = 9
接下来就是执行4次。。指针往后移4格 就是7的上面。。。为什么会是6啊
我用循环把5次全输出来,,,结果都是6
纳闷ing 。。高人指点。。。。
----------------解决方案--------------------------------------------------------
因为n变成6后是最小值了,当然无法变成7了.
----------------解决方案--------------------------------------------------------
多谢多谢。。。。。脑子塞住了我。。呵呵!!马上考试了。我在报佛脚。。。阿门
----------------解决方案--------------------------------------------------------
我有一点疑问,望指教!
这个程序的每个数据都符合条件,为什么输出6,而程序中也没有出现要输出最小的数据,望指教!
----------------解决方案--------------------------------------------------------
在执行到k=4时,*(p+k)也就到了6的地址,k再下去就大于4不再循环了。。当然会输出6
----------------解决方案--------------------------------------------------------
if ((*(p+k))<n)
n=*(p+k);
这是关键
----------------解决方案--------------------------------------------------------
明显当*(p+k)也就是6小于7的时候把6给n,最后当然是6了~~~!!!
----------------解决方案--------------------------------------------------------
是的,其实这个程序就是在求最小值!
写程序,要有时间的话,用F8单步执行一下,问题就明白了!
试试看1
----------------解决方案--------------------------------------------------------
n是也是个变量它的值也随程序运行再改变。
----------------解决方案--------------------------------------------------------
呵呵.....看别人的程序当然可以知道自己到什么境界了,但也是最的.
----------------解决方案--------------------------------------------------------