一:关系运算符和关系表达式:
1 C语言有6种关系运算符: 〈(小于)、〈=(小于等于)、〉(大于)、〉=(大于等于)、!=(不等于)。
其中前四种运算符优先级别相同,后两种相同,且前四种优先级别大于后两种。
关系运算符优先级低于算术运算符(+ - * / %);
关系运算符优先级高于赋值运算符(=);
例:c>a+b 等效于 c>(a+b);
a>b==c等效于 (a>b)==c;
a=b>c等效于 a=(b>c);
建议:新手在编写程序时最好把括号加上,防止混淆。
2 关系表达式:用关系运算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)边接起来的式子。
例:a!=b a+b>b+c (a=3)>(b=5) 'a'<'b' (a>b)<(b<c)
关系表达式的值是一个逻辑值(真或假),用“0”或“1”表示。
下面来看一个程序:
#include<stdio.h>
void main()
{
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);
pirntf("%d,%d\n",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
getch();
}
运行结果为:1,0
1,1
0,0
在本例中求出各种关系运算符的值,对于含有多种关系运算符的表达式,如k==j==i+5根据运算符的左结合性,先求k==j,该式不成立,其值为0,再算0==i+5;也不成立,故表达式的值为0。
二:逻辑运算符和表达式
C语言中提供了三种逻辑运算符:&&(与运算) ||(或运算) !(非运算)
前两种具有左给合性,后一种为右结合.
赋值运算符--&&,||--关系运算符--算术运算符--! (优先级由低到高)
a>b && c>d等价于(a>b) && (c>d)
!b==c||d<a等价于((!b)==c)||(d<a)
a+b>c && x+y<b等价于((a+b)>c) && ((x+y)<b)
同关系表达式,逻辑表达式也为一个值.真(1)或假(0).
在逻辑表达式的求解中,并不是所有的运算符都被执行,例:
a&&b&&c 只有a为真时,才需要判别b的值,只有a和b都为真时的情况下才需要判别c的值.只要a为假,就不必判别b和c的值.
与之相同,只要a为真,就不必判别b和c.只有a为假时,才判别b,只有a和b都为假时,才判别c.
下面来看一个用到逻辑运算符比较多的程序:
与程序:判别某一年是否为闰年.
#include<stdio.h>
void main()
{
long year;
printf("Please input year:");
scanf("%ld",&year);
if((year%4==0&&year%100!=0)||year%400==0);
printf("%ld is run year",year);
else
printf("%ld is not run year",year);
getch();
}
在这个程序中也可以在第七行前加一个"!"来判别非闰年.
三:if 语句
用if语句可以构成分支结构,根据给定的条件进行判断,以执行某个分支程序段。C语言中的if语句有三种形式。
1 if(表达式)语句
来看一个程序,输入两个实数,按代数值的由小到大的顺序输出这两个数。
#include<stdio.h>
void main()
{
float a,b,f;
scanf("%f,%f",&a,&b);
if(a>b)
{
t=a;a=b;b=t;
}
printf("%5.2f,%5.2f\n",a,b);
getch();
}
该语句的语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。
2 if(表达式)
语句1
else
语句2
其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。
3 if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
.
.
.
else if(表达式M)语句M
else 语句N
其语义是:依次判断表达式的值,当出现某个值为真时, 则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n 。 然后继续执行后续程序。
再来看两个程序,(1)
#include<stdio.h>
void main()
{
float a;
scanf("%f\n",&a);
if(a<10)
printf("one");
else if(a<100)
printf("two");
else if(a<1000)
printf("three");
else if(a<10000)
printf("four");
else
printf("error");
getch();
}
(2)
#include<stdio.h>
void main()
{
float x,y;
printf("Please input x:");
scanf("%f\n",&x);
if(x<1) y=x;
else if(x>=1&&x<15) y=2*x+1;
else if(x>=10&&x<24) y=6*x;
else y=x;
printf("%f\n",y);
getch();
}
4 在使用if语句中还应注意以下问题
(1) 在三种形式的if语句中,在if关键字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如: if(a=5) 语句;if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。如在if(a=5)…;中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。
又如,有程序段:
if(a=b)
printf("%d",a);
else
printf("a=0");
本语句的语义是,把b值赋予a,如为非0则输出该值,否则输出“a=0”字符串。这种用法在程序中是经常出现的.
5if语句的嵌套
if(表达式)
if(表达式)语句1
else 语句2
else
if(表达式) 语句3
else 语句4
6 条件运算符
表达式1?表达式2:表达式3
如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。
其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。 条件表达式通常用于赋值语句之中。
来看程序:
写程序:输入三个数,求其最大.
#include<stdio.h>
void main()
{
long a,b,c,max;
printf("Please input a,b,c:");
scanf("%ld%ld%ld\n",&a,&b,&c);
max=(a>b)?a:b;
max=(max>c)?max:c;
printf("The biggest is %ld\n",max);
}
写程序:输入一个字型,判别它是否为大写字母,如果是,把它转换成小写字母;如果不是,原样输出.
#include<stdio.h>
void main()
{
char c;
scanf("%c",&c);
c=(c>='A'&&c<='Z')?(c+32):c;
printf("%c\n",c);
}