C语言 - 第四、五章 - 选择结构 & 循环结构


C语言 - day2 - 选择结构/循环结构/break/continue/运算符/goto语句

选择结构 - if语句

  • 在C语言中选择结构主要由if语句实现的。
  • if语句中的表达式可以是关系表达式,逻辑表达式,数值表达式,其中最容易理解的是关系表达式。
  • 整个if语句可以写在多行上,也可以写在一行上。
  • 复合语句要用花括号括起来。
  • 在if语向中要对给定的条件进行检查,判定所给定的条件是否成立。判断的结果是一个逻辑值“是”或“否”。

if语句的一般形式(三种)(if)(if,else)(if,else if,else)

案例:

  • 帮你们的数学老师做一个按分数评级的程序:
  • 90分及以上:A
  • 80 ~90分:B
  • 70~80分:C
  • 60~70分:D
  • 低于60分:E
    实例:
#include<stdio.h>

int main(){
    int i;
    printf("请输入分数:\n");
    scanf("%d",&i);
    
    if(i>=90){
        printf("A\n");
    } 
    else if(i>=80 && i<90){
        printf("B\n");
    }
    else if(i>=70 && i<80){
            printf("C\n");
    }
    else if(i>=60 && i<70){
            printf("D\n");
    }
    else{
        printf("E\n");
    }
    return 0;
} 

选择结构 - switch语句(多分支选择语句)

  • 如果分支较多,则嵌套的if语句层数多,程序冗长而且可读性降低。C语言提供switch语句直接处理多分支选择。
  • switch语句是多分支选择语句。
  • switch语句的作用是根据表达式的值,使流程跳到不同的语句。
  • 注意:一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行。

switch语句的一般形式

  • default是可选的。(可有可无)

实例

#include<stdio.h>

int main(){
      char ch;
      printf("请输入成绩∶");
      scanf( "%c", &ch) ;
      
      switch (ch){
           case 'A': printf("你的成绩在90分以上!\n") ;
           break ;
           case 'B' : printf("你的成绩在80~90分之间\n"); 
        break;
           case 'C' : printf("你的成绩在70~80分之间\n"); 
        break;
        case 'D': printf("你的成绩在60~70分之间\n");
         break;
         case 'E': printf("你的成绩在60分以下\n"); 
         break;
         default: printf("请输入有效的成绩评级!\n"); 
         break;      
      }
      return 0;
} 

选择结构 - 分支结构的嵌套(书本上叫选择结构的嵌套)

案例:

实例

#include<stdio.h>

int main(){
    int a, b;
    printf("请输入两个数︰");
    scanf("%d %d", &a, &b );
    if (a != b){
        if (a > b){
            printf("%d > %d\n", a, b);
            }
            else{
            printf("%d < %d\n", a, b);
            }
    }
    else{
            printf("%d = %d\n", a, b);
        }
    
    return 0;
    
} 

if嵌套 - Bug - 悬挂else

循环结构 - while语句(入口条件循环)

  • 可以用while语句来实现循环结构
  • while后面的语句称为循环体
  • 循环体只能是一个语句,可以是一个简单的语句,还可以是复合语句(用花括号括起来的若干语句)。
  • 执行循环体的次数是由循环条件控制的,“表达式”也称为循环条件表达式。当此表达式的值为“真”(以非0值表示)时,就执行循环体语句;为“假”(以0表示)时,就不执行循环体语句。
  • while语句可简单地记为:只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。
  • 注意:while循环的特点是先判断条件表达式,后执行循环体语句。

while语句的一般形式

while(表达式)
     循环体

案例1:

实例1

#include<stdio.h>

int main(){
    int i=1,sum=0;
    while (i <= 100){
        sum = sum+ i;
        i = i +1;
    }
    printf("结果是: %d \n", sum) ;
        
    return 0;
} 

案例2:

实例2

#include<stdio.h>

int main(){
    int count = 0;
    printf("请输入一行英文字符:");
    while (getchar() != '\n')
    {
           count = count + 1;
    }
    printf("你总共输入了%d个字符! \n", count);
    return 0;
} 

do...while语句

  • do…while语句的执行过程是:先执行循环体,然后再检查条件是否成立,若成立,再执行循环体。这是和while语句的不同。
  • 注意:do…while语句的特点是,先无条件地执行循环体,然后判断循环条件是否成立。
  • 先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0(“假”)为止,此时循环结束。

