计算机2级c语言题库单选题100道及答案_第1页
计算机2级c语言题库单选题100道及答案_第2页
计算机2级c语言题库单选题100道及答案_第3页
计算机2级c语言题库单选题100道及答案_第4页
计算机2级c语言题库单选题100道及答案_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机2级c语言题库单选题100道及答案1.若有定义:inta=3,b=4;则表达式(a+b)/2的值是()A.3B.3.5C.4D.4.5答案:A解析:a+b为7,7除以2是整数除法,结果取整为3。2.以下哪个是合法的C语言标识符()A.2abB.intC._abcD.a-b答案:C解析:标识符只能由字母、数字和下划线组成,且不能以数字开头,int是关键字不能作为标识符,a-b包含非法字符。3.若有语句:intx=10;则执行x+=2;后,x的值是()A.10B.12C.2D.8答案:B解析:x+=2等价于x=x+2,10+2为12。4.下面关于C语言注释的描述,正确的是()A.注释只能单行注释B.注释会被编译器编译C.注释可以出现在程序的任何位置D.注释必须放在语句后面答案:C解析:C语言有单行注释和多行注释,注释不会被编译器编译,可放在程序任何位置。5.若有定义:charch='A';则ch的ASCII码值对应的十进制数是()A.65B.97C.66D.98答案:A解析:字符'A'的ASCII码十进制值是65。6.以下能正确表示逻辑关系“a大于等于10且小于20”的C语言表达式是()A.a>=10ora<20B.a>=10&&a<20C.a>=10||a<20D.a>=10&a<20答案:B解析:在C语言中,逻辑与用&&表示。7.若有语句:inta=5,b=3;则表达式a%b的值是()A.1B.2C.3D.0答案:B解析:%是取余运算符,5除以3余数为2。8.以下哪种数据类型在C语言中不能用于定义变量()A.integerB.intC.floatD.char答案:A解析:C语言中整数类型是int,不是integer。9.若有定义:intarr[5]={1,2,3,4,5};则arr[2]的值是()A.1B.2C.3D.4答案:C解析:数组下标从0开始,arr[2]是数组第3个元素,值为3。10.以下关于if语句的说法,错误的是()A.if语句可以嵌套使用B.if语句后面的条件表达式必须用括号括起来C.if语句后面只能跟一条语句D.if语句可以没有else部分答案:C解析:if语句后面可以跟多条语句,用花括号括起来形成复合语句。11.若有定义:floatf=3.14;则表达式(int)f的值是()A.3B.3.14C.4D.3.0答案:A解析:(int)是强制类型转换,将浮点数3.14转换为整数3。12.下面哪个是C语言中合法的字符串常量()A.'abc'B."abc"C.abcD.{abc}答案:B解析:字符串常量用双引号括起来,单引号括起来的是字符常量。13.若有语句:intx=1,y=2;则执行y=x++;后,x和y的值分别是()A.1,1B.2,1C.1,2D.2,2答案:B解析:x++是先使用x的值再自增,所以y得到x原来的值1,然后x变为2。14.以下关于while循环的说法,正确的是()A.while循环一定会执行至少一次B.while循环的条件表达式为假时结束循环C.while循环只能用于处理数组D.while循环的循环体必须用花括号括起来答案:B解析:当while循环条件表达式为假时,结束循环;do-while循环一定会执行至少一次;while循环用途广泛,不只是处理数组;循环体只有一条语句时可不加花括号。15.若有定义:inta[3][2]={{1,2},{3,4},{5,6}};则a[1][1]的值是()A.1B.4C.3D.5答案:B解析:二维数组中a[1][1]表示第2行第2列元素,值为4。16.以下哪个运算符的优先级最高()A.+B.*C.=D.&&答案:B解析:算术运算符中*优先级高于+,赋值运算符=优先级较低,逻辑与运算符&&优先级也低于*。17.若有定义:charstr[]="hello";则str的长度是()A.5B.6C.4D.7答案:A解析:字符串"hello"长度为5,不包括字符串结束符'\0'。18.以下关于for循环的说法,错误的是()A.for循环可以省略初始化部分B.for循环可以省略条件判断部分C.for循环可以省略循环变量更新部分D.for循环不能嵌套使用答案:D解析:for循环可以省略初始化、条件判断和循环变量更新部分,并且可以嵌套使用。19.若有语句:inta=7,b=2;则表达式a/b+0.5的值是()A.3.5B.4.0C.3D.4答案:C解析:a/b是整数除法得3,3+0.5结果还是3(因为3是整数,会舍去小数部分)。20.下面哪个函数是C语言中用于输入字符串的()A.printf()B.scanf()C.getchar()D.gets()答案:D解析:printf()是输出函数,scanf()可输入多种类型数据但对字符串输入有局限,getchar()是输入单个字符,gets()用于输入字符串。21.若有定义:inta=0;则表达式!a的值是()A.0B.1C.2D.-1答案:B解析:!是逻辑非运算符,a为0时,!a为1。22.以下关于数组的说法,正确的是()A.数组定义后大小可以改变B.数组元素的下标可以是负数C.数组名代表数组首元素的地址D.数组可以不初始化就使用答案:C解析:数组定义后大小固定,数组元素下标从0开始不能为负数,未初始化的数组使用可能有不确定值,数组名代表首元素地址。23.若有语句:intx=5;则执行x*=2+3;后,x的值是()A.10B.25C.7D.15答案:B解析:x*=2+3等价于x=x*(2+3),5*5为25。24.以下哪种情况会导致C语言程序编译错误()A.变量未初始化B.语句后缺少分号C.注释写得太多D.函数调用时参数类型不匹配但可隐式转换答案:B解析:语句后缺少分号会导致编译错误,变量未初始化可能有不确定值但不是编译错误,注释不影响编译,参数类型可隐式转换一般不会编译报错。25.若有定义:charch='a';则执行ch=ch-32;后,ch的值是()A.'A'B.'a'C.'b'D.'B'答案:A解析:小写字母ASCII码值比大写字母大32,'a'减32得到'A'。26.以下关于break语句的说法,正确的是()A.break语句只能用于循环语句中B.break语句可以结束当前的switch语句C.break语句可以跳出多层嵌套循环D.break语句可以在任何地方使用答案:B解析:break语句可用于循环和switch语句,用于结束当前的switch或循环;不能直接跳出多层嵌套循环,也不是在任何地方都能使用。27.若有定义:intarr[10];则数组arr占用的内存字节数是()A.10B.20C.40D.80答案:C解析:假设int类型占4个字节,10个元素的数组占用4*10=40字节。28.以下关于函数的说法,错误的是()A.函数可以有返回值B.函数可以没有参数C.函数定义后必须马上调用D.函数可以嵌套调用答案:C解析:函数定义后不一定要马上调用,可以在需要时调用。29.若有语句:inta=10,b=20;则表达式a>b?a:b的值是()A.10B.20C.30D.0答案:B解析:这是三目运算符,a>b为假,所以取冒号后面的值b,即20。30.下面哪个是C语言中用于输出字符的函数()A.puts()B.printf()C.getch()D.putchar()答案:D解析:puts()用于输出字符串,printf()功能多样可输出多种类型,getch()是输入函数,putchar()用于输出字符。31.若有定义:intx=8;则执行x&=3;后,x的值是()A.0B.1C.2D.3答案:D解析:x&=3等价于x=x&3,8的二进制是1000,3的二进制是0011,按位与结果为0000,即0。32.以下关于continue语句的说法,正确的是()A.continue语句会结束整个循环B.continue语句只能用于while循环C.continue语句会跳过本次循环剩余部分,进入下一次循环D.continue语句可以在任何地方使用答案:C解析:continue语句会跳过本次循环剩余部分,进入下一次循环,可用于for、while、do-while循环,不是结束整个循环,也不是在任何地方都能使用。33.若有定义:inta[5]={1,2,3};则a[3]的值是()A.0B.1C.2D.3答案:A解析:数组部分初始化时,未初始化的元素自动初始化为0。34.以下哪个是C语言中合法的转义字符()A.'\n'B.'\m'C.'\x'D.'\z'答案:A解析:'\n'是换行符,是合法的转义字符,'\m'、'\x'、'\z'不是合法转义字符。35.若有语句:intx=3,y=4;则表达式(x<y)?x++:y++的值是()A.3B.4C.5D.6答案:A解析:x<y为真,取x的值3,然后x自增。36.以下关于递归函数的说法,错误的是()A.递归函数自己调用自己B.递归函数必须有终止条件C.递归函数效率一定比非递归函数高D.递归函数可以解决一些复杂问题答案:C解析:递归函数效率不一定比非递归函数高,因为递归会有函数调用开销等问题。37.若有定义:floatf1=3.14,f2=2.71;则表达式f1>f2?f1:f2的值是()A.3.14B.2.71C.5.85D.0.43答案:A解析:f1>f2为真,取f1的值3.14。38.以下关于指针的说法,正确的是()A.指针只能指向整数类型变量B.指针变量必须初始化才能使用C.指针就是地址D.指针不能进行算术运算答案:C解析:指针是存储地址的变量,可指向各种类型变量,指针变量不初始化使用会有危险但不是必须初始化,指针可以进行算术运算。39.若有语句:inta=5;int*p=&a;则*p的值是()A.5B.变量a的地址C.指针p的地址D.0答案:A解析:*p是指针p所指向变量的值,p指向a,所以*p为5。40.以下关于结构体的说法,错误的是()A.结构体可以包含不同类型的数据B.结构体变量的成员可以通过点运算符访问C.结构体类型定义后不能再修改D.结构体可以嵌套定义答案:C解析:结构体类型定义后可以通过修改定义语句进行修改。41.若有定义:inta=1,b=2,c=3;则表达式(a<b)?((b<c)?b:c):a的值是()A.1B.2C.3D.0答案:B解析:先判断a<b为真,再判断b<c为真,所以取b的值2。42.以下关于文件操作的说法,正确的是()A.打开文件只能以只读方式B.关闭文件后文件指针还可以使用C.文件操作前必须先打开文件D.写入文件的数据只能是文本答案:C解析:打开文件有多种方式,关闭文件后文件指针不能再使用,写入文件的数据可以是二进制等多种形式,文件操作前必须先打开文件。43.若有定义:charstr1[]="abc",str2[]="def";则strcat(str1,str2)后,str1的内容是()A."abc"B."def"C."abcdef"D."defabc"答案:C解析:strcat函数用于连接两个字符串,将str2连接到str1后面。44.以下关于预处理器指令的说法,错误的是()A.预处理器指令以#开头B.预处理器指令在编译前处理C.预处理器指令可以定义常量D.预处理器指令可以进行函数调用答案:D解析:预处理器指令在编译前处理,以#开头,可定义常量等,但不能进行函数调用。45.若有定义:inta[3]={1,2,3};int*p=a;则*(p+1)的值是()A.1B.2C.3D.4答案:B解析:p指向数组a的首元素,p+1指向数组a的第二个元素,*(p+1)就是取该元素的值,即2。46.以下关于typedef的说法,正确的是()A.typedef只能定义新的数据类型B.typedef定义的新类型名不能与已有类型名相同C.typedef可以简化复杂的类型声明D.typedef定义的新类型与原类型本质不同答案:C解析:typedef用于给已有类型起别名,可简化复杂类型声明,新类型名可按需设置,新类型与原类型本质相同。47.若有语句:inta=10;int*p=&a;*p=20;则a的值是()A.10B.20C.30D.40答案:B解析:p指向a,*p=20就是修改a的值为20。48.以下关于宏定义的说法,错误的是()A.宏定义可以带参数B.宏定义在编译时展开C.宏定义可以提高代码的可读性D.宏定义可以定义简单的函数功能答案:B解析:宏定义在预处理阶段展开,不是编译时,宏可带参数、提高可读性、实现简单函数功能。49.若有定义:intarr[4][3];则数组元素的个数是()A.4B.3C.7D.12答案:D解析:二维数组元素个数为行数乘以列数,4*3=12。50.以下关于函数参数传递的说法,正确的是()A.只能按值传递参数B.按地址传递参数时函数内可修改实参的值C.按值传递参数时函数内可修改实参的值D.函数参数传递只有一种方式答案:B解析:C语言有按值传递和按地址传递,按地址传递时函数内可通过指针修改实参值,按值传递不能修改实参值。51.若有定义:doubled=3.14159;则(int)d的值是()A.3.14159B.3C.4D.3.0答案:B解析:(int)强制类型转换将double型的d转换为整数,舍去小数部分得3。52.以下关于字符数组和字符串的说法,错误的是()A.字符串以'\0'结尾B.字符数组可以存储字符串C.字符数组长度必须等于字符串长度D.可以用字符串初始化字符数组答案:C解析:字符数组长度可以大于字符串长度,只要能容纳字符串和结束符'\0'即可。53.若有语句:inta=5,b=3;则表达式a>b?++a:--b的值是()A.6B.4C.5D.3答案:A解析:a>b为真,执行++a,a先自增为6并作为表达式的值。54.以下关于do-while循环的说法,正确的是()A.do-while循环先判断条件再执行循环体B.do-while循环的循环体至少执行一次C.do-while循环不能嵌套使用D.do-while循环的条件表达式必须为真答案:B解析:do-while先执行循环体再判断条件,循环体至少执行一次,可嵌套使用,条件表达式可为真或假。55.若有定义:inta[5]={1,2,3,4,5};int*p=&a[2];则*p的值是()A.1B.2C.3D.4答案:C解析:p指向数组a的第3个元素(下标为2),*p为该元素的值3。56.以下关于位运算符的说法,错误的是()A.位运算符用于对二进制位进行操作B.位运算符可以提高程序的执行效率C.位运算符只能用于整数类型D.位运算符和逻辑运算符功能相同答案:D解析:位运算符对二进制位操作,可提高效率,只能用于整数类型,与逻辑运算符功能不同。57.若有语句:intx=10;则执行x|=2;后,x的值是()A.10B.12C.2D.8答案:B解析:x|=2等价于x=x|2,10的二进制是1010,2的二进制是0010,按位或结果为1010|0010=1010,即12。58.以下关于动态内存分配的说法,正确的是()A.动态内存分配只能在栈上进行B.动态内存分配的空间不需要释放C.动态内存分配使用malloc等函数D.动态内存分配的大小必须是固定的答案:C解析:动态内存分配在堆上进行,使用malloc等函数,分配的空间使用完要释放,分配大小可根据需求确定。59.若有定义:charstr[]="Hello";则strlen(str)的值是()A.5B.6C.4D.7答案:A解析:strlen函数返回字符串长度,不包括结束符'\0',"Hello"长度为5。60.以下关于函数返回值的说法,错误的是()A.函数可以没有返回值B.函数返回值类型必须与定义的返回类型一致C.函数返回值可以是指针类型D.函数返回值只能是基本数据类型答案:D解析:函数返回值可以是基本数据类型、指针类型等,也可以没有返回值,返回值类型要与定义一致。61.若有定义:inta=3,b=4;则表达式a^b的值是()A.1B.2C.3D.4答案:A解析:a的二进制是0011,b的二进制是0100,按位异或0011^0100=0111,即1。62.以下关于全局变量的说法,正确的是()A.全局变量只能在主函数中定义B.全局变量的作用域是整个程序C.全局变量不能被多个函数使用D.全局变量在程序运行期间不会改变答案:B解析:全局变量在函数外部定义,作用域是整个程序,可被多个函数使用,其值可改变。63.若有语句:inta=5;int*p=&a;int**q=&p;则**q的值是()A.5B.变量a的地址C.指针p的地址D.0答案:A解析:q是指向指针p的指针,**q就是取a的值,为5。64.以下关于枚举类型的说法,错误的是()A.枚举类型定义一组常量B.枚举常量的值可以自定义C.枚举常量默认从0开始编号D.枚举类型不能用于定义变量答案:D解析:枚举类型可定义一组常量,常量值可自定义,默认从0开始编号,能用于定义变量。65.若有定义:intarr[3]={10,20,30};int*p=arr;则*(p+2)的值是()A.10B.20C.30D.40答案:C解析:p指向数组首元素,p+2指向第3个元素,*(p+2)为30。66.以下关于条件编译的说法,正确的是()A.条件编译只能根据宏定义进行B.条件编译可以提高程序的可移植性C.条件编译在运行时进行D.条件编译不能嵌套使用答案:B解析:条件编译可根据宏定义等进行,在预处理阶段进行,可提高程序可移植性,能嵌套使用。67.若有语句:inta=8;则执行a>>=2;后,a的值是()A.2B.4C.8D.16答案:A解析:a>>=2等价于a=a>>2,8右移2位,二进制1000变为0010,即2。68.以下关于字符串处理函数的说法,错误的是()A.strcpy函数用于复制字符串B.strcmp函数用于比较字符串大小C.strstr函数用于查找子字符串D.这些函数只能处理长度固定的字符串答案:D解析:字符串处理函数可处理不同长度字符串,strcpy复制、strcmp比较、strstr查找子串。69.若有定义:inta=1,b=2;则表达式a<b?a++:b++的值是()A.1B.2C.3D.4答案:A解析:a<b为真,取a的值1,然后a自增。70.以下关于链表的说法,正确的是()A.链表只能是单向的B.链表的节点在内存中是连续存储的C.链表的插入和删除操作效率高D.链表不能实现动态增长答案:C解析:链表有单向、双向等,节点在内存中不连续存储,插入和删除操作效率高,可动态增长。71.若有定义:floatf=5.6;则(int)f+1的值是()A.5B.6C.5.6D.6.6答案:B解析:(int)f为5,5+1为6。72.以下关于文件指针的说法,错误的是()A.文件指针指向文件操作的位置B.文件指针可以同时指向多个文件C.文件指针使用前必须初始化D.文件指针可以进行移动操作答案:B解析:文件指针一次只能指向一个文件,它指向文件操作位置,使用前要初始化,可进行移动操作。73.若有语句:inta=7;则执行a&=3;后,a的值是()A.0B.1C.2D.3答案:D解析:a&=3等价于a=a&3,7的二进制是0111,3的二进制是0011,按位与结果为0011,即3。74.以下关于函数重载的说法,在C语言中()A.支持函数重载B.不支持函数重载C.部分支持函数重载D.函数重载和函数名无关答案:B解析:C语言不支持函数重载,函数名要唯一。75.若有定义:intarr[4]={1,2,3,4};int*p=arr+2;则*p的值是()A.1B.2C.3D.4答案:C解析:p指向数组第3个元素(下标为2),*p为3。76.以下关于结构体数组的说法,正确的是()A.结构体数组的元素类型必须相同B.结构体数组不能初始化C.结构体数组的元素不能通过下标访问D.结构体数组只能存储一个结构体答案:A解析:结构体数组元素类型相同,可初始化,元素可通过下标访问,能存储多个结构体。77.若有语句:inta=10;intb=a++;则b的值是()A.10B.11C.9D.12答案:A解析:a++先使用a的值,b得到a原来的值10,然后a自增。78.以下关于联合(共用体)的说法,错误的是()A.联合的所有成员共享同一块内存B.联合可以同时存储多个成员的值C.联合的大小取决于最大成员的大小D.联合可用于节省内存答案:B解析:联合所有成员共享同一块内存,同一时间只能存储一个成员的值,大小取决于最大成员,可节省内存。79.若有定义:charstr[]="world";则str[2]的值是()A.'w'B.'o'C.'r'D.'l'答案:C解析:数组下标从0开始,str[2]是第3个字符'r'。80.以下关于命令行参数的说法,正确的是()A.命令行参数只能在主函数中使用B.命令行参数的数量是固定的C.命令行参数传递的都是整数D.命令行参数可以不使用答案:D解析:命令行参数可在主函数中使用,数量不固定,传递的可以是各种类型数据,也可以不使用。81.若有定义:inta=4,b=2;则表达式a/b*2的值是()A.4B.2C.8D.1答案:A解析:按从左到右运算,4/2为2,2*2为4。82.以下关于存储类别修饰符的说法,错误的是()A.auto变量是自动存储类别B.static变量在程序运行期间一直存在C.register变量存储在寄存器中D.extern变量不能在多个文件中使用答案:D解析:extern变量用于声明在其他文件中定义的全局变量,可在多个文件中使用。83.若有语句:inta=5;int*p=&a;p++;则p指向的地址()A.不变B.增加1个字节C.增加4个字节(假设int占4字节)D.减少4个字节(假设int占4字节)答案:C解析:指针p加1会指向下一个同类型元素,对于int类型增加4个字节。84.以下关于位段的说法,正确的是()A.位段成员的类型只能是intB.位段可以节省内存C.位段成员不能按位操作D.位段的长度必须是8的倍数答案:B解析:位段成员类型可以是int、unsignedint等,可节省内存,能按位操作,长度无此要求。85.若有定义:intarr[3][2]={{1,2},{3,4},{5,6}};int*p=&arr[1][1];则*p的值是()A.1B.4C.3D.5答案:B解析:p指向arr[1][1],即第2行第2列元素,值为4。86.以下关于宏函数和普通函数的说法,错误的是()A.宏函数在预处理阶段展开B.普通函数有函数调用开销C.宏函数的参数没有类型检查D.宏函数和普通函数功能完全相同答案:D解析:宏函数在预处理展开,无类型检查,普通函数有调用开销,二者功能有差异。87.若有语句:inta=6;则执行a<<=1;后,a的值是()A.3B.6C.12D.24答案:C解析:a<<=1等价于a=a<<1,6的二进制是0110,左移1位变为1100,即12。88.以下关于函数指针的说法,正确的是()A.函数指针不能指向不同类型的函数B.函数指针不能作为函数的参数C.函数指针只能调用一次函数D.函数指针可以提高程序的灵活性答案:D解析:函数指针可以指向不同类型但参数和返回值匹配的函数,可以作为函数参数,能多次调用函数,使用它可提高程序灵活性。89.若有定义:charstr1[]="abc";charstr2[]="abd";则strcmp(str1,str2)的值()A.大于0B.小于0C.等于0D.无法确定答案:B解析:strcmp比较两个字符串大小,按字典序比较,"abc"小于"abd",返回值小于0。90.以下关于递归函数的终止条件,说法正确的是()A.终止条件可有可无B.终止条件保证递归不会无限进行C.终止条件只能是常量D.终止条件在递归函数外部设置答案:B解析:递归函数必须有终止条件,保证递归不会无限进行,终止条件可以是变量、表达式等,在递归函数内部设置。91.若有定义:inta=3,b=5;则表达式(a|b)&~a的值是()A.0B.2C.5D.3答案:B解析:先算a|b,3的二进制0011或5的二进制0101得0111;再算~a得1100;最后0111与1100按位与得0100,即2。92.以下关于数组指针的说法,错误的是()A.数组指针可以指向一维数组B.数组指针可以指向二维数组C.数组指针的移动步长与数组元素类型有关D.数组指针只能指向固定大小的数组答案:D解析:数组指针可指向不同大小的一维或二维数组,其移动步长与数组元素类型有关。93.若有语句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论