C语言错题集

1:设有以下说明语句:
struct lie
{
int a;
float b;
}st;
则下面叙述中错误的是( )。

A: struct是结构类型的关键字
B: struct lie 是用户定义的结构类型
C: st是用户定义的结构类型名
D: a和b都是结构成员名
正确答案:C

解析:st是变量名,是用户自己定义的。

2:设有如下定义:
struct sk
{int a; float b;} data, *p;
若有p=&data,则对data中的成员a的正确引用是( )。

A: (*p).data.a 
B: (*p).a 
C: p->data.a 
D: p.data.a
正确答案:B

解析:*p是一个指针,指向成员列表a。

3:以下选项中,能定义s为合法的结构体变量的是( )。

A) typedef struct abc 
{double a;
char b[10];
}s;
B) struct
{double a;
char b[10];
}s;
C) struct ABC
{double a;
char b[10];
}
ABC s; D) typedef ABC
{ double a;
char b[10];
}
ABC s;
A: 在题目描述中
B: 在题目描述中
C: 在题目描述中
D: 在题目描述中
正确答案:B

解析:结构体一般命名形势为
struct
{成员列表
}变量名列表;

4:若有说明:long *p, a; 则不能通过scanf语句正确给输入项读入数据的程序段是( )。

A: *p=&a; scanf(“%ld”,p);
B: p=(long *)malloc(8); scanf(“%ld”,p);
C: scanf(“%ld”,p=&a);
D: scanf(“%ld”,&a);
正确答案:A

解析:A选项指针变量没有初始化。

5:结构体变量作参数时是地址传递。 (N)

解析:结构体变量作参数时还有其他的作用。

6:C语言中,关键字enum可用于结构类型的定义。(N)

解析:enum 是一个新的关键字,专门用来定义枚举类型。

7:若有以下说明和语句:
struct Student
{
int num;
int age;
}stu,p;
p=&stu;
则可以用
p.age引用stu中成员age (N)
8:若有赋值语句p=(double*)malloc(10*sizeof(double));,则正确的定义语句是( )

A: double *p
B: float **p
C: double **p
D: float *p
正确答案:(A)

解析:必要要用double类型的,要一致性。

9: 以下选项中,非法的字符常量是( )。
A: ‘\t’
B: ‘\17’
C: “n”
D: ‘\xaa’
正确答案:(C)

解析:C选项只能表示为’n’。

10:若有说明:int a[3][4]={0};则下面正确的叙述是( )

A: 只有元素a[0][0]可得到初值0
B: 此说明语句不正确
C: 数组a中各元素都可得到初值,但其值不一定为0
D: 数组a中每个元素均可得到初值0
正确答案:(D)

解析:a[3][4]中只要后面的没有定义,后面的值就直接默认为0。

11:若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。

A: p[i]
B: ((a+i))
C: a[p-a]
D: *(&a[i])
正确答案:(B)
12:在C语言中,合法的字符常量是( )。

A: ‘\084’
B: ‘\x43’ 
C: ‘ab’
D: “\0”
正确答案:(B)

解析:A选项只要遇到’\0’就只停止,C选项是个错误的符号,应改为’ab’,D应改为’\0’。

13:语句int(*prt)();的含义是____________。

A: prt是一个指向一维数组的指针变量
B: prt是指向int型数据的指针变量
C: prt是指向函数的指针,该函数返回一个int型数据
D: prt是一个函数名,该函数的返回值是指向int型数据的指针
正确答案:(C)

解析:prt是一个指针。

14:在下列叙述中,正确的一条是( )。

A: puts和gets函数只能输入或输出一个字符串
B: 在C语言中,函数可以递归调用或递归定义
C: 用scanf函数输入数据时可以规定精度,例如scanf("%7.2f",&a);
D: 外部变量只限于本文件中使用
正确答案:(A)

解析:只有scanf才能输入多个字符串。

15: int a=5,*p;p=&a;则p的值为5.(N)

解析:&a是指向a的指针,与它类型匹配的是int (*),而不是int *。所以p=&a;的等号两边类型不匹配

16:若k是int型变量,且有下面的程序片段:
k= -3;
if(k<=0) printf(“####”)
else printf(“&&&&”)
上面程序片段的输出结果是( )。

A: ####
B: &&&&
C: ####&&&&
D: 有语法错误,无输出结果
正确答案:(D)

解析:有语法错误,会默认输出第一个。

17:下面四个选项中,均是合法整型常量的选项是( )。

A: 160 -0xffff 011
B: -0xcdf 01a 0xe
C: -01986 012 0668
D: -0x48a 0x2e5 0x

正确答案:(A)

解析:整型常量就是整常数,10进制数、8进制数和16进制数三种。如:10、012、0x0A。

18:在下列选项中,没有构成死循环的程序段是( )。
A) int i=100;      B) for(;😉;
while(1)
{i=i%100+1;
if(i>100) break;
}
C) int k=1000;     D) int s=36;
do{++k;} while(s);–s;
while(k>=10000);

