C语言错题集

c语言错题集

错题记录

1、continue 不是结束本次循环,而是终止整个循环的执行。
错误 (用continue语句提前结束本次循环
2、直接访问就是直接利用变量的地址进行存取直接访问
正确
3、共用体变量可以作结构体的成员,结构体变量也可以作共用体的成员。
正确
4、枚举类型中的元素都具有一个整型值。
正确
5、函数形参的存储单元是动态分配的
正确
6、函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同时,则返回0。
7、文件指针用于指向文件,文件只有被打开后才有对应的文件指针。
正确
8、 函数名代表该函数的入口地址。因此,可用函数名给指向函数的指针变量赋值
正确
9、指向结构体变量的指针可以作函数参数,实现传址调用。
正确
10、C 语言是一种非结构化程序设计语言。
错误 (C 语言是一种结构化程序设计语言。
11、在 C 语言程序中 , 凡是没有出现存储类说明符的变量都是自动类的。
正确
12、内存中的每个存储单元都有一个唯一的地址
正确
13、在switch语句中,每一个的case常量表达式的值可以相同。
错误 (在switch语句中,任意一个case常量表达式的值都不能相同
14、break 则是结束整个循环过程,不再判断执行循环的条件是否成立。
正确
15、C语言的三种循环不可以互相嵌套。
错误 (c语言的三种循环可以相互嵌套
16、变量被定义后 , 它不仅有一个确定的地址值 , 而且还会有一个确定的本身值。
错误()
17、下列叙述中正确的是( A )。
A)顺序存储结构的存储- -定是连续的, 链式存储结构的存储空间不一定是连续的
B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
c)顺序存 储结构能存储有序表,链式存储结构不能存储有序表
D)链式存储结构比顺序存储结构节省存储空间
[解析]链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与c)错误。
链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错误。

18、有以下程序:
#nclude
main0
{ int x=1, y=0;
if(! x) y++ ;
else if (x==0)
if(x) y+=2;
else y+=3;
printf"%d\n",y); .
程序运行后的输出结果是( D )。
A)
B) 2
C) 1
D) 0
**[解析]
在if else语句中else总 是与离它最近的i配对。本题目中x为1所以! x为0,
所以执行else if语句中的内容,判断(x
0)是否成立,因为x为1所以条件不成立,所以else
if内部的if.else语句不再执行,所以y的值还是初始值0。**
19、有以下程序:
#nclude <stdio.h>
mainO
{intn,p=NULL;
p= &n; .
printf(“Inputn: “); .
scanf(”%d”,&p); .
printf(" outputn: “);
printf(”%d\n",
p);
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是
(A)
A) int n,*p=NULL;
B) p= &n;
C)
scanf("%d",&p)
D) printf("%dln", p);
*[解析]选项B)的正确写法应为p = &n;选项C)的正确写法应为scanf("%d",p);选项
D)的正确写法应为printf("%dhn", p)。

20、有以下程序:
#include <stdio.h>
mainO
{ int
x=1,y=0,a=0, b=0;
switch (X)
{ case
sW itch(y)
{ case
0: a++;
break;
case
1: b++ ;
break ;
case 2:
a++; b++ ;
break;
case 3:
a++ ; b++;
prntf(“a=%d,b=%dn”, a, b);
程序的运行结果是( B )。
A) a=2,b=2
B) a=2,b=1
C) a=1,b= 1
D) a=1,b=0
[解析]case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch
语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不在进
行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a
的值为1。然后执行外层case 2语句的a++; b++; a为2, b为1。所以结果为B)。

21、有以下程序:
#nclude
main0
{char s[] =“012xy\08s34f4w2”;
int 1, n=0;
for(i=0; s[i]! =0;
i++)
if(s[i]>= '0 &&s[i]<= '9) n++;
printf("%d\n",n);
程序运行后的输出结果是 ( B )。
A) 0
B) 3
C) 7
D) 8
[解析]本题中遇到””字符循环结束,所以只统计””之前的数字字符,所以为3。
22、以下叙述中正确的是( A )。
A)
在C语言中,预处理命令行都以"#”开头
B) 预处理命令行必须位于c源程序的起始位置
c) #include 必须放在c程序的开头
D)c语言的预处理不能实现宏定义和条件编译的功能
[解析]预处理命令是以”#”号开头的命令,它们不是C语言的可执行命令,这些命令应该
在函数之外书写,-般在源文件的最前面书写,但不是必须在起始位置书写,所以B),C)
错误。C)语言的预处理能够实现宏定义和条件编译等功能,所以D)错误。.

