一些C预言自测题,请大家帮忙

第1题 对于循环 for (k=16; k>0; k-=3) putchar(‘*’);输出是( )。
A、*****
B、******
C、*******
D、无限循环

第2题 在“while(!a)”中,其中“!a”与表达式( )等价。
A、a= =0
B、a= =1
C、a!=1
D、a!=0

第3题 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a; for(b=1;b<=c;b++) s=s+1;则与上述程序段功能等价的赋值语句是( )。
A、s=a+b;
B、s=a+c;
C、s=s+c;
D、s=b+c;

第4题 C语言中,函数返回值的类型是由( )。
A、return语句中的表达式类型决定
B、调用函数的主调函数类型决定
C、调用函数时的临时类型决定
D、定义函数时所指定的函数类型决定

第5题 设有定义int a[ ]={1,5,7,9,11,13},*p=a+3;则*(p-2),*(a+4)的值是( )。
A、5 11
B、1 9
C、5 9
D、有错误

第6题 以下选项中不能正确赋值的是( )。
A、char b[]={′H′,′e′,′l′,′l′,′o′,′!′};
B、char b[10];b="Hello!";
C、char b[10]= "Hello!";
D、char *str="Hello!";

第7题 初始化多维数组的语句中,可以默认的是( )。
A、最后一个下标界
B、第1个下标界
C、第2个下标界
D、以上都不对

第8题 若有:int a[10],*p=&a[0];,关于数组名a的不正确的说法是( )。
A、a是个数组指针
B、数组名a表示数组的首地址
C、数组名a与a[0]等价
D、a和p都指向同一个存储单元

第9题 以下程序段的输出结果是( )。
int m=10;
while(m>7)
{
m--;
printf(“%d\n”,m);
}
A、9
8
7
B、10
9
8
7
C、9
8
7
6
D、10
9
8

第10题 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10;
Void arrin(int x[N])
{
int i=0;
while(i scanf(“%d”,__________);
}
在下划线处应填入的是__________。
A、x+i
B、&x[i+1]
C、x+(i++)
D、&x[++i]

我给出的回答及其分析说明如下:

第1题 对于循环 for (k=16; k>0; k-=3) putchar(‘*’);输出是( )。
A、*****
B、******
C、*******
D、无限循环

【我的回答】
可能是B

(a) k 没有定义类型,所以没法具体判断

(b) 如果k是int类型的话
(1) 如果编译器是g++
结果如下:

int
main(){

for (int k=16; k>0;k-=3)
putchar('*');

return 0;
}

Output:
******

选B

(2) 如果编译器是gcc的话,int i 必须在for外声明,否则不符合C99编译标准,发生错误
结果如下:
int
main(){

for (int k=16; k>0;k-=3)
putchar('*');

return 0;
}

Output:
In function 'main':
Line 4: error: 'for' loop initial declaration used outside C99 mode

---------------------------------------------

第2题 在“while(!a)”中,其中“!a”与表达式( )等价。
A、a= =0
B、a= =1
C、a!=1
D、a!=0

【我的回答】
A

while(x!) 中的x! “!x”表示x求逆。
while(!x) 当且仅当x==0时,进行循环;否则退出循环。

---------------------------------------------

第3题 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a; for(b=1;b<=c;b++) s=s+1;则与上述程序段功能等价的赋值语句是( )。
A、s=a+b;
B、s=a+c;
C、s=s+c;
D、s=b+c;
【我的回答】
B

s=a; for(b=1;b<=c;b++) s=s+1; ==>
s=a; for(b=1;b<=c;b++) ++s; ==>
s=a; C次LOOP s=s+1; ==>
s=a+c;
选B

---------------------------------------------

第4题 C语言中,函数返回值的类型是由( )。
A、return语句中的表达式类型决定
B、调用函数的主调函数类决型定
C、调用函数时的临时类型决定
D、定义函数时所指定的函数类型决定

【我的回答】

D

---------------------------------------------

第5题 设有定义int a[ ]={1,5,7,9,11,13},*p=a+3;则*(p-2),*(a+4)的值是( )。
A、5 11
B、1 9
C、5 9
D、有错误

【我的回答】

B

a+N ==> a[N-1]
所以:
*p=a+3 ==> *p=a[2]=7;
*(p-2) ==> a[0]=1
*(a+4) ==> a[3]=9
选B

---------------------------------------------

第6题 以下选项中不能正确赋值的是( )。
A、char b[]={′H′,′e′,′l′,′l′,′o′,′!′};
B、char b[10];b="Hello!";
C、char b[10]= "Hello!";
D、char *str="Hello!";

【我的回答】

D

在对字符串C-style的指针赋值的时候,是不可以对其指向的内存做任意增加删除的,正确的方法有:
1. 我们声明的是不定长数组
2. 使用malloc进行heap的内存分配

D正确的形式是: char (*str)[] = "Hello!"

选D

---------------------------------------------

第7题 初始化多维数组的语句中,可以默认的是( )。
A、最后一个下标界
B、第1个下标界
C、第2个下标界
D、以上都不对

【我的回答】
B

比如有20个元素在初始化中,我可以声明为

a[][5]={a1,a2,a3,......../*20个元素,用逗号分开*/}

选B

---------------------------------------------

第8题 若有:int a[10],*p=&a[0];,关于数组名a的不正确的说法是( )。
A、a是个数组指针
B、数组名a表示数组的首地址
C、数组名a与a[0]等价
D、a和p都指向同一个存储单元

【我的回答】
A

数组指针的声明形式为 int (*a)[10];
选A

---------------------------------------------

第9题 以下程序段的输出结果是( )。
int m=10;
while(m>7)
{
m--;
printf("%d\n",m);
}

A、
9
8
7
B、
10
9
8
7
C、
9
8
7
6
D、
10
9
8

【我的回答】

A

代码如下:

int
main()
{
int m=10;
while(m>7)
{
m--;
printf("%d\n",m);
}

return 0;
}

Output:
9
8
7

选A

---------------------------------------------

第10题 以下函数的功能是: 通过键盘输入数据,为数组中的所有元素赋值。
#define N 10;
void arrin(int x[N])
{
int i=0;
while(i) scanf("%d",__________);
}

在下划线处应填入的是__________。
A、x+i
B、&x[i+1]
C、x+(i++)
D、&x[++i]

【我的回答】

D

scanf(“%d”,__________): 第二个参数应该是变量地址
&x: x数组的首地址

A,B 都是一直对这同一个x[i]赋值,所以不正确,while陷入死循环。
C 是指针的用法,数组名不可以这么用,应该使用operator[],
D 正确

选D

---------------------------------------------
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-31
1B
2C
3B
4D
5A
6B
7A
8A
9A
10D
第2个回答  2010-06-01
把基础打牢吧!
相似回答
大家正在搜