5.1 关系运算符和关系表达式
5.1.1 关系运算符及其优先次序
在C语言中有以下关系运算符:
1) < 小于
2) <= 小于或等于
3) > 大于
4) >= 大于或等于
5) == 等于
6) != 不等于
关系运算符都是双目运算符,其结合性均为左结合。
关系运算符的优先级低于算术运算符,高于赋值运算符。
在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。
5.1.2 关系表达式
关系表达式的一般形式为: 表达式 关系运算符 表达式
例如:a + b > c - d;
关系表达式的值是真”和“假”,用“1”和“0”表示。
例5.1
<span style="font-size:18px;">#include<stdio.h>
/* 关系表达式 */
int main(void)
{
char c='k';
int i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1);</span>
<span style="font-size:18px;"> printf("%d,%d\n",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
}</span>
运行结果:1,0
1,1
0,0
5.2 逻辑运算符和逻辑表达式
5.2.1 逻辑运算符及其优先次序
C语言中提供了三种逻辑运算符:
1)、 && 与运算
2)、 || 或运算
3) 、! 非运算C语言中
优先次序:
1)、!(非)→&&(与)→||(或),即!为三者中最高的
2)、逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。
5.2.2 逻辑表达式
逻辑表达式的一般形式为:表达式 逻辑运算符 表达式
例如:(a&&b)&&c
5.3 if语句
用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。
C语言的if语句有三种基本形式。
5.3.1 if 语句的三种形式
1、第一种形式为基本形式:if
if(表达式)
{
语句;
}
其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。
例5.3
<span style="font-size:18px;">#include<stdio.h>
/* 基本的if语句 */
int main(void)
{
int a,b,max;
printf("\n input two numbers: ");
scanf("%d %d",&a,&b);
max = a;
if(max<b)
{
max = b;
}
printf("max = %d\n",max);
}</span>
本例程序中,输入两个数a,b。把a先赋予变量max,再用if语句判别max和b的大小,
如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。
2、第二种形式为: if-else
if(表达式)
语句1;
else
语句2;
其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。
例5.4
<span style="font-size:18px;">#include<stdio.h>
/* if else */
int main(void)
{
int a,b;
printf("input two numbers: \n");
scanf("%d %d",&a,&b);
if(a>b)
{
printf("max = %d\n",a);
}
else
{
printf("max = %d\n",b);
}
}
</span>
改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。
3、 第三种形式为if-else-if形式
其一般形式为:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3; …
else if(表达式m)
语句m;
else
语句n;
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。
然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。
然后继续执行后续程序。
例5.5
<span style="font-size:18px;">#include<stdio.h>
/* if else if else if */
int main(void)
{
char c;
printf("input a character: ");
c = getchar();</span></span>
<span style="font-size:18px;"> if(c<32)
{
printf("This is a control character\n");
}
else if(c >= '0' && c<='9')
{
printf("This is a digit\n");
}
else if(c >='A' && c<='Z')
{
printf("This is a capital letter\n");
}
else if(c >='a' && c<='z')
{
printf("This is a small letter\n");
}
else
{
printf("This is an other character\n");
}
}</span>
本例要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。
由ASCII码表可知ASCII值小于32的为控制字符。在“0”和“9”之间的为数字,在
“A”和“Z”之间为大写字母,在“a”和“z”之间为小写字母,其余则为其它字符。
4、在使用if语句中还应注意以下问题:
1) 在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表
达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以
是一个变量。
例如:
if(a=5) 语句; if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。
2) 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。
3) 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时
执行一组(多个)语句,
则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不
能再加分号。
例如: if(a>b)
{
a++;
b++;
}
<span style="font-size:18px;">#include<stdio.h>
/* if语句的嵌套 */
int main(void)
{
int a,b;
printf("please input A,B: ");
scanf("%d %d",&a,&b);
if(a != b)
{
if(a > b)
{
printf("A > B\n");
}
else
{
printf("A < B\n");
}
}
else
{
printf("A = B\n");
}
}</span>
<span style="font-size:18px;">#include<stdio.h>
/* if语句嵌套 */
int main(void)
{
int a,b;
printf("please input A,B: ");
scanf("%d %d",&a,&b);
if(a==b) printf("A=B\n");
else if(a>b) printf("A>B\n");
else printf("A<B\n");
}</span>
5.3.3 条件运算符和条件表达式
<span style="font-size:18px;">#include<stdio.h>
int main(void)
{
int a,b;
printf("\ninput two numbers: ");
scanf("%d%d",&a,&b);
printf("max=%d\n",a>b?a:b);
}
</span>
5.4 switch语句
<span style="font-size:18px;">#include<stdio.h>
int main(void)
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch(a)
{
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saurday\n");
case 7:printf("Sunday\n");
default:printf("error\n");
}
}</span>
本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3
<span style="font-size:18px;">#include<stdio.h>
int main(void)
{
int a;
printf("input integer number: ");
scanf("%d",&a);
switch(a)
{
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");break;
case 3:printf("Wednesday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saurday\n");break;
case 7:printf("Sunday\n");break;
default:printf("error\n");
}
}</span>
1) 、在case后的各常量表达式的值不能相同,否则会出现错误。
2) 、在case后,允许有多个语句,可以不用{}括起来。
3) 、各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
4) 、default子句可以省略不用。
<span style="font-size:18px;">#include<stdio.h>
int main(void)
{
int a,b,c,max,min;
printf("input three numbers: ");
scanf("%d%d%d",&a,&b,&c);
if(a > b)
{
max = a,
min = b;
}
else
{
max = b,
min = a;
}
if(max < c)
{
max = c;
}
else
{
if(min > c)
{
min = c;
}
}
printf("max = %d\nmin = %d\n",max,min);
}</span>
本程序中,首先比较输入的a,b的大小,并把大数装入max,小数装入min中,
<span style="font-size:18px;">#include<stdio.h>
int main(void)
{
float a,b;
char c;
printf("input expression:a+(-,*,/)b \n");
scanf("%f%c%f",&a,&c,&b);
switch(c)
{
case'+':printf("%f\n",a+b);break;
case'-':printf("%f\n",a-b);break;
case'*':printf("%f\n",a*b);break;
case'/':printf("%f\n",a/b);break;
default:printf("input error\n");
}
}</span>