5.1 while语句
while语句实现的循环称为当型循环。
1.语法
while(表达式) 语句
2.功能
计算表达式的值,当值为真(非0)时,执行循环体语句。
3.说明
1)表达式称为循环控制条件表达式,一般为关系表达式或逻辑表达式,必须用一对圆括号()括起来。
2)语句称为循环体,可以是单个语句也可以是{ }括起来的复合语句。不加{ } ,循环体执行的是一条语句。
3)循环体内必须有改变循环体结束条件的语句。
例题1.用while语句求10!的值。
1 #define _CRT_SECURE_NO_WARNINGS
2 #include<stdio.h>
3 #include<stdlib.h>
4
5 void main()
6 {
7 int i = 1, mul = 1;
8 while (i<=10)
9 {
10 mul = mul*i;
11 i++;
12 }
13 printf("%d", mul);
14
15 system("pause");
16 }
例题2.统计从键盘输入一行字符的个数。
1 #define _CRT_SECURE_NO_WARNINGS
2 #include<stdio.h>
3 #include<stdlib.h>
4
5 void main()
6 {
7 char ch; int x = 0;
8 ch = getchar();
9 while (ch != '
')
10 {
11 x++;
12 ch = getchar();
13 }
14 printf("%d", x);15 system("pause");
16 }
5.2 do-while 语句
do - while语句与while循环语句相差不大,因为它把判断循环条件的的位置放在了循环体后,所以又称直到型循环。
1.语法
do
语句
while(表达式);
2.功能
先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环,如果为假则终止循环。
3.说明
1)do - while 先执行循环体,然后判断条件,即循环体至少要被执行1次,这是与while语句的典型区别。
2)与while一样,也要避免死循环,即循环体内必须有改变循环体结束条件的语句。
3)语句部分可以是单个语句也可以是{ }括起来的复合语句。不加{ } ,循环体执行的是一条语句。
例题1.口令程序。用户进入某系统,从键盘回答口令有3次机会。3次中任何一次回答正确均可进入系统(显示:You are welcome),否则不能进入系统(显示:No Access).
1 #define _CRT_SECURE_NO_WARNINGS
2 #include<stdio.h>
3 #include<stdlib.h>
4
5 #define PS 666666
6 void main()
7 {
8 long password;
9 int i = 0, flag = 0;
10
11 do {
12 i++; printf("第%d次回答口令【只能是数字】", i);
13 scanf("%ld", &password);
14 if (password == PS)
15 {
16 flag = 1; break;
17 }
18 } while (i < 3);
19
20 if (flag == 1)printf("You are welcome!!!");
21 else printf("No Access");
22
23 system("pause");
24 }
5.4 for 语句
1.语法
for(表达式1;表达式2;表达式3) 语句 可以简化为for(循环初始化;循环条件;循环增量)
2.功能
1)计算表达式1的值。
2)计算表达式2的值,若表达式2为true,则转到步骤3),若为false,则结束循环。
3)执行循环体语句。
4)计算表达式3的值,返回步骤2)继续执行。
3.说明
1)圆括号内的三个表达式用分号;隔开。
2)表达式1称为循环初始化表达式,通常为赋值表达式。
3)表达式2称为循环条件表达式,通常为关系或逻辑表达式。
4)表达式3称为循环增量表达式,通常为赋值表达式。
5)语句称为循环体,可以是单个语句,也可以是多个语句。
6)表达式1可以省略; for(;表达式2;表达式3)
7)表达式1和表达式3可以省略; for(;表达式2;) 只有表达式2时完全等于while语句
8)如果表达式3省略,则在循环体内应该有改变循环条件的语句。
9)表达式1和3可以是简单表达式,也可以是逗号表达式: for(i = 0,j = 100;i <= j;i++,j--) k = i + j;
例题1.用for循环计算10的阶乘。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i;
long mul;
for (i = 1, mul = 1; i <= 10; i++)
{
mul = mul*i;
}
printf("%ld", mul);
system("pause");
}
例题2.Fibonacci数列:数列前两项是1和1,以后每项均为前相邻两项之和。
用数学语言描述即:F(1) = 1; F(2) = 2; F(n) = F(n - 1) + F(n - 2) (当n >= 2时) 编程输出该数列前40项。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
long F1 = 1, F2 = 1;
int i;
for (i = 1; i <= 20; i++)
{
printf("%12ld%12ld", F1, F2);
if (i % 2 == 0) putchar('
');//一行输出4个数
F1 = F1 + F2;
F2 = F2 + F1;
}
system("pause");
}
例题3.求1--200中能被3整除,且至少有一位数字为5的所有整数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i, a, b, c;
for (i = 1; i < 200; i++)
{
c = i / 100;
b = i % 100 / 10;
a = i % 100 % 10;
if (i % 3 == 0 && (a == 5 || b == 5 || c == 5))
printf("%d能被3整除且包含5
", i);
}
system("pause");
}
5.5 goto语句以及goto语句构成的循环
goto语句是一种无条件转移语句,它与if语句配套使用可以构成循环。
语法: goto 语句标号;
goto语句常用于终止程序在某处深度嵌套的结构中的处理过程,例如一次跳出两层或多层循环。
例题1.用goto语句和if语句构成循环,求sum = 2 + 4 + 6 + …… + 100.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i = 2, sum = 0;
loop:if (i <= 100)
{
sum = sum + i;
i += 2;
goto loop;
}
printf("%d", sum);
system("pause");
}
5.7 break和continue语句
5.7.1 break 语句
break语句在C语言中只能用于两个地方。一个是循环语句,另一个是在switch语句中。
当break语句用于switch语句中时,可使程序跳出switch语句。
当break语句用于循环语句中时,可使程序跳出当前所在的一层循环。
注意:
1)break语句对if - else的条件语句不起作用。
2)在多层循环中,一个break语句只向外跳一层。
5.7.2 continue 语句
continue语句只能用于循环语句中,它的作用是跳出循环体中剩余的语句而强行执行下一次循环,常与if语句一起使用,用来加速循环。
例题1.输出九九乘法表。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= 9; j++)
{
printf("%d * %d = %2d ", i, j, i*j);
}
putchar('
');
}
system("pause");
}
2.右上三角形的乘法表。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= 9; j++)
{
if (j < i) printf(" "); //打印12个空格,即"%d * %d = %2d "的长度
else
printf("%d * %d = %2d ", i, j, i*j);
}
putchar('
');
}
system("pause");
}
例题3.左下三角形的乘法表。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d * %d = %-4d", i, j, i*j);
}
putchar('
');
}
system("pause");
}