c语言基础知识点单选题100道及答案_第1页
c语言基础知识点单选题100道及答案_第2页
c语言基础知识点单选题100道及答案_第3页
c语言基础知识点单选题100道及答案_第4页
c语言基础知识点单选题100道及答案_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

c语言基础知识点单选题100道及答案1.以下关于C语言变量声明的说法,正确的是()A.变量声明后就自动被赋值为0B.变量声明可以在函数体的任何位置C.变量声明只能在函数的开头D.不同类型的变量不能在同一语句中声明答案:B解析:在C语言里,变量声明可以在函数体的任意位置。变量声明后不会自动赋值为0;变量声明并非只能在函数开头;不同类型变量也能在同一语句声明,所以A、C、D错误。2.以下哪个是合法的C语言标识符()A.2abcB.intC._abcD.@abc答案:C解析:C语言标识符由字母、数字和下划线组成,且不能以数字开头,也不能是关键字。A以数字开头;B是关键字;D包含非法字符@,所以C正确。3.若有定义inta=5;,则执行语句a+=3;后,a的值为()A.5B.3C.8D.2答案:C解析:a+=3等价于a=a+3,已知a初始值为5,5+3=8,所以a的值变为8,选C。4.以下哪种运算符优先级最高()A.逻辑与运算符&&B.赋值运算符=C.算术运算符+D.关系运算符>答案:C解析:在C语言运算符优先级中,算术运算符优先级高于关系运算符,关系运算符高于逻辑与运算符,逻辑与运算符高于赋值运算符,所以+优先级最高,选C。5.若有定义charch='A';,则ch在内存中占()字节A.1B.2C.3D.4答案:A解析:在C语言中,char类型变量在内存中占1个字节,用于存储一个字符,所以选A。6.以下关于for循环的说法,错误的是()A.for循环的初始化部分只执行一次B.for循环的条件判断部分在每次循环开始时执行C.for循环的更新部分在每次循环结束后执行D.for循环的三个部分都不能省略答案:D解析:for循环的三个部分都可以省略。初始化部分省略时可在循环前完成初始化;条件判断部分省略时默认条件为真;更新部分省略时可在循环体中更新循环变量,所以D错误。7.若有定义intarr[5]={1,2,3,4,5};,则arr[3]的值为()A.1B.2C.3D.4答案:D解析:数组下标从0开始,arr[3]表示数组的第4个元素,该数组中第4个元素是4,所以选D。8.以下关于函数调用的说法,正确的是()A.函数调用时实参和形参的类型可以不同B.函数调用时实参和形参的个数必须相同C.函数调用时实参的值会直接赋给形参D.函数调用时只能按值传递参数答案:B解析:函数调用时实参和形参的个数必须相同,否则会导致编译错误。实参和形参类型一般要相同;实参的值是复制给形参,不是直接赋值;C语言除了按值传递参数,还有按地址传递,所以A、C、D错误。9.若有定义int*p;,则p是()A.一个整型变量B.一个指向整型的指针变量C.一个整型数组D.一个函数指针答案:B解析:int*p;声明了一个指向整型的指针变量p,它可以存储整型变量的地址,所以选B。10.以下关于if-else语句的说法,正确的是()A.if语句后面必须有else语句B.if语句和else语句后面的语句块必须用花括号括起来C.if语句的条件表达式只能是关系表达式D.if语句可以嵌套使用答案:D解析:if语句可以嵌套使用。if语句后面不一定要有else语句;if和else后面语句块若只有一条语句可以不使用花括号;if语句的条件表达式可以是任意合法的表达式,不只是关系表达式,所以A、B、C错误。11.若有定义inta=10,b=20;,执行语句a^=b;b^=a;a^=b;后,a和b的值分别为()A.10,20B.20,10C.10,10D.20,20答案:B解析:通过异或运算可以实现两个变量值的交换。执行这三条语句后,a和b的值会互换,原来a=10,b=20,交换后a=20,b=10,所以选B。12.以下哪个是C语言的转义字符()A.'a'B.'\n'C."a"D.'/'答案:B解析:'\n'是C语言的转义字符,表示换行。'a'是字符常量;"a"是字符串常量;'/'是普通字符,所以选B。13.若有定义floatf=3.14;,则以下哪个是正确的输出语句()A.printf("%d",f);B.printf("%f",f);C.printf("%c",f);D.printf("%s",f);答案:B解析:float类型变量应使用%f格式说明符进行输出。%d用于输出整型;%c用于输出字符;%s用于输出字符串,所以选B。14.以下关于while循环的说法,正确的是()A.while循环的循环体至少会执行一次B.while循环的条件表达式在每次循环结束后判断C.while循环的条件表达式为假时,循环体不会执行D.while循环不能嵌套使用答案:C解析:当while循环的条件表达式为假时,循环体不会执行。while循环的循环体可能一次都不执行;条件表达式在每次循环开始时判断;while循环可以嵌套使用,所以A、B、D错误。15.若有定义intarr[][3]={{1,2,3},{4,5,6}};,则arr[1][2]的值为()A.1B.5C.6D.4答案:C解析:二维数组下标从0开始,arr[1][2]表示第二行第三列的元素,该数组中此元素为6,所以选C。16.以下关于函数返回值的说法,错误的是()A.函数可以没有返回值B.函数的返回值类型必须和函数定义时的返回类型一致C.函数返回值只能是基本数据类型D.函数可以通过return语句返回一个值答案:C解析:函数返回值可以是基本数据类型,也可以是指针类型、结构体类型等。函数可以没有返回值(返回类型为void);返回值类型要和函数定义时的返回类型一致;可以通过return语句返回一个值,所以C错误。17.若有定义int*p,a=10;p=&a;,则*p的值为()A.10B.存储a的地址C.指针p的地址D.0答案:A解析:p指向变量a的地址,*p表示取p所指向地址的值,即a的值,a的值为10,所以*p的值为10,选A。18.以下关于switch语句的说法,正确的是()A.switch语句的表达式只能是整型或字符型B.switch语句的每个case后面必须有break语句C.switch语句不能嵌套使用D.switch语句的default分支必须放在最后答案:A解析:switch语句的表达式只能是整型或字符型。case后面不一定要有break语句;switch语句可以嵌套使用;default分支可以放在任意位置,所以B、C、D错误。19.若有定义inta=5,b=3;,则表达式a%b的值为()A.1B.2C.3D.0答案:B解析:%是取余运算符,5%3的结果是2,即5除以3的余数为2,所以选B。20.以下关于数组名的说法,正确的是()A.数组名是一个变量,可以被赋值B.数组名代表数组的首地址C.数组名和指针变量完全一样D.数组名可以作为函数的返回值答案:B解析:数组名代表数组的首地址。数组名不是变量,不能被赋值;数组名和指针变量有区别;数组名不能作为函数的返回值,所以A、C、D错误。21.若有定义inta=3,b=4;,则表达式a>b?a:b的值为()A.3B.4C.0D.1答案:B解析:这是一个三目运算符表达式,a>b为假,所以返回冒号后面的值,即b的值4,选B。22.以下关于do-while循环的说法,正确的是()A.do-while循环的循环体至少会执行一次B.do-while循环的条件表达式在每次循环开始时判断C.do-while循环不能嵌套使用D.do-while循环和while循环没有区别答案:A解析:do-while循环先执行循环体,再判断条件,所以循环体至少会执行一次。条件表达式在每次循环结束后判断;do-while循环可以嵌套使用;和while循环有区别,所以B、C、D错误。23.若有定义intarr[5]={1,2};,则arr[2]的值为()A.1B.2C.0D.随机值答案:C解析:数组初始化时只给部分元素赋值,未赋值的元素会自动初始化为0,所以arr[2]的值为0,选C。24.以下关于函数参数传递的说法,正确的是()A.按值传递时,函数内部对形参的修改会影响实参B.按地址传递时,函数内部对形参的修改不会影响实参C.按值传递和按地址传递都可以实现数据的双向传递D.按地址传递可以实现数据的双向传递答案:D解析:按地址传递时,函数内部对形参所指向地址的数据修改会影响实参,能实现数据的双向传递。按值传递时,函数内部对形参的修改不会影响实参,所以A、B、C错误。25.若有定义charstr[]="hello";,则str数组的长度为()A.5B.6C.7D.不确定答案:B解析:字符串"hello"后面会自动添加一个字符串结束符'\0',所以数组长度为5+1=6,选B。26.以下关于逻辑运算符的说法,正确的是()A.逻辑与运算符&&的优先级高于逻辑或运算符||B.逻辑与运算符&&和逻辑或运算符||的优先级相同C.逻辑非运算符!的优先级低于逻辑与运算符&&D.逻辑运算符的操作数只能是整型答案:A解析:在逻辑运算符中,逻辑非运算符!优先级最高,其次是逻辑与运算符&&,最后是逻辑或运算符||。逻辑运算符的操作数可以是任意表达式,不只是整型,所以B、C、D错误。27.若有定义inta=10;,则执行语句a*=2;后,a的值为()A.10B.20C.30D.40答案:B解析:a*=2等价于a=a*2,a初始值为10,10*2=20,所以a的值变为20,选B。28.以下关于continue语句的说法,正确的是()A.continue语句只能用于for循环B.continue语句会终止整个循环C.continue语句会跳过本次循环剩余的语句,直接进入下一次循环D.continue语句和break语句的作用相同答案:C解析:continue语句可以用于for、while、do-while循环。它会跳过本次循环剩余的语句,直接进入下一次循环,而不是终止整个循环。break语句是终止整个循环,所以A、B、D错误。29.若有定义intarr[][2]={{1,2},{3,4},{5,6}};,则数组arr的行数为()A.2B.3C.4D.6答案:B解析:根据初始化列表可知,数组有3组数据,所以数组的行数为3,选B。30.以下关于函数原型声明的说法,错误的是()A.函数原型声明可以放在程序的任意位置B.函数原型声明可以省略参数名C.函数原型声明的返回类型必须和函数定义时的返回类型一致D.函数原型声明是不必要的答案:D解析:函数原型声明是必要的,它可以让编译器在调用函数前知道函数的返回类型、参数个数和类型等信息。函数原型声明可以放在程序任意位置;可以省略参数名;返回类型要和函数定义时一致,所以D错误。31.若有定义int*p,arr[5]={1,2,3,4,5};p=arr;,则*(p+2)的值为()A.1B.2C.3D.4答案:C解析:p指向数组arr的首地址,p+2指向数组的第三个元素,*(p+2)就是取该元素的值,即3,选C。32.以下关于条件运算符的说法,正确的是()A.条件运算符是三元运算符B.条件运算符的优先级高于算术运算符C.条件运算符的操作数只能是整型D.条件运算符不能嵌套使用答案:A解析:条件运算符是三元运算符,格式为表达式1?表达式2:表达式3。它的优先级低于算术运算符;操作数可以是任意表达式;可以嵌套使用,所以B、C、D错误。33.若有定义inta=7,b=2;,则表达式a/b的值为()A.3.5B.3C.4D.0答案:B解析:两个整型相除,结果为整型,7/2的结果是3,舍去小数部分,所以选B。34.以下关于嵌套循环的说法,正确的是()A.嵌套循环的内层循环和外层循环的循环变量必须相同B.嵌套循环的内层循环执行次数和外层循环执行次数相同C.嵌套循环可以实现更复杂的逻辑D.嵌套循环只能是两层答案:C解析:嵌套循环可以实现更复杂的逻辑。内层循环和外层循环的循环变量可以不同;内层循环执行次数和外层循环执行次数不一定相同;嵌套循环可以有多层,所以A、B、D错误。35.若有定义intarr[5]={1,2,3,4,5};,则sizeof(arr)的值为()A.5B.10C.20D.不确定答案:C解析:sizeof(arr)返回数组占用的总字节数,int类型通常占4个字节,数组有5个元素,所以4*5=20字节,选C。36.以下关于函数重载的说法,正确的是()A.C语言支持函数重载B.函数重载是指函数名相同但参数不同C.函数重载只和函数的返回类型有关D.函数重载的函数必须在同一个文件中定义答案:B解析:函数重载是指函数名相同但参数不同。C语言不支持函数重载;函数重载和返回类型无关;重载函数不一定要在同一个文件中定义,所以A、C、D错误。37.若有定义int*p,a=20;p=&a;,则p++后p指向的地址()A.增加1个字节B.增加2个字节C.增加4个字节(假设int占4字节)D.不变答案:C解析:指针p是int类型指针,p++会使指针指向下一个int类型的地址,即增加4个字节(假设int占4字节),所以选C。38.以下关于字符数组和字符串的说法,错误的是()A.字符数组可以存储字符串B.字符串一定以'\0'结尾C.字符数组初始化时可以不指定长度D.字符数组和字符串完全一样答案:D解析:字符数组和字符串有区别,字符串是字符数组的一种特殊形式,它以'\0'结尾,而字符数组不一定以'\0'结尾。字符数组可以存储字符串;字符串一定以'\0'结尾;字符数组初始化时可以不指定长度,所以D错误。39.若有定义inta=3,b=5;,则表达式(a<b)?a++:b++的值为()A.3B.4C.5D.6答案:A解析:a<b为真,所以返回a的值,此时表达式的值为3,然后a自增为4。所以选A。40.以下关于for循环嵌套的说法,正确的是()A.外层循环每执行一次,内层循环只执行一次B.内层循环全部执行完后,外层循环才会执行下一次C.外层循环和内层循环的循环变量不能同名D.嵌套的for循环不能使用break语句答案:B解析:在for循环嵌套中,内层循环全部执行完后,外层循环才会执行下一次。外层循环每执行一次,内层循环会执行其完整的循环次数;外层循环和内层循环的循环变量可以同名;嵌套的for循环可以使用break语句,所以A、C、D错误。41.若有定义intarr[3][4];,则arr[1]表示()A.第二行元素的首地址B.第二行第一个元素的值C.整个二维数组的首地址D.第一行元素的首地址答案:A解析:在二维数组中,arr[1]表示第二行元素的首地址。不是第二行第一个元素的值;整个二维数组的首地址是arr;第一行元素的首地址是arr[0],所以选A。42.以下关于函数递归调用的说法,正确的是()A.递归调用会导致程序运行速度更快B.递归调用不需要终止条件C.递归调用是指函数调用自身D.递归调用只能用于计算阶乘答案:C解析:递归调用是指函数调用自身。递归调用不一定会使程序运行速度更快,因为会有函数调用的开销;递归调用必须有终止条件,否则会导致栈溢出;递归调用可以用于很多问题,不只是计算阶乘,所以A、B、D错误。43.若有定义int*p,arr[5]={1,3,5,7,9};p=&arr[2];,则*p的值为()A.1B.3C.5D.7答案:C解析:p指向arr[2]的地址,*p表示取该地址的值,即5,所以选C。44.以下关于逗号运算符的说法,正确的是()A.逗号运算符的优先级高于赋值运算符B.逗号表达式的值是最后一个表达式的值C.逗号运算符只能连接两个表达式D.逗号运算符的结合性是从右到左答案:B解析:逗号表达式的值是最后一个表达式的值。逗号运算符的优先级低于赋值运算符;逗号运算符可以连接多个表达式;其结合性是从左到右,所以A、C、D错误。45.若有定义inta=4;,则执行语句a<<=2;后,a的值为()A.4B.8C.16D.32答案:C解析:a<<=2等价于a=a<<2,左移2位相当于乘以2的2次方,4乘以4等于16,所以a的值变为16,选C。46.以下关于goto语句的说法,正确的是()A.goto语句可以随意跳转,不会影响程序的结构B.goto语句只能在同一个函数内跳转C.goto语句的使用可以提高程序的可读性D.goto语句可以跳出多层循环答案:B解析:goto语句只能在同一个函数内跳转。goto语句随意跳转可能会破坏程序的结构,降低可读性;虽然它可以跳出多层循环,但不建议过多使用,所以A、C错误,B正确。47.若有定义charstr1[]="abc",str2[]="abc";,则strcmp(str1,str2)的值为()A.-1B.0C.1D.不确定答案:B解析:strcmp函数用于比较两个字符串,若两个字符串相等,返回0;若str1小于str2,返回负数;若str1大于str2,返回正数。这里两个字符串相同,所以返回0,选B。48.以下关于静态变量的说法,正确的是()A.静态变量在函数调用结束后会被销毁B.静态变量只能在函数内部定义C.静态变量会自动初始化为0D.静态变量的作用域是全局的答案:C解析:静态变量会自动初始化为0。静态变量在函数调用结束后不会被销毁;可以在函数内部或外部定义;在函数内部定义的静态变量作用域是该函数内部,不是全局的,所以A、B、D错误。49.若有定义inta=5,b=3;,则表达式a|b的值为()A.1B.3C.5D.7答案:D解析:按位或运算符|,5的二进制是101,3的二进制是011,按位或后结果为111,即7,所以选D。50.以下关于数组作为函数参数的说法,正确的是()A.数组作为函数参数时,传递的是数组的副本B.数组作为函数参数时,函数内部无法修改数组元素的值C.数组作为函数参数时,需要同时传递数组的长度D.数组作为函数参数时,只能传递一维数组答案:C解析:数组作为函数参数时,传递的是数组的首地址,不是副本,函数内部可以修改数组元素的值。为了方便在函数内部操作数组,通常需要同时传递数组的长度。数组作为函数参数可以传递多维数组,所以A、B、D错误。51.若有定义int*p,a[3][4];p=&a[0][0];,则*(p+5)表示()A.a[0][5]B.a[1][1]C.a[5][0]D.无意义答案:B解析:二维数组在内存中是按行连续存储的,p指向a[0][0],p+5指向的位置相当于二维数组中的a[1][1](因为一行4个元素,0行4个元素后到1行第1个元素),所以*(p+5)表示a[1][1],选B。52.以下关于逻辑表达式短路特性的说法,正确的是()A.逻辑与表达式中,若第一个表达式为假,则不会计算第二个表达式B.逻辑或表达式中,若第一个表达式为假,则不会计算第二个表达式C.逻辑与表达式中,若第一个表达式为真,则不会计算第二个表达式D.逻辑或表达式中,若第一个表达式为真,则一定会计算第二个表达式答案:A解析:在逻辑与表达式中,若第一个表达式为假,根据逻辑与的规则,整个表达式已经确定为假,所以不会计算第二个表达式。逻辑或表达式中,若第一个表达式为真,整个表达式已经确定为真,不会计算第二个表达式;逻辑与中第一个表达式为真,还需计算第二个表达式,所以B、C、D错误。53.若有定义inta=10;,则执行语句a/=3;后,a的值为()A.1B.2C.3D.4答案:C解析:a/=3等价于a=a/3,10/3结果为3(整型相除取整),所以a的值变为3,选C。54.以下关于do-while循环和while循环的区别,说法正确的是()A.do-while循环的循环体至少执行一次,while循环的循环体可能一次都不执行B.do-while循环的条件判断在循环体执行前,while循环的条件判断在循环体执行后C.do-while循环和while循环的执行效率一样D.do-while循环和while循环不能相互转换答案:A解析:do-while循环先执行循环体再判断条件,所以循环体至少执行一次;while循环先判断条件,条件为假时循环体一次都不执行。do-while循环条件判断在循环体执行后,while循环条件判断在循环体执行前;执行效率不一定一样;二者可以相互转换,所以B、C、D错误。55.若有定义intarr[4]={1,2,3};,则arr[3]的值为()A.1B.2C.3D.0答案:D解析:数组初始化时只给部分元素赋值,未赋值的元素会自动初始化为0,所以arr[3]的值为0,选D。56.以下关于函数参数默认值的说法,正确的是()A.C语言支持函数参数默认值B.函数参数默认值只能在函数定义时设置C.函数参数默认值必须从右向左连续设置D.函数参数默认值可以随意设置,没有顺序要求答案:C解析:C语言不支持函数参数默认值。在支持参数默认值的语言中,参数默认值必须从右向左连续设置。所以A、B、D错误。57.若有定义int*p,a=15;p=&a;,则(*p)++后a的值为()A.15B.16C.17D.不确定答案:B解析:p指向a的地址,(*p)++表示对p所指向的变量(即a)的值进行自增操作,所以a的值变为16,选B。58.以下关于switch语句中break的作用,说法正确的是()A.break语句可以使程序跳出整个switch语句B.break语句只能在switch语句中使用C.break语句在switch语句中可以省略D.以上说法都对答案:C解析:break语句在switch语句中可以省略,省略后会继续执行下一个case语句。break语句不只是能在switch语句中使用,还能在循环语句中使用;它使程序跳出当前的case分支,不是整个switch语句,所以A、B错误。59.若有定义inta=8,b=2;,则表达式a>>b的值为()A.1B.2C.3D.4答案:B解析:a>>b表示a右移b位,8的二进制是1000,右移2位后是0010,即2,所以选B。60.以下关于字符串处理函数strcpy的说法,正确的是()A.strcpy函数用于比较两个字符串B.strcpy函数在复制字符串时不会复制字符串结束符'\0'C.strcpy函数的第一个参数必须有足够的空间来存储复制的字符串D.strcpy函数返回的是源字符串的地址答案:C解析:strcpy函数用于将一个字符串复制到另一个字符串中,第一个参数必须有足够的空间来存储复制的字符串。它不是用于比较字符串;会复制字符串结束符'\0';返回的是目标字符串的地址,所以A、B、D错误。61.若有定义intarr[][3]={{1,2},{3,4},{5,6}};,则arr[2][2]的值为()A.5B.6C.0D.不确定答案:C解析:数组初始化时部分元素未赋值,未赋值的元素会自动初始化为0,所以arr[2][2]的值为0,选C。62.以下关于函数指针的说法,正确的是()A.函数指针只能指向返回值为int类型的函数B.函数指针的定义和普通指针的定义一样C.函数指针可以作为函数的参数D.函数指针不能调用函数答案:C解析:函数指针可以作为函数的参数。函数指针可以指向任何返回类型和参数类型匹配的函数;函数指针的定义和普通指针定义不同;可以通过函数指针调用函数,所以A、B、D错误。63.若有定义inta=6,b=4;,则表达式a^b的值为()A.2B.4C.6D.10答案:A解析:按位异或运算符^,6的二进制是110,4的二进制是100,按位异或后结果为010,即2,所以选A。64.以下关于for循环的执行流程,说法正确的是()A.先执行循环体,再判断条件,最后更新循环变量B.先判断条件,若条件为真,执行循环体,然后更新循环变量C.先更新循环变量,再判断条件,若条件为真,执行循环体D.以上说法都不对答案:B解析:for循环的执行流程是先判断条件,若条件为真,执行循环体,然后更新循环变量。所以选B。65.若有定义charstr[]="programming";,则strlen(str)的值为()A.10B.11C.12D.不确定答案:A解析:strlen函数返回字符串的长度,不包括字符串结束符'\0',"programming"长度为10,所以选A。66.以下关于局部变量和全局变量的说法,正确的是()A.局部变量的作用域是整个程序B.全局变量在程序开始执行时就分配内存C.局部变量和全局变量不能同名D.全局变量的生命周期和局部变量的生命周期一样答案:B解析:全局变量在程序开始执行时就分配内存。局部变量的作用域是定义它的函数或代码块;局部变量和全局变量可以同名;全局变量的生命周期是整个程序运行期间,局部变量的生命周期是其所在函数或代码块执行期间,所以A、C、D错误。67.若有定义int*p,arr[5]={2,4,6,8,10};p=arr+3;,则*p的值为()A.2B.4C.6D.8答案:D解析:p=arr+3表示p指向数组arr的第4个元素(下标从0开始),所以*p的值为8,选D。68.以下关于条件判断语句的嵌套,说法正确的是()A.条件判断语句嵌套的层数不能超过3层B.嵌套的条件判断语句会降低程序的效率C.条件判断语句嵌套可以实现更复杂的逻辑判断D.嵌套的条件判断语句中,内层判断和外层判断没有关系答案:C解析:条件判断语句嵌套可以实现更复杂的逻辑判断。嵌套层数没有严格限制;不一定会降低程序效率;内层判断和外层判断是有关系的,会根据外层判断结果决定是否执行内层判断,所以A、B、D错误。69.若有定义inta=9,b=3;,则表达式a%=b;后,a的值为()A.0B.1C.2D.3答案:A解析:a%=b等价于a=a%b,9%3的结果为0,所以a的值变为0,选A。70.以下关于数组越界的说法,正确的是()A.数组越界不会导致程序出错B.数组越界只会访问到无效的内存地址C.数组越界可能会导致程序崩溃或产生不可预期的结果D.数组越界在编译时会被检查出来答案:C解析:数组越界可能会导致程序崩溃或产生不可预期的结果。数组越界可能会访问到其他变量的内存地址,导致数据被破坏;编译时一般不会检查数组越界问题,所以A、B、D错误。71.若有定义intarr[2][3]={{1,2,3},{4,5,6}};,则*(arr[1]+1)的值为()A.4B.5C.6D.2答案:B解析:arr[1]表示二维数组第二行的首地址,arr[1]+1则指向第二行的第二个元素,*(arr[1]+1)就是取该元素的值,也就是5,所以选B。72.以下关于函数的返回值类型为指针的说法,正确的是()A.函数返回的指针不能指向局部变量B.函数返回的指针只能指向全局变量C.函数返回的指针可以是任意类型的指针D.函数返回的指针不能为NULL答案:A解析:函数返回的指针不能指向局部变量,因为局部变量在函数结束后会被销毁,指针就会变成野指针。函数返回的指针可以指向动态分配的内存,不只是全局变量;返回的指针类型要和函数定义的返回指针类型一致,不是任意类型;返回的指针可以为NULL,表示空指针,所以B、C、D错误。73.若有定义inta=7,b=5;,则表达式a&b的值为()A.1B.3C.5D.7答案:C解析:按位与运算符&,7的二进制是111,5的二进制是101,按位与后结果为101,即5,所以选C。74.以下关于while循环和for循环的转换,说法正确的是()A.所有的while循环都不能转换为for循环B.所有的for循环都不能转换为while循环C.大部分的while循环和for循环可以相互转换D.while循环和for循环的结构完全不同,不能相互转换答案:C解析:大部分的while循环和for循环可以相互转换。它们本质上都是实现循环控制,只是语法结构有所不同,通过适当的改写可以实现相互转换,所以A、B、D错误。75.若有定义charstr1[10],str2[]="hello";,则执行strcpy(str1,str2);后,str1的内容为()A."hello"B."hello\0"C.不确定D.没有内容答案:A解析:strcpy函数会将str2的内容(包括字符串结束符'\0')复制到str1中,所以str1的内容为"hello",选A。76.以下关于静态局部变量的说法,正确的是()A.静态局部变量在函数调用结束后会被销毁B.静态局部变量只能初始化一次C.静态局部变量的作用域是全局的D.静态局部变量和普通局部变量没有区别答案:B解析:静态局部变量只能初始化一次,在函数第一次调用时初始化,之后再次调用函数不会重新初始化。静态局部变量在函数调用结束后不会被销毁;作用域是定义它的函数内部;和普通局部变量有区别,普通局部变量在函数调用结束后会被销毁,所以A、C、D错误。77.若有定义int*p,arr[3][2]={{1,2},{3,4},{5,6}};p=&arr[0][0];,则*(p+4)的值为()A.1B.3C.5D.6答案:C解析:二维数组在内存中按行连续存储,p指向arr[0][0],p+4指向的位置相当于二维数组中的arr[2][0],所以*(p+4)表示5,选C。78.以下关于逻辑非运算符!的说法,正确的是()A.逻辑非运算符!的操作数只能是整型B.逻辑非运算符!的优先级低于算术运算符C.逻辑非运算符!对真命题取反得到假命题D.逻辑非运算符!可以连续使用多次,结果不变答案:C解析:逻辑非运算符!对真命题取反得到假命题。其操作数可以是任意表达式;优先级高于算术运算符;连续使用两次会变回原来的值,但使用奇数次会改变结果,所以A、B、D错误。79.若有定义inta=12;,则执行语句a/=2+2;后,a的值为()A.2B.3C.4D.6答案:B解析:先计算2+2=4,a/=2+2等价于a=a/4,12/4=3,所以a的值变为3,选B。80.以下关于嵌套循环中break和continue的作用,说法正确的是()A.break语句只能跳出内层循环B.continue语句可以跳出外层循环C.break语句可以跳出多层嵌套循环D.continue语句只影响当前所在的循环答案:D解析:continue语句只影响当前所在的循环,它会跳过本次循环剩余的语句,直接进入下一次循环。break语句只能跳出当前所在的循环,不能直接跳出多层嵌套循环;continue语句不能跳出外层循环,所以A、B、C错误。81.若有定义intarr[4]={10,20,30,40};,则*(arr+2)的值为()A.10B.20C.30D.40答案:C解析:arr表示数组的首地址,arr+2指向数组的第三个元素,*(arr+2)就是取该元素的值,即30,所以选C。82.以下关于函数的嵌套调用,说法正确的是()A.函数的嵌套调用只能是两层B.函数的嵌套调用会导致程序运行速度变慢C.函数的嵌套调用可以实现更复杂的功能D.函数的嵌套调用中,内层函数不能调用外层函数答案:C解析:函数的嵌套调用可以实现更复杂的功能。嵌套调用的层数没有限制;不一定会导致程序运行速度变慢;内层函数可以调用外层函数,所以A、B、D错误。83.若有定义inta=5,b=2;,则表达式a+b*2的值为()A.9B.14C.10D.7答案:A解析:根据运算符优先级,先计算乘法b*2=4,再计算加法a+4=9,所以表达式的值为9,选A。84.以下关于字符数组的输入,说法正确的是()A.使用scanf函数输入字符数组时,不需要指定数组的长度B.使用gets函数输入字符数组时,会自动添加字符串结束符'\0'C.使用fgets函数输入字符数组时,不会读取换行符D.以上说法都对答案:B解析:使用gets函数输入字符数组时,会自动添加字符串结束符'\0'。使用scanf函数输入字符数组时,如果使用%s格式说明符,可能会导致数组越界,最好指定长度;使用fgets函数输入字符数组时,会读取换行符,所以A、C错误。85.若有定义intarr[2][3];,则数组元素的个数为()A.2B.3C.5D.6答案:D解析:二维数组arr[2][3]表示有2行3列,元素个数为2*3=6,所以选D。86.以下关于函数的返回值为结构体类型的说法,正确的是()A.函数返回结构体类型时,会复制整个结构体B.函数返回结构体类型的效率和返回基本数据类型一样C.函数不能返回结构体类型D.函数返回结构体类型时,只能返回全局结构体变量答案:A解析:函数返回结构体类型时,会复制整个结构体。返回结构体类型的效率一般比返回基本数据类型低;函数可以返回结构体类型;可以返回局部结构体变量,只是要注意其生命周期,所以B、C、D错误。87.若有定义int*p,a=8;p=&a;,则++(*p);后a的值为()A.8B.9C.10D.不确定答案:B解析:p指向a的地址,++(*p)表示对p所指向的变量(即a)的值进行自增操作,所以a的值变为9,选B。88.以下关于switch语句中default分支的说法,正确的是()A.default分支必须放在switch语句的最后B.default分支在所有case分支都不匹配时才会执行C.default分支不能省略D.default分支和case分支的语法结构不同答案:B解析:default分支在所有case分支都不匹配时才会执行。default分支可以放在switch语句的任意位置;可以省略;和case分支语法结构类似,所以A、C、D错误。89.若有定义inta=16;,则执行语句a>>=2;后,a的值为()A.2B.4C.8D.16答案:B解析:a>>=2等价于a=a>>2,16的二进制是10000,右移2位后是0100,即4,所以a的值变为4,选B。90.以下关于字符串处理函数strcat的说法,正确的是()A.strcat函数用于比较两个字符串B.strcat函数在连接字符串时不会复制字符串结束符'\0'C.strcat函数的第一个参数必须有足够的空间来存储连接后的字符串D.strcat函数返回的是源字符串的地址答案:C解析:strcat函数用于将一个字符串连接到另一个字符串的末尾,第一个参数必须有足够的空间来存储连接后的字符串。它不是用于比较字符串;会复制字符串结束符'\0';返回的是目标字符串的地址,所以A、B、D错误。91.若有定义intarr[][2]={{1,2},{3,4},{5,6}};,则arr[1]表示()A.第二行元素的首地址B.第二行第一个元素的值C.整个二维数组的首地址D.第一行元素的首地址答案:A解析:在二维数组中,arr[1]表示第二行元素的首地址。不是第二行第一个元素的值;整个二维数组的首地址是arr;第一行元素的首地址是arr[0],所以选A。92.以下关于递归函数的终止条件,说法正确的是

温馨提示

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

评论

0/150

提交评论