本次学习主要学习C语言中的if语句,会介绍到关系运算,简单的if else语句、if else的嵌套、级联的if-else if语句以及switch语句,并且会介绍到if语句的常见错误。另外,还会通过一些例子进行if语句的编程练习。
1. 关系运算
计算两个值之间的关系,叫做关系运算,关系运算符有如下几种:
关系运算的结果:关系运算的结果只有两种,要么关系运算成立,结果为1;要么关系运算不成立,结果为0。
优先级:
① 关系运算符的优先级比算术运算的低,但是比赋值运算高。
例如:printf(“%d\n”,7>=3+4);
输出的结果是1,也就是对3+4的结果进行了与7的关系运算得到的是成立,最后输出了1。表明算术运算优先级高于关系系运算。
② 在所有的关系运算符中,==与!=的优先级又更低一些,其他运算符则是从左到右。
2.if else语句
If(条件成立){
……
}
else
……
如果括号中的条件成立则执行if括号中的语句,不成立则执行else后的语句
例1:找零计算器
分析:
需要用户输入购买物品的金额以及纸币的票面,进行找零的计算,除此之外要考虑判断金额不足的情况,因此这里也用到了判断。所以在之前的例子上加入if语句既可。
if语句代码如下:
if(amount>=price)
{
printf("找您%d元\n",change);
}
else
printf("金额不足");
完整代码如下:
#include
int main()
{
int price = 0,change = 0;
int amount = 100;
printf("请输入金额\n");
scanf("%d",&price);
printf("请输入票面\n");
scanf("%d",&amount);
change =amount-price;
if(amount>=price)
{
printf("找您%d元\n",change);
}
else
printf("金额不足");
return 0;
}
除了上面的那种表示,也可以不带{}
if(判断)
语句1
else
语句2
语句3
这样的写法程序执行为:如果条件成立,执行语句1,不成立执行语句2,if else执行完成后再执行语句3,也就是说语句1是if的一部分,语句2是else的一部分,而语句3与判断语句无关。
3.if else语句的嵌套
程序代码如下:
#include
int main()
{
int a,b,c;
int max=0;
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
if(a>c)
max=a;
else
max=c;
}
else
{
if(b>c)
max=b;
else
max=c;
}
printf("max=%d\n",max);
return 0;
}
if else的匹配问题:else总是和最近的那个else进行配对,所以安全的编程方式是加{}。
4.级联的if— else if语句
例3:一个分段函数的表示
F(x)=-1;x<0
0;x-0
2x;x>0
代码表示如下:
if(x<0)
f=-1;
else if(x=0)
f=0;
else
f=2*x;
5.if语句常见错误
①忘了大括号,形式如下:
if(判断)
语句1
语句2
这时语句2即使进行了缩进,但实际不是if内的语句,会在if判断后执行。
② if后面加分号
C语言要求每个语句后面都有分号,但是实际上if包含后面的语句或者大括号的内的语句;如果if的圆括号加了分号,则默认if判断后没有所需要执行的语句。
③ if的判断中==与=
如果只有一个=,这表示的是一个赋值,而并不是一个关系判断。if只要求()里面的值是0或者1,也就是进行一个关系运算得到结果。
④ 代码风格
如果是if else后面只有一个语句,可以不写{},如果代码比较复杂,一定要用{}
如果有{},里面的部分需要进行缩进。
6.多路分支switch else语句
如果有多路分支,用多个else if语句会比较繁琐,这里就引入了switch else语句。
形式如下:
switch(控制表达式)
{
case常量:
语句
case常量:
语句
default:
语句
}
控制表达式只能是整数类型的结果。
例4:
#include
int main()
{
int type;
scanf("%d",&type);
switch(type)
{
case 1:
printf("你好");
break;
case 2:
printf("早上好");
break;
case 3:
printf("晚上好");
break;
default:
printf("什么?");
break;
}
return 0;
}
break:
switch语句可以看做是一种跳转,根据表达式判断跳转到相对的case处,在switch内部如果没有break,运行完会顺序运行下一个case,一直到遇到break或者运行完整个switch。