C语言

07-流程控制

2020-05-29  本文已影响0人  Andy_Livings

一、流程控制

二、选择结构-if

1.简单使用
 if (表达式)  语句1; 
 if(count>50)  开班;  上课;
if(表达式)  语句1;  else 语句2;
if(count>50)  开班;  else 不开班;
if(表达式)  {  }
if(count>50)  {开班; 布置课室;}  else {}
{ }的作用域
if -else if-else
if(a==0) else if (a>0)  else 
if(a!=0)  { a不是0;} else {a是0;}
if (a); {  }
if (a=0)  
a == 0;
if (10) int a = 9;
2.习题

1>输入一个整数day代表星期几,根据day的值输出对应的星期几,比如day==1,就输出“星期一”

2>输入一个整数month代表月份,根据月份输出对应的季节。
春季:3、4、5
夏季:6、7、8
秋季:9、10、11
冬季:12、1、2

3>输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
A:90~100
B:80~89
C:70~79
D:60~69
E:0~60

三、选择结构-switch

1.简单使用
switch(表达式) { case 数值1: break; … default: break;}
int a = 10;
 switch (a) {
     case 0:
         printf("这是一个0");
         break;
     case 5:
         printf("这是一个5");
         break;
     case 10:
         printf("这是一个10");
         break;
     default:
         printf("什么也不是");
         break;
 }
2.if和switch的对比
3.习题

用switch替代if实现if中的习题

四、循环结构-while

1.简单使用
连续printf(“俯卧撑”)20次;
while(表达式) { }
continue:输出5次休息一下
break的使用:某次的时候停止循环
2.特点

只有条件成立才会执行循环体

3.陷阱
while(条件);

五、循环结构-do while

int i=0;
while(i<0){
 i++;
}
int i=0;
do{
 i++;
} while(i<0);

六、循环结构-for

1.简单实用
2.for循环嵌套

好友列表1
好友1
好友2
好友列表2
好友1
好友2
好友列表3
好友1
好友2

3.陷阱

1>死循环 for(;;);
2>for循环体内部变量的作用域
3>作用域混淆

for (int i = 0; i<5; i++)  int a = 10;
4.while循环和for循环的比较

七、break和continue

1.break
2.continue

八、总结

一、选择结构
1.if
1> 结构
if (条件) {

} else if (条件2) {

} else if (条件3) {

} else {
    
}

2> 特点
* 同一时刻,只有一个大括号里面的代码会被执行

2.switch
1> 结构
switch (数值) {
    case 数值1:
        break;
    
    case 数值2:
        break;
    
    case 数值3:
        break;
    
    default:
        break;
}
2> 特点
1> 默认情况下,只有一个case后面的代码会被执行
2> 如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止
3> 如果要在case后面定义一个新的变量,必须用大括号{}包住

二、循环结构
1.while
1> 特点:如果一开始条件不成立,永远不会执行循环体
2.do while
1> 特点:不管条件是否成立,至少会执行一次循环体
3.for
4.选择
1> 一般优先使用for循环
2> 然后再考虑while
3> 最后再考虑do while



九、程序实现

01- if

void if_practice(void) {
    
    /*
     1.if的第1种结构
     if(条件) {
     语句1;
     语句2;
     ......
     }
     
     2.if的第2种结构
     if(条件1) {
     语句1;
     语句2;
     ......
     } else {
     
     }
     
     3.if的第3种结构
     if(条件1) {
     语句1;
     语句2;
     ......
     } else if (条件2) {
     
     } else if(条件3) {
     
     } else if(条件4) {
     
     }  else
     {
     
     }
     
     4.if的第4种结构
     if (条件)
     语句1;
     */
    
    int a = -10;
    
    if (a>1)
        printf("A\n");
    
    printf("B\n");
}

02-if使用注意

