错题集

错题集 数组/文件流/结构体/指针

判断题部分
1. 数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。 (2分)
T F

我的答案:T
正确答案:F
正确解析:指针常量本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。
数组名不是常量指针,两方面原因:
1.类型方面,数组的类型是type[size],和常量指针类型type* const不同
2.使用方面,sizeof(数组名)等于数组所有元素的大小,而不是sizeof(指针);对数组取地址,得到的指针进行加减,增减字节数是sizeof(数组);

2. 以下定义了一个一维数组str,该数组可以存放81个字符型数据。
char str[81];
(1分)
T F

我的答案:F
正确答案:T
正确解析:该数组定义时可存放81个字符型数据,如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义成为空字符即(‘\0’)。故此本题答案正确。

3.若有定义int a[]={2,4,6,8,10},a[1]和a++表示的含义相同。 (1分)
T F

我的答案:T
正确答案:F
正确解析:a[1]和a++虽然表示的值都是4,但其含义是不同的。a[1]是直接表示初值中的4,而a++表示的是首地址加1。故此含义不同,本题选择F。

4.c语言源程序是文本文件,目标文件和可执行文件是二进制文件。
T F

我的答案:F
正确答案:T
正确解析:文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。目标文件就是源代码编译后但未进行链接的那些中间文件。可执行文件指的是可以由操作系统进行加载执行的文件。三者都是二进制文件。故此本题答案为T。

5.结构体成员的类型必须是基本数据类型。
T F

我的答案:T
正确答案:F
正确解析:结构体成员类型不只是基本数据类型,同时也可以是另一种结构体类型,也可以是指针类型,同时也可以为数组。(数组,结构体,共用体,枚举,指针都可以为成员,但是他们都不是基本数据类型)
6.一个结构类型变量所占的内存空间是其各个成员所占内存空间之和。 (1分)
T F

我的答案:F
正确答案:T
正确解析:成员所占内存空间要考虑对齐问题,而题目问的是结构类型变量,故一个结构类型变量所占的内存空间是其各个成员所占内存空间之和,因此题目答案是T。

7.假设结构指针p已定义并正确赋值,其指向的结构变量有一个成员是int型的num,则语句 p✳.num=100; 是正确的。
T F
我的答案:T
正确答案:F
正确解析:c语言中不存在这种用法。

8.关于C语言指针的运算:指针只有加减操作,没有乘除操作。指针可以加常数、减常数;相同类型的指针可以相减,不可以相加。
T F
我的答案:F
正确答案:T
正确解析:C语言规定,不同类型的指针,不可以做相减操作,只有同类才可以进行减操作。相加也是可以的,不过没有用,指针地址+位移才有用。

9.变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变。 (1分)
T F

我的答案:F
正确答案:T
正确解析:一个C变量的作用域可以是代码块作用域、函数原型作用域,或者文件作用域。代码块是包含在一对花括号内的一段代码,在代码块中定义的变量具有代码块作用域,从该变量被定义的地方到包含该定义的代码块的末尾该变量均可见,但只局限于代码块。寿命即生存期,一个C变量有两种生存期:静态生存期和自动生存期。一个静态变量在程序执行期间将一直存在,一个自动变量在作用域结束后内存将释放。因此,变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变。故本题选T。

10.一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。
类型名 数组名[数组长度];
T F

我的答案:T
正确答案:F
正确解析:类型名 数组名【数组大小】

11.C系统的标准输出文件stdout是指显示器。
T F

我的答案:F
正确答案:T
正确解析:stdin:标准输入文件指针,系统分配为键盘。
stdout:标准输出文件指针,系统分配为显示器。
stderr:标准错误输出文件指针,系统分配为显示器。

12.当fopen函数打开文件失败时,返回给文件指针的值是NULL。 (2分)
T F

我的答案:F
正确答案:T
正确解析:在 C 语言编程中,当使用 fopen( ) 文件操作函数成功打开一个文本文件(或者是二进制文件)时,若成功打开了该文件,则返回指向该流的文件指针。若需要打开的文件不存在,则返回一个空指针 NULL。

13.指针数组的每一个元素都是指针变量
T F

我的答案:F
正确答案:T
正确解析:数组元素全为指针的数组称为指针数组,指针数组的每一项均为一个指针;其变量均为指针变量。

