for 与 scanf 函数
//以下函数有很多没必要的问的,我会把要问的注释出来//此程序为C Primer plus 141页,完全照着书打的
#include <stdio.h>
#define SIZE 10
#define PAR 72
int main(void)
{
int index, score ;
int sum = 0;
float average;
printf("Enter %d golf scores:\n", SIZE);
for (index = 0; index < SIZE; index++)
//我就搞不懂这个for 和下面的 scanf 为什么连接起来了,又没有括号什么的,这样我就直接认为for这个单独语句产生了一个无意义的操作(指index +到10)然后跳到scanf函数,我都不知道该怎么理解了
scanf("%d",&score);
printf("The scores read in are as follows:\n");
for (index = 0; index < SIZE; index++)
printf("%5d",&score);
printf("\n");
for (index = 0; index < SIZE; index++)
sum += score;
average =( float )sum / SIZE;
printf("Sum of scores = %d , average = %.2f\n", sum, average);
printf("That's a handicap of %.0f.\n",average - PAR );
return 0;
}
//此为输出
Enter 10 golf scores:
99 95 109 105 100 //此处为scanf输入
96 98 93 99 97 98 //此处为scanf输入
//就算连接起来了,这里为什么要输入11个数字才到下一步,当SIZE为9时判断结束循环就加1变成10了,下次判断10不小于10,应该输入10个就结束了
The scores read in are as follows:
99951091051009698939997
Sum of scores = 991, average = 99.10
That's a handicap of 27. for, while, if, else, ...
这些关键字引起的程序段如果后边不用{} 括起来,默认这些关键字下的第一行是这些关键字所管理的 1.作用域或者说是工作区的问题,{}是用来限定作用域的,如果没有{} for, while, if, else 下一句纳入工作区
2.我在dev调试过,以空格做分隔符,输入10个数据后,它会一次次的调用scanf来进行赋值,你可以自己调试看看
3.0 ~ 10 会循环10次,所以你输入第11个的时候跳出 你没用花括号括起来
默认只循环一个语句呀 本帖最后由 JussKwh 于 2021-8-19 12:05 编辑
scanf后面不加括号,后面那个连一起我理解了。但是还有个问题书上写的for语句是,for(A;B;D){C} 先初始化一次(步骤A),然后判断(步骤B),然后执行(C),语句结束才执行(D)。 那么我这个语句就是在i等于9步骤(B)的时候scanf输入第十个数字(步骤C),结束后才i++到达10步骤(D),结束一个循环。 那么下个循环就是先判断10不小于10(B)直接跳出for循环,为什么在for循环里面的scanf还要输入第十一次(C),不是应该直接跳出到下一步吗 本帖最后由 JussKwh 于 2021-8-19 12:39 编辑
还有书上有个例子就是
int n=0;
while (n++<3);
printf("n is %d\n",n);
printf("That's all thid program does.\n");
return 0;
按楼上的说话,while和printf连接起来,不是应该每次打印n的值吗
为什么最后只输出了
n=4 //主要是这个,下面那个不用管
That's all thid program does.
别说我抬杠,我只是想明白它到底是怎么个计算过程 JussKwh 发表于 2021-8-19 11:58
还有书上有个例子就是
int n=0;
你while后面打了个分号,也就是n++符合条件就结束了,不会printf。然后一直到n++=4的时候,不小于3了,就输出了n=4,然后程序结束。至于你说的第一个for那个问题,那就是没打分号的结果,for执行条件,然后scanf视为for循环的一部分,当然会BUG。该打分号要打,不该打要不打。 本帖最后由 JussKwh 于 2021-8-20 12:10 编辑
隐市仙 发表于 2021-8-19 15:50
你while后面打了个分号,也就是n++符合条件就结束了,不会printf。然后一直到n++=4的时候,不小于3了,就 ...
你自己去看看小甲鱼的视频他for后面有没有跟while一样的分号,n++为什么会加到4,i等于2的时候下一条语句就是3直接结束,怎么+到4的,小于3的条件为4这不就反了吗,for根本就没把printf放在循环里,当for语句结束直接执行printf,与上面第一个人说的while,for,if,什么接下来第一条语句不符合 d JussKwh 发表于 2021-8-20 12:02
你自己去看看小甲鱼的视频他for后面有没有跟while一样的分号,n++为什么会加到4,i等于2的时候下一条语 ...
while(n++<3);
这里while后面跟了一个空语句
执行过程,n=0;
n=0,此时n++<3表达式的值为0<3,循环
n=1,此时n++<3表达式的值为1<3,循环
n=2,此时n++<3表达式的值为2<3,循环
n=3,此时n++<3表达式的值为3<3,跳出循环
注意++在后表达式的值为++之前的值,即n++表达式的值为n,之后n再加1
所以当n++<3时,是表达式的值小于3,之后n还要再加1,所以n=4
上述来源百度,简单来说就是n++和++n的区别,n++<3人类思维以为是加完小于3,然而实际是没加的时候小于3,然后+1结束。之后n++=3它不小于3了,还是会+1,然后跳出循环,于是就变4了。 JussKwh 发表于 2021-8-19 11:58
还有书上有个例子就是
int n=0;
while (n++<3);
就是while(...)与后面的;(啥都不干)连起来
就是while (n++<3)啥都不干
页:
[1]