分支语句与循环语句
- 其他
- 2025-08-20 12:21:01

文章目录 什么是语句? 分支语句(选择结构) 循环语句 goto语句
前言
一、什么是语句? C 语句可分为以下五类: 1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句 控制语句 用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成, C 语 言有九种控制语句。 可分成以下三类: 1. 条件判断语句也叫分支语句: if 语句、 switch 语句; 2. 循环执行语句: do while 语句、 while 语句、 for 语句; 3. 转向语句: break 语句、 goto 语句、 continue 语句、 return 语句。 二、分支语句(选择结构) if语句 语法结构: if ( 表达式 ) 语句 ; if ( 表达式 ) 语句 1 ; else 语句 2 ; // 多分支 if ( 表达式 1 ) 语句 1 ; else if ( 表达式 2 ) 语句 2 ; else 语句 3 ; #include<stdio.h> int main() { int age = 0; scanf("%d", &age); //if (age >= 18) // printf("成年\n"); //else // printf("未成年\n"); if (age < 18) printf("青少年\n"); else if (age >= 18 && age < 30) printf("青年\n"); else if (age >= 30 && age < 50) printf("中年\n"); else if (age >= 50 && age < 80) printf("中老年\n"); else if (age >= 80 && age < 100) printf("老年\n"); else printf("老寿星\n"); return 0; } 如果条件成立,要执行多条语句,怎应该使用代码块。 #include <stdio.h> int main () { if ( 表达式 ) { 语句列表 1 ; } else { 语句列表 2 ; } return 0 ; } #include <stdio.h> int main() { int a = 0; int b = 2; if(a == 1) { if(b == 2) { printf("hehe\n"); } } else { printf("haha\n"); } return 0; } if语句练习 #include<iostream> //判断一个数是否是奇数 //int main() //{ // int n = 0; // scanf("%d", &n); // // if (n % 2 == 1) // printf("奇数\n"); // // return 0; //} //打印1~100之间的奇数 int main() { int i = 1; while (i <= 100) { if (i % 2 == 1) printf("%d ", i); i++; } return 0; } 注意: 如果表达式的结果为真,则语句执行。 在C语言中如何表示真假? 0表示假,非0表示真。
这里的一对 { } 就是一个代码块。
else的匹配:else是和它离的最近的if匹配的。
switch语句 switch 语句也是一种分支语句。 常常用于多分支的情况。 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。 这就是 switch 语句。 switch ( 整型表达式 ) { 语句项; // 是一些 case 语句: //如下: case 整形常量表达式 : 语句 ; } #include <stdio.h> int main() { int day = 0; switch (day) { case 1: printf("星期一\n"); break; case 2: printf("星期二\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; } return 0; } /* #include <stdio.h> int main() { int day = 0; switch (day) { case 1: case 2: case 3: case 4: case 5: printf("weekday\n"); break; case 6: case 7: printf("weekend\n"); break; } return 0; } */ switch语句练习 #include <stdio.h> int main() { int n = 1; int m = 2; switch (n) { case 1: m++; case 2: n++; case 3: switch (n) {//switch允许嵌套使用 case 1: n++; case 2: m++; n++; break; } case 4: m++; break; default: break; } printf("m = %d, n = %d\n", m, n); return 0; } 程序结果如图所示: 注意: 在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。 break语句 的实际效果是把语句列表划分为不同的分支部分。 default:写在任何一个 case 标签可以出现的位置。当switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。 三、循环语句 while循环 while ( 表达式 ) 循环语句 ;打印1~10的数字
#include <stdio.h> int main() { int i = 1; while (i <= 10) { printf("%d ", i); i = i + 1; } return 0; } for循环 for ( 表达式 1 ; 表达式 2 ; 表达式 3 ) 循环语句 ; 表达式 1 表达式 1 为 初始化部分 ,用于初始化循环变量的。 表达式 2 表达式 2 为 条件判断部分 ,用于判断循环时候终止。 表达式 3 表达式 3 为 调整部分 ,用于循环条件的调整。 #include <stdio.h> int main() { int i = 0; //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/) for(i=1; i<=10; i++) { printf("%d ", i); } return 0; } //请问循环要循环多少次? #include <stdio.h> int main() { int i = 0; int k = 0; for(i =0,k=0; k=0; i++,k++) k++; return 0; } do-while循环 do 语句的语法: do 循环语句 ; while ( 表达式 ); #include <stdio.h> int main() { int i = 10; do { printf("%d\n", i); }while(i<10); return 0; } 猜数字游戏 #include <stdio.h> #include <stdlib.h> #include <time.h> void menu() { printf("**********************************\n"); printf("*********** 1.play **********\n"); printf("*********** 0.exit **********\n"); printf("**********************************\n"); } //RAND_MAX--rand函数能返回随机数的最大值。 void game() { //时间戳 srand(200); //rand函数返回的随机数的范围是(0~32767) //猜数字游戏的实现 int ret = rand(); printf("%d\n", ret); //猜数字 int random_num = rand() % 100 + 1; int input = 0; while (1) { printf("请输入猜的数字>:"); scanf("%d", &input); if (input > random_num) { printf("猜大了\n"); } else if (input < random_num) { printf("猜小了\n"); } else { printf("恭喜你,猜对了\n"); break; } } } int main() { int input = 0; srand((unsigned)time(NULL)); do { menu(); printf("请选择>:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: break; default: printf("选择错误,请重新输入!\n"); break; } } while (input); return 0; } 注意:break在while循环中的作用: 其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。 continue在while循环中的作用就是:continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。 for循环的判断部分省略了,就意味着判断恒为真。 do-while循环循环体至少执行一次。 四、goto语句C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。 从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。
goto语句适合的情景:
for (...) for (...) { for (...) { if ( disaster ) goto error ; } } … error : if ( disaster ) // 处理错误情况利用goto语句写一个关机程序
#include <stdio.h> #include<stdlib.h> #include<string.h> int main() { char input[10] = { 0 }; system("shutdown -s -t 60"); again: printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>"); scanf("%s", input); if (0 == strcmp(input, "我是猪")) { system("shutdown -a"); } else { goto again; } return 0; }使用while循环
#include <stdio.h> #include <stdlib.h> int main() { char input[10] = {0}; system("shutdown -s -t 60"); while(1) { printf("电脑将在1分钟内关机,如果输入:我是猪,就取消关机!\n请输入:>"); scanf("%s", input); if(0 == strcmp(input, "我是猪")) { system("shutdown -a"); break; } } return 0; }