user-0 提问: 关于数组中for循环 i 的取值，小弟有些疑惑

回复:
user: user-1
content: 比如你要执行30次循环的话用for(i=0;i<30;i++)就可以了，i每次先加1，再判断是不是符合i<30的条件，不符合就退出循环

user: user-2
content: 边界问题用的时候小心验证下就好了。比如你的for循环语句： for(i=0;i<30;i++)  你就可以把30想成1来算，然后这样想： i=0满足i<1的条件，所以for循环执行一次，i++ i=1不满足i<1的条件,所以退出for循环。 于是你的for循环只执行了一次。即1-0次，这里的1可以换成你的30，所以 归到你的for循环后，执行了30－０次  基本上循环代入边界然后缩小范围检查下，就可以了。以上。 你的代码实际上循环外面多了一句scanf,然后输入会多一次。当然你的答案还是正确的。只不过算的是你后面输入的３０个数的结果。

user: user-3
content: 引用 11 楼 zxh707wk 的回复:照lz的意思改的 #include <stdio.h>  int main() { 	float score[30],max,min,aver; 	int i; 	printf("please input score of stu\n"); 	for(i=0;i<30;i++) 	{ 		scanf("%f",&score[i]); 	} 	max=min=aver=score[0]; 	for(i=0;i<30;i++) 	{ 		if(score[i]>max) 			max=score[i]; 		if(score[i]<min) 			min=score[i]; 		aver+=score[i]; 	} 	aver/=30; 	printf("max=%f,min=%f,aver=%f\n",max,min,aver); 	return 0; }  赞同12楼，楼主初始化的时候用的是score[0]的值，没必要再加上一边，所以第二个for循环从i=1开始

user: user-4
content: 不是多了一句吗？？

user: user-5
content: 引用 11 楼 zxh707wk 的回复:照lz的意思改的 #include <stdio.h>  int main() { 	float score[30],max,min,aver; 	int i; 	printf("please input score of stu\n"); 	for(i=0;i<30;i++) 	{ 		scanf("%f",&score[i]); 	} 	max=min=aver=score[0];// score[0]已经用过一次了 	for(i=0;i<30;i++) 	{ 		if(score[i]>max) 			max=score[i]; 		if(score[i]<min) 			min=score[i]; 		aver+=score[i];  //score[0]会再用一次 	} 	aver/=30; 	printf("max=%f,min=%f,aver=%f\n",max,min,aver); 	return 0; }  所以后一个i循环不应该从0开始

user: user-6
content: 这是帮你修改后的代码，你代码printf("please input score of stu\n");  scanf("%f",&score);第一次输入这个我真的不能理解，第一次输入score[0]的值？然后后面的 for 循环又把score重新输入了一次，加起来不就31次了么？然后我想问一句你真的每次测试都输入了31个数？（灵活运用宏定义！）测试的时候只需要把宏改小一点就好了，测试的时候也可以节约很多时间，不用一下输入30个数发现结果不对又重新输入。。。 for(i=0;i<30;i++) { scanf("%f",&score[i]);	 max=score[0]; min=score[0]; aver=score[0]; } 这一段代码你没发现后面3句每次for循环都执行了一次么？虽然CPU执行时间很短，但是用在别的地方就会出现很大的延时。 下面的代码是修改后的代码，你可以看一下，只帮你改了一下输入。  #include<stdio.h>  #define N	5  int main() { 	float score[N],max,min,aver = 0; 	int i; 	 	printf("please enter %d number:", N); 	for(i=0;i<N;i++) 	{ 		scanf("%f",&score[i]);	 	} 	 	max = min = score[0]; 	 	for(i=0;i<N;i++) 	{ 		if(score[i]>max) 			max=score[i]; 		if(score[i]<min) 			min=score[i]; 		aver+=score[i]; 		 	} 	aver/=N; 	printf("max=%f,min=%f,aver=%f\n",max,min,aver); 	return 0; }

user: user-7
content: “多一少一”问题占程序员常犯错误的10%以上！ 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断，搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个？ <、<=、==、>、>=中的哪个？

user: user-8
content: 照lz的意思改的 #include <stdio.h>  int main() { 	float score[30],max,min,aver; 	int i; 	printf("please input score of stu\n"); 	for(i=0;i<30;i++) 	{ 		scanf("%f",&score[i]); 	} 	max=min=aver=score[0]; 	for(i=0;i<30;i++) 	{ 		if(score[i]>max) 			max=score[i]; 		if(score[i]<min) 			min=score[i]; 		aver+=score[i]; 	} 	aver/=30; 	printf("max=%f,min=%f,aver=%f\n",max,min,aver); 	return 0; }

