简单的C语题

来源:百度知道 编辑:UC知道 时间:2024/06/06 04:13:22
31、下面程序段的运行结果是( c )
for(y=1;y<10;) y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d",x,y)
(A) x=27,y=27
(B) x=12,y=13
(C) x=15,y=14
(D) x=y=27

下列程序段不是死循环的是( c )
(A) int i=100;
while(1)
{
i=i%100+1;
if(i>100) break;
}
(B) for( ; ; );
(C) int k=0;
do{++k;}while(k>=0);
(D) int s=36;
while(s); --s;

是怎么做的为什么.可以说一下吗

1.
/*
y=((x=3*y,x+1),x-1);
括号内表达式的值永远都是最右边那个的,同时执行顺序是从左到右。
y是从1到9的递增。有效的只有x-1,x+1在这里是没有意义的
第一次,当y =1时。 x = 3,y = 2;
第二次, y =2时, x= 6,y = 5;
第三次,y = 5时。x= 15,y = x-1 = 14

*/

2.
(A) int i=100;
//i = i%100 +1 i的值最终会由1一路增加到99.
但是程序首先做i%100+1有到100了。程序永远都不会出现i>100的情况,所以是无限循环

while(1)
{
i=i%100+1;
if(i>100)
break;
}
(B) for( ; ; ); //;是空语句,该循环不断执行空语句,死循环
(C) int k=0;
do{++k;}while(k>=0); //会不断循环,但是程序崩溃后循环自然会结束。当达到一定程序k应该会是负数、

(D) int s=36;
while(s); 这里的分号也是空语句,会不断执行;,死循环
--s;

建议你看书:
(1)可以将程序稍微改一下就懂了
#include<stdio.h>
void mian()
{ int x,y;for(y=1;y<10;)
{ y=((x=3*y,x+1),x-1);
printf("x=%d,y=%d\n");
}
printf("x=%d,y=%d",x,y)
}
(2)
答案当然是c了。当K增大到无限的时候就会发生溢出。
退出循环。

这些是最基本的了。建议你多看看书~~~