计算时间差
输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间之间的差,也以几小时几分表示
问题:如果直接分别减,会出现分钟借位的情况:1点40分和2点10分的差?
如果
1.用分别减的方案,然后判断有没有出现借位行不行?
2.借位的表现是,分钟减的结果小于0,找小时借一位,如下:im代指分钟,ih代指小时
if(im<0){
im=60+im;
ih--;
}
if(条件成立){
....
}
判断的条件
计算两个值之间的关系,所以叫做关系运算
运算符 | 意义 |
== | 相等 |
!= | 不相等 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
关系运算的结果
- 当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0
- printf("%d\n",5==3);
- printf("%d\n",5>3);
- printf("%d\n",5<=3);
优先级
- 所有的关系运算符的优先级比算数运算的低,但是比赋值运算的高
- 7>=3+4 在这里面3+4先运算然后等于7,所以式子是可以运行的
- int r = a > 0; 在这里a>0先运算,式子成立,答案为1,所以r = 1
找零计算器
1.找零计算器需要用户做两个操作:输入购买的金额,输入支付吧票面,而找零计算器则根据用户的输入做出相应的动作:计算并打印找零,或告知用户余额不足以购买。
2.从计算机程序的角度看,这就是意味着程序需要读用户的两个输入,然后进行一些计算和判断,最后输出结果
//初始化
intprice=0;
intbill=0;
//读入金额和票面
printf("请输入金额:");
scanf("%d",&price);
printf("请输入票面:");
scanf("%d",&bill);
//计算找零
printf("应该找您:%d\n",bill-price);
双斜杠//注释
双斜杠//是注释(comment)的意思:插入在程序代码中,用来向读者提供解释信息。它们对于程序的功能没有影响,但是往往能使得程序更容易被人类读者理解
/* */注释
1.延续多行数行的注释,要用多行注释的格式来写。多行注释由一对字符序列“/”开始,而以“/”结束
2.也可以用于一行内的注释
3.int ak = 47/36/,y = 9;
当票面不够的情况
1.当票面不够的情况怎么办?这个时候就需要进行判断用户读入的金额是否超过了票面
2.对计算找零这个步骤进行优化:
if( bill>=price){
printf("需要找您:%d\n元",bill-price);
}
这个是当票面够的情况才会显示出需要找多少钱,如果钱不够的话则就不会显示出需要找钱了
3.如果当钱不够的情况需要提示用户"你的钱不够"怎么做?
错误示范:
if( bill>=price){
printf("需要找您:%d/n元",bill-price);
}
printf("你的钱不够\n");
这种情况不管钱够不够都会输出 你的钱不够
else
else = 否则的话
正确的做法是:
if( bill>=price){
printf("需要找您:%d/n元",bill-price);
}else{
printf("你的钱不够\n");
}
比较数的大小
比较数的大小的各种方法
inta,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
intmax=0;
if(a>b){
max=a;
}
printf("大的那个是%d\n", max);
这个代码里面没有解决b>a的问题,当a>b的条件不成立时,程序就结束了,max没有得到值
方案有很多,列举3个
inta,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
intmax=0;
if(a>b){
max=a;
}
if(b>a){
max=b;
}
printf("大的那个是%d\n", max);
inta,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
intmax=0;
if(a>b){
max=a;
}else{
max=b;
}
printf("大的那个是%d\n", max);
inta,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
intmax=b;
if(a>b){
max=a;
}
printf("大的那个是%d\n", max);
if语句
在上面中我们已经充分了解到了if语句的用法跟含义
但其实if也可以不带中括号去执行(不建议),只能执行if接下来的一句内容
例如:
constdoubleRATE=8.25;
constdoubleSTANDARD=40;
doublepay=0.0;
inthours;
printf("请输入工作的小时数:");
scanf("%d",&hours);
printf("\n");
if(hours>STANDARD)
pay=STANDARD*RATE+ (hours-STANDARD) * (RATE*1.5);
else
pay=hours*RATE;
printf("应付工资:%f\n",pay);
#include <stdio.h>
intmain()
{
constintMINOR=35;
intage=0;
printf("请输入你的年龄: ");
scanf("%d", &age);
printf("你的年龄是%d岁。\n", age);
if (age<MINOR) {
printf("年轻是美好的,");
}
printf("年龄决定了你的精神世界,好好珍惜吧。\n");
return0;
}
3.2分支
嵌套的判断
当if的条件满足或者不满足的时候要执行的语句也可以是一条if或者if-else语句,这就是嵌套的if语句
else的匹配
else总是和最近的那个if匹配
缩进
缩进格式不能暗示else的匹配
if( code==READY )
if( count<20 )
printf("一切正常\n");
else
printf("继续等待\n");
tips
1.在if或者else后面总是用{}
2.即使只有一条语句的时候
分段函数
if( x<0 ){
f=-1;
}elseif( x==0){
f=0;
} else {
f=2*x;
}
if语句常见的错误
1.忘了大括号(永远在if和else后面加上大括号,即使当时后面只有一条语句)
2.if后面忘了分号
3.错误使用==和=
4.使人困惑的else
switch-case
1.控制表达式只能是整数型的结果
2.常量可以是常数,也可以是常数计算的表达式
3.根据表达式的结果,寻找匹配的case,并执行case后面的语句,一直到break为止
4.如果所有的case都不匹配,那么就执行default后面的语句;如果没有default,那么就什么都不做
switch(控制表达式){
case常量:
语句
...
case常量:
语句
...
default:
语句
...
}
break
switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break,或者switch结束为止