Week03 判断
3.1.0BCD
bcd就是16进制的数但是不带0x
例:18,16进制是18/16=1,18%16=2,即18的16进制为0x12,BCD=12.
3.1.1判断
int main(){
int hour1,minute1;
int hour2,minute2;
scanf("%d %d",&hour1,&minute1);
scanf("%d %d",&hour2,&minute2);
int ih = hour2-hour1;
int im = minute2-minute1;
if(im<0) {
im = 60 + im;
ih --;
}
printf("时间差是:%d小时%d分钟",ih,im);
return 0;
}
格式
if(条件成立){
........
}
3.1.2判断条件
条件:计算两个值之间的关系,所以叫做关系运算。
关系运算的结果:当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0。
printf("%d\n",5==3);
printf("%d\n",5>3);
printf("%d\n",5<=3);
优先级
所有的关系运算符的优先级比算术运算符的低,但是比赋值运算符的高。
例:7>=3+4,先运算3+4,后进行关系运算符。
int r =a>0;先进行关系运算符a>0,在进行赋值运算符。
判断是否相等的==和 !=的优先级比其他的低,而连续的关系运算是从 左边到右边进行的。
5>3==6<4,5>3的结果是否等于6<4的结果.
6>5>4,从左到右,6>5成立=1,1>4不成立=0.
a==b==6,a是否等于b,相等得1,否则得0,然后在于6相等,显然1不等于6,0也同上,即答案为0。
a==b>0
3.1.3找零计算器
用户要有两个操作:购买金额,输入票面。之后计算并打印找零,或者告知用户余额不足以购买。
3.1.4否则的话:else
例:
int main(void){
int price;
int bill;
printf("请输入金额:");
scanf("%d",&price);
printf("请输入票价:");
scanf("%d",&bill);
if(bill>=price){
printf("找你%d元!",bill-price);
}else{
printf("您的钱不够!");
}
}
3.1.5 if1语句再探
if后无大括号
例:
if(total>amount)
total+=amount+10;
else也可以无大括号
例:
if(a>b)
a++;
else
a--;
printf("输出");
判断成绩
int main(){
const int Pass =60;
int score;
printf("请输入成绩:");
scanf("%d",&score);
if(score<Pass)
printf("抱歉您的成绩不合格!\n");
else
printf("您的成绩合格!\n");
printf("感谢您的查询!");
return 0 ;
}
如果加上{}
int main(){
const int Pass =60;
int score;
printf("请输入成绩:");
scanf("%d",&score);
if(score<Pass)
printf("抱歉您的成绩不合格!\n");
else{
printf("您的成绩合格!\n");
printf("感谢您的查询!");
}
return 0 ;
}
//此时最后一个输入语句只有在成绩合格的时候才会出现
课后练习:
if(1<=n<=10)表示判断而非范围。
k<i<j按照比较运算符顺序进行,先比较k是否<i显然小于为1,1<j所以输出结果为1.
3.2分支
3.2.1嵌套的if-else
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int max =0;
if(a>b){
if(a>c){
max=a;
}else{
max=c;
}
}else{
if(b>c){
max=b;
} else{
max=c;
}
}
printf("The max is %d",max);
}
嵌套的判断:当if的条件满足或者不满足的时候要执行的语句也可以是一条if或者if-else语句,这就是嵌套的if语句。
例:
int main(){
const int ready =24;
int count = 0;
int code = 0;
scanf("%d %d",&count,&code);
if(count == ready){
if(code<20){
printf("一切正常!");
}else{//else总是和最近的那个if匹配
printf("继续等待!");
}
}
return 0;
}
else的匹配
else总是和最近的那个if匹配
缩进:else总是和最近的那个if匹配
if()
else//else总是和最近的那个if匹配
嵌套的if
例:
if(gameover == 0)
if(playermove == 2)
printf("");
else
printf("")//此时else与第二个if匹配,所以当gameover!=0时,无输出。
tips
在if或者else后面总是用{}
即使只有一条语句的时候。
3.2.2 级联的if-else if
分段函数
f(x) = -1;x<0
0;x=0
2x;x>0
int a =0;
scanf("请输入一个数字:");
if(a<0){
a= -1;
} else if(a == 0){
a = 0;
}else{
a = 2*a
}
级联的if-else if
if(exp1) st1; eelse if(exp2) st2; else st3;
3.2.3 if语句常见的错误
忘了大括号
if( age >60) salary = salary*1.2; printf("%f",salary);
if后面的分号
if( age >60);//如果有分号那么将无法执行if后面的结果。 salary = salary*1.2; printf("%f",salary);
错误使用==和=
if( a= b ){ printf("A=B");//if只要求()里的值是零或 非零。(应该写为A==B判断是T还是F) }
使人困惑的else
代码风格
在if和else之后必须加上大括号形成语句块;
大括号内的语句缩进一个tab的位置;
风格是三观
3.2.4多路分支 switch-case
if-else与swich-case
if-else是如果输入的数不在if-else中,那么它判断到最后一步 输出结果。
int type;
printf("请输入1或者2或者3或者其他:");
scanf("%d",&type);
if(type ==1)
printf("您好!");
else if(type==2)
printf("早上好!");
else if(type = 3)
printf("晚上好!");
else
printf("啊,啊什么啊?");
switch-case
int type;
printf("请输入一个数字:");
scanf("%d",&type);
switch(type){
case 1:
printf("您好0!");
break;
case 2:
printf("您好1!");
break;
case 3:
printf("您好2!");
break;
case 4:
break;
default:
printf("您好3!");
}
switch-case直接跳到你输入的数字直接输出相对应的结果。
switch-case
switch(控制表达式){ case 常量: 语句.... break; case 常量: 语句.... break; case 常量: 语句.... default: 语句.... ......... }
控制表达式只能是整数型的结果。
double无效
常量可以是常数,也可以是常数计算的表达式。
switch(type){
case 1:
printf("您好");
break
case 1+1://ONLY C99
........
}
break
case只是一个入口而不是终点,只有遇到break才能结束当前任务。
小练习: