还剩7页未读,继续阅读
文本内容:
c语言调试题及答案
一、单项选择题(共30题,每题1分)(以下题目均为单选题,每题只有一个正确答案)
1.C语言中,以下哪个是合法的变量名()A.int B.1var C.var_1D.if
2.若有定义int a=5,b=3;,执行a+=b++;后,a和b的值分别为()A.a=8,b=4B.a=8,b=3C.a=5,b=4D.a=5,b=
33.以下关于printf函数格式控制符的描述,错误的是()A.%d用于输出十进制整数B.%f用于输出单精度浮点数C.%c用于输出单个字符D.%s用于输出字符串
4.C语言中,for循环的循环体至少执行()次A.0B.1C.2D.不确定
5.以下关于if-else语句的描述,正确的是()A.else必须与最近的未匹配if配对B.if语句中只能有一个elseC.if后面必须有else D.else可以单独使用
6.若有定义int arr
[5]={1,2,3};,则arr
[4]的值为()A.0B.1C.3D.不确定
7.以下哪个函数用于从键盘读取一个字符()A.scanf B.getchar C.printf D.puts
8.C语言中,全局变量的默认存储类别是()A.auto B.static C.extern D.register
9.以下关于数组的描述,错误的是()A.数组元素的类型必须相同B.数组的大小在定义时必须确定第1页共9页C.数组名表示数组首元素的地址D.数组可以直接赋值(如arr1=arr2)
10.函数void funcintx{...}的返回值类型为()A.int B.void C.无类型D.无法确定
11.若有定义int*p;,则p表示()A.一个整数B.一个指向整数的指针C.一个整数的地址D.一个函数
12.以下关于指针运算的描述,正确的是()A.指针可以直接与整数相加B.指针不能进行比较运算C.两个指针可以直接相乘D.指针不能赋值为NULL
13.C语言中,static关键字修饰的局部变量的生命周期为()A.程序运行期间B.函数调用期间C.变量定义时D.未定义
14.以下哪个是C语言中的逻辑运算符()A.+B.C.|D.=
15.若有定义char str[]=hello;,则strlenstr的值为()A.5B.6C.7D.不确定
16.以下关于结构体的描述,错误的是()A.结构体是自定义的数据类型B.结构体成员的访问使用-运算符C.结构体变量可以整体赋值D.结构体可以嵌套定义
17.C语言中,switch语句的case后面的值()A.必须是整数或字符常量B.可以是任意类型C.必须大于0D.不能重复
18.以下哪个函数用于动态分配内存()A.malloc B.free C.calloc D.A和C
19.若有定义int a=10;int*p=a;,则*p的值为()第2页共9页A.10B.a C.地址值D.不确定
20.C语言中,以下哪个不是预处理指令()A.#include B.#define C.#if D.printf
21.以下关于递归函数的描述,正确的是()A.递归函数一定不会有无限循环B.递归函数必须有终止条件C.递归函数只能调用一次自身D.递归函数效率比非递归高
22.若有定义int a
[3]
[4];,则数组元素a
[1]
[2]的地址表示为()A.a+1*4+2B.a
[1]
[2]C.*a+1+2D.B和C
23.C语言中,const关键字修饰的变量()A.可以被修改B.必须初始化C.只能在堆区定义D.作用域是全局
24.以下关于main函数的描述,正确的是()A.程序中可以有多个main函数B.main函数必须有返回值C.main函数的参数只能是int argc,char*argv[]D.main函数不能被调用
25.若有定义int a=3,b=5;,执行a=~b;后,a的值为()(假设int为32位)A.-6B.6C.-5D.
526.C语言中,break语句在循环中的作用是()A.结束整个程序B.跳过当前循环的剩余部分,继续下一次循环C.结束当前循环D.改变循环条件
27.以下关于文件操作的描述,正确的是()A.打开文件时必须指定w模式B.fclose函数用于关闭文件C.读取文件只能用fread D.文件指针不需要初始化
28.若有定义int*p
[3];,则p表示()第3页共9页A.一个指向数组的指针B.一个数组指针,指向包含3个int元素的数组C.一个函数指针D.一个指向int的指针数组
29.C语言中,sizeofint的结果()A.一定是4字节B.与系统位数有关,32位为4字节,64位为8字节C.与编译器有关,不同编译器结果可能不同D.不确定
30.以下哪个不是C语言的基本数据类型()A.int B.float C.struct D.double
二、多项选择题(共20题,每题2分)(以下题目为多选题,每题至少有两个正确答案,多选、少选、错选均不得分)
1.以下哪些是C语言中的数据类型()A.char B.double C.void D.enum
2.关于指针的说法,正确的有()A.指针变量存储的是另一个变量的地址B.指针变量的大小在32位系统中为4字节C.空指针的值为NULL D.可以通过指针修改所指向变量的值
3.以下关于数组的描述,正确的有()A.数组的下标从0开始B.数组在定义时必须指定大小C.数组名是常量指针D.可以通过sizeof计算数组元素个数
4.C语言中的循环语句有()A.for B.while C.do-while D.switch
5.以下关于函数参数传递的说法,正确的有()A.C语言默认是值传递B.指针传递可以修改实参的值第4页共9页C.数组名作为参数时退化为指针D.结构体作为参数时只能使用值传递
6.以下哪些是C语言中的预处理指令()A.#define B.#include C.#ifdef D.#error
7.关于static关键字的作用,正确的有()A.修饰局部变量延长生命周期B.修饰全局变量限制作用域为本文件C.修饰函数限制作用域为本文件D.修饰结构体使成员不可修改
8.以下哪些是C语言中的控制流语句()A.if-else B.switch C.for D.return
9.以下关于结构体的说法,正确的有()A.结构体可以包含不同类型的成员B.结构体变量可以用typedef重命名C.结构体可以作为函数参数传递D.结构体数组可以直接赋值
10.以下关于动态内存分配的说法,正确的有()A.malloc函数返回void*类型B.calloc函数会将内存初始化为0C.动态分配的内存不需要手动释放D.动态分配失败时返回NULL
11.以下哪些是C语言中的错误类型()A.语法错误B.运行时错误C.逻辑错误D.编译错误
12.关于printf函数格式控制符的描述,正确的有()A.%d输出十进制整数B.%x输出十六进制整数(小写)C.%f输出浮点数时默认保留6位小数D.%s输出字符串时会自动添加结束符第5页共9页
13.以下关于变量作用域的说法,正确的有()A.全局变量的作用域是整个程序B.局部变量的作用域仅限于定义它的块C.静态局部变量的作用域是整个程序D.函数参数的作用域是函数内部
14.以下哪些是C语言中的位运算符()A.B.|C.^D.
15.关于文件操作的描述,正确的有()A.打开文件时可以指定r(读)、w(写)、a(追加)等模式B.关闭文件用fcloseC.读取文件时可以用fscanf或fgets D.写文件时可以用fprintf或fputs
16.以下关于递归函数的说法,正确的有()A.递归函数必须有终止条件B.递归函数的效率通常比非递归低C.递归函数会占用较多内存D.递归函数只能解决数学问题
17.以下哪些是C语言中的关键字()A.int B.float C.include D.return
18.关于const关键字的使用,正确的有()A.const inta=5;中a是常量,不可修改B.int const*p=a;中p指向的内容不可修改C.int*const p=a;中p不可指向其他地址D.const修饰的变量必须初始化
19.以下关于结构体和联合体的区别,正确的有()A.结构体各成员有各自独立的内存空间B.联合体所有成员共享同一块内存空间第6页共9页C.结构体大小是所有成员大小之和D.联合体大小是最大成员的大小
20.调试C程序时常用的方法有()A.设置断点B.输出变量值C.使用printf打印中间结果D.单步执行
三、判断题(共20题,每题1分)(正确的打“√”,错误的打“×”)
1.C语言中,变量在使用前必须定义()
2.auto关键字是局部变量的默认存储类别()
3.数组名可以直接作为函数参数进行数组的整体传递()
4.函数的返回值类型决定了函数的功能()
5.for循环中的三个表达式都可以省略()
6.*p和p
[0]在数组中是等价的()
7.NULL指针可以直接进行解引用操作()
8.C语言中,printf函数的返回值是输出字符的个数()
9.全局变量的作用域是整个程序,可以在任何函数中直接访问()
10.typedef可以为已有类型定义新的名称()
11.struct和union都是自定义的数据类型()
12.递归函数一定比非递归函数更简洁()
13.break语句可以用于switch和循环语句中()
14.fopen函数打开文件失败时返回NULL()
15.C语言中,float类型的精度比double高()
16.指针变量的值是地址,地址可以进行加减运算()
17.#define定义的宏可以带参数()第7页共9页
18.C语言中,void类型的函数不能有返回值()
19.结构体数组的每个元素都是结构体类型的变量()
20.动态分配的内存(如malloc分配的)不需要手动释放()
四、简答题(共2题,每题5分)
1.简述C语言中“野指针”的概念及产生原因
2.调试C程序时,遇到“数组越界”错误,可能的原因有哪些?如何避免?参考答案
一、单项选择题C
2.A
3.B
4.B
5.AA
7.B
8.C
9.D
10.BB
12.A
13.A
14.B
15.AB
17.A
18.D
19.A
20.DB
22.D
23.B
24.D
25.AC
27.B
28.B
29.C
30.C
二、多项选择题ABCD
2.ABCD
3.ACD
4.ABC
5.ABCABCD
7.ABC
8.ABCD
9.ABC
10.ABDABCD
12.ABC
13.ABD
14.ABCD
15.ABCDABC
17.ABD
18.ABCD
19.ABCD
20.ABCD
三、判断题√
2.√
3.×
4.√
5.√√
7.×
8.√
9.√
10.√√
12.×
13.√
14.√
15.×√
17.√
18.√
19.√
20.×第8页共9页
四、简答题野指针指向已释放内存或未初始化的指针,其指向的内存不可访问,可能导致程序崩溃产生原因指针未初始化(无明确指向)、指针指向的内存被free或delete后未置为NULL、指针运算越界(如数组下标超过范围)数组越界原因循环条件错误(如i n写成i=n,n为数组长度);手动访问数组时下标超出范围(如arr[i]中i=数组长度或0);指针操作越界(如指针指向数组外的内存)避免方法循环中严格控制下标范围(如i从0到n-1);访问数组前检查下标合法性;使用动态数组时注意内存分配大小,避免指针越界访问第9页共9页。
个人认证
优秀文档
获得点赞 0