user: user-9
content: 我是这么理解for循环的次数的，当i++的自加运算是在for后跟的花括号的语句全部执行后进行的，当i=29时，这时是第30次执行花括号内的语句，执行完后i自加1，此时i=30，不符合i<30的条件，跳出循环，总共循环30次

user: user-10
content: 仔细点哇。。。。。。。

user: user-11
content: 就是多了一句scanf("%f",&score);和for循环没关系，想我数学不好，计算循环次数都是扳手指头的

user: user-0
content: 引用 6 楼 lovesmiles 的回复:[quote=引用 5 楼 u013246888 的回复:] [quote=引用 4 楼 lovesmiles 的回复:] [quote=引用 3 楼 u013246888 的回复:] [quote=引用 2 楼 lovesmiles 的回复:] float score[30],max,min,aver; 这句要初始化，加上下面一句  max=0; min=0; aver=0; scanf("%f",&score);  这一句是什么东西呢？明显多了这一句才要输入31次，把它删掉  那请问为什么要初始化呢？是为了稳定吗？[/quote] 不实始化这个值可能就不是0。max一开始就不是0你的计算结果会正确吗？[/quote]  	max=score[0]; 	min=score[0]; 	aver=score[0]; 可是我后面已经给max,min和aver赋值了，那么在开始的时候需要初始化吗？？[/quote] sorry,没看到这个，在使用前先赋值就可以了。[/quote]  没关系的~总的来说谢谢你啦~我只是个初学者，很多东西不懂，如果有冒犯到请见谅！！谢谢你~

user: user-12
content: 引用 5 楼 u013246888 的回复:[quote=引用 4 楼 lovesmiles 的回复:] [quote=引用 3 楼 u013246888 的回复:] [quote=引用 2 楼 lovesmiles 的回复:] float score[30],max,min,aver; 这句要初始化，加上下面一句  max=0; min=0; aver=0; scanf("%f",&score);  这一句是什么东西呢？明显多了这一句才要输入31次，把它删掉  那请问为什么要初始化呢？是为了稳定吗？[/quote] 不实始化这个值可能就不是0。max一开始就不是0你的计算结果会正确吗？[/quote]  	max=score[0]; 	min=score[0]; 	aver=score[0]; 可是我后面已经给max,min和aver赋值了，那么在开始的时候需要初始化吗？？[/quote] sorry,没看到这个，在使用前先赋值就可以了。

user: user-0
content: 引用 4 楼 lovesmiles 的回复:[quote=引用 3 楼 u013246888 的回复:] [quote=引用 2 楼 lovesmiles 的回复:] float score[30],max,min,aver; 这句要初始化，加上下面一句  max=0; min=0; aver=0; scanf("%f",&score);  这一句是什么东西呢？明显多了这一句才要输入31次，把它删掉  那请问为什么要初始化呢？是为了稳定吗？[/quote] 不实始化这个值可能就不是0。max一开始就不是0你的计算结果会正确吗？[/quote]  	max=score[0]; 	min=score[0]; 	aver=score[0]; 可是我后面已经给max,min和aver赋值了，那么在开始的时候需要初始化吗？？

user: user-12
content: 引用 3 楼 u013246888 的回复:[quote=引用 2 楼 lovesmiles 的回复:] float score[30],max,min,aver; 这句要初始化，加上下面一句  max=0; min=0; aver=0; scanf("%f",&score);  这一句是什么东西呢？明显多了这一句才要输入31次，把它删掉  那请问为什么要初始化呢？是为了稳定吗？[/quote] 不实始化这个值可能就不是0。max一开始就不是0你的计算结果会正确吗？

user: user-0
content: 引用 2 楼 lovesmiles 的回复:float score[30],max,min,aver; 这句要初始化，加上下面一句  max=0; min=0; aver=0; scanf("%f",&score);  这一句是什么东西呢？明显多了这一句才要输入31次，把它删掉  那请问为什么要初始化呢？是为了稳定吗？

user: user-12
content: float score[30],max,min,aver; 这句要初始化，加上下面一句  max=0; min=0; aver=0; scanf("%f",&score);  这一句是什么东西呢？明显多了这一句才要输入31次，把它删掉

user: user-0
content: hello?Anybody here?