16.0,8888,9999
17:redblueredblueredblue
18:j=1
j=2
j=0
j=2
j=0
j=1
i=3
因为"=="是判断等号两边的值是否相等的语句。
c语言中的“=”是赋值,“==”才是判断。
等号左边是x,它的值为3,右边是y+z,因为"+"的运算优先级大于"=="所以先执行y+z,得到表达式的值为1+0=1.
所以if(x==y+z)等价于判断 if(3==1),"3==1"的返回值自然是false
于是不执行if()语句下的语句,而是执行else中的printf("+++")
所以最后的输出是 +++
啊,是五道题啊...不是第五题...
没看清楚,不好意思。
等下补答
1. 前缀"--"和后缀"--"的区别:前缀返回的是值改变之后的值,后缀返回的是改变之前的值。
所以输出的一个是后缀的10,一个是前缀的9.
当然如果你再printf("%d,%d",x,y)就都输出9了。
2. 因为x,y,z都是整型变量,所以x/y的返回值是整除的值,也就是商。
10/3=3余1,而%相当于mod,也就是10对3取模。取模运算只能对整数进行。
在两个数都是正整数的时候就等于除法的余数,也就是1。
z=(x/y)是赋值语句返回的值就是改变后的z。
3. 可以看到,它printf的是两个表达式的值。而且是两个逻辑表达式。
第一个是(a+b>c &&b==c) “&&”表示且,也就是当两个都为真的时候返回true,任意一个为假,返回false,可以看到a+b>c是true,而b==c是false,所以返回值是false,因为是以整数形式输出,那么就是true=1,false=0.
第二个式子是c>b>a,c语言中没有连比,这个式子会从左算到右。即(c>b)>a。
其中c>b是true,因为要和a这个整型变量比,所以会强制转int变成1,然后1>a返回值就是false了。
4. 也是前置和后置的问题。m=++i 返回的是i=i+1之后的值。也就是6,n=j--返回的是变化之前的值就是12.
程序1数组为:1 第0行
1 1 第1行
1 2 1 第2行
1 3 3 1 第3行
输出为:第2,3行
程序2作用是把输入字符串中各字符的ASCII码加1,遇到z则转成a
故答案是:
17 C
18 D
19 D
20 C
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)