判断
1. 计算时间差
输⼊两个时间,每个时间分别输⼊⼩时和 分钟的值,然后输出两个时间之间的差, 也以⼏⼩时⼏分表⽰。
#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 < 60){ im = 60 + im; ih--; } printf("时间差是%d小时%d分\n",ih,im); return 0; }
2. 条件
计算两个值之间的关系,所以叫做关系运算
关系运算的结果
当两个值的关系符合关系运算符的预期时, 关系运算的结果为整数1,否则为整数0
printf("%d\n", 5==3);
printf("%d\n", 5>3);
printf("%d\n", 5<=3);
优先级
所有的关系运算符的优先级⽐算术运算的 低,但是⽐赋值运算的⾼
7 >= 3 + 4
int r = a>0;
判断是否相等的==和!=的优先级⽐其他的 低,⽽连续的关系运算是从左到右进⾏的
5 > 3 == 6 > 4
6 > 5 > 4
a == b == 6
a == b > 0
3. 找零计算器
找零计算器需要⽤户做两个操作:输⼊购 买的⾦额,输⼊⽀付的票⾯,⽽找零计算 器则根据⽤户的输⼊做出相应的动作:计 算并打印找零,或告知⽤户余额不⾜以购 买。
从计算机程序的⾓度看,这就是意味着程 序需要读⽤户的两个输⼊,然后进⾏⼀些 计算和判断,最后输出结果。
#include <stdio.h> int main() { //初始化 int price = 0; int bill = 0; //读入金额和票面 printf("请输入商品金额:"); scanf("%d", &price); printf("请输入你的票面:"); scanf("%d",&bill); //计算找零钱 printf("应该找你:%d\n",bill - price); return 0; }
/* */注释
延续数⾏的注释,要⽤多⾏注释的格式来 写。多⾏注释由⼀对字符序列“/*”开始, ⽽以“*/”结束。
也可以⽤于⼀⾏内的注释
int ak=47 /* 36*/, y=9;
4.判断票⾯够不够
#include <stdio.h> int main() { //初始化 int price = 0; int bill = 0; //读入金额和票面 printf("请输入商品金额:"); scanf("%d", &price); printf("请输入你的票面:"); scanf("%d",&bill); //计算找零钱 if(bill>=price){ printf("应该找你:%d\n",bill - price); }else{ printf("你的票面小于商品金额\n"); } return 0; }
5. ⽐较数的⼤⼩
#include <stdio.h> int main() { int a,b; printf("请输入两个整数:"); scanf("%d %d",&a,&b); int max=0; if(a>b){ max = a; }else{ max = b; } printf("大的那个是%d\n",max); return 0; }
6.if语句
⼀个基本的if语句由⼀个关键字if开头,跟 上在括号⾥的⼀个表⽰条件的逻辑表达 式,然后是⼀对⼤括号“{}”之间的若干条 语句。如果表⽰条件的逻辑表达式的结 果不是零,那么就执⾏后⾯跟着的这对 ⼤括号中的语句,否则就跳过这些语句 不执⾏,⽽继续下⾯的其他语句
计算薪⽔
#include <stdio.h> int main() { const double RATE = 8.25; const int STANDARD = 40; double pay = 0.0; int hours; printf("请输入工作的小时数"); scanf("%d",&hours); if(hours>STANDARD){ pay = STANDARD * RATE + (hours - STANDARD) * (RATE * 1.5 ); }else{ pay = hours * RATE; } printf("\n应付工资:%f\n",pay); return 0; }
7. 判断成绩
#include <stdio.h> int main() { const int PASS = 60; int score; printf("请输入成绩:"); scanf("%d",&score); printf("你输入的成绩是%d.\n",score); if(score < PASS){ printf("很遗憾,这个成绩没有及格"); }else{ printf("恭喜你,这个成绩及格了。"); } printf("再见\n"); return 0; }
嵌套的if
8.找三个数中的最⼤
如果要求输⼊三个整数,输 出其中最⼤的,应该怎么做?
#include <stdio.h> int main() { int a,b,c; printf("请输入三个整数:"); 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("最大的是%d \n",max); return 0; }
嵌套的判断
当if的条件满⾜或者不满⾜的时候要执⾏的语句也 可以是⼀条if或if-else语句,这就是嵌套的if语句
else的匹配
else总是和最近的那个if匹配
缩进
缩进格式不能暗⽰else的匹配
嵌套的if
if ( gameover == 0 ) if ( player2move == 2 ) printf("Your turn\n");
if ( gameover == 0 ) if ( player2move == 2 ) printf("Your turn\n"); else printf("My turn\n");
9. 级联的if-else if
分段函数
if ( x < 0 ) {
f = -1;
} else if ( x == 0 ) {
f = 0;
} else {
f = 2 * x; }
级联的if-else if
if语句常⻅错误
- 忘了⼤括号
- if后⾯的分号
- 错误使⽤==和=
- 使⼈困惑的else
- if后⾯的分号
- 错误使⽤==和=, if只要求()⾥的值是零或⾮零
- 永远在if和else后⾯加上⼤括 号,即使当时后⾯只有⼀条语 句
代码风格
- 在if和else之后必须加上⼤括号形成语句块;
- ⼤括号内的语句缩进⼀个tab的位置;
10.多路分⽀
switch-case
- 控制表达式只能是整数型的 结果
- 常量可以是常数,也可以是 常数计算的表达式
- 根据表达式的结果,寻找匹 配的case,并执⾏case后⾯的 语句,⼀直到break为⽌
- 如果所有的case都不匹配,那 么就执⾏default后⾯的语句; 如果没有default,那么就什么 都不做
#include <stdio.h> int main() { int type=0; printf("输入1-4\n"); scanf("%d",&type); switch(type){ case 1: printf("你好"); break; case 2: printf("早上好"); break; case 3: printf("中午好"); break; case 4: printf("下午好"); break; default: printf("请输入1-4\n"); } printf("重新运行"); return 0; }
break
switch语句可以看作是⼀种基于计算的 跳转,计算控制表达式的值后,程序会 跳转到相匹配的case(分⽀标号)处。 分⽀标号只是说明switch内部位置的路 标,在执⾏完分⽀中的最后⼀条语句后, 如果后⾯没有break,就会顺序执⾏到下 ⾯的case⾥去,直到遇到⼀个break,或 者switch结束为⽌。
#include <stdio.h> int main() { printf("请输入成绩(0-100)\n"); int grade; scanf("%d",&grade); grade /= 10; switch(grade){ case 10: case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default: printf("F\n"); break; } return 0; }
这段代码不符合”单一出口“的原则,因为我们还没学过字符或字符串数据的处理