所谓的循环就是某些代码会被重复执行
循环的分类: for while do......while
for
1.格式 for (1; 2; 3)
语句a; 执行流程 1----2---语句a-----3----2----。。。。。 3执行完一次代表循环一次的结束
2.最简单的for 用法
for(i = 1; i<=10; i++)
sum = sum + i;
3. if 与 for嵌套
#include <stdio.h> int main (void) { int i, sum=0; for (i=3; i<=10; i++) { if (i%3 == 0) //i 能被3整除 sum = sum +i; printf("sum = %d ", sum); } return 0; }
------------实验结果-------------------------------//for 语句的范围和if 的范围只能控制一句,所以printf的执行次数与for循环有关,与if 无关
sum = 3
sum = 3
sum = 3
sum = 9
sum = 9
sum = 9
sum = 18
sum = 18
4.多个 for 循环的嵌套问题
1) for (1; 2; 3)
for (4; 5; 6)
a;
b;
1----2-(成立)-----4------5--(成立)---a------6------5--(成立)----a---......5---(不成立)----3-----2---(成立)---4---a-----6---........----3----2---(不成立)-----b
即 5不成立才会执行3,2不成立才会执行b,整体算两个语句
2) for (1; 2; 3)
for (4; 5; 6)
{ a;
b;
} 整体算一个语句
3) for (1; 2; 3)
{ a;
b;
for (4; 5; 6)
c;
} 整体算一个语句
4) for (1; 2; 3)
for (7; 8; 9)
{ a;
b;
for (4; 5; 6)
c;
} 整体算一个语句
while循环
1.执行顺序
格式: while (表达式)
语句;
表达式----语句----表达式-------语句。。。。。
2.与for的比较
i=0;
while (i < 101)
{
sum = sum + 1;
++i;
} //for 和while 可以相互转换,相比较for 逻辑性更强,更不易出错
3.举例(判断回文数的程序)
1 # include <stdio.h> 2 3 int main (void) 4 { 5 int val; 6 int m; 7 int sum = 0; 8 9 printf("请输入您要判断的数字: "); 10 scanf("%d", &val); 11 12 m = val; 13 while (m) 14 { 15 sum = sum *10 + m%10; 16 m /= 10; 17 } 18 19 if (sum == val ) 20 printf("yes! "); 21 else 22 printf("no! "); 23 24 return 0; 25 }
试数过程
1> m=123成立
sum= 0*10+123%10=3
m= m/10=12
2>m=12成立
sum= 3*10+12%10=32
m= m/10=1
3>m=1成立
sum= 32*10+1%10=321
m= 1/10=0
4>m=0 不成立
最终 sum=321
4.应用场合
do.....while 主要是用于人机交互
格式: do
{
........
} while (表达式); 分号不能省
while 和 for的表达式为假时,循环语句一次都不执行,而 do....while 里的语句至少执行一次,为先执行后判断真假。
例子:在 一元二次方程中的应用 (人机交互,用户输入决定是否结束)
1 # include <stdio.h> 2 3 int main (void) 4 { 5 double a, b, c; 6 double delta; 7 double x1, x2; 8 char c; 9 10 do 11 { 12 printf("请输入一元二次方程的三个系数: "); 13 printf("a = "); 14 scanf("%lf", &a); 15 16 printf("b = "); 17 scanf("%lf", &b); 18 19 printf("c = "); 20 scanf("%lf", &c); 21 22 delta = b*b - 4*a*c; 23 24 if (delta > 0) 25 { 26 x1 = (-b + sqrt(delta)) / (2*a); 27 x2 = (-b - sqrt(delta)) / (2*a); 28 29 printf ("有两个实数解,x1 = %lf, x2 = %lf ", x1, x2); 30 31 } 32 33 34 else if (delta == 0) 35 { 36 x1 = x2 = - b / (2*a); 37 38 printf ("有唯一实数解,x1 = x2 = %lf ", x1); 39 40 } 41 42 else 43 { 44 printf("无实数解! "); 45 } 46 47 printf("您想继续吗 (Y/N): "); 48 scanf(" %c", &ch ); //%c前面必须要有一个空格,原因比较复杂 49 } while ('y' == ch || 'Y' == ch ); //单个字符加单引号 50 51 return 0; 52 }