void note_if_usage(void) {
    
    /*
     if (0) {
     printf("A\n");
     } else {
     printf("B\n");
     }
     */
    
    /*
     int a = 1044343;
     比较大小时,常量值放左边,变量放右边
     //if (a = 0)
     if (0 == a) {
     printf("a等于0\n");
     } else {
     printf("a不等于0\n");
     }
     */
    
    /*
     int a = 10;
     // 注意赋值运算符,不要写成两个=
     a = 15;
     printf("%d\n", a);
     */
    
    /* if语句后面不要写;
     if ( 5>6 );
     {
     printf("A\n");
     }
     */
    
    /*
     if (10 > 6) {
     int a = 5;
     }
     printf("%d\n", a);
     */
    
    /*
    // 下面的代码是错误的:作用域不明确
    if (10 > 6)
        int a = 5;
    // 如果要在if后面的语句中定义新的变量,必须用大括号{}
    //printf("%d\n", a);
     */
    
    /*
     书写格式
     int a = 10;
     if (a>10) {
     
     } else if (a>5) {
     
     } else {
     
     }
     
     if () {
     
     } else if ()
     {
     
     } else {
     
     }
     */
}

03-if练习

void if_practice_practice(void) {
    
    /*
     输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
     A:90~100
     B:80~89
     C:70~79
     D:60~69
     E:0~60
     */
    
    // 1.提示输入
    printf("请输入分数值:\n");
    
    // 2.接收输入
    int score;
    scanf("%d", &score);
    
    // 3.判断等级 (性能最高)
    if (score >= 90 && score <= 100) { // [90, 100]
        printf("A\n");
    } else if (score >= 80) { // [80, 89]
        printf("B\n");
    } else if (score >= 70) { // [70, 79]
        printf("C\n");
    } else if (score >= 60) { // [60, 69]
        printf("D\n");
    } else { // (-∞, 59]
        printf("E\n");
    }
    
    /* 性能中等
     if (score >= 90 && score <= 100) { // [90, 100]
     printf("A\n");
     } else if (score >= 80 && score <= 89) { // [80, 89]
     printf("B\n");
     } else if (score >= 70 && score <= 79) { // [70, 79]
     printf("C\n");
     } else if (score >= 60 && score <= 69) { // [60, 69]
     printf("D\n");
     } else { // (-∞, 59]
     printf("E\n");
     }
     */
    
    /* 性能最差
     if (score >= 90 && score <= 100) { // [90, 100]
     printf("A\n");
     }
     
     if (score >= 80 && score <= 89) { // [80, 89]
     printf("B\n");
     }
     
     if (score >= 70 && score <= 79) { // [70, 79]
     printf("C\n");
     }
     
     if (score >= 60 && score <= 69) { // [60, 69]
     printf("D\n");
     }
     
     if (score <= 59) { // (-∞, 59]
     printf("E\n");
     }
     */
}

04-switch

void switch_practice(void) {
    
    /*
     if (条件) {
     
     }
     
     switch (数值) {
     case 数值1:
     语句1;
     break;
     
     case 数值2:
     语句2;
     break;
     
     default :
     语句3;
     break;
     }
     */
    
    //int a = 10;
    // break:退出整个switch语句
    // 如果case后面没有break,就会执行后面所有case中的语句,直到遇到break为止
    /*
     int b = 10;
     
     switch (a) {
     case 10:
     printf("A\n");
     b++;
     case 5:
     printf("B\n");
     b++;
     case 0:
     printf("C\n");
     b++;
     break;
     default:
     printf("D\n");
     break;
     }
     
     printf("b的值是%d\n", b);*/
    
    char c = '+';
    int a = 10;
    int b = 20;
    // 如果要在case后面定义新的变量,必须用大括号{}包住
    switch (c) {
        case '+':
        {
            int sum = a + b;
            printf("和是%d\n", sum);
            break;
        }
            
        case '-':
        {
            int minus = a - b;
            printf("差是%d\n", minus);
            break;
        }
    }
}

05-switch练习

void switch_practice_practice(void) {
    
    /*
     输入一个整数score代表分数,根据分数输出等级(A-E)(用两种方式)
     A:90~100 score/10 == 9、10
     B:80~89  score/10 == 8
     C:70~79  score/10 == 7
     D:60~69  score/10 == 6
     E:0~60
     */
    
    int score = 100;
    
    switch (score/10) {
        case 10: // 100
        case 9: // 90+
            printf("A\n");
            break;
        case 8: // 80+
            printf("B\n");
            break;
        case 7: // 70+
            printf("C\n");
            break;
        case 6: // 60+
            printf("D\n");
            break;
        default:
            printf("E\n");
            break;
    }
    
    
    /*
     if和switch
     1> if语句能完成的功能,switch并不一定能完成
     int a = 10;
     if (a>100) {
     
     }
     
     2> 在有些情况下,if语句和switch语句可以互换
     3> switch能完成的功能,if语句都能完成
     */
}

