C语言基础(四)循环控制


系列合集 初窥C语言

五、循环控制

5.1 概述

循环控制特点:在给定条件(循环条件)成立时,反复执行某程序段(循环体),直到条件不成立为止。
分类:
1)用goto语句和if语句构成循环;(不常用)
2)用while语句
3)用do-while语句
4)用for语句

5.2 循环控制语句

(1)goto语句(了解即可)
一般形式:goto 语句标号;由字母,数字和下划线组成,不能使用整数。
(2)while语句
一般形式:

while(条件表达式){
    
    
	循环体;
}

(3)do-while语句
一般形式:

do{
    
    
	循环体;
}while(条件表达式)

注意这里while()结束有“;”
(4)for语句
一般形式:
for(表达式1 ; 表达式2 ;表达式3)语句
具体内容为:
for(循环变量赋初值 ; 循环条件 ;循环变量递增/递减(改变))语句
改写为while循环形式为:

表达式1while(表达式2){
    
    
	语句;
	表达式3}

for语句的执行过程:
1)先求解表达式1
2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面3)步,若其值为假,则结束循环,转到5)步
3)求解表达式3
4)转回上面第2)步继续执行
5)循环结束,执行for语句下面的程序

for语句说明
1)for循环中的“表达式1(循环变量赋初值)”,“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,都可以缺省,但“:”不能缺省。
2)省略了“表达式1(循环变量赋初值)”,表示不对循环控制变量赋初值(可能在循环外定义时已经赋值)。
3)省略了“表达式2(循环条件)”,若不做其它处理时便成为死循环。
4)省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。
5)表示式1和表达式3 可以是一个简单表达式也可以是逗号表达式
6)表达式 2一般是关系表达式或逻辑表达式,也可以是数值表达式或字符表达式,只要其值非0,就执行循环体。

几种循环比较
1)四种循环都可以用来处理同一个问题,一般可以互相代替。但一般不用goto型循环
2)while和do-while循环,循环体中应包含使循环趋于结束的语句。for语句功能最强
3)用while和do-while循环时,循环变量初始化操作应在while和do-while语句之前完成,而for语句一般在表达式1中实现循环变量的初始化。

5.3 循环嵌套

循环嵌套:一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
几种形式:
(1)

while(){
    
    
	...while(){
    
    
		...;
	}
}		

(2)

while(){
    
    
	...;
	do{
    
    
	...;
	}while();
	...;
}

(3)

for(;;){
    
    
	for(;;){
    
    
		...;
	}
}

5.4 break语句和continue语句

5.4.1 break

break语句:不能用于循环语句和switch语句之外的任何其它语句,跳出一个循环体或者完全结束一个循环。

while(表达式1){
    
    
	...;
	if(表达式2) break;
	...;
}

在这里插入图片描述

5.4.2 continue

continue语句:只能在循环语句中使用,跳过循环体中剩余的语句而强行执行下一次循环,可以理解为只是中止(跳过)本次循环,接着开始下一次循环。

while(表达式1){
    
    
	...;
	if(表达式2)continue;
	...;
}

在这里插入图片描述

5.5 程序举例

1.用switch语句1~100求和

#include <stdio.h>
int main()
{
    
    
	int i, sum = 0;
	i = 1;
	while(i <= 100){
    
    
		sum = sum + i;
		i++;
	} 
	printf("%d\n", sum);
}

2.用do-while语句1~100求和

#include <stdio.h>
int main()
{
    
    
	int i, sum = 0;
	i = 1;
	do {
    
    
		sum = sum + i;
		i++;
	} while(i <= 100);
	printf("%d\n", sum);
}

3.用公式π/4 = 1-1/3+1/5-1/7+…求π

#include <stdio.h>
#include <math.h>
int main()
{
    
    
	int s;
	float n, t, pi;
	t = 1, pi = 0, n = 1.0, s = 1;  
	while(fabs(t) > 1e-6){
    
         // 当某一项绝对值小于等于10的-6次方时停止 
		pi = pi + t;			//累加项数 
		n = n + 2;				//分母+2 
		s = -s;					//分子取反 
		t = s/n;				//求出下一项 
	}
	pi = pi * 4;				//循环得到的是π/4 
	printf("pi=%10.6f\n", pi);
}

4.求Fibonacci(斐波那契)数列40个数
数列特点:第一,二个数为1,1。从第三个数开始,该数是前面两个数之和。

#include <stdio.h>
int main()
{
    
    
	long f1, f2;
	int i;
	f1 = 1, f2 = 1;
	for(i = 1; i < 20; i++){
    
    
		printf("%10d%10d", f1, f2);
		f1 = f1 + f2;
		f2 = f2 + f1;
	} 
}

5.判断m是否为素数
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
0和1既不是质数也不是合数,最小的质数是2

#include <stdio.h>
#include <math.h>
int main()
{
    
    
	int m, i, k;
	scanf("%d", &m);
	k = sqrt(m); //对m开根号
	for(i = 2; i <= k; i++){
    
    
		if(m % i == 0) break;
	}
	if(i >= k+1) printf("%d is a prime number\n", m);
	else  printf("%d is not a prime number\n", m);
	//m 只需被 2 ~ k+1之间的每一个整数去除就可以
	//如果 m 不能被 2 ~k+1  间任一整数整除,m 必定是素数
	// 原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于√m,
	//另一个大于或等于√m
}

猜你喜欢

转载自blog.csdn.net/qq_43310387/article/details/123957005