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

下载本文档

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

文档简介

全国计算机二级c语言题库单选题100道及答案1.以下哪个是正确的C语言标识符?A.2variableB.variable_2C.variable-2D.if答案:B解析:C语言标识符只能由字母、数字和下划线组成,且不能以数字开头,同时不能是C语言的关键字。选项A以数字开头,选项C包含非法字符“-”,选项D是关键字,所以选B。2.若有定义inta=5;,则执行语句a+=a-=a*a;后,a的值是?A.-40B.-50C.40D.50答案:B解析:根据运算符优先级,先计算a*a=25,然后a-=25,即a=5-25=-20,最后a+=-20,即a=-20+(-20)=-50,所以选B。3.以下关于for循环的说法,正确的是?A.for循环只能用于已知循环次数的情况B.for循环的三个表达式都可以省略C.for循环的循环体必须用花括号括起来D.for循环不能嵌套使用答案:B解析:for循环的三个表达式都可以省略,例如for(;;)是一个无限循环。for循环也可用于未知循环次数的情况,循环体只有一条语句时可以不用花括号,for循环可以嵌套使用,所以选B。4.以下哪种情况可以用break语句跳出?A.只能跳出switch语句B.只能跳出循环语句C.可以跳出switch语句和循环语句D.可以跳出任何语句块答案:C解析:break语句可以用于跳出switch语句和循环语句(如for、while、do-while),但不能跳出任意语句块,所以选C。5.若有定义intarr[5]={1,2,3,4,5};,则arr[3]的值是?A.1B.2C.3D.4答案:D解析:数组下标从0开始,arr[3]表示数组中第4个元素,值为4,所以选D。6.以下关于函数调用的说法,错误的是?A.函数调用时实参和形参可以同名B.函数调用时实参和形参的类型必须一致C.函数调用时可以不传递实参D.函数调用时实参和形参的个数必须相同答案:C解析:函数调用时如果函数定义有参数,必须传递相应数量和类型的实参。实参和形参可以同名,类型一般要一致,个数也要相同,所以选C。7.若有定义charch='A';,则执行语句ch=ch+32;后,ch的值是?A.'A'B.'a'C.'B'D.'b'答案:B解析:在ASCII码中,大写字母和小写字母相差32,'A'的ASCII码值加上32得到'a'的ASCII码值,所以选B。8.以下关于指针的说法,正确的是?A.指针只能指向变量B.指针变量必须初始化C.指针的大小与所指向的数据类型有关D.可以对指针进行加减运算答案:D解析:指针可以指向变量、数组、函数等;指针变量不一定要初始化;指针的大小在同一系统中是固定的,与所指向的数据类型无关;可以对指针进行加减运算,所以选D。9.以下哪个是正确的结构体定义形式?A.struct{inta;charb;}s;B.structs{inta;charb;};s;C.struct{inta;charb;}s[10];D.structs{inta;charb;}s;答案:A解析:选项A是正确的匿名结构体定义并声明变量的形式;选项B语法错误;选项C定义了一个结构体数组;选项D重复使用了变量名s,不符合语法,所以选A。10.若有定义inta=10,b=20;,则执行语句inttemp=a;a=b;b=temp;后,a和b的值分别是?A.10,20B.20,10C.10,10D.20,20答案:B解析:该语句通过临时变量temp交换了a和b的值,所以a变为20,b变为10,选B。11.以下关于do-while循环的说法,正确的是?A.do-while循环至少执行一次循环体B.do-while循环的条件判断在循环体执行之前C.do-while循环不能嵌套使用D.do-while循环的循环体只能有一条语句答案:A解析:do-while循环先执行循环体,再进行条件判断,所以至少执行一次循环体。它可以嵌套使用,循环体可以有多条语句,所以选A。12.若有定义intarr[][3]={{1,2,3},{4,5,6}};,则arr[1][2]的值是?A.4B.5C.6D.3答案:C解析:二维数组arr中,arr[1][2]表示第二行第三列的元素,值为6,所以选C。13.以下关于函数返回值的说法,错误的是?A.函数可以没有返回值B.函数的返回值类型可以是结构体类型C.函数的返回值只能通过return语句返回D.函数的返回值类型必须与函数定义时指定的类型一致答案:C解析:函数可以没有返回值(用void类型),返回值类型可以是结构体类型等。函数一般通过return语句返回值,但也可以通过指针等方式间接返回信息,返回值类型通常要与函数定义时指定的类型一致,所以选C。14.若有定义charstr[]="hello";,则str的长度是?A.5B.6C.4D.不确定答案:B解析:字符串"hello"包含5个字符,但在C语言中字符串以'\0'结尾,所以数组str的长度是6,选B。15.以下关于文件操作的说法,正确的是?A.打开文件时必须指定文件的打开模式B.文件操作只能对文本文件进行C.关闭文件可以不调用fclose函数D.读取文件时不需要检查文件是否打开成功答案:A解析:打开文件时必须指定打开模式,如"r"(只读)、"w"(只写)等。文件操作可以对二进制文件等进行,关闭文件必须调用fclose函数,读取文件前要检查文件是否打开成功,所以选A。16.若有定义inta=3,b=4;,则表达式a<b?a:b的值是?A.3B.4C.0D.1答案:A解析:这是一个三目运算符表达式,因为a<b为真,所以返回a的值3,选A。17.以下关于数组名的说法,正确的是?A.数组名是一个常量指针,指向数组的首元素B.数组名可以像指针一样进行自增自减运算C.数组名可以作为函数的返回值D.数组名可以直接赋值给另一个数组名答案:A解析:数组名是一个常量指针,指向数组的首元素。数组名不能进行自增自减运算,不能作为函数的返回值,也不能直接赋值给另一个数组名,所以选A。18.若有定义voidfunc(int*p);,则以下调用正确的是?A.inta=5;func(a);B.inta=5;func(&a);C.intarr[5];func(arr[0]);D.intarr[5];func(&arr[0]);答案:B解析:函数func的参数是一个指针,需要传递变量的地址。选项A传递的是变量值,选项C传递的也是数组元素的值,选项D虽然是数组首元素地址,但不如选项B简洁准确,所以选B。19.以下关于递归函数的说法,错误的是?A.递归函数必须有终止条件B.递归函数的效率一定比迭代函数高C.递归函数会占用较多的栈空间D.递归函数是自己调用自己的函数答案:B解析:递归函数必须有终止条件,否则会陷入无限递归。递归函数会占用较多的栈空间,它是自己调用自己的函数。但递归函数的效率不一定比迭代函数高,有时会有较多的重复计算,所以选B。20.若有定义floatf=3.14;,则表达式(int)f的值是?A.3.14B.3C.4D.不确定答案:B解析:(int)f是强制类型转换,将float类型的f转换为int类型,会直接舍去小数部分,所以值为3,选B。21.以下关于while循环的说法,正确的是?A.while循环的循环体可以为空B.while循环的条件表达式只能是关系表达式C.while循环不能嵌套使用D.while循环的循环体执行次数一定大于0答案:A解析:while循环的循环体可以为空,条件表达式可以是各种表达式,while循环可以嵌套使用,while循环的循环体执行次数可能为0(当条件一开始就不满足时),所以选A。22.若有定义intarr[5]={0};,则数组arr的所有元素的值是?A.都为0B.都为随机值C.第一个元素为0,其余为随机值D.第一个元素为随机值,其余为0答案:A解析:这种初始化方式会将数组的所有元素初始化为0,所以选A。23.以下关于函数重载的说法,在C语言中?A.可以实现函数重载B.不可以实现函数重载C.函数名相同但参数不同就是函数重载D.函数名相同但返回值不同就是函数重载答案:B解析:C语言不支持函数重载,函数重载是C++的特性,所以选B。24.若有定义charch;,则以下输入语句正确的是?A.scanf("%c",ch);B.scanf("%c",&ch);C.scanf("%s",&ch);D.scanf("%s",ch);答案:B解析:scanf函数输入字符时,需要传递变量的地址,所以选B。选项C和D用于输入字符串,这里不适用。25.以下关于动态内存分配的说法,正确的是?A.动态内存分配使用的函数是malloc,不需要包含头文件B.动态内存分配的内存空间在栈上C.动态内存分配的内存空间使用完后不需要释放D.动态内存分配可以根据需要调整分配的内存大小答案:D解析:动态内存分配使用malloc等函数,需要包含头文件<stdlib.h>。动态内存分配的内存空间在堆上,使用完后需要用free函数释放。可以使用realloc函数根据需要调整分配的内存大小,所以选D。26.若有定义inta=7,b=3;,则表达式a%b的值是?A.2B.0C.1D.3答案:A解析:%是取余运算符,7%3的结果是2,所以选A。27.以下关于数组作为函数参数的说法,正确的是?A.数组作为函数参数时,传递的是数组的副本B.数组作为函数参数时,函数内对数组元素的修改不会影响原数组C.数组作为函数参数时,必须指定数组的大小D.数组作为函数参数时,传递的是数组的首地址答案:D解析:数组作为函数参数时,传递的是数组的首地址,函数内对数组元素的修改会影响原数组,不一定要指定数组的大小,所以选D。28.若有定义void(*p)(int);,则p是?A.一个函数,返回值是void,参数是intB.一个指向函数的指针,该函数返回值是void,参数是intC.一个整型变量D.一个指向整型变量的指针答案:B解析:void(*p)(int)定义了一个指向函数的指针p,该函数返回值是void,参数是int,所以选B。29.以下关于枚举类型的说法,正确的是?A.枚举类型的元素默认从1开始编号B.枚举类型的元素可以是不同的数据类型C.枚举类型的元素可以在定义后重新赋值D.枚举类型可以提高程序的可读性答案:D解析:枚举类型的元素默认从0开始编号,元素必须是同一数据类型(整型),枚举类型的元素在定义后不能重新赋值,它可以提高程序的可读性,所以选D。30.若有定义inta=10;,则执行语句a<<=2;后,a的值是?A.20B.40C.12D.8答案:B解析:<<是左移运算符,a<<=2相当于a=a<<2,10的二进制左移2位,相当于乘以4,结果是40,所以选B。31.以下关于switch语句的说法,正确的是?A.switch语句的表达式只能是整型或字符型B.switch语句的case后面必须是常量表达式C.switch语句的default子句必须放在最后D.switch语句的每个case后面都必须有break语句答案:B解析:switch语句的表达式可以是整型、字符型、枚举类型等。case后面必须是常量表达式,default子句可以放在任意位置,case后面不一定要有break语句,所以选B。32.若有定义intarr[3][4];,则对数组元素arr[1][2]的正确引用是?A.*(arr+1)[2]B.*(*(arr+1)+2)C.(*(arr+1))[2]D.*(arr[1]+2)答案:B解析:二维数组可以通过指针的方式引用元素,*(arr+1)指向第二行,*(arr+1)+2指向第二行第三列元素的地址,*(*(arr+1)+2)就是该元素的值,所以选B。33.以下关于函数参数传递方式的说法,正确的是?A.C语言只有值传递一种参数传递方式B.指针作为函数参数时是引用传递C.数组作为函数参数时是引用传递D.结构体作为函数参数时是引用传递答案:A解析:C语言只有值传递一种参数传递方式,指针、数组、结构体作为函数参数时,传递的也是它们的值(地址或副本),不是真正意义上的引用传递,所以选A。34.若有定义charstr1[10]="hello",str2[10];,则以下复制字符串的操作正确的是?A.str2=str1;B.for(inti=0;i<10;i++)str2[i]=str1[i];C.strcpy(str2,str1);D.以上都不对答案:C解析:数组名不能直接赋值,选项A错误。选项B没有考虑字符串结束符'\0'。使用strcpy函数可以正确复制字符串,所以选C。35.以下关于文件指针的说法,正确的是?A.文件指针指向文件的内容B.文件指针是一个普通的指针变量C.文件指针在使用前不需要初始化D.文件指针可以同时指向多个文件答案:B解析:文件指针是一个普通的指针变量,指向一个文件信息区。它指向的不是文件内容,使用前需要初始化,一个文件指针同一时间只能指向一个文件,所以选B。36.若有定义inta=5,b=6;,则表达式a>b?a++:b++的值是?A.5B.6C.7D.不确定答案:B解析:因为a>b为假,所以返回b++的值,先返回b的值6,然后b自增为7,所以选B。37.以下关于数组越界的说法,正确的是?A.数组越界一定会导致程序崩溃B.数组越界不会影响程序的正常运行C.数组越界可能会导致不可预期的结果D.数组越界只会访问到相邻的数组元素答案:C解析:数组越界不一定会导致程序崩溃,也可能会影响程序正常运行,它可能会访问到其他内存区域,导致不可预期的结果,不一定只是相邻的数组元素,所以选C。38.若有定义voidfunc(inta[]);,则以下调用正确的是?A.intarr[5];func(arr);B.intarr[5];func(&arr);C.inta=5;func(a);D.intarr[5];func(arr[0]);答案:A解析:函数func的参数是一个整型数组,在C语言中数组名代表数组首地址,所以可以直接将数组名作为实参传递给函数。选项B传递的是数组的地址的地址;选项C传递的是一个整型变量;选项D传递的是数组的第一个元素,均不符合函数参数要求,所以选A。39.若有定义typedefstruct{intx;inty;}Point;,则以下声明变量正确的是?A.structPointp;B.Pointp;C.struct{intx;inty;}p;D.typedefPointp;答案:B解析:通过typedef为结构体类型定义了别名Point,之后可以直接使用Point来声明变量。选项A错误地使用了structPoint;选项C没有使用定义的别名;选项D语法错误,所以选B。40.若有定义inta=8;,则执行语句a|=2;后,a的值是?A.2B.8C.10D.6答案:C解析:|=是按位或赋值运算符,8的二进制是1000,2的二进制是0010,按位或运算后结果为1010,即十进制的10,所以选C。41.以下关于continue语句的说法,正确的是?A.continue语句只能用于循环语句中B.continue语句会结束整个循环C.continue语句可以用于switch语句中D.continue语句之后的语句不会被执行答案:A解析:continue语句只能用于循环语句中,它的作用是跳过本次循环中continue语句之后的语句,直接进入下一次循环,不会结束整个循环,也不能用于switch语句,所以选A。42.若有定义intarr[4]={1,2,3};,则arr[3]的值是?A.1B.2C.3D.0答案:D解析:数组初始化时,如果提供的初始值个数少于数组元素个数,剩余元素会被初始化为0,所以arr[3]的值为0,选D。43.以下关于函数嵌套调用的说法,正确的是?A.函数不能嵌套调用B.函数嵌套调用会导致程序出错C.函数嵌套调用可以实现复杂的功能D.函数嵌套调用的层数不能超过3层答案:C解析:函数可以嵌套调用,通过函数嵌套调用可以将复杂的任务分解成多个小任务,实现复杂的功能,嵌套调用不会必然导致程序出错,嵌套层数也没有严格限制,所以选C。44.若有定义charch='9';,则表达式ch-'0'的值是?A.'9'B.9C.0D.不确定答案:B解析:在ASCII码中,字符'0'-'9'是连续的,字符减去字符'0'可以得到对应的数字值,所以'9'-'0'的值是9,选B。45.以下关于静态变量的说法,正确的是?A.静态变量只能在函数内部定义B.静态变量在程序运行期间只初始化一次C.静态变量的作用域是整个程序D.静态变量的生命周期和自动变量一样答案:B解析:静态变量可以在函数内部或外部定义。它在程序运行期间只初始化一次,之后再次进入函数时不会重新初始化。静态变量的作用域根据定义位置有所不同,不一定是整个程序。静态变量的生命周期是整个程序运行期间,和自动变量不同,所以选B。46.若有定义inta=1,b=2,c;,则执行语句c=(a>b)?a:b;后,c的值是?A.1B.2C.0D.3答案:B解析:因为a>b为假,所以三目运算符返回b的值,即2,所以选B。47.以下关于数组和指针的关系,错误的是?A.数组名可以隐式转换为指向数组首元素的指针B.可以通过指针来访问数组元素C.指针和数组是完全相同的概念D.指针可以指向数组的任意元素答案:C解析:数组名在很多情况下可以隐式转换为指向数组首元素的指针,通过指针可以方便地访问数组元素,指针也可以指向数组的任意元素。但指针和数组不是完全相同的概念,数组有自己的大小和存储方式等,所以选C。48.若有定义void(*p)(int,int);,则以下赋值正确的是?A.voidfunc(int,int);p=func;B.voidfunc(inta,intb);p=&func;C.intfunc(int,int);p=func;D.voidfunc(int);p=func;答案:A解析:p是一个指向函数的指针,该函数返回值为void,有两个int类型的参数。选项A中函数func的类型和p指向的函数类型匹配,可以直接将函数名赋值给p;选项B中取函数地址的操作在C语言中是多余的;选项C中函数返回值类型不匹配;选项D中函数参数个数不匹配,所以选A。49.以下关于宏定义的说法,正确的是?A.宏定义只能定义常量B.宏定义在编译时进行替换C.宏定义的作用域是整个程序D.宏定义可以嵌套,但不能递归答案:B解析:宏定义不仅可以定义常量,还可以定义带参数的宏等。宏定义在编译时进行简单的文本替换。宏定义的作用域从定义处到文件结束或遇到#undef指令。宏定义可以递归,所以选B。50.若有定义inta=15;,则执行语句a&=7;后,a的值是?A.7B.15C.8D.0答案:A解析:&=是按位与赋值运算符,15的二进制是1111,7的二进制是0111,按位与运算后结果为0111,即十进制的7,所以选A。51.以下关于for循环嵌套的说法,正确的是?A.for循环只能嵌套两层B.嵌套的for循环的循环变量必须不同C.嵌套的for循环的执行顺序是外层循环执行一次,内层循环执行完所有次数D.嵌套的for循环会导致程序效率降低答案:C解析:for循环可以嵌套多层,嵌套的for循环的循环变量可以相同(但可能会引起混淆)。嵌套的for循环执行顺序是外层循环执行一次,内层循环执行完所有次数。嵌套的for循环不一定会导致程序效率降低,合理使用可以实现复杂功能,所以选C。52.若有定义intarr[2][3]={{1,2},{3,4,5}};,则arr[0][2]的值是?A.1B.2C.0D.3答案:C解析:在初始化二维数组时,未提供初始值的元素会被初始化为0,所以arr[0][2]的值为0,选C。53.以下关于函数的参数默认值,在C语言中?A.可以为函数参数设置默认值B.不可以为函数参数设置默认值C.只有在函数声明时可以设置参数默认值D.只有在函数定义时可以设置参数默认值答案:B解析:C语言不支持为函数参数设置默认值,这是C++的特性,所以选B。54.若有定义charstr[]="abc\0def";,则strlen(str)的值是?A.7B.3C.4D.不确定答案:B解析:strlen函数计算字符串的长度,遇到'\0'就停止,所以"abc\0def"的长度是3,选B。55.以下关于内存泄漏的说法,正确的是?A.内存泄漏只会发生在动态内存分配中B.内存泄漏不会影响程序的正常运行C.内存泄漏是指程序使用了未分配的内存D.只要使用了动态内存分配就一定会发生内存泄漏答案:A解析:内存泄漏主要是指在动态内存分配中,分配的内存使用完后没有释放,导致这部分内存无法再被使用。内存泄漏会影响程序的性能甚至导致程序崩溃。它不是使用了未分配的内存。使用动态内存分配不一定会发生内存泄漏,只要正确释放内存即可,所以选A。56.若有定义inta=3,b=5;,则表达式a^b的值是?A.2B.8C.6D.0答案:A解析:^是按位异或运算符,3的二进制是0011,5的二进制是0101,按位异或运算后结果为0110,即十进制的2,所以选A。57.以下关于数组初始化的说法,错误的是?A.可以只初始化部分数组元素B.数组初始化时元素个数可以超过数组定义的大小C.字符数组可以用字符串常量初始化D.数组初始化时可以不指定数组大小答案:B解析:数组初始化时可以只初始化部分元素,剩余元素会被初始化为0。字符数组可以用字符串常量初始化。数组初始化时如果提供了初始值,可以不指定数组大小。但数组初始化时元素个数不能超过数组定义的大小,所以选B。58.若有定义voidfunc(int*a,int*b);,则以下调用正确的是?A.intx=1,y=2;func(x,y);B.intx=1,y=2;func(&x,&y);C.intarr[2]={1,2};func(arr[0],arr[1]);D.intarr[2]={1,2};func(&arr[0],&arr[1]);答案:B解析:函数func的参数是两个指针,需要传递变量的地址。选项A传递的是变量值;选项C传递的也是数组元素的值;选项D虽然传递的是地址,但不如选项B简洁明了,所以选B。59.以下关于枚举常量的说法,正确的是?A.枚举常量可以在程序中重新赋值B.枚举常量的值只能是整数C.枚举常量的作用域是整个程序D.枚举常量可以和其他类型的数据进行运算答案:B解析:枚举常量在定义后不能重新赋值,其值只能是整数。枚举常量的作用域根据定义位置而定,不一定是整个程序。枚举常量可以和同类型的数据进行运算,与其他类型运算需要进行类型转换,所以选B。60.若有定义inta=4;,则执行语句a>>=1;后,a的值是?A.2B.4C.8D.1答案:A解析:>>=是右移赋值运算符,4的二进制是0100,右移1位后是0010,即十进制的2,所以选A。61.以下关于switch语句中break的作用,正确的是?A.跳出整个switch语句B.跳出当前的case分支C.结束本次循环D.结束整个程序答案:A解析:在switch语句中,break语句的作用是跳出整个switch语句,而不是只跳出当前case分支。它和循环无关,也不会结束整个程序,所以选A。62.若有定义intarr[3][2]={1,2,3,4,5,6};,则arr[2][1]的值是?A.5B.6C.4D.3答案:B解析:二维数组按行存储,arr[2][1]表示第三行第二列的元素,值为6,所以选B。63.以下关于函数的返回值类型,说法错误的是?A.函数的返回值类型可以是自定义类型B.函数的返回值类型可以是指针类型C.函数的返回值类型可以和参数类型不同D.函数必须有返回值答案:D解析:函数的返回值类型可以是自定义类型、指针类型等,也可以和参数类型不同。但函数不一定必须有返回值,当返回值类型为void时表示没有返回值,所以选D。64.若有定义charstr1[10],str2[]="world";,则以下连接字符串的操作正确的是?A.str1=str1+str2;B.strcat(str1,str2);C.for(inti=0;i<strlen(str2);i++)str1[strlen(str1)+i]=str2[i];D.以上都不对答案:B解析:数组名不能进行加法运算,选项A错误。选项C没有考虑字符串结束符。使用strcat函数可以正确连接字符串,所以选B。65.以下关于文件读写的说法,正确的是?A.以"r"模式打开文件时,如果文件不存在会创建文件B.以"w"模式打开文件时,如果文件已存在会清空文件内容C.以"a"模式打开文件时,只能从文件开头写入数据D.以"rb"模式打开文件时,可以进行文本文件的读取答案:B解析:以"r"模式打开文件时,如果文件不存在会打开失败;以"w"模式打开文件时,如果文件已存在会清空文件内容;以"a"模式打开文件时,是从文件末尾追加数据;以"rb"模式打开文件是用于二进制文件的读取,所以选B。66.若有定义inta=7,b=2;,则表达式a/b的值是?A.3.5B.3C.4D.不确定答案:B解析:两个整数相除,结果会舍去小数部分,所以7/2的值是3,选B。67.以下关于数组名作为函数参数传递的特点,正确的是?A.函数内部无法修改数组元素的值B.传递的是数组的副本,函数内外数组互不影响C.函数可以获取数组的真实长度D.传递的是数组的首地址,函数内部可以修改数组元素的值答案:D解析:数组名作为函数参数传递时,传递的是数组的首地址,函数内部可以通过这个地址修改数组元素的值。函数无法直接获取数组的真实长度,因为只传递了首地址,所以选D。68.若有定义void(*p)(void);,则p可以指向以下哪个函数?A.intfunc(void);B.voidfunc(int);C.voidfunc(void);D.charfunc(void);答案:C解析:p是一个指向函数的指针,该函数返回值为void,无参数。选项A和D返回值类型不匹配;选项B参数类型不匹配;只有选项C符合要求,所以选C。69.以下关于结构体嵌套的说法,正确的是?A.结构体不能嵌套B.结构体嵌套时,内部结构体不能有自己的成员C.结构体嵌套可以实现复杂的数据结构D.结构体嵌套会导致程序出错答案:C解析:结构体可以嵌套,内部结构体可以有自己的成员。通过结构体嵌套可以实现复杂的数据结构,合理使用不会导致程序出错,所以选C。70.若有定义inta=9;,则执行语句a&=~(1<<2);后,a的值是?A.9B.5C.13D.0答案:B解析:1<<2得到4(二进制0100),~(1<<2)是对其取反得到1011,9的二进制是1001,按位与运算后结果为0101,即十进制的5,所以选B。71.以下关于while循环和do-while循环的区别,正确的是?A.while循环先判断条件,do-while循环后判断条件B.while循环至少执行一次循环体,do-while循环不一定C.while循环的循环体只能有一条语句,do-while循环可以有多条语句D.while循环不能嵌套,do-while循环可以嵌套答案:A解析:while循环先判断条件,条件为真才执行循环体;do-while循环先执行循环体,再判断条件。while循环不一定执行循环体,do-while循环至少执行一次。两种循环的循环体都可以有多条语句,也都可以嵌套,所以选A。72.若有定义intarr[5]={1,3,5,7,9};,则*(arr+3)的值是?A.1B.3C.5D.7答案:D解析:数组名arr可以看作指向数组首元素的指针,arr+3指向数组的第四个元素(下标为3),*(arr+3)就是取该元素的值,为7,所以选D。73.以下关于函数的存储类别,说法错误的是?A.函数默认的存储类别是externB.用static修饰的函数只能在本文件中被调用C.函数可以有auto存储类别D.函数的存储类别影响其作用域和链接属性答案:C解析:函数默认的存储类别是extern,表示可以在其他文件中被调用。用static修饰的函数具有内部链接属性,只能在本文件中被调用。函数没有auto存储类别,auto一般用于局部变量。函数的存储类别确实会影响其作用域和链接属性,所以选C。74.若有定义charch='B';,则表达式ch+3的值是?A.'E'B.'D'C.'C'D.'F'答案:A解析:在ASCII码中,字符'B'的ASCII值加上3,得到字符'E'的ASCII值,所以表达式的值是'E',选A。75.以下关于动态数组的说法,正确的是?A.动态数组在编译时确定大小B.动态数组使用完后不需要释放内存C.动态数组可以根据需要调整大小D.动态数组只能是一维的答案:C解析:动态数组是在程序运行时通过动态内存分配函数(如malloc、realloc)来确定大小的,不是在编译时。动态数组使用完后需要用free函数释放内存。动态数组可以使用realloc函数根据需要调整大小,也可以是多维的,所以选C。76.若有定义inta=4,b=5;,则表达式a&&b的值是?A.0B.1C.4D.5答案:B解析:&&是逻辑与运算符,只要两个操作数都为非零值,结果就为1。这里a和b都不为0,所以a&&b的值是1,选B。77.以下关于数组和字符串的关系,说法正确的是?A.字符串一定是数组,但数组不一定是字符串B.数组一定是字符串,但字符串不一定是数组C.数组和字符串是完全相同的概念D.字符串和数组没有任何关系答案:A解析:字符串是由字符组成的以'\0'结尾的数组,所以字符串一定是数组,但数组不一定是以'\0'结尾的,不一定是字符串,它们不是完全相同的概念,所以选A。78.若有定义void(*p)(float);,以下哪个函数可以赋值给p?A.voidfunc(int);B.voidfunc(float);C.intfunc(float);D.voidfunc(double);答案:B解析:p是一个指向函数的指针,该函数返回值为void,参数为float类型。选项A参数类型不匹配;选项C返回值类型不匹配;选项D参数类型不匹配;只有选项B符合要求,所以选B。79.以下关于枚举类型的定义和使用,说法错误的是?A.枚举类型定义时可以指定元素的值B.枚举类型的元素可以作为常量使用C.枚举类型的元素可以进行自增自减运算D.枚举类型的元素可以和整数进行比较答案:C解析:枚举类型定义时可以指定元素的值,元素可以作为常量使用,也可以和整数进行比较。但枚举类型的元素不可以进行自增自减运算,因为它们是常量,所以选C。80.若有定义inta=12;,则执行语句a|=(1<<1);后,a的值是?A.12B.14C.10D.8答案:B解析:1<<1得到2(二进制0010),12的二进制是1100,按位或运算后结果为1110,即十进制的14,所以选B。81.以下关于for循环的执行流程,说法正确的是?A.先执行循环体,再判断条件,最后更新循环变量B.先判断条件,条件为真则执行循环体,然后更新循环变量C.先更新循环变量,再判断条件,条件为真则执行循环体D.先执行循环体,再更新循环变量,最后判断条件答案:B解析:for循环的执行流程是先执行初始化表达式,然后判断条件表达式,条件为真则执行循环体,最后执行更新表达式,所以选B。82.若有定义intarr[2][3]={{1,2},{3}};,则arr[1][2]的值是?A.1B.2C.3D.0答案:D解析:在初始化二维数组时,未提供初始值的元素会被初始化为0,所以arr[1][2]的值为0,选D。83.以下关于函数的参数传递,说法错误的是?A.实参和形参的类型要一致B.实参和形参的个数要相同C.传递数组时,传递的是数组的副本D.传递指针时,传递的是指针的值答案:C解析:函数参数传递时,实参和形参的类型和个数一般要一致。传递数组时,传递的是数组的首地址,不是数组的副本;传递指针时,传递的是指针的值(即地址),所以选C。84.若有定义charstr[]="abc";,则sizeof(str)的值是?A.3B.4C.不确定D.以上都不对答案:B解析:sizeof运算符计算的是数组所占的内存空间大小,字符串"abc"包含3个字符,但还有一个字符串结束符'\0',所以数组str的大小是4,选B。85.以下关于文件操作的错误处理,说法正确的是?A.打开文件失败时不需要进行错误处理B.读取文件时不需要检查文件指针是否为空C.关闭文件失败不会影响程序的运行D.进行文件操作时应该检查函数的返回值以进行错误处理答案:D解析:打开文件失败、读取文件时文件指针为空、关闭文件失败等情况都可能影响程序的正常运行,进行文件操作时应该检查函数的返回值以进行错误处理,所以选D。86.若有定义inta=6,b=3;,则表达式a%=b;后,a的值是?A.2B.0C.3D.6答案:B解析:%=是取余赋值运算符,6%3的结果是0,所以执行语句后a的值为0,选B。87.以下关于数组的初始化方式,说法正确的是?A.只能在定义数组时进行初始化B.可以在定义后通过赋值语句对整个数组进行初始化C.可以在函数内部对全局数组进行初始化D.可以使用循环对数组元素进行初始化答案:D解析:数组可以在定义时初始化,也可以在定义后使用循环对数组元素进行初始化。不能通过赋值语句对整个数组进行初始化,全局数组的初始化在程序开始时进行,不是在函数内部,所以选D。88.若有定义voidfunc(int**p);,则以下调用正确的是?A.inta=5;func(&a);B.inta=5;int*pa=&a;func(pa);C.inta=5;int*pa=&a;func(&pa);D.inta=5;func(a);答案:C解析:函数func的参数是一个二级指针,需要传递一个指针的地址。选项A传递的是变量的地址;选项B传递的是一级指针;选项D传递的是变量值;只有选项C传递的是一级指针的地址,符合要求,所以选C。89.以下关于结构体变量的赋值,说法正确的是?A.结构体变量不能直接赋值B.结构体变量可以直接赋值,只要类型相同C.结构体变量赋值时,成员变量的顺序可以不同D.结构体变量赋值时,成员变量的类型可以不同答案:B解析:只要结构体类型相同,结构体变量可以直接赋值。赋值时成员变量的顺序和类型都要一致,所以选B。90.若有定义inta=8;,则执行语句a^=2;后,a的值是?A.10B.6C.8D.2答案:A解析:^=是按位异或赋值运算符,8的二进制是1000,2的二进制是0010,按位异或运算后结果为1010,即十进制的10,所以选A。91.以下关于continue语句

温馨提示

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

评论

0/150

提交评论