06-while

void while_practice(void) {
    
    /*
     if (条件) {
     
     }
     
     while (条件) {
     循环体
     }
     
     运行原理
     1.如果一开始条件就不成立,永远不会执行循环体
     2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......
     
     break
     直接结束整个while循环
     
     continue
     结束当前的循环体,进入下一次循环体的执行
     */
    
    
    // 1.先确定需要重复执行的操作
    // 2.再确定约束条件
    
    // 定义一个变量记录做的次数
    int count = 0;
    
    /*
    while (count < 50) {
        ++count;
        
        if (count%10 != 0) {
            printf("执行第%d次循环操作\n", count);
        }
    }
     */
    
    /*
    while (count < 50) {
        ++count;
        
        if (count%10 == 0) {
            // 直接结束这一次循环体,进入下一次循环
            continue;
        }
        
        printf("执行第%d次循环操作\n", count);
    }
     */
    
    while (count < 50) {
        ++count;
        
        printf("执行第%d次循环操作\n", count);
        
        if (count == 20) {
            break;
        }
    }
    
}

07-while练习_01

int while_practice_01(void) {
    
    // 提示用户输入一个正整数n,计算1+2+3+…+n的和
    
    // 1.提示输入
    printf("请输入一个正整数:\n");
    
    // 2.接收输入
    // 定义变量保存用户输入的整数
    int n;
    scanf("%d", &n);
    
    if (n <= 0) {
        printf("非法输入\n");
        return 0;
    }
    
    // 3.计算
    // (1 + n) * n / 2;
    // 定义变量保存和
    int sum = 0;
    int number = 0; // 默认被加的数值
    
    while (number < n) {
        number++;
        sum += number; // 累加
    }
    
    printf("%d\n", sum);
    
    return 0;
}

08-while练习_02

int while_practice_02(void) {
    
    // 提示用户输入一个正整数n,计算1+2+3+…+n的和
    
    // 定义变量保存用户输入的整数
    int n = 0; // 一定要初始化
    
    while (n <= 0) {
        // 1.提示输入
        printf("请输入一个正整数:\n");
        
        // 2.接收输入
        scanf("%d", &n);
    }
    
    // 3.计算
    // (1 + n) * n / 2;
    // 定义变量保存和
    int sum = 0;
    int number = 0; // 默认被加的数值
    while (number < n) {
        number++;
        sum += number; // 累加
    }
    
    printf("%d\n", sum);
    return 0;
}

09-while练习_03

void while_practice_03(void) {
    
    // 计算1~100中所有3的倍数的个数
    // 记录3的倍数的个数
    int count = 0;
    
    // 记录当前检查的数值
    int number = 0;
    
    while (number < 100) {
        number++;
        
        // 说明number是3的倍数
        if (number%3 == 0) {
            count++;
        }
    }
    
    printf("1~100内3的倍数的个数:%d\n", count);
}

10-while注意点

void while_attention(void) {
    
    /*
     while (10) {
     printf("哈哈哈哈\n");
     }
     */
    
    /*
     int a = 10;
     // while (a > 0); 死循环
     while (a>0) {
     a--;
     printf("哈哈哈\n");
     }
     */
    
    // 最简单的死循环
    //while(1);
}

11-do-while

void do_while_practice(void) {
    
    /*
     while (条件) {
     
     }
     
     do {
     
     } while(条件);
     
     while和do-while的区别
     1.很多情况下,while和do while可以互换
     
     2.while特点:如果一开始的条件不成立,永远不会执行循环体
     do while特点:不管一开始的条件是否成立,至少会执行一次循环体
     
     3.最好使用while
     */
    
    int i = 0;
    
    /*
     while (i<0) {
     i++;
     }
     */
    
    do {
        i++;
    } while (i < 0);
    
    printf("i = %d\n", i);
}

12-for

