c语言 for循环次数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 for循环次数相关的知识,希望对你有一定的参考价值。

如果有了输入数据,就知道循环次数,那么可以先把次数计算出来:
int
n;
scanf("%d",&x);
n
=
f(x);
for
(i=0;i<n;i++)
....
如果有了输入数据,还不知道循环次数,例如,循环次数由某种动态条件控制。我们可以让它作无限循环,但加入终止条件判断:
while
(1)
....循环...;
终止判据计算;
if
(终止条件达到)
break;
参考技术A #include<stdio.h>
void
main()

int
i,j;
int
m=0,n=0;
long
sum=0;
for(i=1;i<=20;i++)
m=m+1;
for(j=1;j<=3;j++)
n=n+1;
sum=sum+(i+1)*(i+1)*(j+2);


*/内循环语句多的时候,就不能省略大括号了/*
printf("sum
is:%ld\n",sum);
printf("外循环的次数:%d,内循环的次数:%d\n",m,n);
参考技术B 多于一行的循环体要用大括号
#include<stdio.h>
void
main()

int
i,j;
int
m=0,n=0;
long
sum=0;
for(i=1;i<=20;i++)

m=m+1;
for(j=1;j<=3;j++)

n=n+1;
sum=sum+(i+1)*(i+1)*(j+2);


printf("sum
is:%ld\n",sum);
printf("外循环的次数:%d,内循环的次数:%d\n",m,n);

关于c语言循环与布尔运算的问题

#include <stdio.h>
int main(void)

long num;
long sum = 0L;
_Bool input_is_good;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
input_is_good = (scanf_s("%ld", &num) == 1);
getchar();
while (input_is_good)

sum = sum + num;
printf("Please enter next integer (q to quit): ");
input_is_good = (scanf_s("%ld", &num) == 1);
getchar();

printf("Those integers sum to %ld", sum);
getchar();
return 0;

为什么这个代码不论输入1还是0还是2等整数,都无法跳出循环?
而用下面的这个,可以正常运行。
#include <stdio.h>
int main(void)

long num;
long sum = 0L;
_Bool input_is_good;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
scanf_s("%ld", &num);
getchar();
input_is_good = num == 1;
while (input_is_good)

sum = sum + num;
printf("Please enter next integer (q to quit): ");
scanf_s("%ld", &num);
getchar();
input_is_good = num == 1;

printf("Those integers sum to %ld", sum);
getchar();
return 0;

P.S. 我用的是vs2017
还有为什么输入字母就能结束循环?

input_is_good = (scanf_s("%ld", &num) == 1);

只要scanf_s完成一次成功的整形输入,input_is_good就为true

MSDN对scanf_s返回值的解释:

Returns the number of fields successfully converted and assigned; the return
value does not include fields that were read but not assigned. A return value of
0 indicates that no fields were assigned.也就是只有一个变量都没有赋值就才会返回0,只有这种情况才会使得input_is_good 为假

参考技术A 这跟bool逻辑没关系,而是你不了解scanf。scanf的返回值不是被输入参数(实际上也不可能做到这一点)。而是成功赋值参数的个数。你很有探究精神,发现输入字母会退出,这是因为输入字母导致匹配%d失败返回0导致的。反之,不论你输入的是0还是1还是2,都属于赋值成功,所以返回1追问

那为什么第一种不论输什么数字都在循环里,而第二种输入非1的数字就能跳出循环,这两种不应该本质上是一样的吗?

追答

仔细读我的回答,您会发现本质差很多。我的回答对于您的这个问题来说已经足够到位了,当然,如果您对我的回答的理解有问题的话请务必留言。不一定能马上解答,但是一定会回答的。

追问

为什么 input_is_good = (scanf_s("%ld", &num) == 1); 读取scanf的返回值,
而 scanf_s("%ld", &num);
getchar();
input_is_good = num == 1; 读取的就是输入的参数。
十分感谢!

参考技术B 和函数的返回值有关系 参考技术C


如图

以上是关于c语言 for循环次数的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何查看多重for循环一共循环了多少次,看看输出了多少行?

c语言如何查看多重for循环一共循环了多少次,看看输出了多少行?

C语言中for循环怎么理解?

c语言循环for总结

C语言for的双重循环

C语言中for循环报错