尹维利

导航

流程控制

1掌握循环结构语句

前面的章节一直在介绍C语言的基本语法知识,然而仅仅依靠这些语法知识还不能编写出完整的程序。在程序中,通常需要加入业务逻辑,并对程序的流程进行控制。本章将重点讲解C语言中最基本的三种流程控制语句。程序都有一个共同的特点,即程序中的所有语句都是从上到下逐条执行,这样的程序结构叫做顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。

#include<stdio.h>
int main(){
     pirntf("我\n");
     pirntf("爱\n");
     pirntf("c\n");
     pirntf("语\n");
     pirntf("言\n");
      
   return 0;
}

使用了5个printf()语句,从上往下依次输出“我、爱、C、语、言”。从运行结果可以看出,程序是按照语句的先后顺序执行的。因此,可以说明该程序是一个顺序结构的程序。

2 if条件语句

f语句是指如果满足某种条件,就进行相应的处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”。这句话可以通过下面的一段伪代码来描述。

如果小明考试得了100分

​ 妈妈星期天带小明去游乐场

在上面的伪代码中,“如果”相当于C语言中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:

#include<stdio.h>
int main(){
    
    if(小明考试得了100分){//条件语句
    
    妈妈就带小明去游乐场}//代码块 
        
}

上述语法格式中,判断条件是一个布尔值(T/F),当判断条件为true时,{}中的执行语句才会被执行。

#include<stdio.h>
 int main(){
     int x=5;//声明变量x
     if(x<=10){
         x++;
     }
     printf("x=%d\n,x");
     return 0;
 }

定义了一个变量x,其初始值为5。在if语句的判断条件中判断x的值是否小于10,很明显条件成立,因此{}中的语句会被执行,变量x的值将进行自增。从运行结果可以看出,x的值已由原来的5变成了6。else语句***else语句**

3 if else语句

if…else语句是指如果满足某种条件,就进行相应的处理,否则就进行另一种处理。语法格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会被执行。当判断条件为false时,else后面{}中的执行语句2会被执行。

#include<stdio.h>
int main(){
    int num=19;
    if(num%2==0){//判断条件成立,num被2整除
    printf("num是一偶数\n");
    }
    eles{
       printf("是一个奇数\n"); 
    }
   return 0; 
}

变量num的值为19,模以2的结果为1,不等于0,判断条件不成立。因此会执行else后面{}中的语句,打印“num是一个奇数”

4 if else.. if else语句

if…else if…else语句用于对多个条件进行判断,从而进行多种不同的处理。

#include<stdio.h>
int main(){
   int grade=75;//定义学生的成绩 
    if(grade>=80){//满足条件grade>=80
        printf("该成绩优秀\n");
    }
    else if (grade>=70){//不满足80但满足70
        printf("该成绩良好\n");
    }
    else if (grade>=60){//同上
        printf("该成绩为中\n");
    }
    else{
        printf("该成绩为差\n");
    }
       return 0;
}

定义了学生成绩grade为75。它不满足第一个判断条件grade>=80,会执行第二个判断条件grade>=70,条件成立,因此会打印“该成绩的等级为良”。

5 switch条件语句

witch 条件语句也是一种很常用的选择语句,和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。

用于表示星期的数字

​ 如果等于1,则输出星期一

​ 如果等于2,则输出星期二

​ 如果等于3,则输出星期三

​ 如果等于4,则输出星期四

​ 如果等于5,则输出星期五

​ 如果等于6,则输出星期六

​ 如果等于7,则输出星期天

​ 如果不是1~7,则输出此数字为非法数字

在switch语句中switch关键字后面有一个表达式,case关键字后面有目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。witch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,就会执行相应case后的语句,否则执行default后的语句。关于switch语句中的break关键字将在后面的小节中做具体介绍,此处,初学者只需要知道break的作用是跳出switch语句即可。

#include<stdio.h>
int main(){
    int week=5;
    switch(week){
        case 1:printf("星期一");     
            break;
        case 2:printf("星期二");    
            break;
        case 3:printf("星期三");    
            break;
        case 4:printf("星期四");    
            break;
        case 5:printf("星期五");
            break;
        case 6:printf("星期六");
            break;
        case 7:printf("星期天");
            break;
        default:
            printf("输入的数字不正确");
            break;
            
    }  
        return 0;            
    }

由于变量week的值为5,整个switch语句判断的结果满足第19行的条件,因此打印“星期五”。程序中的default语句用于处理和前面的case都不匹配的情况,将第5行代码替换为int week = 8,再次运行程序,则会显示"输入的数字不正确"

