C语言中有如下语句:
分支语句属于控制语句的一类。
//一个if语句
if(表达式){
代码块
}
//含有else字句的if语句
if(表达式){
代码块
}
else{
代码块
}
//多选择的if语句
if(表达式1){
代码块1
}
else if(表达式2){
代码块2
}
else if(表达式3){
代码块3
}
if
包含的语句,如果由有和if配对的else字句就执行else字句包含的语句。if
后只能跟一个else
字句,即一个if
只能与一个else
配对。else
总会与离它最近的if配对,不一定会符合自己的预期。if
与else
后面都只能跟一条语句,所以在只写一条语句时可以省略大括号{}
,若有多条语句大括号{}
使多条语句成为一个整体,可看做一条语句,叫复合语句。是什么段位呢
//借助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;
}
一个运行结果:
适用于多分支(选择)情况。
switch(常量表达式){
case 常量表达式1: 代码块1; break;
case 常量表达式2: 代码块2; break;
……
case 常量表达式n: 代码块n; break;
default : 代码块(n+1); break;
}
case
之后的常量表达式比较,直到相等便进入对应的行执行相应的代码块,代码块执行后通过break语句从switch语句离开。default
字句,执行default所在行的代码块,之后从switch语句离开,故default
最后的break
语句可省略。default
对switch
接收的常量表达式起到了检查,兜底的功能,因此default字句若出现则只能出现一次。default
字句可以出现在switch
语句内部的非最后一行,即default字句的位置并不会影响default
字句的功能。switch
语句所必需的。也就是说,每个case
最后面不加break
也是可以的,这时case
之后的代码块执行完后若其后还有case
便不会离开switch
语句,而是执行下一个case
所在的代码块,直到遇到break语句时离开switch
或遇到default
时离开switch
或所有的字句执行完时离开switch
。玩什么游戏呢
//输入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;
}
一个运行结果:
循环语句是选择语句的一类。
while(表达式){ 代码块(循环语句) }
while
循环。否则会陷入死循环,最终会导致程序崩溃。continue
语句之后若还有语句则不再执行,而是直接进行下一次循环前的表达式判断。//输入一个正整数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;
}
一个运行结果:
for(表达式1;表达式2;表达式3){
代码块(或者称为循环语句)
}
表达式1是初始化部分,对变量进行初始化。 表达式2是条件判断部分,判断循环是否继续进行。 表达式3是调整部分,对某些影响条件判断的变量进行改变。
//输入一个正整数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语句可以使程序结束本次循环。
#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循环语句中的初始化部分,判断部分,调整部分均可以省略,但两个分号不能省略。
for( ; ; ){
//这是一条空语句
;
}
//判断部分省略,则判断恒为真,所以这将是一个死循环
do{
代码块(循环体语句)
} while(表达式);
do while语句首先会执行一次循环体语句,之后在执行条件判断部分的表达式。 break语句会使程序离开do while循环,执行do while语句之后的代码。 continue语句可以使程序结束本次循环。
#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;
}
一个运行结果:
goto 标签;
标签:
标签用于程序语句的跳转
goto
语句可以从程序的一处任意跳到程序的另一处,破坏了程序的结构,不利于思考,一般不使用。
goto
语句可以用来迅速跳出多层的循环语句,弥补了break
只能跳出break
语句所在循环的特点。
//使用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