控制流程

LearningClanguage 条件语句, 循环语句 and 跳转语句

返回tutoriallist

1. 条件语句

1.1 if语句

if语句 is 最basic 条件语句, 用于根据条件执行不同 code块:

1.1.1 simple if语句

#include <stdio.h>

int main() {
    int age;
    printf("请输入你 年龄: ");
    scanf("%d", &age);
    
    if (age >= 18) {
        printf("你已经成年了!\n");
    }
    
    return 0;
}

1.1.2 if-else语句

#include <stdio.h>

int main() {
    int age;
    printf("请输入你 年龄: ");
    scanf("%d", &age);
    
    if (age >= 18) {
        printf("你已经成年了!\n");
    } else {
        printf("你还未成年!\n");
    }
    
    return 0;
}

1.1.3 if-else if-else语句

#include <stdio.h>

int main() {
    int score;
    printf("请输入你 分数: ");
    scanf("%d", &score);
    
    if (score >= 90) {
        printf("优秀!\n");
    } else if (score >= 80) {
        printf("良 good !\n");
    } else if (score >= 60) {
        printf("及格!\n");
    } else {
        printf("不及格!\n");
    }
    
    return 0;
}

1.2 switch语句

switch语句用于根据表达式 值选择执行不同 code块, 适用于 many 个条件 circumstances:

#include <stdio.h>

int main() {
    char grade;
    printf("请输入你 etc.级: ");
    scanf(" %c", &grade);
    
    switch (grade) {
        case 'A':
            printf("优秀!\n");
            break;
        case 'B':
            printf("良 good !\n");
            break;
        case 'C':
            printf("及格!\n");
            break;
        case 'D':
            printf("不及格!\n");
            break;
        default:
            printf("无效 etc.级!\n");
    }
    
    return 0;
}

注意: in switch语句in, 每个casebranch都需要usingbreak语句来跳出switchstructure, 否则会继续执行 under 一个casebranch code (称 for "穿透"现象) .

2. 循环语句

2.1 while循环

while循环用于 in 条件 for 真时重复执行code块:

#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    
    return 0;
}

2.2 do-while循环

do-while循环先执行一次code块, 然 after in 条件 for 真时重复执行:

#include <stdio.h>

int main() {
    int i = 1;
    do {
        printf("%d ", i);
        i++;
    } while (i <= 10);
    printf("\n");
    
    return 0;
}

注意: do-while循环至 few 会执行一次code块, 而while循环可能一次都不执行 (such as果条件一开始就 for fake) .

2.3 for循环

for循环 is 最常用 循环语句, 它将初始化, 条件判断 and iteration语句放 in 一起:

#include <stdio.h>

int main() {
    int i;
    for (i = 1; i <= 10; i++) {
        printf("%d ", i);
    }
    printf("\n");
    
    return 0;
}

2.3.1 for循环 变种

//  many 个variable for循环
for (int i = 0, j = 10; i < j; i++, j--) {
    printf("i = %d, j = %d\n", i, j);
}

// 空循环体
for (int i = 0; i < 10; printf("%d ", i++));

// 无限循环
for (;;) {
    printf("这 is a 无限循环!\n");
    // 需要usingbreak语句跳出循环
}

2.4 循环嵌套

循环可以嵌套using, 即一个循环 in 部package含另一个循环:

#include <stdio.h>

int main() {
    int i, j;
    
    // 打印九九乘法表
    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= i; j++) {
            printf("%d × %d = %d\t", j, i, i * j);
        }
        printf("\n");
    }
    
    return 0;
}

3. 跳转语句

3.1 break语句

break语句用于跳出循环 or switch语句:

#include <stdio.h>

int main() {
    int i;
    
    // usingbreak跳出循环
    for (i = 1; i <= 10; i++) {
        if (i == 5) {
            break; // 当ietc.于5时跳出循环
        }
        printf("%d ", i);
    }
    printf("\n循环结束!\n");
    
    return 0;
}

