------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、if语句介绍及基本格式
if语句实现分支控制
一般形式(第一种形式):表示如果表达式为真,执行语句块1,否则不执行。
if(表达式)
{
语句块1;
}
后续语句;
其中if后括号里可以是表达式、常量、变量。
原理:
1)先计算小括号中表达式的值
2)如果是真,执行大括号中的语句
3)如果是假,不会执行大括号中的语句。
思考&实现1:
猜数字游戏:
输入一个数字,判断是不是等于5?如果是打印“恭喜你”,如果不是打印“很可惜”。
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
if (num == 5) {
printf("恭喜你!\n");
}
if (num != 5) {
printf("很可惜!\n");
}
return 0;
}
二、if···else···语句
if···else···语句使用
如果表达式为真,则执行语句块1,否则执行语句块2 。
if(表达式)
{
语句块1;
}else{
语句块2;
}
注意:
不管表达式为真还是假,都会执行一个语句块。
猜数字游戏的改进:
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
if (num == 5) {
printf("恭喜你!\n");
} else {
printf("很可惜!\n");
}
return 0;
}
三、if语句的高级用法
如果表达式1为真,则执行语句块1,否则判断表达式2,如果为真执行语句块2,否则再判断表达式3,如果为真执行语句块3,当表达式1、2、3都不满足,会执行最后一个else语句。
if(表达式1)
{
语句块1;
}else if(表达式2){
语句块2;
}else if(表达式3){
语句块3;
}else{
语句块4;
}
思考&实现:
输入一个数组0~100的成绩,按0~59(E),60~69(D),70~79(C),80~89(B),90~100(A)分成几等。
#include <stdio.h>
int main(int argc, const char * argv[]) {
int score = 0;
printf("请输入一个0~100之间的成绩:\n");
scanf("%d",&score);
if (score<0||score>100) {
printf("你输入的成绩有误!\n");
} else if(score>=90) { //优化,可以只用一个条件判断
printf("你的成绩是A\n"); // score>=90&&score<=100
} else if (score>=80){
printf("你的成绩是B\n");
} else if (score>=70){
printf("你的成绩是C\n");
} else if (score>=60){
printf("你的成绩是D\n");
} else{
printf("你的成绩是E\n");
}
return 0;
}
四、if语句使用的注意点
1、if(条件) 可以直接写分号
表示什么也不干,空语句
2、if(条件) return 0;
程序不会往下执行了,直接退出。
在一个函数中,return语句之后的语句都不会执行
3、if(1) 表示永真
if(0) 表示永假
4、如果if之后的代码块,只有一句话,可以省略大括号。
也可以理解为,if条件如果没有大括号,只会影响一句话。
5、if作用域的问题
在if代码块定义的变量在外部无法访问。
6、容易疑惑的地方 作用域紊乱。
if (a==3)
int num = 10;
这样编译是报错的,因为num在if执行完后释放,没有用。
7、省略大括号的分析
从下往上if和else配对。
五、应用:剪刀石头布游戏
游戏分析:
实现步骤:
1、定义变量,保存计算机出的拳,保存用户输入的拳。
2、先让计算机出拳。
3、给一个提示,提示让玩家出拳。
4、开始比较
代码实现:
#include <stdio.h>
#include <stdlib.h> //随机数函数的头文件
int main(int argc, const char * argv[]) {
int computer =-1,player = -1;
computer = arc4random_uniform(3);
printf("请出拳: 0代表剪刀,1代表石头,2代表布\n");
scanf("%d",&player);
if (player<0||player>2) {
printf("请按套路出拳!\n");
return 0;
}
if ((player==0&&computer==2)||
(player==1&computer==0)||
(player==2&&computer==1)) {
printf("你很吊,你赢了!\n");
} else if (player==computer){
printf("平局,你居然和我一样吊!\n");
} else{
printf("你输了,你是逗比吗?!\n");
}
return 0;
}
六、switch语句基本格式
1、使用格式
switch(表达式){
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
···
case 常量表达式n; 语句n;
default: 语句n+1;
}
其语义是:计算表达式的值。并逐个与气候的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
思考&实现
接受用户输入,控制台打印菜名。
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
if (num<1||num>7) {
printf("你输入的信息有误!\n");
}
switch (num) {
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;
}
七、case语句穿透问题
case语句执行的过程中,一旦进入某个分支后就会一直执行到switch结束。
为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。在每一个case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。
八、if语句和switch语句选择
1、分支比较多且无法穷尽或进行大量列举时最好用if。
2、如果分支数量不是很多,但是使用if代码量比较大的时候,可以选用switch。
九、switch使用注意事项(一)
1、表达式的类型(case语句后的值)必须是整形或可以转变为整形的值
(byte、short、char、int类型)。
1)整型的变量 num=10;switch(num)
2)整型常量 10
3)返回值是整型的表达式 5+5
4)可以转换为int类型的表达式 ‘a’
2、功能代码部分可以有多行语句。
3、case语句后,可以有多行语句,可以加括号也可以省略括号。
4、break关键字的意思是中断,指结束switch语句,break语句为可选。
十、switch使用注意事项(二)
case值的规定
case语句的格式:
case 常理表达式:
1、case的值只能为常量。 case 10;
2、如果放表达式,那么只可以是常量表达式 case 5+5;
3、default语句的位置可以任意放。
4、case的穿呕吐问题,同样适用于default。
5、如果default语句放到switch语句的最后,可以不加break。
如果不放到最后,是必须加break的。
6、case后面不能是实型数,单精度,双精度都不可以。
7、case语句之后,默认的第一句话不能定义变量。
如果第一句话非要定义,应该加上大括号{ }
8、编译器的bug
应用:判断季节
练习1(主要是练习switch的用法,合理利用case穿透)
从键盘输入一个月份,输出对应季节
12~2 冬季
3~5 春季
6~8 夏季
9~11 秋季
#include <stdio.h>
int main(int argc, const char * argv[]) {
int m=0;
printf("请输入一个月份!\n");
scanf("%d",&m);
if (m<0||m>12) {
printf("你输入的月份有误!\n");
return 0;
}
switch (m) {
case 1:
case 2:
case 12:
printf("%d月是冬季!\n",m);
break;
case 3:
case 4:
case 5:
printf("%d月是春季!\n",m);
break;
case 6:
case 7:
case 8:
printf("%d月是夏季!\n",m);
break;
case 9:
case 10:
case 11:
printf("%d月是秋季!\n",m);
break;
default:
break;
}
return 0;
}
应用:实现计算器
使用switch实现简单的计算器
思路:
1、让用户输入一个数
2、让用户再输入一个符号
3、让用户输入另外一个数
4、计算结果
#include <stdio.h>
int main(int argc, const char * argv[]) {
int num1 =0,num2 = 0,op = 0;
float result = 0.0f;
printf("请输入第一个操作数:\n");
scanf("%d",&num1);
printf("请输入运算符:0.+, 1.-, 2.*, 3./ \n");
scanf("%d",&op);
if (op<0||op>3) {
printf("你输入的符号有误!\n");
return 0;
}
printf("请输入第二个操作数:\n");
scanf("%d",&num2);
switch (op) {
case 0:
result = num1 + num2;
break;
case 1:
result = num1 - num2;
break;
case 2:
result = num1 *num2;
break;
case 3:
result = num1/(float)num2;
break;
}
printf("%d和%d的运算结果是%.3f\n",num1,num2,result);
return 0;
}