当前位置:文档之家› c语言:流程控制语句

c语言:流程控制语句

流程控制
=======
知识点:
if-else语句使用
switch语句使用
break使用
正常情况下,程序从main函数开始,一句一句,自上而下执行每一条语句。

一些语句可以控制,修改程序的运行流程,称为流程控制语句。

一、条件判断语句if
if(表达式){
语句
}
如果……就……
【逻辑】当程序执行到if语句,首先计算表达式的值,如果为真,执行语句。

如果为假,不执行、跳过语句。

【逻辑假设】
if(表达式){
语句1
}else{
语句2
}
如果……就……否则……
【逻辑】当程序执行到if else语句,首先计算表达式的值,如果为真,执行语句1,不执行语句2。

如果为假,执行语句2,不执行语句1。

【逻辑二择】
例,明天考试,80分以下把代码抄写五遍,80分以上奖励棒棒糖一枚。

if(表达式1){
语句1
}else if(表达式2){
语句2
}else if(表达式3){
语句3
} else{
语句4
}
如果(表达式1成立),那么执行语句1
否则如果(表达式2成立),那么执行语句2
……
否则,执行语句4。

【逻辑】当程序执行到该结构,计算机表达式1,如果成立,执行语句1,跳出整个结构。

如果表达式2为假,计算表达式2,如果为真,执行语句2,跳出结构体。

直到表达式2为假,计算表达式3,依次类推,如果表达式都不成立,执行else下的语句。

如果不需要(即所有表达式都不成立,什么都不做),可以不写else。

else if的数量根据需求,任意增减,没有限制。

【注】在if else if结构中,每个else都是对前面每个表达式的否定。

【逻辑多择】
嵌套的if-else语句
我们可以在if语句内嵌套if语句,同样,我们也可以在if语句内嵌套if-else语句,在if-else 语句内嵌套if语句,以及在if-else语句内嵌套if-else语句。

int x;
scanf(“%d”,&x);
if(x<0){
printf(“error!\n”);
}else{
if(x%2)
printf(“jishu\n”);
else
printf(“oushu\n”);
}
练习
1、使用if else if,模拟下述分段函数。

x^2+1(x<0)
y= 2*x+6 (0<=x<=5)
3*x-1 (x>5)
2、输入一个字符,如果是大写字母,转成小写字母。

如果是小写字母,转成大写字母,如果不是字母,不变输出。

3、输入一个字符,判断这个字符是表示大写字母,小写字母,数字字符,还是其他。

A
a 9 %
二、逻辑跳转语句goto switch
1、goto语句
无条件跳转到指定标号的位置,向下执行。

goto 语句标号
printf(“————————1\n”);
printf(“————————2\n”);
goto A; //跳转到标号的位置
printf(“————————3\n”);
printf(“————————4\n”);
//标号的名字是标识符,这里使用大写是为了和变量相回避。

A: //这是一个标号,是一个位置的标记,本身是什么都不做。

printf(“————————5\n”);
B:
printf(“————————6\n”);
按正常顺序,应该是123456,但是goto可以打破这种顺序。

执行goto后,1256
//可以随意加标号,标号本身没有任何意义。

printf(“————————1\n”);
printf(“————————2\n”);
A:
printf(“————————3\n”);
printf(“————————4\n”);
goto A; //循环
printf(“————————5\n”);
printf(“————————6\n”);
【注】goto语句不常使用,因为它没有明确的套用关系。

而且不能跨栈。

goto不能跨函数。

练习:
4、使用goto语句,统计从键盘输入的字符个数。

int n=0;
A:
if(getchar()!=‘\n’)
{
n++;
goto A;
}
printf(“%d\n”);
2、多分支选择switch
switch(表达式){
case 常量表达式1:
语句1
case 常量表达式2:
语句2
case 常量表达式3:
语句3
……
default:
默认语句
}
【逻辑】当程序执行到switch,计算表达式。

表达式的值是几,就跳到对应的case处,向下执行。

如果没有对应的case,跳到default标号处,向下执行。

int a;
scanf a;
switch(a){
case 1:
printf(“1\n”);
case 2:
printf(“2\n”);
case 3:
printf(“3\n”);
default:
printf default;
}
//当输入2,输出2 3 default
由此,引进break;跳出switch。

switch(表达式){
case 常量表达式1:
语句1
break;
case 常量表达式2:
语句2
break;
case 常量表达式3:
语句3
break;
……
default:
默认语句
}
【注】break语句用于跳出switch和循环,不用来跳出if,无视if。

int a;
scanf a;
switch(a){
case 1:
printf(“1\n”);
case 2:
printf(“2\n”);
if(3>2){
break; //这里会直接跳出switch,无视if。

}
case 3:
printf(“3\n”);
default:
printf default;
}
【注】如果switch里面还有switch,break只能跳出一层switch。

switch(){
case 1:
case 2:
switch(){
case 1:
break;
case 2:
}
default:
}
【注】
switch语句中,如果case1、case2需要执行内容相同,可以省略case1。

switch(c){
case ‘a’:
case ‘A’:
printf(“a\n”);
break;
case ‘b’:
case ‘B’:
printf(“b\n”);
break;
default:
printf(“error\n”);
}
【注】
1、在case后的各常量表达式的值不能相同,否则会出现错误。

2、在case后,允许有多个语句,可以不用{}括起来。

3、各case和default子句的先后顺序可以变动,而不会影响程序执行结果。

4、default子句可以省略不用。

练习
5、输出一个字母,判断这个字母表示星期几,如果一个字母不能表示,在输入一个字母,输出星期几。

Monday Tuesday Wensday Thursday Friday Saturday Sunday
输入M,输出Monday
输入S,要求输入第二个字母,u输出Sunday
6、输入一个时间,输出这个时间之后一秒
比如,输入23:59:59,输出00:00:00
*7、超难题
输入一个日期,输出这一天是这一年的第几天,考虑平均闰年
输入:2000-1-1 输出1
输入:2000-12-31 输出366。

相关主题