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;
}

注:c语言中 1e-6意思

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;
}

注:C语言 fabs( )函数:求双精度浮点数的绝对值

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,后面的继续。

 

posted @ 2022-10-05 20:24  许悠  阅读(74)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end
1 2 3
4