C语言学习笔记--C循环

C循环

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句限制性,接着是第二个语句,依次类推。
编程语言提供了更为复杂执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:
在这里插入图片描述

循环类型

C语言提供了一下几种循环类型。

循环类型描述
while循环当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
for循环多次执行一个语句序列,简化管理循环变量的代码。
do…while循环除了它是在循环主体结尾测试条件外,其他均与while语句类似
嵌套循环可以再while、for或do…while循环内使用一个或多个循环。

while循环

只要给定的条件为真,C语言中的while循环语句会重复执行一个目标语句。
C语言中while循环的语法

while(condition)
{
	statement(s);
}

在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。
condition可以是任意的表达式,当为任意非零值时都为true。当条件为true是执行循环。当条件为false时,退出循环,程序流将继续执行紧接着循环的下一条语句。
在这里插入图片描述
在这里,while循环的关键点是循环可能一次都不会执行。当条件为false时,会跳过循环主体,直接执行紧接着while循环的下一条语句。
实例

#include<stdio.h>
int main()
{
	//局部变量定义
	int a=10;
	//while循环执行
	while(a<20)
	{
		printf("a的值:%d\n",a);
		a++;
	}
	return 0;
}

当上面代码被编译和执行时,会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

for循环

for循环允许编写一个执行指定次数的循环控制结构。
C语言中for循环的语法

for(init;condition;increment)
{
	statement(s);
}

下面是for循环的控制流:

  1. init会首先被执行,且只会执行一次。这一步允许声明并初始化任何循环控制变量。也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着for循环的下一条语句。
  3. 在执行完for循环主体后,控制流会跳会上面的increment语句。该语句允许更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for循环终止。
    在这里插入图片描述
    实例
#include <stdio.h>
 
int main ()
{
   /* for 循环执行 */
   for( int a = 10; a < 20; a = a + 1 )
   {
      printf("a 的值: %d\n", a);
   }
 
   return 0;
}

当上面的代码被编译和执行时,会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

do…while循环

不想forwhile循环,它们是在循环头部测试循环条件。在C语言中,do…while循环是在循环的尾部检查它的条件。
do…while循环与while循环类似,但是do…while循环会确保至少执行一次循环。
C语言do…while循环的语法:

do
{
	statement(s);
}while(condition);

注意,条件表达式出现在循环的尾部,所以循环中的statement(s)会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的do,然后重新执行循环中的statement(s)。这个过程会不断重复,知道给定条件变为假为止。
在这里插入图片描述
实例

#include<stdio.h>
int main()
{
	//局部变量定义
	int a=10;
	//do循环执行
	do
	{
		printf("a的值:%d\n",a);
		a=a+1;
	}while(a<20);
	return 0;
}

当上面的代码被编译和执行时,会产生下列结果:

a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19

嵌套循环

C语言允许在一个循环内使用另一个循环。
C语言中嵌套for循环语句的语法:

for (initialization; condition; increment/decrement)
{
    statement(s);
    for (initialization; condition; increment/decrement)
    {
        statement(s);
        ... ... ...
    }
    ... ... ...
}

在这里插入图片描述
C语言中嵌套while循环语句的语法:

while (condition1)
{
    statement(s);
    while (condition2)
    {
        statement(s);
        ... ... ...
    }
    ... ... ...
}

在这里插入图片描述
C语言中嵌套do…while循环语句的语法:

do
{
    statement(s);
    do
    {
        statement(s);
        ... ... ...
    }while (condition2);
    ... ... ...
}while (condition1);

在这里插入图片描述
关于嵌套循环有一点值得注意,可以再任何类型的循环内嵌套其他任何类型的循环。比如,一个for循环可以嵌套在一个while循环内,反之亦然。
实例
下面程序使用了一个嵌套的for循环来查找2到100中的质数:
for循环实例

#include<stdio.h>
int main()
{
	//局部变量定义
	int i,j;
	for(i=2;i<100;i++)
	{
		for(j=2;j<=(i/j);j++)
			if(!(i%j)) break;//如果找到就不是质数
		if(j>(i/j))
		printf("%d是质数\n",i);
	}
	return 0;
}

当上面代码被编译和执行时,会产生下列结果:

2 是质数
3 是质数
5 是质数
7 是质数
11 是质数
13 是质数
17 是质数
19 是质数
23 是质数
29 是质数
31 是质数
37 是质数
41 是质数
43 是质数
47 是质数
53 是质数
59 是质数
61 是质数
67 是质数
71 是质数
73 是质数
79 是质数
83 是质数
89 是质数
97 是质数

while 嵌套实例

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

当上面的代码被编译和执行时,它会产生下列结果:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

do-while 嵌套实例

#include <stdio.h>
int main()
{
    int i=1,j;
    do
    {
        j=1;
        do
        {
            printf("*");
            j++;
        }while(j <= i);
        i++;
        printf("\n");
    }while(i <= 5);
    return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

*
**
***
****
*****

循环控制语句

循环控制语句改变代码的执行顺序。通过它可以实现代码的跳转。
C语言提供了下列的循环控制语句。

控制语句描述
break语句终止循环switch语句,程序流将继续执行紧接着循环或switch的下一条语句。
continue语句告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
goto语句将控制转移到被标记的语句。但是不建议在程序中使用goto语句

无限循环

如果条件永远不为假,则循环将变成无线循环。for循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,可以将某些条件表达式留空来构成一个无线循环。
实例

#include <stdio.h>
 
int main ()
{
   for( ; ; )
   {
      printf("该循环会永远执行下去!\n");
   }
   return 0;
}

当条件表达式不存在时,它被假设为真。也可以设置一个初始值和增量表达式,但是一般情况下,C程序员偏向于使用for( ; ; )结构来表示一个无限循环。
注意: 可以按Ctrl+C键终止一个无限循环。
举例
使用while,for分别输出1–100以内的所有的奇数和偶数的和:
使用while

#include  <stdio.h>

int main(){
    int  sum=0;
    int  num=1;
    int  sum2=0;
    int  num2=2;
    while(num<100){
        sum=sum+num;
        num=num+2;
    }
    printf("奇数和为:%d\n",sum);

    while(num2<=100){
        sum2=sum2+num2;
        num2=num2+2;
    }
    printf("偶数和为:%d\n",sum2);
}

使用for:

#include  <stdio.h>

int main(){

    int  sum=0;
    int sum2=0;
    int num,num2;
    for(num=1;num<100;num=num+2){
        sum=sum+num;
    }

    printf("奇数和%d\n",sum);
    for(num2=2;num2<=100;num2=num2+2){
        sum2=sum2+num2;
    }
    printf("偶数和%d\n",sum2);
}

用do…while求算术平方根:

#include <stdio.h>

double DoSqrt(double z){
    double a=1;
    double b=0;
    double c=0;
    do{
        if(b*b<z){
            b+=a;
        }
        else{
            c=b;
            b-=a;
            a/=10;
        }
    }while(a>0.000001);

    return (b+c)/2;
}

int main(){
    double x, y;
    printf("请输入一个数字:");
    scanf("%lf", &x);
    if(x<0){
        printf("输入错误。");
    } else {
        y=DoSqrt(x);
        printf("%g 的平方根为: %g.\n", x, y);
    }

    int z=1;
    do{
        main();
        z++;
    }while(z>10);

    return 0;
}

注意: 一定要注意 break 语句与 continue 语句的区别,前者是结束整个循环过程,后者这是结束本次循环。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值