目录
2.3 Switch语句的完整形式(default子句的作用)
1.语句是什么
C语言语句可以分为5类
//一个分号隔开可以理解为一个语句
1.表达式语句:3+5;
2.函数调用语句:printf("haha");
3.控制语句
控制语句用于执行程序的执行流程,用于实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),由特殊的语义定义符组成。
C语言有9种控制语句分为三类
a.条件判断语句也叫分支语句:if语句、switch语句
b.循环执行语句:do while语句、while 语句、for语句
c.berak语句、goto语句、continue语句、return 语句。
4.复合语句
5.空语句
2.分支语句(选择结构)
1.if语句
1.1 if语句的语法结构
1.1.1
if(表达式) 如果表达式的值为真,语句就执行。0表示假,非0表示真
{
语句; i
}
#include<stdio.h>
int main()
{
int h =1800;
if(h>1600)
{
printf("海拔很高");
}
return 0;
}
1,1,2
if(表达式)
{
语句1;
}
else
{
语句2;
}
建议if else后面尽量加上{},区分代码块。
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("已经成年了\n");
}
else
{
printf("未成年\n");
}
return 0;
}
1.1.3
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 if (age >= 18 && age < 30)
{
printf("青年\n");
}
else if (age >= 30 && age < 50)
{
printf("中年\n");
}
else if (age >= 50 && age < 80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
}
2.Switch语句
sitch是一种分支语句。用于多分支情况。
列如以下情况:
输入1,输出黑色周一
输入2,输出橙色周二
输入3,输出绿色周三
输入4,输出灰色周四
输入5,输入红色周五
这种多分支情况,如果使用if......elseif....elseif的形式有些复杂,所以引入了Switch
2.1 Switch语句形式
2.1.1
switch(整型表达式)
{
case 整型常量表达式:
语句;
}//最初级
2.1.2
switch(整型表达式)
{
case 整型常量表达式:
语句1;
break;
case 整型常量表达式:
语句2;
break;
}//初级写法:
选择第一个case,就执行语句1的相应功能,执行结束如果有break就直接跳出Switch循环,执行Switch后面的语句。
补充break在其他循环中的作用,在while,for等循环语句中,遇到break就会结束循环。
break和continue的对比和详解我放在了下一篇文章里,大家可以移步先看一下可以更好的理解这里Switch语句里面break的作用。
2.2 break在switch中的作用
在 C语言 的 switch(开关语句)中,break 语句还可用来在执行完一个 case(分支)后立即跳出当前 switch 结构。
我们先来看看没有input的Switch效果实现是怎么样的。
我想要实现一个功能,如果选择1就启动游戏,如果选择0就退出游戏。
我们发现当我们选择1,游戏启动但是紧接着就关闭了游戏是不是因为执行case1过后,程序并没有给我们选择是要继续玩还是直接退出,反而直接执行了case2,直接结束了游戏(如果后面还有case是不是一样的会继续执行,那么分case的作用就没了,所以需要break来分开每个case功能,执行完一个case就结束Switch去判断dowhile)
执行完一个case就结束Switch去判断dowhile)
加上break就完美实现了Switch功能。(编程好习惯在每一个case后加上break)
大家可以试一下源码效果:
int main()
{
int input = 0;
do
{
printf("如果要启动原神就输入1,关闭原神就输入2,请选择:\n");
scanf("%d",&input);
switch (input)
{
case 1:
printf("原神启动\n");
break;
case 0:
printf("原神关闭\n");
break;
defult:
printf("选择错误\n");
}
} while (input);//控制一直输入的外层循环,直到input等于01结束循环退出
return 0;
}
2.3 Switch语句的完整形式(default子句的作用)
switch(整型表达式)
{
case 整型常量表达式:
语句1;
break;
case 整型常量表达式:
语句2;
break;
default:
语句3;
break;
}
我们思考一个问题:如果表达的值与所有的case标签都不匹配怎么办?列如上面的游戏代码,我们看看没有default,我们不选择1也不选择0会发生什么:
我们发现,程序正常的在运行,没有报错就是结构所有的语句都被跳过了而已。程序不会终止也不会报错。因为这种情况在C语言中不算是一个错误。如果不想忽略不匹配所有标签的表达式的值的时候该怎么办,写一个defult子句。
default;
可以写在任何一个case标签出现的地方,当Switch表达式的值不匹配所有的case标签时,这个defult句子后面的语句就会执行。所以每个Switch语句中只能出现一条default语句。但是default可以出现在任何位置,而且语句流会 像执行一个case语句一样执行default.
default放在任意位置没有影响。附上源码大家可以自行体验效果。
int main()
{
int input = 0;
do
{
printf("如果要启动原神就输入1,关闭原神就输入2,请选择:\n");
scanf("%d",&input);
switch (input)
{
default:
printf("选择错误\n");
break;
case 1:
printf("原神启动\n");
break;
case 0:
printf("原神关闭\n");
break;
/* default:
printf("选择错误\n");
break;*/
}
} while (input);//控制一直输入的外层循环,直到input等于01结束循环退出
return 0;
}
2.4 Switch语句的其他写法
switch语句还可以实现这样的功能。
如果我想实现这样的功能:某几个选择做同一件事,另外几个选择做另外一件事或者实现不一样的功能的时候,就可以利用Switch语句这样的结构功能。
Switch(整型表达式)
{
case 整型常量表达式:
case 整型常量表达式:
case 整型常量表达式:
语句1;
break;
case 整型常量表达式:
case 整型常量表达式:
case 整型常量表达式:
语句2;
break;
}
例如:输入1-5.打印weekday
输入6-7打印weekend.
附上源码大家体验效果:
int main()
{
int day = 0;
do
{
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weenkend\n");
break;
default:
printf("选择错误\n");
break;
}
} while (day);
return 0;
}
3.循环语句
当同一件事需要重复做,列如上面代码中的重复输入,此时就需要引入循环语句。
3.1.while循环
3.1.1while语句结构
while(表达式)
{
循环语句;(表达式为真(非0)就执行语句)
}
3.1.2while执行流程图:
3.1.3while常规用法
在屏幕上打印1-10数字
3.1.4 while语句中的break和continue
我们来看一下有break和无break的两段代码的执行结果来看看while语句中break的作用。同理看continue。
总结:break在循环中的作用
在循环中遇到break,就会停止后期所有的循环,直接结束循环。
while中的break:永久终止循环。
同理我们来看看continue。
循环打印5的原因就是continue后,直接结束了本次循环的后面语句开启下一轮的判断,由于没有++操作,i一直是5,所以死循环打印,
while中的comtinue 直接跳到1下一层循环的入口进行判断。
3.1.5 while判断条件中getchar的用法
看下面的一段关于while的代码
这段代码涉及到getchar函数的使用,我放在了另外一篇文章中进行详细讲解,大家可以根据链接移步。
2.for循环
3.2.1 for循环语法
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1:表达式1为初始化部分,用于初始化循环变量
表达式2 :
表达式2为条件判断部分,用于判断循环时终止。
表达式3:
表达式3为调整部分,用于循环条件的调整
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
printf("%d", i);
}
return 0;
}
for循环执行流程:
进入程序。调用for循环
表达式1初始化循环变量
表达式2判断循环条件,为真就执行循环体代码打印1-10;
条件为假,就直接结束来到for循环下面代码。
循环结束执行表达式三,循环条件调整
然后再进行判断。
3.2.2 for循环中的break和continue
大家可以移步这里。我在这篇博客中做了详细介绍。
3.2.3 一些for循环的变种
1.for( ; ;)
{
printf("");}//for 循环中的初始化部分,判断部分,调整部分是可以省略的。初学伙伴不太建议这样用,容易出问题。初始化省略就什么也不做。判断部分省略就判断恒为真。
2.使用多余一个变量控制循环
int x,y;
for(x = 0,y = 0(可以为表达式甚至函数调用);x<2&&y<5;++x,++y)
{
printf("hehe\n");
}
3.do.....while循环
3.3.1do语句的语法
do
{
循环语句;
}
while(表达式);
3.3.2 do语句的执行流程
4.go to 语句
C语言提供了可以随意滥用的goto语句和标记跳转的标号
最常见的用法是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出一层或者多层循环。
多层循环使用break是达不到目的的,它只能从最内层循环退到上一层的循环。
int main()
{
again:
printf("11 ");
goto again;
}
注意:goto 语句不能跨函数执行,只能在同一个函数比如main函数下面执行。
goto 语句真正适用的情况:
for(.....)
for(......)
{
for(.....)
{
if()
goto error;
}}
error:
也正是因为goto语句可以滥用,导致程序结构复杂化,所以一般除非要跳出深度循环,在普通的练习中是不推荐使用的。
以上就是本期文章的内容。感谢大家批评指正。