几个C语言问题,请高手解答

来源:百度知道 编辑:UC知道 时间:2024/05/11 17:42:12
大一新生初学C语言,作业中遇到一些问题,快考试了,想问问高手们.
(我们C语言老师太难处,问他问题要被骂半天,郁闷,我都不敢问了)

1:设int a=0,b=5,c=2,可执行x++的语句是(B)
A:if(a)x++ B:if(a=b)x++
C:if(a=<b) x++ D:if(!(b-c)) x++

我觉得明显应该是C,但是答案选B,答案错了?

2:
有以下程序:
# include<stdio.h>
# define N 6
void main ()
{
char c[N];
int i=0;
for( ;i<N;c[i]=getchar( ),i++);
for(i=0;i<N;putchar(c[i]),i++);
}
输入以下3行,每行输入都是在第一列上开始的:
a
b
cdef
程序的输出结果是(C)
A:abcdef B:a C:a D:a
b b b
c cd cdef
d
e
f

这题我一点都不解,我选的是A答案.

3:
以下程序段(C)
x=-1;
do
{
x=x*x;
}
while(!x);

A:是死循环 B:循环执行3次
C:循环执行1次 D:有语法错误

为什么是C?
第一次执行:x=x*x=1
那么while(!x)应该就表示while(0),就不执行了?
while括号里是0就不执行??

4:
对以下二围数组a进行正确的初始化的是 (B)
A:int a[

1.
就说说B和C的区别吧
B中,if(a=b)这个语句也是合法的,
只不过不是一个判断a,b是否相等的语句,
而是一个将b值赋给a,并判断返回值的语句。
“=”处理的返回值就为所赋的值,所以a=b的返回值为5,
if条件成立。
C中,a<=b是不能这么写的,应该写为(a<b)||(a==b)

2.
a
b
cdef
由于在输入时有回车的(回车也是作为char输入的),上面这个输入其实是:
a 回车
b 回车
cdef 回车
由于N为6,所以c[N]的成员就为:
c[0]:a
c[1]:\n
c[2]:b
c[3]:\n
c[4]:c
c[5]:d
其他的字符由于超出数组c的存储范围,就忽略了。
所以,输出为:
a
b
cd

3.
do/while循环,由于一开始是do语句,必然执行,所以至少执行一次。
do执行完毕后,判断while条件不成了,跳出循环。
所以执行了一次。

4.
不说明数组的行数是符合语法的,因为可以根据列数和数组成员个数推算出,而只有行数,是不行的,就会出现类似于变量声明数组的错误。

至于书籍,就仁者见仁,智者见智吧:)

第一题:C答案的a=<b语法不对,B答案的a=b是赋值语句,返回true
第二题:最多6个字母,但是都是一个i来计数a,回车,b,回车,c,d就是六个
第三题:非0是true,0就是false
第四题:第一个方框可以省略,第二个不可以
有些东西就是常识,规定了这样

1:设int a=0,b=5,c=2,可执行x++的语句是(B)
A:if(a)x++ B:if(a=b)x++
C:if(a=<b) x++ D:if(!(b-c)) x++

B选项的意思是先将b的值赋给a,然后判断a