在这个表达式中,三目运算符的执行顺序是从左往右的
但整个表达式的执行顺序是从右向左执行的
初始值a=1,b=2,c=3,d=4
先执行--a和--d,得到a=0,d=3
再判断c
则原表达式简化为 a++对于a++由于a=0最终的运算结果是1
希望回答对你有帮助!
26. 下列程序段的输出结果是____C___.(知识点6.4)
int x=3;
do
while(!(——x));
A)1 B)3 0 C)1 -2 D)死循环
为什么输出-2就停止了呀??不明白,帮解释哈
---------------------------------------------------------------------
“!”表示非的意思,while()括号中为-2时为真,加个“!”为“非真”即为“假”
---------------------------------------------------------------------
27. 有以下程序,其中x、y为整型变量;
for(x=0,y=0;(x<=1)&&(y= 1);x++,y——);
printf(“x=%d,y=%d”,x,y);
该程序的输出结果是_A____.
A)x=2,y=0 B) x=1,y=0 C) x=1,y=1 D) x=0,y=0
这题答案是怎么算滴呀??说一下过程
---------------------------------------------------------------------
程序第一行(y= 1)这是一个赋值表达式,值为1,就是说它始终为真,并且它还执行给y赋值为1.for语句循环体为空语句,因为后面有一个分号,所以只有当x不满足(x<=1)时结束循环,即为2时。这里还涉及一个逻辑表达式中并不是所有运算符都被执行的问题,也就是说当x为2时,(x<=1)为假,这时不用执行(y= 1)就可以判断逻辑表达式(x<=1)&&(y= 1)为假所以(y= 1)并不被执行,所以由于上一个循环的y——得出y为0,即得出答案x=2,y=0
---------------------------------------------------------------------
24. 若x是int型变量,且有下面的程序片段: (知识点6.5)
for(x=5;x<8;x++)
printf((x%2)?(“**%d”):(“##%d\n”),x);
该程序片段的输出结果是 _A______.
A)**5##6 B)##5 C)##5**6##7 D)**5##6**7 **7 **6##7
当x=7时,为什么不见输出捏??答案是怎么得呀??
---------------------------------------------------------------------
答案应该有问题吧?应该是第一行输出**5##6然后换行在输出**7
---------------------------------------------------------------------
17. 语句:printf(“%d”, !9);的输出结果是___A___.(知识点5.2)
A) 0 B) 1 C) 有语法错误 ,不能执行 D) -9
怎么知道答案是输出0呀??
---------------------------------------------------------------------
这个和判断真假一样,如果一个变量x,未给x赋值时,系统认为是真,这时!x值为0即为假,同理!9值为0.
---------------------------------------------------------------------
5. 若有定义:int a,b;char x,y;并有以下输入数据: 14 22 XxYy (回车)
则能给a赋整数14,给b赋整数22,给x赋字符x,给y赋字符y的正确程序段是_C_______. (知识点4.2)
A) scanf(“%d %d”,&a,&b);
x=getchar();y=getchar();
B) scanf(“%d%d %c %c”, &a, &b,&x,&x,&y,&y);
C) scanf(“%d %d %c%c%c %c”, &a,&b,&x,&x,&y,&y);
D) scanf(“%d%d %c %c”, &a, &b,&x,&y);
这题是怎么算滴呀??分析一下...
---------------------------------------------------------------------
scanf输入多个数据可以用一个或多个空格将各个数据隔开,至于%c一次只能接收一个字符,并且scanf函数是从左向右扫描所以x和y分别取的第二个%c和第四个%c。还有就是%c之间的空格我不是很清楚,我试了一下它似乎没有影响!!!SORRY
---------------------------------------------------------------------
29. 在下述程序中,if (i>j) 语句共执行的次数是_D____.(知识点6.5)
main()
{ int i=0,j=10,k=2,s=0;
for(;;)
{ i+= k ;
if(i>j)
{ printf(“%d”,s);
break ;
}
s+=i ;
}
}
A)4 B)7 C)5 D)6
这题我怎么算得执行了4次也..6次是怎么得滴呀??
---------------------------------------------------------------------
第一次循环时i等2,第二次……第五次i等10,第六次i等12,满足if(i>j)执行break语句跳出循环。至于 s+=i ;语句应该没什么用吧?
---------------------------------------------------------------------
30. 以下程序的功能是:按顺序读入10名学生和4门课程的成绩,计算出每位学生的平均分进行输出,但运行结果不正确。
main()
{ int n,k;float score,ave;
ave=0.0;
for(n=1;n<=10;n++)
{ for(k=1;k<=4;k++)
{ scanf(“%f”,&score);
ave+=score/4 ;}
printf(“NO%d:%f\n”,n,ave);}
}造成程序计算结果错误的语句行是____A_.(知识点6.6)
A)ave=0.0; B)for(n=1;n<=10;n++)
C)ave+=score/4 ; D)printf(“NO%d:%f\n”,n,ave);
错误在ave=0.0;??讲一下错滴原因。。。
---------------------------------------------------------------------
这个程序段只能正确计算第一名学生的平均成绩,因为得出第一名学生成绩后ave的值不是0而是第一名学生的平均成绩,这时再计算第二个学生时它的平均值是加上第一名学生平均值后的结果。所以应该把ave=0.0;语句放到for(n=1;n<=10;n++)的循环体里面和for(k=1;k<=4;k++)是并列的,这样没算完一个同学的平均成绩后进行一次ave赋值为0.0。
---------------------------------------------------------------------
要是哪不懂发信息,要是写的不明白不好意思哈~~~~~~
执行过程如下:
1: a/b=0
2: ++a/b=1
3: (++a/b)*b=2
因为--是后缀运算符,输出时,并没有执行,所以输出2
对于 这个表达式输出之后变成1
(++a/)*b--
改为
(++a)*b--
=2*2
=4
++a先自增后使用a=2
++a/b=2/2=1
b--先使用后自减1
(++a/b)*b--=1*2=2
然后b=1