A: 在题目中
B: 在题目中
C: 在题目中
D: 在题目中
正确答案:(A)

解析:A选项i会一直加,加到100的时候遇到break就会跳出循环结束。

19:以下程序的输出结果是( )。
#include<stdio.h>
#define FUDGE(y) 2.84+y
#define PR(a) printf("%d", (int)(a))
#define PRINT1(a) PR(a); putchar(‘\n’)
main()
{int x=2;
PRINT1(FUDGE(5)*x);
}

A: 11
B: 12
C: 13
D: 15
正确答案:(B)
20:以下正确的定义语句和赋值语句是_________。

A: int b[3][5],(*p)[3],(*q)[5];p=b;q=b;
B: float b[3][5],*p[3];p[0]=b[0];p[2]=*b+4;
C: double b[3][5],s[5][3],*q;q=b;s=q;
D: int b[10],*q;char *s;q=b;s=b;
正确答案:(B)

21:C语言中,在进行混合运算时,数据类型由高级向低级转换。(N)

解析:①若参与运算量的类型不同,则先转换成同一类型,然后进行运算

    ②转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算

        a、若两种类型的字节数不同,转换成字节数高的类型

        b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型

    ③所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算

    ④char型和short型参与运算时,必须先转换成int型

    ⑤在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入

22:fseek函数中的第二个参数代表的位移量是相对于文件的开始来说的。(N)

解析:fseek函数的调用形势为
fseek(文件类型指针,位移量,起始点)
“位移量”指以“起始点”为基点,向前移动的字节数。

23:rewind函数的作用是位置指针返回移动前的位置。(N)

解析:
rewind() 用来将位置指针移动到文件开头,前面已经多次使用过,它的原型为:
void rewind ( FILE *fp );

24:int *p;定义了一个指针变量p,其值是整型的。(N)

解析:指针作为一种类型,在不同的系统中实现是不同的, 概念上就不是整形,只是在32位系统中指针是占2个字节。
25
阅读下列程序:
main()
{int i, j, row, column, m;
int array[3][3]={{100, 200, 300}, {28, 72, -30}, {-850, 2, 6}};
m=array[0][0];
for(i=0; i<3; i++)
for(j=0; j<3; j++)
if(array[i][j]<m)
{m=array[i][j]; row=i; column=j;}
printf("%d, %d, %d\n", m, row, column);
}
上述程序的输出结果是 。
正确答案:
-850,2,0

解析:把这串代码放到VC上运行下就出来了。

26: 在下面的条件语句中(其中S1和S2标识C语言语句)一个功能上与其他三个语句不等价的是( )

A: if(a)S1;else S2
B: if(a0)S2;else S1
C: if(a!=0)S1;else S2
D: if(a
0)S1;else S2
正确答案:(D)

解析:第四个与前面三个相反了。

27:当a=1,b=3,c=5,d=4时,执行完下面的程序段后x的值是( )
if(a<b)if(c<d)x=1;else if(a<c)if(b<d)x=2;else x=3;else x=6;else x=7;

A: 1
B: 2
C: 3
D: 4
正确答案:(B)

解析:应该b<d,所以直接输出x=2。

28: 若int i=10;执行下列程序后,变量i的正确结果是( )
switch(i){
case 9:i+=1;
case 10:i+=1;
case 11:i+=1;
default:i+=1;
}

A: 10
B: 11
C: 12
D: 13
正确答案:(D)

解析:应为case 后面没有加break,所以他会一直运行下去,直到default才会停止。

29:若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”,则以下不能满足要求的表达式是( )。

A: A%21 
B: !(A%2
0)
C: !(A%2)
D: A%2
正确答案:(C)

解析:(A%2) 取a除以2的余数,并取反。

30: 若有说明语句int i=5,j=4,k=6;float f;则执行f=(i<j&&i<k)?i:(j<k)?j:k;语句后,f的值为( )

A: 4.0
B: 5.0
C: 6.0
D: 7.0
正确答案:(A)

解析:第一个括号内不成立,所以看第二个括号,j<k成立输出j,j的值为4,所以f的值应为4。

31:逻辑运算符两侧运算对象的数据类型( )

A: 只加粗样式能0或1
B: 只能是0或非0正数
C: 只能是整型或字符型数据
D: 可以是任何类型的数据
正确答案:(D)

解析:但准确的说是任何简单数据类型都是可以的.
char,int ,long ,unsigned,float ,double,c就是这几个基本的数据类型,都可以用在逻辑运算中.

32:指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。(N)

解析:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量,这两个值是不相等的。
33
如果strcmp(s1,s2)返回的结果为0,表示字符串s1和s2不相同。
( N )

解析:
(1)如果字符串1与字符串2相同,则函数值为0。
(2)如果字符串1>字符串2,则函数值为一个正整数。
(3)如果字符串1<字符串2,则函数值为一个负整数。

34
C 语言中在字符型变量可以存放一个字符串。 ( N )
解析:字符串常量不能修改其内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值