第一章测试1、计算机唯一能直接识别的语言是( )。
A、机器语言
B、汇编语言
C、编译语言
D、高级语言
2、下列叙述中错误的是( )。
A、计算机不能直接执行用C语言编写的源程序
B、C程序被编译后,生成的后缀为.obj的文件是一个二进制文件
C、后缀为.obj的文件,经链接后生成的后缀为.exe的文件是一个二进制文件
D、后缀为.obj和.exe的二进制文件都可以直接运行
3、计算机选择二进制的一个主要原因是( )。
A、人不使用二进制
B、它和十进制转换非常容易
C、容易使用物理器件实现
D、容易计算和计算速度快
4、计算机的基本功能就是( )。
A、输入、编码、程序、控制、输出
B、程序、数据、存储、输人和输出
C、软件、处理、硬件、数据和输出
D、输入、存储、处理、控制和输出
5、以下叙述错误的是( )。
A、计算机程序的执行过程实际上是对程序所表达的数据进行处理的过程
B、算法和程序原则上没有区别
C、结构化程序设计的基本理念是:将一个较大的问题细分成若干个较小问题的组合
D、计算机程序的算法就是解决“做什么”和“怎么做”的问题
6、在计算机内一切信息的存取、传输和处理都是以( )形式进行的。
A、ASCII码
B、二进制
C、十进制
D、十六进制
7、C语言程序经过编译以后生成的文件名的后缀为( )。
A、.c
B、.cpp
C、.obj
D、.exe
8、以下说法错误的是( )。
A、在任何条件下,算法都只有一条执行路径。
B、算法可以表面上没有输入。
C、所有的程序都满足有穷性。
D、程序中的指令必须是机器可执行的,而算法中的指令则无此限制。
9、以下说法错误的是( )。
A、算法中的每个步骤都能在有限时间内完成。
B、算法也可以没有输出
C、算法代表了对问题的解,而程序则是算法在计算机中的特定实现。
D、算法的每一个步骤都应当能有效执行。
10、下列关于C语言的描述正确的是( )
A、高级语言 面向对象
B、高级语言 面向过程
C、低级语言 面向对象
D、低级语言 面向过程
第二章测试1、C语言规定:在一个源程序中,main函数的位置( )。
A、必须放在程序的开头
B、必须放在程序的后面
C、可以放在程序的任何位置,但在执行程序时是从程序的开头执行
D、可以放在程序的任何位置,但在执行程序时是从main函数开始执行的
2、以下( )不是C语言提供的关键字。
A、mian
B、printf
C、scanf
D、return
3、C语言中最简单的数据类型包括 ( )。
A、整型、浮点型、逻辑型
B、整型、浮点型、字符型
C、整型、字符型、逻辑型
D、整型、浮点型、逻辑型、字符型
4、C语言中,下列标识符合法的是( )。
A、12-a
B、retire_age
C、test.c
D、f(x)
5、C语言中运算对象必须是整型的运算符是( )。
A、/
B、%
C、+
D、=
6、下列关于C语言用户标识符的叙述中正确的是( )。
A、用户标识符中可以出现下划线和中划线(减号)
B、用户标识符中不可以出现中划线,但可以出现下划线
C、用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D、用户标识符中可以出现下划线和和数字,它们都可以放在用户标识符的开头
7、
![图片.png 图片.png]()
A、(5*a*b)/(c*d)
B、5*a*b/c*d
C、5*a*b/c/d
D、a*b/c/d*5
8、在C语言中,函数体是由 ( )括起来
A、[ ]
B、( )
C、{ }
D、< >
9、以下哪一个是C语言中的回车换行符 ( )
A、\t
B、\b
C、\v
D、\n
10、下面说法中正确的是( )
A、C语言程序书写时,不区分大小写字母
B、C语言程序书写时,一行只能写一条语句
C、C语言程序书写时,一个语句可分成几行书写
D、C语言程序书写时,每行必须有分号
第三章测试1、C语言中,关系表达式和逻辑表达式的值是( )。
A、真或假
B、0或1
C、T或F
D、True或false
2、设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是( )
A、10<a<15
B、a==11||a==12||a==13||a==14
C、!(a<=10)&&!(a>=15)
D、a>10&&a<15
3、如果int a=3,b=4;则条件表达式a<b? a:b的值是( )
A、3
B、4
C、0
D、1
4、逻辑运算符两侧运算对象的数据类型( )
A、只能是0或1
B、只能是0或非0正数
C、只能是整型或字符型数据
D、可以是任何类型的数据
5、在嵌套使用if语句时,C语言规定else总是( )
A、和之前与其具有相同缩进位置的if配对
B、和之前与其最近的if配对
C、和之前与其最近的且不带else的if配对
D、和之前的第1个if配对
6、多分支选择语句switch(表达式)中的“表达式”不容许( )
A、整型变量
B、字符型变量
C、表达式
D、浮点型变量
7、C 语言中,逻辑"真"等价于 ( )。
A、大于零的数
B、大于零的整数
C、非零的数
D、非零的整数
8、下列关系表达式中结果为假的是( )。
A、3<=7
B、(a=2*2)==2
C、0!=1
D、y=2+2
9、以下程序段的运行结果是( )。 int s=15; switch(s/4) {case 1: printf("One "); case 2: printf("Two "); case 3: printf("Three "); default: printf("Over ");}
A、Three
B、Over
C、Three Over
D、One Two Three Over
10、在C语言中,紧跟在关键字if后一对圆括号里的表达式( )
A、只能用逻辑表达式
B、只能用关系表达式
C、只能用逻辑表达式或关系表达式
D、可以是任意表达式
第四章测试1、C语言中用于结构化程序设计的3种基本结构是( )
A、顺序结构、选择结构、循环结构
B、if、switch、break
C、for、while、do...while
D、if、for、continue
2、循环结构的特点是( )
A、从上至下,逐个执行
B、根据判断条件,执行其中一个分支
C、满足条件时反复执行循环体
D、其他都对
3、以下for语句,书写正确的是( )。
A、for(i=1;i<5;i=i+2)
B、for(i=1,i<5,i++)
C、i=1;for(i<5;i++)
D、for(i=1,i<5,)i++
4、下列关于for循环的描述,正确的是( )
A、for循环只能用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
D、在for循环中,不能用break语句跳出循环
5、以下说法正确的是( )
A、do-while语句构成的循环不能用其他语句构成的循环来代替
B、do-while语句构成的循环只能用break语句退出
C、用do-while语句构成的循环,在while后的表达式为非零时结束循环
D、用do-while语句构成的循环,在while后的表达式为零时结束循环
6、在循环语句的循环体中,break语句的作用是( )。
A、继续执行break语句之后的循环体各语句;
B、提前结束循环,接着执行该循环后续的语句
C、结束本次循环;
D、暂停程序的运行
7、以下语句正确的是( )。
A、用1作while循环的判断条件,则循环一次也不执行
B、for循环表达式的括号内的3个表达式均不可以省略。
C、所有类型的循环都可以进行嵌套使用
D、程序有死循环的时候,上机编译不能通过
8、下列叙述中正确的是( )。
A、break语句只能用于switch语句中
B、break语句只能用在循环体和switch语句内
C、continue语句的作用是使程序的执行流程跳出包含它的所有循环
D、在循环体内使用break语句和continue语句的作用相同
9、有以下程序段 int k=0 while(k) k++; 则while循环体执行的次数是( )。
A、无限次
B、有语法错,不能执行
C、一次也不执行
D、执行一次
10、以下程序段的输出结果是() int i,s=0; for(i=0;i<10;i+=2) s+=i+1; printf("%d\n",s);
A、自然数1~9的累加和
B、自然数1~10的累加和
C、自然数1~9中的奇数之和
D、自然数1~10中的偶数之和
第五章测试1、C语言中,以下关于数组的描述正确的是( )
A、数组大小固定,但是可以有不同类型的数组元素
B、数组大小可变,但是所有数组元素的类型必须相同
C、数组大小固定,所有元素的类型必须相同
D、数组大小可变,可以有不同类型的数组元素
2、若有定义int score[10];,则对score数组中的元素的正确引用是( )
A、score(7)
B、score[10]
C、score[6.0]
D、score[0]
3、以下能正确定义一维数组的选项是( )
A、int num [ ];
B、#define N 100 int num [N];
C、int num[0..100];
D、int N=100,num[N];
4、C语言中,下面能正确定义一维数组的选项是( )
A、int a[5]={0,1,2,3,4,5};
B、int a[5]={3} ;
C、int a[5 ]=5;
D、int a[N]={1,2,3} ;
5、下述对C语言字符数组的描述中错误的是( )
A、字符数组可以存放字符串
B、字符数组中的字符串可以整体输入、输出
C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
D、不可以用关系运算符对字符数组中的字符串进行比较
6、已知int a[3][4];则对数组元素引用正确的是( )
A、a[2][4]
B、a[2][0]
C、a[3][3]
D、a[0][4]
7、对以下定义语句的正确理解是 ( ) int a[10]={6,7,8,9,10};
A、将6,7,8,9,10依次赋给a[1]~a[5]
B、将6,7,8,9,10依次赋给a[0]~a[4]
C、将6,7,8,9,10依次赋给a[6]~a[10]
D、因为数组长度与初值的个数不相同,所以此初始化语句不正确
8、若有初始化语句:int a[3][4]={0];,则下面正确的叙述是( )
A、只有元素a[0][0]可得到初值0
B、此初始化语句不正确
C、数组a中每个元素都可得到初值0
D、数组a中各元素都可得到初值,a[0][0]初值0,其他元素初值为随机数
9、下面是对数组s的初始化,其中错误的语句是( )
A、char s[5]={"abc"};
B、char s[5]={'a','b','c'};
C、char s[5]=" ";
D、char s[5]="Frank";
10、已有定义:char a[]="boy",b[]={'b','o','y'};,则以下叙述中正确的是( )
A、数组a和数组b长度相同
B、a数组长度小于b数组长度
C、a数组长度大于b数组长度
D、其他说法都不对
第六章测试1、C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是( )
A、地址传递
B、单向值传递
C、由实参传给形参,再由形参反馈给实参
D、由用户指定传递方式
2、关于实参和形参,以下错误的说法是( )
A、实参可以是常量,变量或表达式
B、形参可以是常量,变量或表达式
C、实参可以为任意类型
D、如果形参和实参的类型不一致,以形参类型为准
3、函数在定义时,若省略函数类型说明符,则该函数值的类型为( )
A、int
B、void
C、double
D、float
4、如果在一个函数中的复合语句中定义了一个变量,则该变量( )
A、只在该复合语句内有效
B、在该函数中有效
C、在本程序范围内有效
D、为非法变量
5、以下对C语言函数的有关描述中,正确的是( )
A、C函数既可以嵌套定义又可以递归调用
B、函数必须有返回值,否则不能使用函数
C、C程序中有调用关系的所有函数必须放在同一个源程序文件中
D、在C中调用函数时,只能把实参的值传给形参,不能把形参的值送给实参
6、若函数调用时的实参为普通变量,下列关于函数形参和实参的叙述中正确的是( )
A、函数的实参和其对应的形参共占同一存储单元
B、形参只是形式上的存在,不占用具体存储单元
C、同名的实参和形参占同一存储单元
D、函数的形参和实参分别占用不同的存储单元
7、关于函数相关内容,以下叙述中错误的是( )
A、用户定义的函数中可以没有return语句
B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值
C、用户定义的函数中若没有return语句,则应当定义函数为void类型
D、函数的return语句中可以没有表达式
8、以下叙述中正确的是( )
A、全局变量的作用域一定比局部变量的作用域范围大
B、静态(static)变量的生存期贯穿于整个程序的运行期间
C、函数的形参都属于全局变量
D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值
9、以下说法中正确的是( )
A、主函数中定义的变量在所有的函数中有效
B、形式参数是全局变量
C、在函数内部定义的变量只在本函数范围内有效
D、全局变量与局部变量同名时,局部变量不起作用
10、若程序中定义了以下函数,并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )。 double myadd(double a,double b) { return (a+b); }
A、double myadd(double a,b);
B、double myadd(double,double);
C、double myadd(double b,double a);
D、double myadd(double x,double y);
第七章测试1、变量的指针,其含义是指该变量的( )
A、值
B、地址
C、名
D、一个标记
2、设已有定义float x;,则以下对指针变量p进行定义其赋初值的语句中正确的是( )
A、float *p=1024;
B、float *p=&x;
C、int *p=(int)x;
D、float p=&x;
3、若用数组名作为函数调用的实参,传递给形参的是( )
A、数组的首地址
B、数组中第一个元素的值
C、数组中全部元素的值
D、数组元素的个数
4、已有定义:int i,a[10],*p; , 则合法的赋值语句是( )
A、p=i;
B、p=a[5];
C、p=a+2;
D、p=a[2]+2;
5、C语言的以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )
A、char s[10]= "hello ";
B、char s[10]; s= "hello";
C、char t[]="hello",*s=t;
D、char s[10]; strcpy(s, "hello");
6、以下程序段执行后输出结果是( )。 char *p[10]={ "abc","aabdfg","dcdbe","abbd","cd"}; printf(“%d\n”,strlen(p[4]));
A、2
B、3
C、4
D、5
7、已定义以下函数,则函数的功能是( )。 fun(char *p2, char *p1) { while((*p2=*p1)!='\0') { p1++; p2++; } }
A、将p1所指字符串复制到p2所指内存空间
B、将p1 所指字符串的地址赋给指针 p2
C、对p1和p2两个指针所指字符串进行比较
D、检查p1和p2两个指针所指字符串中是否有‘\0’
8、设有定义int *ptr, x, array[5]={5,4,3,2,1}; ptr=array; 则能使x的值为3的语句( )
A、x=array[3];
B、x=*(array+3);
C、x=*(ptr+2)
D、array+=2; x=*array;
9、两个指针变量不可以( )。
A、相加
B、相减
C、比较
D、指向同一个地址
10、若有定义int (*p)[5];,则下列说法正确的是( )。
A、定义了基本类型为int的5个指针变量。
B、定义了基本类型为int的具有5个元素的指针数组p
C、定义了一个名为*p、具有5个元素的整型数组
D、定义了一个名为p的行指针变量,它可以指向每行有5个整数元素的二维数组
第八章测试1、下列关于结构体的阐述错误的是( )。
A、结构体成员可以是普通变量,也可以是数组,指针及结构体变量等
B、结构体定义可以在函数内部,也可在函数外部
C、结构体成员的名字可以同程序中的其他变量名相同
D、结构体数据类型可以直接使用
2、当说明一个结构体变量时,系统分配给它的内存是( )。
A、各成员所需内存量的总和
B、结构中第一个成员所需内存量
C、成员中占内存量最大者所需的容量
D、结构中最后一个成员所需内存量
3、C语言结构体类型变量在程序执行期间( )
A、所有成员一直驻留在内存中
B、只有一个成员驻留在内存中
C、部分用到的成员驻留在内存中
D、没有成员驻留在内存中
4、有如下定义 struct student { int num; float score; }stu; 则下面叙述中错误的是( )。
A、struct是结构体类型的关键字
B、struct student是用户定义的结构体类型
C、stu是用户定义的结构体类型
D、num和score都是结构体成员名
5、下列关于typedef的叙述错误的是( )。
A、用typedef可以增加新类型
B、typedef只是将已存在的类型用一个新的名字来代表
C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D、用typedef为类型说明一个新名,通常可以增加程序的可读性
6、在C语法中,下面结构体的定义语句中,错误的是( )
A、struct point {int x;int y;int z;};struct point a;
B、struct {int x;int y;int z;} point a;
C、strunt point {int x;int y;int z;} a;
D、struct {int x;int y;int z;} a;
7、以下对结构变量stu1中成员age的非法引用是( )。 struct student { int age; int num; }stu1,*p; p=&stu1;
A、stu1.age
B、student.age
C、p->age
D、.(*p).age
8、若有以下说明语句,则下面的叙述错误的是()。 struct date { int year; int month; int day; }brithday;
A、struct是声明结构体类型时用的关键字
B、struct date 是用户定义的结构体类型名
C、year,day 都是结构体成员名
D、brithday是用户定义的结构体类型名
9、下面关于结构的说法错误的是()
A、结构是由用户自定义的一种数据类型
B、结构中可设定若干个不同数据类型的成员
C、结构中成员的数据类型可以是另一个已经定义的结构
D、在定义结构时,可以为成员设置默认值
10、当说明一个共用体变量时,系统分配给它的内存是( )
A、各成员所需内存量的总和
B、第一个成员所需内存量
C、成员中占内存量最大者所需的容量
D、最后一个成员所需内存量
第九章测试1、若执行fopen函数时发生错误,则函数的返回值是( )。
A、地址值
B、0
C、1
D、EOF
2、函数调用语句:fseek(fp,-20L,2)的含义是( )。
A、将文件位置指针移到距离文件头20个字节处
B、将文件位置指针从当前位置向后移动20个字节
C、将文件位置指针从文件末尾处前移20个字节
D、将文件位置指针移到离当前位置20个字节处
3、以二进制只读方式打开一个已有的文本文件file1,正确调用fopen函数的方式是( )
A、fp=fopen("file1","rb");
B、fp=fopen("file1","r+");
C、fp=fopen("file1","r");
D、fp=fopen("file1","rb+");
4、C语言中库函数fgets(str,n,fp)的功能是()。
A、从文件fp中读取长度n的字符串存入str指向的内存。
B、从文件fp中读取长度不超过n-1的字符串存入str指向的内存
C、从文件fp中读取n个字符串存入str指向的内存。
D、从str读取至多n个字符到文件fp。
5、于以下一段程序的理解错误的是( )。 FILE *fp; if((fp=fopen("D:\\test.txt","w"))==NULL) { printf("Can not open the file!\n"); exit(0); }
A、FILE *fp;表示定义一个文件指针fp
B、if语句表示调用fopen函数以只读的形式打开D盘根目录下的文件test.txt
C、fopen函数打开文件失败后的返回值为NULL
D、通过调用fopen函数,使文件指针fp指向文件test.txt在内存中的缓冲区
6、下列关于C语言文件的叙述中正确的是( )。
A、文件由一系列数据依次排列组成,只能构成二进制文件
B、文件由结构序列组成,可以构成二进制文件或文本文件
C、文件由数据序列组成,可以构成二进制文件或文本文件
D、文件由字符序列组成,其类型只能是文本文件
第十章测试1、下面关于void * malloc (unsigned int size)函数描述错误的( )。
A、malloc()函数用来动态分配内存,所分配的空间长度为size
B、函数的返回值为指向该区域起始地址的指针
C、若分配不成功则返回NULL
D、malloc函数申请的空间若不释放,也有可能被其他程序申请
2、有如下定义: struct node { int data; struct node *next; }a,b,c; 下列哪个答案可以将变量a,b,c在内存中的位置连接起来( )。
A、a=b=c;
B、a.next=b.next=c.next;
C、a.next=&b; b.next=&c;
D、a.data=&b; b.data=&c;
3、有以下结构体说明和变量的定义,且指针p指向结点a,指针q指向结点b。则把结点b连接到结点a之后的语句是( ) 。 struct node { int data; struct node *next; } struct node a,b,*p=&a,*q=&b;
A、a.next=q;
B、p.next=&b;
C、p->next=b;
D、(*p)->next=q;
4、下列关于线性链表的叙述中,正确的是( )
A、各数据结点的存储空间必须连续
B、各数据结点的存储顺序与逻辑顺序必须要一致
C、进行插入和删除时,不需要移动链表中的元素
D、其他三种说法都不对
5、有以下结构体说明和变量定义: struct node{ int data; struct *next;}*p1,*q,*p2; 下面的链表中,在p1和p2之间插入一个元素q,正确的操作是( )
![图片.png 图片.png]()
A、p1->next=q; q->next=p2;
B、p1->next=q; q->next=NULL;
C、p2->next=q; q->next=NULL;
D、p1->next=p2;p2->next=q;
6、有以下结构体说明和变量定义: struct node{ int data; struct *next;}*p1,*q,*p2; 下面的链表中,在p1和p2之间删除一个元素q,正确的操作是( )
![图片.png 图片.png]()
A、p1->next=q; q->next=p2;
B、p1->next=q->next;
C、p1->netx=p2->next;
D、p1->next=p2,p2->next=q;
7、现有以下结构体说明和变量定义,如图所示,指针p、q、r分别指定一个链表中连续的3个结点。 struct node { double data; struct node*next; }*p, *q, *r;
![图片.png 图片.png]()
A、q->next=p;
B、p=r;
C、p->next= q->next ;
D、q->next=r->next;
8、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是( )。
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;
9、若已建立下面的链表结构,指针p、s分别指向图中所示节点,则不能将s所指的节点插入到链表末尾的语句组是( )。
![图片.png 图片.png]()
A、s->next=NULL; p=p->next; p->next=s;
B、p=p->next; s->next=p->next; p->next=s;
C、p=p->next; s->next=p; p->next=s;
D、p=(*p).next; (*s).next=(*p).next; (*p).next=s;
10、有如下定义: struct node { int data; struct node *next; }a,b,c;
![图片.png 图片.png]()
A、a=c;
B、a.next =c.next;
C、a.next=&b; b.next=&c;
D、a.next=b.next;