1-2.表达式 ( (ch = getchar() ) != '\n')
是关系表达式。T
意思是:
输入回车后跳出循环
((ch = getchar()) != '\n')
先做 ch=getchar() 然后把这个表达式的值 与'\n'进行判断 做为循环跳出条件
1-4.
以下C语言表达式的值为“真”。
'D' - 'A' == 'd' - 'a'
?
1-5。?
1-6。优先级排序如下:算术大于关系大于逻辑。但逻辑非除外,它比以上说的优先级都高。
1-8.逻辑值只有两个值,即true(真)和false(假),在C语言中true用1表示,false用0表示。
2-1.0,8>6为真即1,1>3为假即0,验证如下:
#include
int
main()
{
printf
(
"%d\n"
,8>6>3);
}
输出结果:0
2-3.逻辑运算符两侧运算对象的数据类型(可以是任意类型的数据)。
2-6。下列选项中,值为1的表达式是____。 A. 1-'0' B. 1-'\0' C. '1'-0 D. '\0'-'0'
?
我们要得到的结果,是内存中两个值得差
而千万不要以它们在我们面前的表现形式而误导,这么写只是为了方便而已
A:‘\0’ ASCII码 值就是0 所以 1-0 =1
B:'0' ASCII码 值应该是48(貌似)值不是1
C:'1'-0 同上
D 0 - 48 != 1
2-7.
设有定义:
int a = 1, b = 2, c = 3, d = 4, m = 2, n = 2;
则执行表达式
(m = a < b) && (n = c > d);
后,n的值为(0)
m=1,n=0;解释如下,如果a
因为(m=ad)进行处理。
此题因为&&左边的表达式为真(若左边的表达式为假,则此题n=2,),所以会处理&&右边的(n=c>d)这个式子,由以上分析,(c>d)为假,其真值为0,所以n为0。
则执行表达式
(m = a > b) && (n = c > d);
后,n的值为(2)
执行之后 m =0 n=3
因为 执行到 m=a>b时候 这个值返回是0 不成立 所以后面的 n=c>d 就不执行了 也就是 n 还是原来的值没有变
2-8.表达式(x%3)等价于表达式( x%3!=0)。考点,C语言中的逻辑表达式,非0为真。
2-11.设 int x=1, y=1; 表达式(!x||y--)的值是( 1 )。
1.先算!x,结果为0;
2.再算y--,结果为1,y的值变为0;
3.再算逻辑或||,0或1,结果为1。所以最后结果为1
优先级:自减运算符>逻辑非运算符>逻辑或。
基本的优先级需要记住:
指针最优,单目运算优于双目运算,如正负号。
先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7。
逻辑运算最后结合。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。
扩展资料:
运算符计算的时候还要注意左结合性和右结合性:
C语言中各运算符的结合性分为两种:左结合性和右结合性。
例如:算术运算符的结合性是自左至右,即先左后右。
如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。 最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。
C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。(上文的优先级有分辨左右结合性)。
2-12.?
2-13.
判断char型变量ch是否为大写字母的c语言表达式是ch>='A' && ch<='Z' 。
char用于C或C++中定义字符型变量,取值是字符常量,只占一个字节。系统在表示一个char型变量时,是将变量的ASCII码存入内存。取值范围为 -128 ~ +127。所以可以直接用大写字母对应的ASCII码进行判断。即判断char型变量ch是否为大写字母的c语言表达式是ch>='A' && ch<='Z' 。
扩展资料:
C语言中如int、long、short等不指定signed或unsigned时都默认为signed,但char在标准中不指定为signed或unsigned,编译器可以编译为带符号的,也可以编译为不带符号的。
字符型变量的值由单引号括起来,字符串变量的值由双引号括起来。字符变量只能是单个字符,字符串变量则可以含一个或多个字符。可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。
大写字母的ascii码值连续,所以只需要判断头尾即可
ch>='A' && ch<='Z' 符合 则为大写,否则不是大写。
2-14.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( C)
A、c=b=a; B、(a=c)||(b=c); C、(a=c)&&(b=c); D、a=c=b;
A和D都是错误的表达式,
B只能把C的值赋给变量a,因为c不为零。所以(a=c)的值也不零,那么不管“||”后面的值是否为零,(a=c)||(b=c)的值始终为1,所以计算机不会再浪费时间去处理“||”后面的表达式,因为计算机已经得到(a=c)||(b=c)的值了。同理,如果(a=c)的值为零,计算机也不会再去处理“&&”后面的表达式。
关于自增自减运算符的优先级
1注意运算符的运算对象
自增、自减运算符只能作用于变量,而不能作用于常量或表达式。因为自增、自减运算符具有对运算量重新赋值的功能,而常量、表达式无存储单元可言,当然不能做自增、自减运算。只要是标准类型的变量,不管是整型、实型,还是字符型、枚举型都可以作为这两个运算符的运算对象。如以下四个表达式都是合法的:i+++j++、++i+(++j)、++a+b++、++array〔--j〕;而++6、(i+j)++、‘A’++、++i+++j、(&p)++这五个表达式却是不合法的。为什么i+++j++合法,而++i+++j却不合法?C的编译器对程序编译时,从左到右尽可能多地将字符组合成一个运算符或标识符,因此i+++j++等效于(i++)+(j++),两个“++”作用的对象都是变量,这是合法的;而++i+++j等效于++(i++)+j,第1个“++”作用的对象是表达式“i++”,这是不允许的。
2注意运算符的结合方向
表达式k=-i++等效于k=(-i)++还是k=-(i++)?因为负号运算符和自增运算符优先级相同,哪一个正确就得看结合方向。自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。
2-15.
设x、y、t均为int型变量,则执行语句:
x=y=3;t=++x||++y;
后,y的值为()
解答:||x=y=3;首先3赋值给x和y,x=3;y=3
然后t=++x||++y;这个语句要理解||这个的含义
例如:A||B当A为真(不等于0为真)时,这个语句就成立了,不再考虑B的值,也不再处理B的表达式;所以,t=++x||++y;x=3时候,t=++x(就t=4);++y不用处理的
如果:A||B当A为假时候(等于0)就处理B的表达式
就这样:x=3,y=3,t=4;
||是符号或,优先级是从左到右判断。如果第一个语句为真则结果为真,不执行第二个语句直接跳出;如果第一个语句为假则执行第二个语句,当第二个语句为真时结果是真,为假时结果为假。因为x是3,++x就是4,所有非零的数字都是真,所以t的值直接为1,不执行++y,所以y还是最初赋值的3.
2-16.执行printf("%f",(x=3,y=5,x>y?1:1.5));后的输出结果是(1.50000)。
?:是一个表达式的方式,相当于x>y成立吗?成立就是1,不成立就是1.5。
2-18.
已知int i, a; 执行语句后,变量i的值是(30)
i=(a=2*3,a*5),a+6;
这里考察的是C语言中运算符的优先级,先执行括号的程序,然后执行逗号运算符,先执行a=2*3,再执行a*5,取右操作数,然后赋值给i,就是30。
拓展训练:在C程序中,逗号运算符的优先级最低。
C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。
如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级
关于int main()和int main(void)
C语言 int main0 和 int main(void) 的区别?
int main(void)指的是此函数的参数为空,不能传入参数,如果你传入参数,就会出错。
int main() 表示可以传入参数。
2-19. 定义变量int a,b;
,则表达式a = (b = 3, 4), 5;
执行过后,a
、b
的值分别是4,3。
4-1.下列程序运行后的输出结果是 10200
int a=10, b=20,c;
c=(a%b<1)‖(a/b>1);
printf("%d %d %d\n", a, b, c);
输出a=10,b=20,因为=(赋值运算符)比||逻辑或运算符优先级低,所以c最后被判断为0
5-1. 解答:2#5#
当a=1,b=2,c=3时,打印语句printf(“%d#%d#”,(a, b), a>b?(c=4):(c=5))的输出是__
逗号表达式,它将以逗号为界,从左到右依次计算每个表达式的值,最后返回最右边的表达式的值。
5-4.三角形:a+b>c&&a+c>b&&b+c>a||a==b==c