第三章 判断
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错误










