错题集
-
直接访问就是直接利用变量的地址直接进行访问。 (√)
//直接访问就是系统直接将变量所在内存单元的值取出,间接访问是直接访问变量地址。 -
结构体类型本身不占用内存空间,结构体变量占用内存空间。 (√)
// 结构体类型的定义只是告诉编译器该如何表示数据,但是它没有让计算机为其分配空间。结构体类型的定义就是结构体的声明,不管是定义还是申明,这句话都是正确的。只有在结构体变量,声明的时候可以分配。要使用结构体,那么就需要创建变量,也就是结构体变量。 -
文件指针用于指向文件,文件只有被打开后才有对应的文件指针。 (√)
//文件指针是指向一个文件的指针,确切的将是指向用文件这个结构体所定义的对象的起始地址。 -
变量被定义后 , 它的作用域和寿命就被确定了 , 并且不可改变。 (√)
//作用域就是一个变量可以被引用的范围,生命周期就是这个变量可以被引用的时间段。每个作用域都有相对应的生命周期,变量被定义后,作用域和生命周期就被确定了 , 并且不可改变。 -
两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。(√)
//实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。 -
在c语言中,不允许有常量的数据类型是(B )
A.整型
B.结构型
C.字符型
D.字符串
//结构型是基本数据类型的组合,没有单独的常量。 -
文件指针和位置指针都是随着文件的读写操作在不断改变。 (x)
// 位置指针指向文件内部的字节位置,随着文件的读取会移动文件指针如果不重新赋值将不会改变指向别的文件。 -
设变量已正确定义,以下()是合法的C语句。 (A C)
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; //case后面的表达式必须是一个常量表达式,
switch ( k ) {
case n%3: printf(“one”);
case n%4: printf(“two”);
default: printf(“zero”);
}
- 关于C语言中的函数,下列说法正确的是 (B C)
A.函数应该以它们调用的顺序来定义。//顺序可以随意
B.return 语句可以出现在函数的任何地方。//程序一运行到return语句时,该函数就运行结束。
C.函数定义可以在主函数前面也可以在主函数后面。
D.函数总是返回一个整型数据。//函数返回值类型是根据定义函数时的类型所决定的
- 下面程序可以逐行输出由language数组元素所指向的5个字符串。请填写程序中相应语句。
#include<stdio.h>
int main(void)
{
char *language[] = {“BASIC”, “FORTRAN”, “PROLOG”, “JAVA”, “C++” } ;
char **q ;//定义一个二维的指针
int k ;
for(k = 0 ; k < 5 ; k++) {
q= language+k ; //让q指向数组元素的首地址,然后输出指针q指向的字符串
printf("%s\n", *q);
}
return 0;
}
-
文件的读函数是从输入文件中读取信息,并存放在内存中。(√)
//读是将文件中的信息取出,复制在缓冲区中,缓冲区是存放在地址中的。 -
如果二进制文件a.dat已经存在,现在要求写入全新数据,应以(B)方式打开。
A.“w”
B.“wb”
C.“w+”
D.“wb+”
//“wb” 是为了读和写,建立一个新的二进制文件 -
文件指针指向文件缓冲区中文件数据的存取位置.(×)
//文件指针指向文件在缓冲区上的读写位置 -
按存储介质划分,文件可以分为 (B)
A.记录文件和流式文件
B.普通文件和设备文件
C.文本文件和二进制文件
D.程序文件和数据文件
//存储介质是指存储数据的载体, 按存储介质划分,文件可以分为普通文件和设备文件。 -
若fopen()函数打开文件失败,其返回值是(C )。
A.1
B.-1 //EOF是判断指针所指文件是否结束
C.NULL
D.ERROR -
函数strcmp从头至尾顺序地将其对应字符比较,遇到两个字符不等时,两个字符相减得到一个int型值,两个字符串完全相同时,则返回0。 (√)
// 如果字符串1>字符串2,则函数值为一个正整数。 如果字符串1<字符串2,则函数值为一个负整数。 -
数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。 (×)
// 数组名只代表了数组的首地址,*数组名才是指向数组的首元素。 -
假设有定义如下: int array[10] ; 则该语句定义了一个数组array。其中array的类型是整型指针(即 int *)。 (×)
//数组名不是指针,数组名就是指针是错误的,指针是变量,是用来存储变量地址值的变量,而数组名是常量。 -
一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。 (×)
类型名 数组名[数组长度];
// 数组定义前面的类型名应该是类型说明符。 -
在单向链表中,头指针中存放的是头结点的内容。(×)
// 头结点:在单链表的第一个结点之前附设一个结点,成为头结点
//头指针:指向链表中第一个结点(单链表由一个头指针唯一确定)的指针(指针指的是存储地址) -
单向链表中的每个结点都需要动态分配内存空间。(√)
// 单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向表中的下一个节点,而最后一个节点则指向一个空值NULL。单向链表只可向一个方向遍历。 -
在一个以 h 为头的单向链表中,p 指针指向链尾的条件是(A)。
A.p->next=h
B.p->next=NULL
C.p->next->next=h
D.p->.data=-1
//由于这是一个单循环链表,链表头尾相接,链尾指向链头,因此,P当P->next=h时,则P指针已经指向链尾了。 -
对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B)。
A.head = = NULL
B.head→next == NULL
C.head→next == head
D.head!=NULL
//head->next保存的是首节点(第一个有效节点)的,所以head->next==NULL的话,说明此链表没有首节点,即此链表只有一个头结点,是空链表。 -
在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(B)。
A.p->next=s;s->next=p->next;
B.s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next;
D.p->next=s->next;p->next=s;
//把p的后继节点变成S的后继节点,在把s变成P的后继节点 -
结构体成员的类型必须是基本数据类型。 (×)
// 还可以是自定义类型
来源:CSDN
作者:Kathleen Hu
链接:https://blog.csdn.net/goforword/article/details/103755790