C语言判断详解

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才能结束当前任务。

小练习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值