前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言详解 (一)- 循环与分支

C语言详解 (一)- 循环与分支

作者头像
怠惰的未禾
发布2023-04-27 21:01:29
4390
发布2023-04-27 21:01:29
举报
文章被收录于专栏:Linux之越战越勇

1. 语句

C语言中有如下语句:

  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句

2. 分支语句

  • if语句
  • switch语句

分支语句属于控制语句的一类。

2.1 if语句

2.1.1 格式
代码语言:javascript
复制
//一个if语句
if(表达式){
    代码块
}
//含有else字句的if语句
if(表达式){
    代码块
}
else{
    代码块
}
//多选择的if语句
if(表达式1){
    代码块1
}
else if(表达式2){
    代码块2
}
else if(表达式3){
    代码块3
}
2.1.2 一些说明

  • 表达式为(非0)就执行if包含的语句,表达式为(0)就不执行if包含的语句,如果由有和if配对的else字句就执行else字句包含的语句。
  • 一个if后只能跟一个else字句,即一个if只能与一个else配对。
  • 一个else总会与离它最近的if配对,不一定会符合自己的预期。
  • ifelse后面都只能跟一条语句,所以在只写一条语句时可以省略大括号{},若有多条语句大括号{}使多条语句成为一个整体,可看做一条语句,叫复合语句。
  • 代码块可能是一条语句,此时大括号可以省略,也可能是多条语句,这时多条语句组成了一条复合语句。
2.1.3 一个例子

是什么段位呢

代码语言:javascript
复制
//借助if语句实现输入score输出段位
#include <stdio.h>
int main(){
    int sco = 0;
    scanf("%d", &sco);
    
    if(sco >= 750){
        printf("最强王者!\n");
    }
    else if(sco >= 500){
        printf("宗师!\n");
    }
    else if(sco >= 350){
        printf("大师!\n");
    }
    else if(sco >= 100){
        printf("砖石!\n");
    }
    else if(sco >= 75){
        printf("铂金!\n");
    }
    else if(sco >= 50){
        printf("黄金!\n");
    }
    else if(sco >= 30){
        printf("白银!\n");
    }
    else{
        printf("青铜!\n");
    }
    return 0;
}

一个运行结果:

2.2 switch语句

适用于多分支(选择)情况。

2.2.1 格式
代码语言:javascript
复制
switch(常量表达式){
case 常量表达式1: 代码块1; break;
case 常量表达式2: 代码块2; break;
……
case 常量表达式n: 代码块n; break;
default : 代码块(n+1); break;
}
2.2.2 一些说明

  • 常量表达式只能是整型数据或字符型数据,而不能是其他类型的数据。字符型数据在内存中是按ASCII码值的形式存放的,所以实际仍是整型的。
  • switch语句接收一个常量表达式,之后这个常量表达式从上到下依次与case之后的常量表达式比较,直到相等便进入对应的行执行相应的代码块,代码块执行后通过break语句switch语句离开。
  • 找不到相等的常量表达式就进入default字句,执行default所在行的代码块,之后从switch语句离开,故default最后的break语句可省略。
  • default字句不是必须的,但defaultswitch接收的常量表达式起到了检查,兜底的功能,因此default字句若出现则只能出现一次。
  • default字句可以出现在switch语句内部的非最后一行,即default字句的位置并不会影响default字句的功能
  • break语句可以跳出switch语句,不是switch语句所必需的。也就是说,每个case最后面不加break也是可以的,这时case之后的代码块执行完后若其后还有case便不会离开switch语句,而是执行下一个case所在的代码块,直到遇到break语句时离开switch或遇到default时离开switch或所有的字句执行完时离开switch
2.2.3 一个例子

玩什么游戏呢

代码语言:javascript
复制
//输入1~7输出计划
#include <stdio.h>

int main(){
    int sco = 0;
    scanf("%d", &sco);
    
    switch(sco){
        case 1: printf("星期一:王者荣耀\n"); break;
        case 2: printf("星期二:LOL\n"); break;
        case 3: printf("星期三:原神\n"); break;
        case 4:	printf("星期四:原神\n"); break;
        case 5: printf("星期五:崩坏三\n"); break;
        case 6: printf("星期六:崩坏三\n"); break;
        case 7: printf("星期天:原神\n"); break;
        default:printf("hello world\n"); break;
    }
    
    return 0;
}

一个运行结果:


3. 循环语句

  • while语句
  • for语句
  • do while语句

循环语句是选择语句的一类。

3.1 while语句

3.1.1格式:

while(表达式){ 代码块(循环语句) }

3.1.2 解释:

  • 执行while语句时首先判断表达式,若为假(0)则离开while语句,若为真(非0)就进入while语句内部执行代码块,代码块执行之后再次判断表达式的真假,直到表达式为假时离开循环。
  • 代码块部分可能有一条语句或多条语句,代码块执行之后,一般会向着离开循环的方向进行,也就是说每次执行代码块后便会影响表达式的结果,直到表达式为假时结束while循环。否则会陷入死循环,最终会导致程序崩溃。
  • break语句可以使程序离开break所在的while循环,一般用于提前满足条件时离开循环。
  • continue语句可以使程序结束本次循环continue语句之后若还有语句则不再执行,而是直接进行下一次循环前的表达式判断。
3.1.3 一个例子
代码语言:javascript
复制
//输入一个正整数n,循环输出
#include <stdio.h>

int main() {
    int i = 1;
    int n = 0;
    scanf("%d", &n);

    while (i <= n) {
        //i是偶数就结束本次循环
        if (i % 2 == 0) {
            printf("hehe\n");
            i = i + 1;
            continue;
        }
        //i不是偶数且i等于n-1就离开while循环
        else if (i == n - 1) {
            break;
        }
        printf("hihi\n");
        //改变i的值
        i = i + 1;
    }
    return 0;
}

一个运行结果:

3.2 for语句

3.2.1 格式
代码语言:javascript
复制
for(表达式1;表达式2;表达式3){
代码块(或者称为循环语句)
}
3.2.2 解释:

表达式1是初始化部分,对变量进行初始化。 表达式2是条件判断部分,判断循环是否继续进行。 表达式3是调整部分,对某些影响条件判断的变量进行改变。

3.2.3 一个例子
代码语言:javascript
复制
//输入一个正整数n,循环输出
#include <stdio.h>

int main() {
    int i = 1;
    int n = 0;
    scanf("%d", &n);

    for(i = 1; i <= n; i++) {
        //i是偶数就结束本次循环
        if (i % 2 == 0) {
            printf("hehe\n");
            continue;
        }
        //i不是偶数且i等于n-1就离开while循环
        else if (i == n - 1) {
            break;
        }
        printf("hihi\n");
    }
    return 0;
}

一个运行结果:

for语句与while语句能够实现相同的功能,所不同的是,while语句的初始化部分在while语句之前,条件判断在括号内,调整部分循环体部分实现。 for语句则把初始化部分、条件判断部分、循环体部分集中在括号内并用两个分号隔开。

break语句会使程序离开for循环,执行for语句之后的代码。 continue语句可以使程序结束本次循环。

3.2.4 嵌套的for循环语句
代码语言:javascript
复制
#include <stdio.h>

int main(){
    int i = 0;
    //打印100次Hello
    for(i = 0; i < 10; i++){
        int j = 0;
        for(j = 0; j < 10; j++){
            printf("Hello\n");
        }
    }
    return 0;
}

for循环语句中的初始化部分判断部分调整部分均可以省略,但两个分号不能省略

代码语言:javascript
复制
for( ; ; ){
    //这是一条空语句
    ;
}
//判断部分省略,则判断恒为真,所以这将是一个死循环

3.3 do while语句

3.3.1 格式
代码语言:javascript
复制
do{
    代码块(循环体语句)
} while(表达式);
3.3.2 解释:

do while语句首先会执行一次循环体语句,之后在执行条件判断部分的表达式。 break语句会使程序离开do while循环,执行do while语句之后的代码。 continue语句可以使程序结束本次循环。

3.3.3 一个例子
代码语言:javascript
复制
#include <stdio.h>

int main() {
    int i = 1;
    int n = 0;
    scanf("%d", &n);

    do{
        //i是偶数就结束本次循环
        if (i % 2 == 0) {
            printf("hehe\n");
            i = i + 1;
            continue;
        }
        //i不是偶数且i等于n-1就离开while循环
        else if (i == n - 1) {
            break;
        }
        printf("hihi\n");
        i = i + 1;
    } while(i <= n);
    return 0;
}

一个运行结果:


4. goto语句 - 跳转语句

4.1 格式

代码语言:javascript
复制
goto 标签;

标签:

标签用于程序语句的跳转

4.2 解释:

goto语句可以从程序的一处任意跳到程序的另一处,破坏了程序的结构,不利于思考,一般不使用goto语句可以用来迅速跳出多层的循环语句,弥补了break只能跳出break语句所在循环的特点。

4.3 一个例子

代码语言:javascript
复制
//使用goto语句实现输入一个正整数,输出0到n之间的整数
#include <stdio.h>

int main(){
    int n = 0;
    int i = 0;
    scanf("%d",&n);
again:
    if(i <= n){
        printf("%d ",i);
        i = i + 1;
        goto again;
    }
    
    return 0;
}

程序运行的一个结果



END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 语句
  • 2. 分支语句
    • 2.1 if语句
      • 2.1.1 格式
      • 2.1.2 一些说明
      • 2.1.3 一个例子
    • 2.2 switch语句
      • 2.2.1 格式
      • 2.2.2 一些说明
      • 2.2.3 一个例子
  • 3. 循环语句
    • 3.1 while语句
      • 3.1.1格式:
      • 3.1.2 解释:
      • 3.1.3 一个例子
    • 3.2 for语句
      • 3.2.1 格式
      • 3.2.2 解释:
      • 3.2.3 一个例子
      • 3.2.4 嵌套的for循环语句
    • 3.3 do while语句
      • 3.3.1 格式
      • 3.3.2 解释:
      • 3.3.3 一个例子
  • 4. goto语句 - 跳转语句
    • 4.1 格式
      • 4.2 解释:
        • 4.3 一个例子
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档