关系运算符和表达式
在中经常需要比较两个量大小关系以决定下步工作比较两个量运算符称为关系运算符在C语言中有以下关系运算符:
<小于
<=小于或等于
>大于
>=大于或等于
等于
!=不等于
关系运算符都是双目运算符其结合性均为左结合关系运算符优先级低于算术运算符高于赋值运算符在 6个关系运算符中<,<=,>,>=优先级相同高于和!=和!=优先级相同
关系表达式
关系表达式般形式为:表达式关系运算符表达式例如:ab>c-d,x>3/2,a1<c,-i-5*jk1;都是合法关系表达式由于表达式也可以又是关系表达式因此也允许出现嵌套情况例如:a>(b>c),a!=(cd)等关系表达式值是“真”和“假”用“1”和“0”表示
如:5>0值为“真”即为1(a=3)>(b=5)由于3>5不成立故其值为假即为0
void{
charc=k;
i=1,j=2,k=3;
floatx=3e5,y=0.85;
prf("%d,%d\\n",a5<c,-i-2*j>=k1);
prf("%d,%d\\n",1<j<5,x-5.25<=xy);
prf("%d,%d\\n",ijk-2*j,kji5);
}
charc=k;
i=1,j=2,k=3;
floatx=3e5,y=0.85;
prf("%d,%d\\n",a5<c,-i-2*j>=k1);
prf("%d,%d\\n",1<j<5,x-5.25<=xy);
prf("%d,%d\\n",ijk-2*j,kji5);
在本例中求出了各种关系运算符值变量是以它对应ASCII码参和运算对于含多个关系运算符表达式如kji5,根据运算符左结合性先计算kj,该式不成立其值为0再计算0i5也不成立故表达式值为0
逻辑运算符和表达式
逻辑运算符C语言中提供了 3种逻辑运算符&&和运算 ||或运算 !非运算和运算符&&和或运算符||均为双目运算符具有左结合性非运算符!为单目运算符具有右结合性逻辑运算符和其它运算符优先级关系可表示如下:
按照运算符优先顺序可以得出:
a>b&&c>d等价于(a>b)&&(c>d)
!bc||d<a等价于((!b)c)||(d<a)
ab>c&&xy<b等价于((ab)>c)&&((xy)<b)
逻辑运算值
逻辑运算值也为“真”和“假”两种用“1”和“0”来表示其求值规则如下:
1.和运算&&参和运算两个量都为真时结果才为真否则为假例如5>0&&4>2,由于5>0为真4>2也为真相和结果也为真
2.或运算||参和运算两个量只要有个为真结果就为真两个量都为假时结果为假例如:5>0||5>8,由于5>0为真相或结果也就为真
3.非运算!参和运算量为真时结果为假;参和运算量为假时结果为真
例如:!(5>0)结果为假
虽然C编译在给出逻辑运算值时以“1”代表“真”“0”代表“假”但反过来在判断个量是为“真”还是为“假”时以“0”代表“假”以非“0”数值作为“真”例如:由于5和3均为非“0”因此5&&3值为“真”即为1
又如:5||0值为“真”即为1
逻辑表达式逻辑表达式般形式为:表达式逻辑运算符表达式其中表达式可以又是逻辑表达式从而组成了嵌套情形例如:(a&&b)&&c根据逻辑运算符左结合性上式也可写为:a&&b&&c逻辑表达式值是式中各种逻辑运算最后值以“1”和“0”分别代表“真”和“假”
void{
charc=k;
i=1,j=2,k=3;
floatx=3e5,y=0.85;
prf("%d,%d\\n",!x*!y,!!!x);
prf("%d,%d\\n",x||i&&j-3,i<j&&x<y);
prf("%d,%d\\n",i5&&c&&(j=8),xy||ijk);
}charc=k;
i=1,j=2,k=3;
floatx=3e5,y=0.85;
prf("%d,%d\\n",!x*!y,!!!x);
prf("%d,%d\\n",x||i&&j-3,i<j&&x<y);
prf("%d,%d\\n",i5&&c&&(j=8),xy||ijk);
本例中!x和!y分别为0!x*!y也为0故其输出值为0由于x为非0故!!!x逻辑值为0对x||i&&j-3式先计算j-3值为非0再求i&&j-3逻辑值为1故x||i&&j-3逻辑值为1对i<j&&x<y式由于i<j值为1而x<y为0故表达式值为10相和最后为0对i5&&c&&(j=8)式由于i5为假即值为0该表达式由两个和运算组成所以整个表达式值为0对于式xy||ijk 由于xy值为非0故整个或表达式值为1
语句
用语句可以构成分支结构它根据给定条件进行判断以决定执行某个分支段C语言语句有 3种基本形式
1.第种形式为基本形式(表达式)语句;其语义是:如果表达式值为真则执行其后语句否则不执行该语句其过程可表示为下图
void{
a,b,max;
prf("\\ninputtwonumbers:");
scanf("%d%d",&a,&b);
max=a;
(max<b)max=b;
prf("max=%d",max);
}
输入两个整数输出其中大数
scanf("%d%d",&a,&b);
max=a;
(max<b)max=b;
prf("max=%d",max);
本例中输入两个数a,b把a先赋予变量max再用语句判别max和b大小如max小于b则把b赋予max因此max中总是大数最后输出max值
2.第 2种形式为-形式
(表达式)
语句1;
语句2;
其语义是:如果表达式值为真则执行语句1否则执行语句2
void{
a,b;
prf("inputtwonumbers:");
scanf("%d%d",&a,&b);
(a>b)
prf("max=%d\\n",a);
prf("max=%d\\n",b);
}
输入两个整数输出其中大数改用-语句判别a,b大小若a大则输出a否则输出b
3.第 3种形式为--形式
前 2种形式语句般都用于两个分支情况当有多个分支选择时可采用--语句其般形式为:
(表达式1)
语句1;
(表达式2)
语句2;
(表达式3)
语句3;
…
(表达式m)
语句m;
语句n;
其语义是:依次判断表达式值当出现某个值为真时则执行其对应语句然后跳到整个语句的外继续执行如果所有表达式均为假则执行语句n然后继续执行后续--语句执行过程如图3—3所示
#"stdio.h"
void{
charc;
prf("inputacharacter:");
c=getchar;
(c<32)
prf("Thisisacontrolcharacter\\n");
(c>=0&&c<=9)
prf("Thisisadigit\\n");
(c>=A&&c<=Z)
prf("Thisisacapitalletter\\n");
(c>=a&&c<=z)
prf("Thisisasmallletter\\n");
prf("Thisisanothercharacter\\n");
}
(c<32)
prf("Thisisacontrolcharacter\\n");
(c>=0&&c<=9)
prf("Thisisadigit\\n");
(c>=A&&c<=Z)
prf("Thisisacapitalletter\\n");
(c>=a&&c<=z)
prf("Thisisasmallletter\\n");
prf("Thisisanothercharacter\\n");
本例要求判别键盘输入类别可以根据输入ASCII码来判别类型由ASCII码表可知ASCII值小于32为控制在“0”和“9”的间为数字在“A”和“Z”的间为大写字母在“a”和“z”的间为小写字母其余则为其它这是个多分支选择问题用--语句编程判断输入ASCII码所在范围分别给出区别输出例如输入为“g”输出显示它为小写
最新评论