void for_practice(void) {
    
    /*
     for (语句1; 条件; 语句2) {
     循环体
     }
     
     语句1:初始化语句
     语句2:增量语句(执行完循环体后再执行的语句)
     
     1.for一开始就会执行一次语句1(整个for循环只会执行一次)
     2.判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立
     */
    
    /*
     "做俯卧撑"50次
     */
    /*
     int count = 0;
     
     for ( ; count < 50; ) {
     printf("做俯卧撑\n");
     count++;
     }
     */
    
    /*
     for (int count = 0; count < 50; ) {
     printf("做俯卧撑\n");
     count++;
     }
     */
    
    /*
     for (int count = 0; count < 50; count++) {
     printf("做俯卧撑\n");
     }
     */
    
    /*
     for (int count = 0; count < 50; printf("做俯卧撑\n"),printf("哈哈哈\n"),count++) {
     
     }
     */
}

13-for使用注意

void for_usage_note(void) {
    
    /* 不要随便在for()后面写分号
     for (int i=0; i<5; i++);
     {
     printf("哈哈\n");
     }
     */
    
    /* 错误:变量a的作用域不明确
     如果要在循环体中定义新的变量,必须用大括号{}包住
     for (int i=0; i<5; i++)
     
     int a = 10;
     */
    
    /* 错误
     for (int i = 0; i < 10; i++, a++)
     {
     // a只能用在循环体{}中
     int a = 10;
     }
     */
    
    /*
     int a = 10;
     
     for (int i=0, a= 9; i<5; i++) {
     //int i = 10;
     int a = 11;
     
     printf("a = %d\n", a);
     }
     */
    
    // 最简单的利用for循环实现死循环
    // for(;;);
}

14-for循环嵌套

void for_loops_nested(void) {
    
    /*
     好友列表1
     好友1
     好友2
     好友列表2
     好友1
     好友2
     好友列表3
     好友1
     好友2
     */
    
    for (int i = 1; i <= 4; i++) {
        //printf("好友列表%d\n", i + 1);
        printf("好友列表%d\n", i);
        
        /*
         printf("    好友1\n");
         printf("    好友2\n");
         printf("    好友3\n");
         printf("    好友4\n");
         printf("    好友5\n");*/
        
        for (int j = 1; j <= 7; j++) {
            printf("    好友%d\n", j);
        }
    }
}

15-for循环嵌套练习

void for_loops_nested_practice(void) {
    
    /*
     提示用户输入一个正整数n,如果n=5,就输出下列图形,其他n值以此类推
     *****
     ****
     ***
     **
     *
     */
    
    // 1.定义一个变量存储用户输入的值
    int n = 0; // 一定要初始化
    
    // 2.判断n值合不合理
    while (n <= 0) {
        // 2.1 提示用户输入正整数
        printf("请输入一个正整数:\n");
        
        // 2.2 接收输入的数据
        scanf("%d", &n);
    }
    
    // 3.输出图形
    for (int i = 0; i < n; i++) { // 有多少行
        //printf("*****\n");
        for (int j = 0; j < n-i; j++) { // 每一行有多少个
            printf("*");
        }
        
        printf("\n");
    }
}

16-输出九九乘法表

void output_multiplication_table(void) {
    
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            
            printf("%d * %d = %2d  ", i, j, i * j);
        }
        printf("\n");
    }
}

17-break和continue

void break_and_continue(void) {
    
    /*
     break:
     1.使用场合
     1> switch语句:退出整个switch语句
     2> 循环结构:退出整个循环语句
     * while
     * do while
     * for
     2.注意点
     只对最近的循环结构有效
     
     continue:
     1.使用场合
     循环结构:结束当前这次的循环体,进入下一次循环体
     * while
     * do while
     * for
     2.注意点
     只对最近的循环结构有效
     */
    
    /*
    for (int i = 0; i < 5; i++) {
//        printf("%d\n", i);
        
        if (i % 2) {
            // i为奇数:1、3
            printf("奇数:%d\n", i);
            continue;
        }
    }
     */
    
    /*
    for (int i = 0; i < 5; i++) {
        
        printf("哈哈哈\n");
        continue;
        printf("哈哈哈23\n");
    }
     */
    
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            if (j == 1) {
                break;
            }
            
            printf("A\n");
        }
        
        break;
        
        printf("B\n");
    }
    
}

