我正在学习C语言 这是一本书上的算法例题。 输入10个数,找出其中最大的数,并输出。

S1:输出一个数,存放在一个变量MAX中
S2:设置用来累计比较次数的计数器 i(也是一个变量),并给 i 赋初值1,即 i=1。
S3:输入一个数,存放在另一个变量X中。
S4:比较MAX和X中的数,若X>MAX,则将X的值送入MAX。否则,MAX的值不变。
S5:i 增加1,即 i+1=i。
S6:若i<9,则返回S3,继续执行,否则输出MAX中的数,此时MAX中的数即为最大数。

这个例子 中的第六步 我搞不太明白 我觉得10个数 要做9次比较可是例子中
i<9的意思不就是说第九次比较无法做出 那么肯定还剩一个数没有输入
i=1 是第一次比较 那么十个数剩余8个 得到一个MAX
i=2 第二次比较 从第一步剩余的8个数中取出一个与 第一步得出的MAX比较 那么还剩下7个数 。
依此类推 那么当
i=8时 应该还剩一个数没有比较
可是i=9又无法出现
试问 时我的分析方法有问题还是 这个例子本身有问题 请明白的朋友帮忙解答一下
3楼的朋友你仔细看看 S5 S6 当第8次比较完S5会使 i 变成9然后 进入S6的判断 并不是I=8带入S6的判断

例子是正确的,因为刚开始,已经有一个数放到MAX中了,所以你只需要输入九个数来比较。如果i<9也就是说,i是可以到9的,当i=8时,8<9成立,所以继续执行S3,这时候i再加1就是9了,这是最后一次输入和比较.
比如下面的第一排是我要输入的序列,其中,9是S1中已经放到MAX的数。
第二排的数对应的是i的值,每个值都放在第一排两个数的中间,楼主可以数数看,i=9时比较4和5,完成10个数的比较。
9,5,6,7,8,2,3,1,4,5
1 2 3 4 5 6 7 8 9

对补充我回答:
在公司的时候以我自己的思路去理解了,没仔细看,回家一看,它这个i=i+1确实有问题,i的初始不应该是1,应该是0,否则就要改判断条件i<10.
C语言程序如下:

#include <stdio.h>
int main()
{
int i,MAX,X;
printf("请先输入一个数MAX:\n");
scanf("%d",&MAX);
i=0;
do
{
printf("请继续输入数:\n");
scanf("%d",&X);
if(X>MAX)
{
MAX=X;
}
i++;
}while(i<9);
printf("比较的次数:%d,最大的数:%d",i,MAX);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-03
例子总可以将i的初始化设为i=0;
或者最后的i比较范围改为i<=9;或者i<10;
第2个回答  2010-09-05
假定X是最大的数,那么X+1又是什么?除非它不能加一......数学界里面还没找到不能加一的数吧?(如果X+1都不存在,那么X+X也不存在)

对啊,找不到这样的数X,所以它是不存在的,
如果你说“天上有几颗星星”的话,那就变成了自然中的了,不是数学上的了,因为数学的范畴比自然的要大得多。

证明不存在X为最大数:
假如X是最大数,则不存在X+1使得 X+1>X就是说不存在 1>0,可是在可比较的数学范畴里面,1>0是恒成立的,所以假设不成立,即是X不是最大的数。

那么有人说+∞+1=+∞啊!
的确,上式是成立的,但是前+∞和后+∞并不一样,
如果它们是一样的,就会有1=0的成立,如果1=0成立了,那么数论就可以推翻了。

以上仅为鄙人见解,要找数学中最大的数,跟证明1+1=2是同一个难度的。

某同学说,对于不同认知层次的人来说,最大的含义不同,如幼儿园的小朋友,认为最大的数是10,因为她只学到了10以下的数;初中生不会表示∞,他们会说“无数个亿”,因为“亿”是他们学到的最大单位;高中生会∞,但是并不能证明最大是+∞;大学生可以用更多地了解∞,知道有∞^N(∞的N次方,就是N个无穷大相乘,这里N也可以是无穷大)
第3个回答  2010-08-27
i从0开始,0~8就是9个数
相似回答