C语言选择结构程序设计
一、关系运算符和关系表达式
1. 关系运算符
关系运算符 | 解释 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
2. 关系表达式
如果一个表达式最后进行的是关系运算,则该表达式就是关系表达式。
关系表达式的值是一个逻辑值,数学中用“真”、“假”来表示,C语言中用1和0来表示。
二、逻辑运算符和逻辑表达式
1. 逻辑运算符
逻辑运算符 | 解释 | 值 | 优先级 |
---|---|---|---|
! | 非 | 否定、取反 | 最高 |
&& | 与 | 两边为真结果为真 | 较高 |
|| | 或 | 一边为真结果为真 | 较低 |
2. 逻辑表达式
C语言中,任何表达式(包括变量、常量)都有逻辑值,只要表达式的值非0,则认为它的逻辑值为“真”(即1),只有表达式的值为0时,其逻辑值才为“假”(即0)。
①3+2的值是5,若参与逻辑运算,则取它的逻辑值1;
②-5参与逻辑运算时,逻辑值也是1;
③float x=1.2; 则x的逻辑值是1;
④!’A‘的逻辑值为0。
三、if语句
1. 简单if语句
#include<stdio.h>
int main()
{int a=2,b=3;if(a>b)printf("a大于b");elseprintf("a小于等于b");return 0;
}
2. 条件运算
表达式1 ? 表达式2 :表达式3
含义:若表达式1的值非0,则该条件表达式的值是表达式2的值,否则是表达式3的值。
#include<stdio.h>
int main()
{int a,b,max;printf("Input a,b:");scanf("%d,%d",&a,&b);max = a>b?a:b; //用条件表达式计算两个整数的最大值printf("max = %d\n",max);return 0;
}
3. 多分支控制if语句
#include<stdio.h>
int main()
{int x;scanf("%d",&x);if(x>=90)printf("优");else if(x>=80)printf("良");else if(x>=70)printf("中");else if(x>=60)printf("及格");elseprintf("不及格");return 0;
}
4. 嵌套if语句
#include<stdio.h>
#include<math.h>
#define EPS 1e-6
int main()
{float a,b,c,disc;scanf("%f,%f,%f",&a,&b,&c);disc = b*b-4*a*c; //计算判别式if(fabs(a)<=EPS) //a=0时,输出不是二次函数{printf("这个函数不是二次函数");}else{if(fabs(disc)<=EPS){printf("这个方程有两个相等的根");}else{printf("这个方程有两个不相等的根");}}return 0;
}
在这段代码中,为什么不直接将实数与0比较呢?
因为在这个例子中,实数在内存中是以浮点形式存储的,所占的位数是有限的,比如说,float(0.0000000000001)=0.000000,浮点数并非真正意义上的实数,只是在某种范围内的近似,因此也只能用近似的方法将实数与0进行比较。
四、switch语句
#include<stdio.h>
int main()
{int x;char grade;scanf("%d",&x);switch(x/10){case 10:case 9: grade='A';break; //用break终止switch语句的执行case 8: grade='B';break;case 7: grade='C';break;case 6: grade='D';break;default: grade='E';}return 0;
}
常见错误:
①switch后面的表达式不加括号,如switch x/10 应该是switch (x/10);
②switch后面多写了分号,如“switch (x/10);”应该是“switch (x/10)”;
③case与后面的表达式之间不写空格,如“case10:”应该是“case 10:”;
④漏写break;。