循环结构语句

1 while循环语句

hile循环语句和上面小节讲到的条件判断语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会一直执行,直到条件不成立,while循环结束。

#include<stdio.h>
int main(){
    int x=1;//定义变量x,初始值为1
    while(x<=4){//循环条件
        printf("x=%d\n",x);//成立条件,打印x的值
        x++;//x进行自增
    }
    return 0;
 }

输出结果 x=1 x=2 x=3 x=4

x的初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此打印结果中x的值分别为1、2、3、4。值得注意的是,中的第6行代码用于在每次循环时改变变量x的值,直到循环条件不成立,如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。

2 do…while循环语句

do…while循环语句和while循环语句功能类似,二者的不同之处在于,while语句需要先判断循环条件,然后根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次大括号内的代码再判断循环条件,

#include<stdio.h>
int main(){
    int x=1;//定义变量x,初始值为1
    do{
        printf("x=%d\n",x);//成立条件,打印x的值
        x++;//x进行自增
    }
     while(x<=4)//循环条件
    return 0;
 }

运行结果一致,这说明do …while循环和while循环能实现同样的功能。然而在程序运行过程中,这两种语句还是有差别的。如果循环条件在循环语句开始时就不成立,那么while循环的循环体一次都不会执行,而do…while循环的循环体还是会执行一次。若将例中的循环条件x<=4改为x < 1,第二个会打印x=1,而第一个什么也不会打印。

3.for循环语

在上面的语法格式中,for关键字后面()中包括了初始化表达式、循环条件和操作表达式三部分内容,它们之间用“;”分隔,{}中的执行语句为循环体。

for(初始化表达式;循环条件;操作表达式)
{执行语句
}   
#include<stdio.h>
int main(){
    int i,sum=0;            //定义变量sum,用于记住累加的和
    for(int i=1;i<=4;i++){ //i的值会在1-4之间变化
    sum +=i;               //实现sum与1的累加
    }
    printf("sum=%d\n",sum);// 打印累加的值
    return 0;
}

输出结果为 10

变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”

4.循环嵌套

有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。在C语言中,while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,这当中最常见的就是在for循环中嵌套for循环

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

定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“”,每一行的“”个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:

第一步,在第4行代码中定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。

第二步,在第5行代码中将i初始化为1,条件i <= 9为true,程序将首次进入外层循环的循环体。

第三步,在第7行代码中将j初始化为1,由于此时i的值为1,条件j <= i为true,程序将首次进入内层循环的循环体,打印一个“*”。

第四步,执行第7行代码中内层循环的操作表达式j++,将j的值自增为2。

第五步,执行第7行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打印换行符。

第六步,执行第5行代码中外层循环的操作表达式i++,将i的值自增为2。

第七步,执行第5行代码中的判断条件i<=9,判断结果为true,程序将进入外层循环的循环体,继续执行内层循环。

第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打印换行符。

第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件i <= 9结果为false,外层循环结束,整个程序也就结束了。

5 跳转语句(break、goto、continue)

1 berak语句

在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。

#include<stdio.h>
int main (){
    int x=1;               //定义变量x,初始值为1
    while(x<=4){           //循环条件
      printf("x=%d\n",x);  //条件成立,打印x的值
        if(x==3){
           break; 
        }
        x++;               //x自增
    }
    return 0;
}

输出结果 x=1 x=2 x=3

通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。

2 goto 语句

当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。

#include<stdio.h>
int main(){
    
    int i, j;                   //定义变量 i j
    for(i=1;i<=9;i++){          //外层循环     
        for(j=1;j<=9;j++){      //内层循环
            if(i>4){            //判断i的值是否大于1
                goto end;       //跳至标识为end的语句
            }
            printf("*");        //输出*
        }
        printf("\n");           //换行
    }
    end; return 0;
    
}

在return语句前面增加了标记“end”。当i>4时,使用“goto end;”语句跳出外层循环。因此程序只打印了4行“*”。

3、continue语句

在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。

#include<stdio.h>
int main(){
  int sum =0;  
   for(int i=1;i<=100;i++){
       if(i%2==0){          //如果i是个偶数,执行if的代码
           continue;        //结束本次循环
       }
       sum +=i;             //实现sum和i的累加
   } 
    printf("sum=%d\n",sum);
      return 0;
}

输出结果 :2500

使用for循环让变量i的值在1100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1100之间所有奇数的和,打印“sum = 2500”。

posted on 2020-10-08 15:51  尹维利  阅读(113)  评论(0)    收藏  举报