第三章 判断
3.1 判断
做判断
例:计算时间差
int hour1, minute1;
int hour2, minute2;
scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);
输入两个时间,每个时间输入小时和分钟,然后输出两个时间的差值,输出也为小时和分钟,可是如果两个时间段分别为1:40和2:20就会出现结尾的情况,那么我们如何计算这两个时间差呢?
如果
1、先用分别减的方案,然后判断有没有出现借位的情况;
2、出现借位就是两个分钟的差值小于0。
int im = minute2 - minute1
if(im < 0){
......
}
所以上面计算时间差的例子应该这么写
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<0,那么
im = 60 + im;
ih --;
}
printf("时间差为%d小时%d分。\n" ,ih, im);
如果
if(条件成立){
......
}
判断的条件
条件
· 计算两个值的关系,叫关系运算
关系运算的结果
· 当两个值的关系符合关系运算符的预期时,关系运算的结果为整数1,否则为整数0.
· printf("%\n", 5==3);
· printf("%\n", 5<3);
· printf("%\n", 5>=3);
优先级
·所有关系运算符的优先级都比算数运算符的优先级低,但是比赋值运算高
· 12 >=6+6
· int a = a > 0
· 判断是否相等的==和!=优先级比其他的低,而连续的数值运算是从左至右的顺序计算的
· 5 > 3 == 6>4
· 6>5>4
· a==b>0
注释
1、单行注释:
语法://注释的内容
功能://符号右边的一行内容被编译器忽略(按了回车才算换行)
快捷键:Command + / 再次执行取消注释
2、多行注释:
语法:/* 注释的内容 */
或者
/*
注释的内容
*/
功能:/* */符号里面的所有内容都被编译器忽略
· 解释某一条语句的时候就用单行注释
· 解释一段程序的时候用多行注释
例:找零计算
#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;
}
判断票面够不够
#include <stdio.h>
int main()
{
// 初始化
int price = 0;
int bill = 0;
// 读入金额和票面
printf("请输入金额:");
scanf("%d", &price);
printf("请输入票面:");
scanf("%d", &bill);
// 计算找零
if ( bill >= price ) { //如果bill >= price,那么
printf("应该找您:%d\n", bill - price);
}
return 0;
}
不够怎么办
画流程图
#include <stdio.h>
int main()
{
const int MINOR = 35;
int age = 0;
printf("请输入你的年龄: ");
scanf("%d", &age);
printf("你的年龄是%d岁。\n", age);
if ( age < MINOR ) {
printf("年轻是美好的,");
}
printf("年龄决定了你的精神世界,好好珍惜吧。\n");
return 0;
}
否则的话(else)
#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;
}
例:比较数的大小
#include <stdio.h>
int main()
{
int a,b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
int max = b;
if ( a > b ) {
max = a;
}
printf("大的那个是%d\n", max);
return 0;
}
或者
#include <stdio.h>
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\n", max);
return 0;
}
if语句
一、if(…) {…}
1.一般形式:
if (表达式) {语句;}
表达式:
a,用非 0 值表示真,用 0 表示假;
b,if(flag) 相当于 if(1==flag)
c,浮点数无法与 0 比较,只能用近似的值比较;
2.用于单分支选择结构;
3.如含有交叉关系,使用并列的if语句;
二、if(…) {…} else {…}
- 一般形式:
if(表达式) {语句1; } else { 语句2;}
- 用于双分支控制的条件语句;
- 用于非此即彼的关系时;
三、if(…) {…} else if(…) {…} … else if(…) {…} else {…}
一般形式:
if(表达式1) { 语句1;}
else if(表达式2) {语句2;}
…
else if(表达式n){语句n;}
else{语句n+1;}
用于多分支的控制的条件语句;
例:
计算薪水
#include <stdio.h>
int main()
{
const double RATE = 8.25;
const int STANDARD = 40;
double pay = 0.0;
int hours;
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);
return 0;
}
判断成绩
#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和else后面要用{}
-
大括号能帮助我们去理解代码更好的观看代码
-
分开与else执行语句的工具
-
限定if内的执行语句和else的执行语句
-
增加可读性
-
减少出错率
二、/* */会被替换为什么?
是空格
#include<stdio.h>
int main()
{
printf("test\n");
return/**/0;
}
这个程序可以正常编译
去掉/**/,则不能编译,显示return0错误