3.1.1 时间差做判断
3.1.2 找零计算器
3.1.4 否则的话
3.1.5 if语句再探
3.2.1嵌套的if-else
3.2.2级联的else if
3.2.3if-else的常见错误
3.2.4多路分支
知识点提炼
if语句(一个条件)
if (im<0)
{
im=60+im;
ih--;
}
if(*条件*) 这句后面是没有分号的,因为分号意味着这句结束,所以分号应该放在之后要执行的语句后面。
表明if语句决定后面的赋值语句是否被执行。if后面如果只有一条执行语句的话,就不用写大括号。即:没有大括号的时候只有后面的一句话是有效的。
写程序时不管后面几条语句,一定都要加大括号(避免出错)

关系运算符

注意判断是否相等是【==】,容易出错
关系运算的结果只有0和1,布尔型
#include<stdio.h>
int main()
{
printf("%d\n",5==3);//0
printf("%d\n",5>3);//1
printf("%d\n",5<=3);//0
return 0;
}
关系运算符的优先级比算术运算符低,比赋值高;
7>=3+4
int r=a>0 //r=0或1
其中==和!=的优先级比其他关系运算符的优先级低,连续的关系运算符从左到右进行
5>3==6>4//1
6>5>4//从左到右,1>4,不成立,结果为0
a==b>0
a==b==6
if else语句(2-3个条件)
特点:if else注意这里的条件一定是非正即负,非黑即白,非0即1的,需要有相当明确的界限。
要么要么,二选一的时候没必要做两次判断,灵活运用if-else
//找最大值:
int max=0;
if(a>b)
{max=a;}
if(b<a)
{max=b;}
//a=b的时候,max=0
改进版本
int max=0;
if(a>b)
{max=a;}
else
{max=b;}

前面已经标红注明了,不再赘述。
嵌套if-else
当if的条件满足/不满足的时候要执行的语句也可以是一条if或者if-else语句。这就是嵌套的if语句

if (a > b)
{
max = a;
if (a > c)
max = a;
else
max = c;
}
else总是与最近的那个if相匹配。 C中缩进不暗示相匹配。只有大括号能改变匹配模式。为了避免错误,可以在每个if、else要执行的语句加上大括号。
级联if else(3+条件)
例子:分段函数:x>0时候y=1,<0时候=-1,=0时候=0。
if(x>0)
y=1;
else if(x<0)
y=-1;
else
y=0;
else if提供了多分支选择的条件。
需要注意的是:else if相当于是在第一个分支中的else部分内部嵌套了一个if-else语句,所以else if后面必须要写上条件。

多路分支switch case:多个条件
可以用级联else if也可以用switch case语句。比起if语句来说,switch语句符合哪种情况就会直接跳转到其所在行然后执行,不会再从第一个情况开始比对。十分的干净利落。


switch():根据switch括号内的变量或者表达式结果来决定执行哪个case冒号后面的语句,直到遇到break为止。如果所有条件都不匹配,执行default的语句。
switch (控制表达式)
{case 常量:
语句;
}
switch语句括号里的表达式结果或者是变量只能是整型。
case语句里的常量只能是常数或者常数计算表达式或者定义的常量,如1、2、3;1+1,1+2;a、b、c。
break语句,break语句会使程序离开整个switch case语句。注意:并不是不同的case分割了switch语句,实际上,如果case之间没有break语句的话,程序会从第一个符合的case开始将所有case加上default都执行一遍最后退出(除非中间遇到了break)。case只是标志了整个分支开始执行的位置。

如果两个情况要执行的语句相同,比如100分和90+分都是一个等级,可以写成这样:
switch(grades)
case 10:
case 9: printf("你的成绩是A!");break;
注释
利于人类理解
// 单行
/* */ 多行注释
//这是一些注释
/*这也是
一些
注释*/
一次性注释多行:选中+CTRL+【/?】键;一键注释、一键取消注释
项目学习记录
0209做判断
#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);
}
0209找零if else
#include<stdio.h>
int main(){
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;
}
0209比较三个数的大小

#include <stdio.h>
int main()
{
int a, b, c;
int max = 0;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
max = a;
if (a > c)
max = a;
else
max = c;
}
else
{
max = b;
if (b > c)
max = b;
else
max = c;
}
printf("%d", max);
}
0209switch case
无法运行
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);
switch(x)
case x<0:
printf("%d",-1);
break;
case x=0:
printf("%d",0);
break;
case x>0:
printf("%d",2*x);
break;
return 0;
}
//case语句里的常量只能是常数或
//者常数计算表s达式或者定义的常量,如1、2、3;1+1,1+2;a、b、c。
改进一些,x=0时无法输出。
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);
int a;
if (x<=0)
a=-x;
if (x>0)
a=x;
switch(x/a){
case 1:
printf("%d",2*x);
break;
case -1:
printf("%d",-1);
break;
default:
printf("%d",0);
}
return 0;
}
//(x/a)由于除数不为0,因此不进入switch分支,那么x=0这条路就不正确
正确版
#include <stdio.h>
int main(){
int x;
scanf("%d",&x);
int a;
if (x<0)
a=-x;
else if (x>0)
a=x;
else
a=1;
switch(x/a){
case 1:
printf("%d",2*x);
break;
case -1:
printf("%d",-1);
break;
default:
printf("%d",0);
}
return 0;
}