C语言学习笔记之循环

C语言学习笔记:循环

0. 摘要

本文主要内容围绕C语言的循环结构展开(如果满足某些条件就重复执行语句序列),包括while循环、for循环的基本用法,不同循环的特点以及在实际运用中如何选择使用哪一种循环。文章最后,会给出运用循环结构解决问题的经典程序。

1.while循环

计算机的功能之一便是替代人类完成重复计算的工作。在C语言中,提供多种方式进行重复计算,while循环是其中之一。

while循环具体有两种语句实现:

  • 入口条件循环:while(){…}

  • 出口条件循环:do{…}while()

1.1入口条件循环:while语句

程序基本原理如图所示:
在这里插入图片描述
while语句的通用形式如下:

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

程序运行到while时,会先检查()内的条件是否满足,若不满足则会跳过循环,若满足则会进入循环,依次执行{}块中语句(也可以是紧跟while的,以分号;结尾的简单语句)。当{}中的语句均执行完,程序会返回while入口再次检查是否满足()中的测试条件。

  • 测试条件可以是简单的逻辑判断语句,也可以是符合语句,甚至可以是赋值语句。

    因为条件测试的条件只是判断语句的“真”或“假”,语句为真则执行while循环体中的语句。

  • while循环是入口条件循环,即必须满足条件才换进入循环体。

    循环体指while语句,do语句或for语句所循环的所有语句。

  • while循环的测试条件至少判断一次。

  • 每次循环被叫做是一次迭代。

  • 终止循环很重要!
    在设计循环的时候,我们要考虑让测试条件的表达式最终为假,从而跳出循环,否则,将会是一个死循环。

1.2出口条件循环:do while

程序基本原理如图所示:
在这里插入图片描述
do语句的通用形式如下:

do{
	语句1;
	语句2;
	···
}while(测试条件);	//do语句的while后面需要加分号

程序运行到do时,会先进入循环体,依次执行{}块中语句(也可以是以分号;结尾的简单语句),然后检查()内的条件是否满足,从而决定是否会再次执行循环体中的内容。

  • do语句可以确保该循坏至少被执行一次。
  • 由于do语句的特性,在设计程序时要注意循环体中的语句与测试条件的关系,时刻牢记:循环体会先被执行一次然后才到while中验证测试条件!

2.for循环

某种程度上,for循环是while循环的升级版。for循环吧初始化、测试和更新三个状态组合在一起,因此合理使用for语句实现循环,可以让程序更加简洁、易读。

for语句的通用形式如下:

for(初始化;测试条件;出口处理){
	语句1;
	语句2;
	···
}

关键字for后面的()中,有3个表达式,两两被分号隔开.它们被叫做控制表达式,均为完整的表达式。

  • 第1个表达式使循环初始化。该表达式只会在进入for循环之前执行一次
  • 第2个表达式是循环的测试条件,判断其值,从而决定是否会进入循环。
  • 第3个表达式在循环体结束后,进行处理。为下一次循环更新条件。

程序基本原理如图所示:
在这里插入图片描述
for语句与while语句一样都是入口条件循环,由于for语句的特性,也可以使用while语句达到相同的效果。例如,以下伪代码表示的for循环与while循环等价:

//while循环
语句1;
while(语句2){
	···
	语句3;
}
//for循环
for(语句1;语句2;语句3){
	···
}

3.break语句

在设计程序时,有时虽然满足循环条件但是仍然需要跳出循环,这时就可以使用break语句。

  • 在循环中执行break语句,会使程序跳出循环。
  • 如果在多重循环中执行break语句,仅仅会跳出内侧的循环语句,而不是直接跳出所有的循环。

4.continue语句

有时在满足特定条件的情况下,我们希望跳过循环体的一部分,直接进行下一次迭代,从而提高程序的执行效率,此时我们就可以使用continue语句。

  • 执行continue语句后,在continue之后的语句都不会执行,直接到循环的条件检测。
  • 在多重循环中,continue同样只能在它所在的循环中发挥作用。

5.如何选择循环

  1. 明确需要入口条件循环还是出口条件循环。如果是需要出口条件循环,那么只能选择do语句。

    入口条件循环使用得较多,一个是因为其可读性更高,其次更加符合实际应用。

  2. 对于入口条件循环的选择,for语句与while语句都可以,主要取决于个人喜好。上文也提到,for语句有对应的while语句等价。

    一般而言,当循环需要初始化一些条件,或者在一次迭代之后需要更新一些条件,那么for语句更好,这会使程序的可读性更高;其他情况下用while语句就更适合。

6.循环相关经典程序

6.1打印乘法表

#include<stdio.h>

#define N 9

 

int main() {

	int i, j;   //i控制行,j控制列
 
	for (i = 0; i < N; i++) {

		for (j = 0; j < i+1; j++)
            
            printf("%d*%d=%2d ", j + 1, i + 1, (j + 1) * (i + 1));
        
        printf("\n");

	}

	return 0;

}
输出示例:
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

6.2打印正方形

#include<stdio.h>

int main(){
    int n;	//n为正方形的边长
    scanf("%d",&n);
    int i,j;	//i控制行,j控制列;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++)
            printf("* ");
        printf("\n");
    }
    
    return 0;
}
输入:4
输出:
* * * *
* * * *
* * * *
* * * *

6.3打印等腰直角三角形

#include <stdio.h>

int main() {
    int n;
    scanf("%d",&n);
    int i,j;
    for(i=0;i<N;i++){
    	for(j=0;j<i+1;j++)
            printf("* ");
        printf("\n");
    }
    return 0;
}
输入:4
输出:
*
* *
* * *
* * * *

6.4打印金字塔形

#include<stdio.h>

int main(){
    int n;
    scanf("%d",&n);
    int i,j,k;
    for(i=0;i<N;i++){
    	for(j=0;j<N-i-1;j++)
        	printf(" ");
        for(k=0;k<i+1;k++)
            printf("* ");
        printf("\n");
    }
    
    return 0;
        
}
输入:3
输出:
   * 
  * * 
 * * * 
* * * * 
  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值