23、若有以下定义,且0≤i<4,则不正确的赋值语句是(B).
int b[4][6], *p, *q[4];

A: q[i] = b[i];
B: p = b;
C: p = b[i]
D: q[i]= &b[0][0];
【解析】
*A:q是一个指针数组,本质是一个一维数组,b[i]相当于将二维数组拆开成一个一位数组,每个元素还是包含多个元素的一位数组,本质一样,所以可以赋值。
B:p是一个int型指针,而b是一个二维数组名,某些环境运行不会出错,但严谨意义上是不允许的,b,b[0],&b[0][0],结果都是b[0][0]的地址,但是三个方式的类型不完全相同,b是int(*)[]型,b[0]是int 型,&b[0][0]是int型,而指针p是int 型,所以p=b犯了类型不同的错误。
C:理由同B,p和b[i]类型相同,所以可以赋值。
D:q是一个指针数组,每个元素也是一个指针,q[i]里边存放某个数据的地址,而&b[0][0]是b[0][0]的地址,所以可以赋值。

24、以下叙述中正确的是.(B)
&)在c语言中,逻辑真值和假值分别对应1和0
B) 关系运算符两边的运算对象可以是C语言中任意合法的表达式
c) 对于浮点变量x和y,表达式: x==y是非法的,会出编译错误
D)分 支结构是根据算术表达式的结果来判断流程走向的

[解析] A选项中,在c语言中,逻辑真值对应非0; c选项中, 表达式: x==y是合法的; D
选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此B选项
正确。

25、以下叙述中正确的是(A)
A) int* p1;int** p2; int *p3;都是合法的定义指针变量的语句
B)指针变量只能通过求地址运算符(&) 来获得地址值
c)语句p=NULL;与p=\0;是 等价的语句.
D)语句p=NULL;执行后, 指针p指向地址为o的存储单元
[解析] B选项描述不正确,指针变量可以通过求地址运算符(&) 来获得地址值,可以通过
指针变量获得地址值,还可以通过标准函数获得地址值;c选项中,p=NULL;和p=0;或p=’\0’;
等价; D选项中,语句p=NULL;执行后,指针p并不是指向地址为o的存储单元,而是具有- -
个确定的值. “空”。因此A选项正确。

26、指针是变量,它具有的值是某个变量或对象的地址值,它还具有一个地址值,这两个地址值是相等的。
错。(这两个地址值不相等
27、下面四个选项中,均是合法转义字符的选项是( A )。

A: ‘’’ ‘\’ ‘\n’
B: ‘’ ‘\017’ ‘"’
C: ‘\018’ ‘\f’ ‘xab’
D: ‘\0’ ‘\101’ ‘xlf’
【解析】B 很明显’’,这个不对
C ‘\018’,8进制数里会有计数符8么 ‘xab’
D ‘\0’ ‘x1f’ 这两个都不对
28、 下述程序的输出结果是( C )
main()
{
int a=0,b=0,c=0;
if(++a>0||++b>0) ++c;
printf("%d,%d,%d",a,b,c);
}

A: 0,0,0
B: 1,1,1
C: 1,0,1
D: 0,1,1,
【解析】++a=1>0,成立,所以||的结果必为真,因此后面的++b就没有执行了
因为if成立,所以++c肯定执行了。
所以a,c变成了1,b还是0

29、有以下程序:
#nclude <stdio.h>
#include <stdlib.h>
mainO
{ int *a,*b,*c;
a=b= c = (int *)malloc(sizeof(n));
*a=1; *=2,*c=3;
a=b ;
printf("%d,%d,%d\n", a, b,c);
程序运行后的输出结果是( D )。
A)
1,1,3
B) 2,2,3
C) 1,2,3
D)
3,3,3
*[解析] malloc函数动态分配-个整型的内存空间,然后把函数返回的地址用(int)强制类型
转换为整型指针,再把它赋给a,b, c,即让指针变量a,b,c都指向刚申请的内存空间。所
以只有最后-个赋值语句
c=3的值保留在了该空间内,因为a,b, c三个指针变量均指向该
空间,所以打印该空间内的数值为3。

30、有以下程序:
#nclude <stdio.h>
main0
{
char s[] = “012xy\08s34f4w2”;
int 1,n=0;
for(i=0; s[i]! =0; i++ )
if(s[i]>= ‘0’ &&s[i]<= ‘9’) n++;
printf("%dn",n);
程序运行后的输出结果是( B )。
A) 0
B) 3
C) 7
D) 8
[解析]本题中遇到”\0”循环结束,所以只统计”\0”之前的数字字符,所以为3。

  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值