3.2 continue语句

continue语句用于跳过当 before 循环 剩余部分, 直接开始 under 一次循环:

#include <stdio.h>

int main() {
    int i;
    
    // usingcontinue跳过偶数
    for (i = 1; i <= 10; i++) {
        if (i % 2 == 0) {
            continue; // 跳过偶数
        }
        printf("%d ", i);
    }
    printf("\n");
    
    return 0;
}

3.3 goto语句

goto语句用于无条件跳转 to 程序in 指定tag处:

#include <stdio.h>

int main() {
    int i = 1;
    
    loop:
    if (i <= 10) {
        printf("%d ", i);
        i++;
        goto loop; // 跳转 to looptag处
    }
    printf("\n");
    
    return 0;
}

注意: goto语句 easy 使程序 流程变得混乱, 一般不推荐using, 只 has in 特殊circumstances under (such as from many 层循环in跳出) 才考虑using.

4. 综合application

4.1 猜number游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int number, guess, attempts = 0;
    
    // 生成1-100之间 随机数
    srand(time(NULL));
    number = rand() % 100 + 1;
    
    printf("欢迎来 to 猜number游戏!\n");
    printf("我想了一个1-100之间 number, 你 has 10次机会猜. \n");
    
    do {
        printf("请输入你 猜测: ");
        scanf("%d", &guess);
        attempts++;
        
        if (guess > number) {
            printf("太 big 了!\n");
        } else if (guess < number) {
            printf("太 small 了!\n");
        } else {
            printf("恭喜你猜 for 了!你用了%d次机会. \n", attempts);
            break;
        }
        
        if (attempts >= 10) {
            printf("很遗憾, 你没 has  in 10次机会 in 猜 for . \n");
            printf("正确 number is : %d\n", number);
            break;
        }
        
        printf("你还 has %d次机会. \n", 10 - attempts);
        
    } while (1);
    
    return 0;
}

4.2 质数判断

#include <stdio.h>

int main() {
    int number, i, is_prime = 1;
    
    printf("请输入一个正整数: ");
    scanf("%d", &number);
    
    if (number <= 1) {
        is_prime = 0;
    } else {
        for (i = 2; i * i <= number; i++) {
            if (number % i == 0) {
                is_prime = 0;
                break;
            }
        }
    }
    
    if (is_prime) {
        printf("%d is 质数. \n", number);
    } else {
        printf("%d不 is 质数. \n", number);
    }
    
    return 0;
}

实践case: 斐波那契数列

writing一个C程序, 输出斐波那契数列 before n项.

requirementsanalysis

  • 提示user输入要输出 项数n
  • using循环计算并输出斐波那契数列 before n项
  • 斐波那契数列 定义: F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2) (n≥3)

referencecode

#include <stdio.h>

int main() {
    int n, i;
    long long a = 1, b = 1, next;
    
    printf("请输入要输出 斐波那契数列项数: ");
    scanf("%d", &n);
    
    if (n <= 0) {
        printf("请输入正整数!\n");
        return 1;
    }
    
    printf("斐波那契数列  before %d项: \n", n);
    
    for (i = 1; i <= n; i++) {
        if (i == 1 || i == 2) {
            printf("%lld ", a);
        } else {
            next = a + b;
            printf("%lld ", next);
            a = b;
            b = next;
        }
    }
    printf("\n");
    
    return 0;
}

run结果

请输入要输出 斐波那契数列项数: 10
斐波那契数列  before 10项: 
1 1 2 3 5 8 13 21 34 55

互动练习

练习1: writing一个C程序, 输出100以 in 所 has 偶数.

练习2: writing一个C程序, 计算1 to 100 and .

练习3: writing一个C程序, 打印一个由*组成 直角三角形.

例such as, 当输入5时, 输出:

*
**
***
****
*****

练习4: writing一个C程序, 判断一个年份 is 否 for 闰年.

闰年 判断条件: 能被4整除但不能被100整除, or 者能被400整除.