循环类型 | 描述 |
---|---|
while | 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件 |
for | 可控制次数的多次执行一个语句序列。 |
do…while | 与while语句类似,但它是先执行后判断条件 |
while语句
while()语句中括号内只是判断循环执行的条件来决定循环是否继续,循环条件的更新在循环体内(同for语句中表达式3)。
while(i<10)
{
statement(s);
i++;
/*条件更行,如果控制循环条件为i<10,则在循环体内要有i条件的更新,不然会陷入死循环*/
}
注意:
- 由于计算机中的浮点数值是一个近似值,因此,用浮点数做循环控制变量可能会得到一个不精确的数,从而导致循环终止条件测试错误,所以要用整数值来控制计数循环。
- 如果while循环的循环体中没有最终将条件更新为假的操作,循环将陷入死循环。
for语句
for(表达式1;表达式2;表达式3)
表达式1:循环开始之前的初始化步骤,只执行一次。
表达式2:循环的条件,决定循环继续还是结束。
表达式3:每次循环中最后一个被执行的操作,设置循环步长,更新循环变量的值,从而改变表达式2的真假性。(与while语句中,循环体内更新循环变量等同)
for(i=1;i<10;i++)
{
语句 /*如果多条语句而不加花括号,他只会执行第一条,所以多条语句要加花括号构成复合语句*/
}
注意:
- for语句头中的三个表达式,初始化、循环继续条件、增量操作都可以包含算术表达式。for(i=m+1;i < 4*n;i += n/m ) 其中i += n/m 即i=i+n/m
- 控制变量的增量可以是负值,在这种情况下,循环计数是递减的。for(i = 10;i > 0 ; i = i - 1)
- for语句中的三个表达式是可选的。如果将表达式2省略,则认为循环继续的条件总是为真,将导致一个无限循环;如果循环体内有更新变量的语句(如i++)那么表达式3也可省略,如果在程序的其他地方已经完成循环变量的初始化,那么表达式1也可省略。
- 如果循环体内多于一个语句,必须加{ }花括号构造成一个复合语句。
自增自减运算符的前置与后置
++i 和 i++ 操作结果都是i增1 ,但如果作为子表达式参与运算前置和后置效果大不相同。
++i 先执行 i+1 在使用 i 参与运算
int i = 1 ;
printf(“i is %d”,++i);、//输出 i is 2
printf(“i is %d”,i);//输出 i is 2
i++ 先使用 i 初值参与运算,然后执行i自增1
int i = 1 ;
printf(“i is %d”,i++);、//输出 i is 1
printf(“i is %d”,i);//输出 i is 2
假定 i = 2
t = (--i)+6 ;// t的值为7
t = (i--)+6 ;// t的值为8
do…while语句
do
{
循环体语句
} while (表达式)
- do语句是在每次执行完循环体之后再判断循环是否继续
循环中的break和continue
- break语句一般用于提前退出循环或者跳出switch语句。在循环和switch语句中使用break将导致程序立即从这些语句中退出去,转去执行紧跟其后的下一跳语句。
- continue语句中断循环体的本次执行(即跳过循环体中尚未执行的语句,开始新的一轮循环)
反序输出
#include<stdio.h>
int main()
{
int x,y=0,a;
scanf("%d",&x);
while(x!=0)
{
a=x%10;
y=y*10+a;
x=x/10;
}
return 0;
}
水仙花数
求一个三位数等于它每个数的立方和(x=abc =a3+b3+c3)
#include<stdio.h>
int main()
{
int x,a,b,c;
for(x=100;x<=999;x++)
{
a=x/100;
b=x/10%10;
c=x%10;
if(x=a*a*a+b*b*b+c*c*c)
printf("%d是水仙花数",x);
}
return 0;
}
循环嵌套—百钱买百鸡
公鸡:1只3元 (a只)
母鸡:1只5元 (b只)
小鸡:3只1元 (c只)
#include<stdio.h>
int main()
{
int a,b,c;
for(a=1;a<=33;a++)
{
for(b=1;b<=20;b++)
{
for(c=3;c<=99:c++)//只能买百只鸡
if(a+b+c==100&&3*a+5*b+c/3==100)
printf("公鸡 %d只,母鸡 %d只,小鸡%d只",a,b,c);
}
}
return o;
}
现实生活中一些复杂的问题,只要找到其中的规律然后把大量的运算交给计算机完成,那么问题就变得简单了,到后面学习到函数时,解决一系列类似的问题时只需要写一个求解此问题的函数然后调用它即可。
可能存在疑问:就像书上前面提到的一些问题,两个数输出较大的,或者反序输出一个数,明明一眼就明了的问题为什么要在计算机上写很多条代码去实现?只是因为,刚入门我们需要对一些简单的问题求解来打下基础,以后需要解决的问题都不仅仅是比较大小或反序输出这样简单,而是大量数据需要大量处理的复杂问题,把问题数学模型化再转化为代码由计算机求解将变得高效。