3.0 0的故事
电报时代为了将0和O区分,为0设计了一种特殊的字体
这是一个诡计多端的0
3.1.1 做判断
上周课程中的时间差一例中,小时数出现借位的话该如何调整呢?我们之前的方法是直接换成分钟再变化。小时数如果出现借位而我们还直接加减的话,就会出现负数的情况。那么有没有一种方法能预先判断小时数是否借位再对计算方法进行调整呢?
这就要引出今天的C语言判断语句了
#include<stdio.h>
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分\n",ih,im);
}
运行结果正确,当不满足im<0的条件时,im=minute2-minute1,当满足im<0的条件时,im自增60,ih自减1.
也就是说,满足if语句内的条件时,之后的语句才会执行,如果不满足,其内部语句全部不会执行。条件成立执行,不成立则不执行。
3.1.2 找零计算器
在超市里买东西时的结算可以视作是找零计算器的应用,全过程需要
- 用户输入:1.商品总价值。2.用户支付的票面金额
- 进行运算
- 给出结果(输出):1.应找零金额数。2.当用户票面金额不足以支付时,提醒用户。
优化该程序:
可以看到注释的格式:
//这是一些注释
/*这也是
一些
注释*/
程序不会运行注释里的内容,但是可以帮助代码编辑者、合作编辑者读懂这些代码的含义,但是要小心不要把自己写的程序给注释掉。
一个有趣的判断小程序:
满足条件时会多输出一句话。
3.1.4 否则的话
上面的找零计算器,可以在票面足够支付的时候才执行计算。那如果钱不够了该怎么办呢?
再写一个条件语句,当钱不够付的时候执行,提示你钱不够不就好了。
确实可行,但如果我只想用一个条件来进行判断,满足或者不满足的时候分别执行,该怎么做呢?
这就要提到判断语句里的if-else组合了。
{
int price = 0, bill = 0;
printf("请输入金额(元):");
scanf("%d", &price);
printf("请输入票面(元):");
scanf("%d", &bill);
int change = bill - price;
if (change > 0)
{
printf("找您%d元。\n", change);
}
else
{
printf("您的钱不够。\n");
}
return 0;
}
在这个程序中,change的正负决定了两个分支语句的执行。注意这里的条件一定是非正即负,非黑即白,非0即1的,需要有相当明确的界限。
再引入一个例子:比较两个数的大小。有三种写法:
int max=0;
if(a>b)
{max=a;}
if(b<a)
{max=b;}
int max=0;
if(a>b)
{max=a;}
else
{max=b;}
int max=b;
if(a>b)
{max=a;}
其中,第一种写法不能规避a=b时程序出错的问题。第二种是足够简易以至于大家都能看懂,第三种则是一些小聪明。孰优孰劣自行判断。
3.1.5 if语句再探
在编写条件语句时要注意的语法易错点:
if(*条件*) 这句后面是没有分号的,因为分号意味着这句结束,所以分号应该放在之后要执行的语句后面。表明if语句决定后面的赋值语句是否被执行。if后面如果只有一条执行语句的话,就不用写大括号。