一些C预言自测题,请大家帮忙
发布网友
发布时间:2022-04-21 22:36
我来回答
共3个回答
热心网友
时间:2023-11-17 01:42
我给出的回答及其分析说明如下:
第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
---------------------------------------------
热心网友
时间:2023-11-17 01:42
1B
2C
3B
4D
5A
6B
7A
8A
9A
10D
热心网友
时间:2023-11-17 01:43
把基础打牢吧!