18-提示用户输入一个正整数n,利用while循环计算并输出:1-2+3-4+5-6+7…+n的和

void while_loop_to_calculate_and_output(void) {
    
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为正整数
    while (n <= 0) {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.计算阶乘
    int sum = 0; // 存储计算结果
    int current = 0; // 当前要累加的数值
    while (current < n) {
        current++;
        
        // 如果是偶数,就减
        if (current % 2 == 0) {
            sum -= current;
        } else { // 如果是奇数,就加
            sum += current;
        }
    }
    
    // 4.输出结果
    printf("%d\n", sum);
}

19-提示用户输入一个正整数n,计算并输出n的阶乘结果:123n

void calculate_and_output_n_factorial_results(void) {
    
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为正整数
    while (n <= 0) {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.计算阶乘
    int result = 1; // 存储计算结果
    int current = 1; // 当前的乘数
    while (current <= n) {
        result *= current; // 累乘每次的乘数
        current++; // 乘完一次就++
    }
    
    // 4.输出阶乘结果
    printf("%d! = %d\n", n, result);
}

20-提示用户输入一个正整数n,如果n是5,就输出下列图形,其他n值以此类推

/*
 *
 **
 ***
 ****
 *****
 */
void following_graph_is_output(void) {
    
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为正整数
    while (n <= 0) {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.输出一条分隔线(跟用户的输入隔开)
    printf("-----------------\n");
    
    // 4.输出*
    for (int row = 1; row <= n; row++) { // 有多少行
        for (int col = 1; col <= row; col++) { // 每行多少个(每行的个数跟行号一样)
            printf("*");
        }
        // 输完一行后换行
        printf("\n");
    }
}

21-提示用户输入一个小于10的正整数n,如果n是5,就输出下列图形,其他n值以此类推

/*
 1
 22
 333
 4444
 55555
 */
void positive_integer_n_less_than_10_1(void) {
    
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为1~9的正整数
    while (n <= 0 || n >= 10) {
        // 2.1 提示输入
        printf("输入一个1~9的正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.输出一条分隔线(跟用户的输入隔开)
    printf("-----------------\n");
    
    // 4.输出
    for (int row = 1; row<=n; row++) { // 有多少行
        for (int col = 1; col<=row; col++) { // 每行多少个
            printf("%d", row); // 输出行号
        }
        printf("\n");
    }
}

22-提示用户输入一个小于10的正整数n,如果n是5,就输出下列图形,其他n值以此类推

/*
 54321
 5432
 543
 54
 5
 */
void positive_integer_n_less_than_10_2(void) {
    
    // 1.定义变量存储用户输入的整数
    int n = 0;
    
    // 2.判断n是否为1~9的正整数
    while (n <= 0 || n >= 10) {
        // 2.1 提示输入
        printf("输入一个1~9的正整数:\n");
        
        // 2.2 让用户输入
        scanf("%d", &n);
    }
    
    // 3.输出一条分隔线(跟用户的输入隔开)
    printf("-----------------\n");
    
    // 4.输出
    for (int row = 1; row <= n; row++) { // 有多少行
        for (int col = n; col >= row; col--) { // 每行多少个
            printf("%d", col);
        }
        printf("\n");
    }
}

23-编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n >= 1)。

// 比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9

// 声明函数
int pieAdd(int n);

void function_int_pie_add(void) {
    
    int result = pieAdd(3);
    
    printf("%d\n", result);
}

// 定义函数
int pieAdd(int n) {
    /*
     解题思路:先计算出每个数字的阶乘,再把所有的阶乘加起来
     */
    
    // 1.如果传入的n值不合理,直接返回0
    if (n < 1) return 0;
    
    // 2.定义一个变量,用来记录每次阶乘相加的结果
    int sum = 0;
    
    for (int i = 1; i <= n; i++) { // 一共有多少个数字
        
        // 3.定义一个变量,记录当前数字对应的阶乘
        int multi = 1;
        for (int j = 1; j <= i; j++) {
            multi *= j;
        }
        
        // 4.累加每次的阶乘
        sum += multi;
    }
    
    return sum;
}
上一篇下一篇

猜你喜欢

热点阅读