• C语言之for while语句详解


    C语言之for while语句详解

    简介

    在上一篇博客中,我们了解了基本的两种分支结构,在这篇博客中我将介绍一下循环结构,包括whilefordo while

    1 while语句

    1.1while语句的格式

    while语句的格式如下:

    1 while(表达式)
    2      语句;
    
    • 1
    • 2

    while语句流程图如下:
    在这里插入图片描述
      ⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。

    1.2 while语句的实践

    练习1:在屏幕上打印1~100的数字

    #include 
    int main()
    {
    	int num = 1;
    	while (num <= 100)
    	{
    		printf("%d ", num);
    		num++;
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    练习2:输入一个正整数,逆序打印这个数
    例如:输入 3541 输出 1453
    思路:

    1. 一个数%上10,即可得到这个数的最后一个位数。如1234%10=4。
    2. 一个数/上10,即可将这个数的最后一位去掉。
      即可打印一下最低位然后删除最低位 重复1 2步直到这个数为0即可实现逆序打印

    代码实现如下:

    #include 
    int main()
    {
    	int num = 0;
    	scanf("%d", &num);
    	while (num)
    	{
    		printf("%d ", num % 10);//打印最低位的数
    		num /= 10;//删除最低位是数
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2 for

    2.1 for语句格式

    1 for(表达式1;表达式2;表达式3)
    2       语句;
    //表达式1为循环的初始化
    //表达式2为循环的判断
    //表达式3为循环的调整
    
    • 1
    • 2
    • 3
    • 4
    • 5

    for语句流程图如下:
    在这里插入图片描述
      ⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

    2.2 for循环的实践

    练习1:在屏幕上打印1~100的数字

    代码如下:

    #include 
    int main()
    {
    	int num = 0;
    	for (num = 1; num <= 100; num++)
    	{
    		printf("%d ", num);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    for和while之间的异同点
      for和while语句都有初始化,判断和循环这三个部分,但for语句的三个部分更为紧凑,便于后期的代码维护,若while语句中的代码量较大的时候,这三个部分会显得十分分散,不利于代码的可读。

    3 do while

    3.1 do while语句格式

    1 do
    2     语句;
    3 while(表达式);
    
    • 1
    • 2
    • 3

      forwhile语句都是先判断表达式,若表达式不为真,则不继续执行。而do while语句,无论表达式为真假都会执行一次,执行完一次后再判断表达式真假,是否重复执行。
    do while流程图如下:
    在这里插入图片描述
      在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
    结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
    所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。

    3.2 do while循环的实践

    练习1:在屏幕上打印1~100的数字

    #include 
    int main()
    {
    	int num = 1;
    	do
    	{
    		printf("%d ", num);
    		num++;
    	} while (num <= 100);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    练习2:输入一个数,判断这是个几位数
    例如:输入 5672 输出 4
    思路:
    上面提到一个数/10可以删除最低位,那么在删除的同时用个标志记录下,删除一次,标志加一

    代码实现如下:

    #include 
    int main()
    {
    	int flag = 0;
    	int num = 0;
    	scanf("%d", &num);
    	do
    	{
    		flag++;
    		num /= 10;
    	} while (num);
    	printf("%d\n", flag);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3 循环中break和continue

    在循环语句中,如果我达到了某种目标,我想让代码停下来就可以使用breakwhile
    break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
    ⾏。
    continue 的作⽤是跳过本次循环 continue 后边的代码,在 for 循环和 while 循环中有所
    差异的。

    3.1 while语句中的break和continue

    3.1.1break和continue举例

    在这里插入图片描述
      在上述代码中,打印1~10的代码中,我想让他打印到4就停止,我就可以在循环中加入一个判断,当num ==5的时候,代码就停止,利用break永久的终止循环。

    在这里插入图片描述
      在上述代码中出现了死循环,这是因为当num == 5时,continue终止了本次循环,同时跳过了num++代码的调整部分,使得每次num回到判断部分num始终小于10,再次下去又continue跳过了调整部分,使得代码出现死循环。因此我们应该合理的使用continue。

    do while语句中的break和continueh使用方法一样,故不作介绍

    3.2 for语句中的break和continue

    3.2.1break和continue举例

    在这里插入图片描述
    在for语句中,break用法与while语句一样,当num == 5时,永久终止本次循环,所以不会打印4之后的值。

    在这里插入图片描述

    在本次代码中,与while语句不同的是,continue只是跳过了num == 5时,continue后边的代码,故不会打印5,for语句的调整部分在上边,所以调整部分不会被跳过,故代码可以继续执行,不会进入死循环。

    4 循环的嵌套

    练习:打印100~200之间的素数
    思路:

    1. 素数又叫质数(prime number),有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
    2. 先产生100~200之间的素
    3. 要想知道n的素数,要用2~n-1的数试除n,也就需要生成
    4. 如果2~n-1之间有数字能整除n,则n不是素数,如果都不能整除,则n是素数
      代码实现:
    #include 
    int main()
    {
    	int i = 0;
    	int count = 0;
    	for (i = 100; i <= 200; i++) //生成100~200的数
    	{
    		int j = 0;
    		int flag = 1; //设置一个标志 1代表素数,0代表非素数
    		for (j = 2; j < i; j++) //生成2~i-1的数
    		{
    			if (i % j == 0) //判断是否为素数
    			{
    				flag = 0;
    				break;
    			}
    		}
    		if (flag == 1)
    		{
    			printf("%d ", i);//打印素数
    			count++; //打印一次+1
    		}
    	}
    	printf("\n%d", count); //100~200之间的素数
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    上面介绍了一种打印素数的方法,感兴趣的可以去打印素数的三种方法看看其他写法

    5 go to语句

     C 语言中的 goto 语句允许把控制无条件转移到同一函数内的被标记的语句。
    
    • 1

    应用:

    #include 
    int main()
    {
     printf("hehe\n");
     goto next:
     printf("haha\n");
     
    next:
     printf("跳过了haha的打印\n"); 
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

      注意:在任何编程语言中,都不建议使用 goto 语句。因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法

  • 相关阅读:
    关于技术面试思考
    在 HarmonyOS 上使用 ArkUI 实现计步器应用
    PMP真的有用吗?
    LeetCode 54. 螺旋矩阵
    diamond原理
    两数之和
    MySQL数据库用户管理
    解决聊天窗口的输入框高度变化,引起中间滚动内容的跳动问题
    Java虚拟机(JVM)面试专题(初级程序员P6)
    服务器质量不好会对网站造成的危害有哪些?
  • 原文地址:https://blog.csdn.net/qq_47386786/article/details/134484084