14.对于已正确定义的二维数组a, ✳(a[i]+j)与a[i][j的含义相同。
T F

我的答案:F
正确答案:T
正确解析:本质都是取那个地址存在的值.

选择题部分

15.若有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方式是( )。 (2分)
A.p=max;
B.✳p=max;
C.p=max(a,b);
D.✳p=max(a,b);

我的答案:D
正确答案:A
正确解析:函数的调用可通过函数名调用,也可以通过指针传址调用,而给函数指针变量赋值时,只需给函数名而不需要给出参数。

16.关于C语言中的函数,下列说法正确的是 (2分)
A.函数应该以它们调用的顺序来定义。
B.return 语句可以出现在函数的任何地方。
C.函数定义可以在主函数前面也可以在主函数后面。
D.函数总是返回一个整型数据。

我的答案:AC
正确答案:BC
正确解析:A.函数可以不用它们调用的顺序来定义。B.return语句就是用于指定函数返回的值。return语句只能出现在函数体内,出现在代码中的其他任何地方造成语法错误。C.正确。D.也可以返回其他类型的数据。例如字符型。

17.如果变量定义如下,则正确的语句是( )。 (1分)
int k, a[10];
A.a[-1] = -1;
B.a[0] = 23;
C.k = 3; a[k - 2] = a[9] + 1;
D.for(k = 1; k <= 10; k++){
printf(“%d ”, a[k]);
}
E.for(k = 0; k < 10; k++){
scanf(“%d ”, &a[k]);
}

我的答案:BCDE
正确答案:BCE
正确解析:A.[]中的数字须为非负整型数。B.给a[0]赋值,正确。c.正确。D.k不能够等于10。E.由题可知正确。

18.定义FILE ✳fp; 则文件指针fp 指向的是()。(2分)
A.文件在磁盘上的读写位置
B.文件在缓冲区上的读写位置
C.整个磁盘文件
D.文件类型结构体

我的答案:D
正确答案:B
正确解析:由概念可得,文件指针fp 指向的是文件在缓冲区上的读写位置.。

19.按存储介质划分,文件可以分为: (2分)
A.记录文件和流式文件
B.普通文件和设备文件
C.文本文件和二进制文件
D.程序文件和数据文件

我的答案:A
正确答案:B
正确解析:按存储形式划分可分为文本文件和二进制文件;按文件的逻辑存储结构分文件可分为记录文件和流式文件;按存储介质划分文件可分为普通文件和设备文件。

20.设变量已正确定义,以下()是合法的C语句。 (1分)
A.if ( n <= 10 );
B.switch ( k ) {
case 1: printf(“one”); break;
case 2: printf(“two”); break;
case 1: printf(“one”); break;
default: printf(“zero”); break;
}
C.switch ( k%2 ) {
default: printf(“zero”); break;
case 1: printf(“one”);
case 1+1: printf(“two”);
}
D.n = 10;
switch ( k ) {
case n%3: printf(“one”);
case n%4: printf(“two”);
default: printf(“zero”);
}

我的答案:AC
正确答案:BC
正确解析:A.if后无标点. B.正确的switch结构 C.正确的switch结构(k%2)为常量 D.变量不能作为case语句前缀(n)。

21.在一个单链表head中,若要删除指针p所指结点的后继结点,则执行()。 (2分)
A.p=p->next;free§;
B.p->next=p->next->next; free§;
C.q= p->next q->next=p->next; free(q);
D.q=p->next; p->next=q->next; free(q);

我的答案:B
正确答案:D
正确解析:删除方法为修改指针域的值,使其跳过删除部分,类似于p->next=s->next,删除完释放内存。

22.根据声明int(✳p)[10],p是一个()
A.数组
B.指针
C.函数
D.数组的元素

我的答案:A
正确答案:B
正确解析:此为定义一个指针类型的数组

23.若变量已确定并且指针p已经指向某个变量X,则(✳p)++相当于()
A.p++
B.x++
C.✳(p++)
D.&x++

我的答案:D
正确答案:B
正确解析:(p)++指将p所指数据加一,即x++。

24.对于一下结构定义,++p->str中的++加在()
struct{
int len;
char ✳str;
}✳p;

A.指针str上
B.指针p上
C.str指的内容上
D.以上都不是
我的答案:C
正确答案:A
正确解析:++p指自增p所指的数据,而++p->str表示对str中的数据自增,所以要加在str指针上,然后起指针所指的数据开始自增

25.若有定义char✳str[]={“Python”, “SQL”, “JAVA”, “PHP”, “C++”}; 则表达式✳str[1] > ✳str[3]比较的是:(2分)
A.字符P和字符J
B.字符串SQL和字符串PHP
C,字符串Python和字符串JAVA
D.字符S和字符P

我的答案:B
正确答案:D
正确解析:如果比较的是str[1] > str[3],那么答案选择B,但是带有✳,即是比较的其首地址指向的值,故此比较的是字符S和字符P。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值