do...while语句的一般形式

do
     循环体
while(表达式);

while和do...while语句 - 比较

循环基本结构

for语句

  • for语句灵活,不仅可以用于循环次数已经确定的情况,还可以用于循坏次数不确定而只给出循环结束条件的情况,完全可以替代while语句。

for语句的一般形式

for(表达式1;表达式2;表达式3)
    循环体

三个表达式用分号隔开

  • 表达式1是循环初始化表达式(只执行一次,可以为零个,一个或者多个变量设置初值)(如i=1)
  • 表达式2是循环条件表达式(用来判断是否继续循环)
  • 表达式3是循环调整表达式(循环的调整)

实例

#include<stdio.h>

int main(){
    int count;
    for (count =0; count < 10; count++){
    printf( "FIshC! \n");
    }
    return 0;
    
} 

案例

实例

#include<stdio.h>

int main(){
    int i, num;
    _Bool flag = 1;
    printf("请输入一个整数∶");
    scanf( "%d", &num);
    
    for (i = 2; i < num / 2; i++){
        if (num % i == 0){
            flag = 0;
        }
        if (flag){
            printf("%d是一个素数! \n", num);
        }
        else{
            printf( "%d不是一个素数\n", num);
        }
    
    return 0;    
} } 

灵活的for语句

  • 表达式1,表达式2和表达式3可以按照需要进行省略(但分号不能省)

C99新标准

  • C99允许在for语句的表达式1中定义变量
  • 例:for (int i =0; i<100;i++)

循环嵌套

  • 一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。
    内嵌的循环中还可以嵌套循环,这就是多层循环。
  • 3种循环(while循环、do…while循环和for循环)可以互相嵌套。
  • 以下几种都是合法的形式:

案例(九九乘法表)

实例

#include<stdio.h>

int main(){
    int i,j;
    for (i = 1; i <= 9; i++){
        for (j = 1; j <= i; j++){
            printf("%d*%d=%-2d", i, j,i* j);
            }
            putchar('\n');
    } 
    
    return 0;
    
} 

break语句

  • 用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。
  • 实际上,break语句还可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。

break语句的一般形式

break
  • 其作用是使流程跳到循环体之外,接着执行循环体下面的语句。
  • 注意:break语句只能用于循环语句和switch语句之中,而不能单独使用。

continue语句

  • 有时并不希望终止整个循环的操作,而只希望提前结束本次循环,而接着执行下次循环,这时可以用continue语句。

continue语句的一般形式

continue;
  • 其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,转到循环体结束点之前,接着执行for语句中的“表达式3”,然后进行下一次是否执行循环的判定。

运算符(在day1也有写一部分)

赋值运算符

  • 赋值运算符是C语言里面用的最多的一个运算符。
  • 赋值符号 “=” 就是赋值运算符,它的作用是将一个数据赋给一个变量。
  • 左值(lvalue)和右值(rvalue)

复合的赋值运算符

  • 在赋值符 “=” 前加上其他运算符,可以构成复合的运算符。
  • 如在“=”前加一个“+”运算符就成了复合运算符“+=”。

自增自减运算符(++)( - - )

  • ++i,--i (使用i之前,先使i的值加(减)1)
  • i++,i-- (使用i之后,使i的值加(减)1)
  • 自增(++)自减( - - )运算符 常用于循环语句中,也用于指针变量,使指针指向下一个地址。
  • 自增自减运算符只能作用于变量,而不能作用于常量或者表达式。

逗号运算符

  • for语句的表达式1和表达式3可以通过使用逗号运算符来初始化多个值 或者 调整多个循环变量。

逗号运算符的语法

  • 语法:表达式1,表达式2,...,表达式n
  • 逗号表达式的运算过程为从左往右逐个计算表达式
  • 逗号表达式作为一个整体学它的值为最后一个表达式(也即表达式n)的值。

逗号运算符的实例

条件运算符

  • 语法:exp1 ? exp2 : exp3;
  • exp1是条件表达式
  • 如果结果为真,返回exp2
  • 如果结果为假,返回exp3

goto语句

  • 语法:goto 标签;
  • 谨慎使用,甚至不要使用它。goto可能会破坏代码原有的逻辑。

注释

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - C语言 - 第四、五章 - 选择结构 & 循环结构


三二一的一的二