03 循环结构程序设计
1.for、while、do…while语句的应用
1.1 “指定次数型”循环( for 循环 )的形式和使用
先判断再执行
for(初始化表达式 ; 判断循环条件 ; 调整操作表达式)
{
执行语句 ;
}
统计英文字母和数字字符
/*本题要求编写程序,输入10个字符,统计其中英文字母、数字字符和其他字符的个数。
输入格式:输入为10个字符。最后一个回车表示输入结束,不算在内。*/
#include <stdio.h>
#include <math.h>
int main()
{
char x;
int letter=0,digit=0,other=0;
for(int i = 0;i < 10;i++) {
scanf("%c",&x);
if(x>='a'&&x<='z'||x>='A'&&x<='Z')
letter++;
else if(x>='0'&&x<='9')
digit++;
else
other++;
}
printf("letter = %d, digit = %d, other = %d",letter,digit,other);
return 0;
}
注:C语言 char 字符串 / 判断素数 / sqrt 开根号
1.2 “当型”循环( while 循环 )的形式和使用
先判断再执行
while ( 表达式 )
{
执行语句 ;
}
如果该判断不通过,那么一次循环也不会执行。
计算 (1-1/3 + 1/5 - 1/7 + 1/9 - 1/11… ) * 4 的值
# include <stdio.h>
int main(void)
{
int i = 1;
int j = 1;
double sum = 0; //结果肯定是小数, 所以要定义成double或float型
while (1.0/i > 1e-6) //当1/i小于10的-6次方时停止循环。这个循环条件是自己定的, 定得越小最后的结果就越精确。注意1一定要写成小数的形式即1.0
{
sum += (1.0 / i) * j;
i+=2;
j = -j; //实现正负交替
}
sum *=4;
printf("sum = %lf\n", sum); //double是%lf, 取6位小数是%.6
return 0;
}
1.3 “直到型”循环(do-while循环)的形式和使用
先执行再判断
这个循环比较特殊。它先进行循环中的内容,然后再进行判断,当判断不满足时就会跳出循环,这种循环结构至少会执行一次循环当中的内容。
do
{
执行语句 ;
}
while(条件); //注意这儿后面有个分号 ;
用 do-while 语句构成的循环,在 while 后的表达式为零时结束循环。C 语言中的三种循环语句 for,while 和 do-while ,其实是可以互相替代的,只是写法不同。有些情况使用 for 循环比较方便,有些情况使用 while 比较方便,有些时候使用 do-while 比较方便。这三种循环的成立条件,都是非零,就会执行循环体。
输出 1 - 9 的值
#include <stdio.h>
int main (void)
{
int i = 1; // 设置初始值,i为1。
do
{
printf("数值为:%d\n",i);
i++;
}
while(i<=10); //先执行语句,在判断结果。
return 0;
}
对于给定的整数N,输出其逆序数
#include<stdio.h>
#include<math.h>
int main()
{
int N,z=0;
fabs(N) <= pow(10,9);
scanf("%d",&N);
do {
z=z*10+N%10;
N = N/10;//先执行
}while(N!=0);
{
;
}//这里的执行语句为什么空着?
printf("%d",z);
return 0;
}
2.循环结束条件
2.1 break
结束整个循环。但是在 switch 语句中的 break
不能结束当前循环,只能结束当前 switch 语句。break 语句只能用在循环体内和 switch 语句体内。
2.2 continue
结束本次循环,开始下一次循环。本次循环 continue
后面的语句将不被执行。
2.3 应用
2.3.1 思考下列程序段的输出结果。
程序段 A
int num=0;
while(num<6){
num++;
if(num==3) break;
printf("%d#",num);
}
程序段 B
int num=0;
while(num<6) {
num++;
if(num==3) continue;
printf("%d#",num);
}
答案
程序A输出: 1#2#
程序B输出: 1#2#4#5#6#
break 执行后,会彻底的结束循环。
所以 num 的值为 3,满足条件后,整个循环就结束了,哪怕循环条件依然成立。
打印到 num 的值为2。
continue 执行后,结束这次循环,但是循环还是会继续。
所以 num 的值为 3,满足条件后,只是结束了这次循环。
所以打印的时候,只是跳过了 3,后面的继续。