C语言题库附有答案_第1页
C语言题库附有答案_第2页
C语言题库附有答案_第3页
C语言题库附有答案_第4页
C语言题库附有答案_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

C语言题库[复制]仅供期末复习使用,禁止二传,违者必究!一、选择题1.构成C语言程序的基本单位是()。[单选题]*A.过程B.语句C.函数(正确答案)D.表达式答案解析:函数是C程序中模块化设计的基础,是C语言程序的基本单位。2.一个C程序的执行是从()。[单选题]*A.本程序的main函数开始,到main函数结束(正确答案)B.本程序的main函数开始,到本程序的最后一个函数结束C.本程序的第一个函数开始,到本程序的最后一个函数结束D.本程序文件的第一个函数开始,到本程序main函数结束答案解析:C语言的启动函数就是main函数,所有的执行都是在这里,其他函数的执行都是通过main函数直接或间接调用,最终又回到main函数,main函数执行结束,整个程序也就结束了。所以,一个C程序的执行是从本程序的main函数开始,到main函数结束。3.以下叙述正确的是()。[单选题]*A.C程序中,main函数必须位于程序的最前面B.C程序中,大、小写字母是有区别的(正确答案)C.C程序的每行只能写一条语句D.C程序中,若一条语句较长,也不能分写在下一行上答案解析:C程序的执行是从main函数开始,但并不要求main函数必须位于程序的最前面,故选项A不正确。C程序中,语句以分号结束,一行可以写多条语句,一句也可以书写在多行上,故选项C、选项D均不正确。C语序是区分大小写的,大、小写字母是有区别的,故此题答案选B。4.以下叙述错误的是()。[单选题]*A.C程序中,语句用分号“;”结尾,分号“;”是C语句的一部分B.C程序中,可以在“{}”内写若干条语句,构成复合语句C.C语言的变量在使用之前必须先定义其数据类型D.C语言函数内部可以定义函数(正确答案)答案解析:C语言中对函数的“定义”和“声明”不是一回事。“定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位,C语言规定函数的定义必须是独立的,不能在其他函数的内部。而函数的“声明”的作用则是把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时,系统按此进行对照检查,函数的声明只要放在被调用程序之前即可,可以在函数外部进行声明,也可以在函数内部的声明部分进行函数声明,故选项D是不正确的,不能在函数内部定义函数。其余选项是正确的,故本题答案选D。5.以下叙述不正确的是()。[单选题]*A.C程序的注释部分放在“/*”和“*/”之间,“/”和“*”之间不允许有空格B.一个C源程序可由一个或多个函数组成C.一个C源程序必须有一个,且只能有一个main函数D.C程序编译时,注释部分的错误将被发现(正确答案)答案解析:一个C源程序有且仅有一个main函数,可以包含若干个其他函数,main函数是程序的入口,故选项B、C是正确的。C语言规定注释部分放在“/*”和“*/”之间,编译器通过“/*”来判断为注释开始,“*/”为注释结束,“/”和“*”之间不允许有空格,否则编译器认定为不是注释的符号。C语言编译时注释部分的内容不参与程序的编译和运行,也就是说在“/*”和“*/”之间的程序不被执行,也就无法发现注释部分的错误,故选项A是正确的,选项D是不正确的。此题答案选D。6.一个C语言源程序中,main函数的位置()。[单选题]*A.必须在最开始B.必须在自定义函数的前面C.可以放在某一用户函数定义之前,也可以放在某一用户函数定义之后(正确答案)D.必须在自定义函数的后面答案解析:C语言不限定函数源代码在源文件中的位置,但是函数内的标识符同函数外的标识符一样也必须满足使用的标识符先声明后引用的原则。在main函数之前或之后均可以写自定义的函数,只是写在main之后的定义的函数,需要在main函数之前声明该函数,所以main函数可以放在某一用户函数定义之前,也可以放在某一用户函数定义之后。答案选C。7.C语言中,复合语句的构成是将一系列语句置于()。[单选题]*A.begin与end之间B.圆括号“()”之间C.花括号“{}”之间(正确答案)D.方框号“[]”之间答案解析:C语言中的语句可以简单地划分为单条语句和复合语句两类。单条语句指只有一条语句,而复合语句指多条语句的总称,但是,多条语句用花括号(“{}”)括起来才称复合语句。没有用花括号括起的若干条单条语句只能称为语句序列。故本题答案选C。8.编制C语言程序的步骤是()。[单选题]*A.编译、连接、编辑、运行B.编辑、连接、编译、运行C.编辑、编译、连接、运行(正确答案)D.编译、编辑、连接、运行答案解析:解析:编制并运行C语言程序的“四步曲”:(1)编辑:将程序代码输入计算机;(2)编译:生成目标程序文件.obj;(3)链接:生成可执行程序文件.exe。(4)运行:执行可执行程序文件。故本题答案选C。9.哪个运算符用于C语言中的取余运算?()[单选题]*A.%(正确答案)B./C.!D.&10.以下表示常量正确的是()。[单选题]*A.E-5B.1E5.1C.'a12'D.32766L(正确答案)答案解析:浮点型常量用指数形式表示的形式为aEn,a和n都不能省略,n必须为整数,因此选项A和B是不正确的。字符串常量是由一对双引号括起来的字符序列,选项C是用单引号,因此选项C不正确。选项D是在一个整型常量的尾部加上字母L,表示该整数为长整型常量,是正确的。11.若有定义:inta=1,b=2,c=3,d=4,x=5,y=6;,则表达式(x=a>;b)&&(y=c>;d)的值为()。[单选题]*A.0(正确答案)B.1C.5D.6答案解析:由于a=1,b=2因此a>;b的值为0(表示假),因此x=a>;b的值为0,由于后面跟的是&&(与运算),因此后面表达式y=c>;d的值可不计算,整个表达式的值为0。12.以下()是正确的字符常量。[单选题]*A."c"B.'\\''C.'W'(正确答案)D."\32a"答案解析:由于字符常量是使用单引号括起来的一个字符,因此只有选项C符合要求。13.在C语言中,正确的整数数据类型是()。[单选题]*A.StringB.int(正确答案)C.boolD.Float14.以下()是不正确的字符串常量。[单选题]*A.'abc'(正确答案)B."12'12"C."0"D.""答案解析:字符串常量是由一对双引号括起来的字符序列,字符串中可以包含任何字符,包括空格、转义符,甚至汉字。以上选项中'abc'是不正确的字符串常量。15.在C语言中,下面哪个选项是合法的变量名?()[单选题]*A.2thingsB.things2(正确答案)C.this-thingD.**_thing16.哪种数据类型用于存储非常大的整数,在标准C中不是基本数据类型?()[单选题]*A.intB.longC.BigInt(正确答案)D.Float17.以下是正确的浮点数的是()。[单选题]*A.e3B.62(正确答案)C.2e4.5D.123答案解析:浮点型常量用指数形式表示的形式为aEn,a和n都不能省略,n必须为整数,因此选项A和C是不正确的。以十进制小数形式表示浮点型常量时,整数和小数部分可省略其中任一个,因此选项B是正确的。选项D表示的是整形常量,如果用于表示浮点型常量,后面要加上一个点,即123.。18.若有定义:inta=2;,则正确的赋值表达式是()。[单选题]*A.a-=(a*3)(正确答案)B.double(-a)C.a*3D.a*4=3答案解析:a-=(a*3)与a=a-(a*3)等价,是正确的,其余的选项都不是赋值表达式。19.若有定义:intx=1111,y=222,z=33;,则语句printf("%4d+%3d+%2d",x,y,z);运行后的输出结果为()。[单选题]*A.111122233B.1111,222,33C.111122233D.1111+222+33(正确答案)答案解析:格式控制字符串有+号,输入时要保留,因此只有选项D符合要求。20.已有如下定义和输入语句:若要求a、b的值分别为11和22,正确的数据输入是哪一个?()[单选题]*A.1122B.11,22C.a=11,b=22D.11;22(正确答案)答案解析:格式控制字符串有逗号,输入时要保留,因此正确的输入应为11,22。21.C语言中的逻辑“非”运算符是()。[单选题]*A.?B.!(正确答案)C.~D.^22.已有如下定义和输入语句,若要求a、c1、c2的值分别为40、A和A,正确的数据输入是()。[单选题]*A.40AAB.40AAC.40AA(正确答案)D.40,A,A答案解析:空格在输入时也会当作字符处理,因此c1,c2会接收空格,因此B、C选项是错的,D选项中多了两个逗号,运行后c1和c2的值分别为’,’和’A’。23.语句a=(3/4)+3%2;运行后,a的值为()。[单选题]*A.0B.1(正确答案)C.2D.3答案解析:3/4是整除,值为0,3%2求余,值为1,因此整个表达式的值为1。24.char型变量存放的是()。[单选题]*A.ASCII代码值(正确答案)B.字符本身C.十进制代码值D.十六进制代码值答案解析:C语言在内存中存放字符时是用字符数据的ASCII码值存储,因此选项A是正确的。25.在下列运算符中,优先级最高的运算符是()。[单选题]*A.<=B.!=C.!(正确答案)D.||答案解析:通过教材的“表2-9C运算符的优先级与结合性”可知,<=的优先级是6,!=的优先级是7,!的优先级是2,||的优先级是12。26.设单精度型变量f、g的值均为2.0,使f为4.0的表达式是()。[单选题]*A.f+=g(正确答案)B.f-=g+2C.f*=g-6D.f/=g*10答案解析:对于选项A,该表达式相当于f=f+g,因此f的值为4.0。27.若有定义:inti=7,j=8;,则表达式i>;=j||i[单选题]*A.1(正确答案)B.变量i的值C.0D.变量j的值答案解析:i的值为7,j的值为8,因此i<j的值为“真”,||运算的结果是整个表达的值为“真”,C语言中用1表示真。28.若希望当a的值为奇数时,表达式的值为"真",a的值为偶数时,表达式的值为"假"。则不能满足要求的表达式是()。[单选题]*A.a%2==1B.!(a%2==0)C.!(a%2)(正确答案)D.a%2答案解析:a%2是求a整除2的余数,当a为奇数时值为1,当a为偶数时值为0。在选项C中,进行!(非)运算后的值分别为0和1。因此当a为奇数时表达式!(a%2)的值为“假”,当a为偶数时整个表达式的值为“真”,与题目的要求相反。29.若有定义:intx=3,y=4,z=5;则值为0的表达式是()。[单选题]*A.'x'&&'y'B.x<=yC.x||y+z&&y-zD.!((x<y)&&!z||1)(正确答案)答案解析:对于选项D,括号内子表达式的最后部分为“||1”,因此括号内子表达式的值为真,非真为假,因此整个表达式的值为0。30.若有定义:floatx=3.5;intz=8;则表达式x+z%3/4的值为()。[单选题]*A.3.75B.3.5(正确答案)C.3D.4答案解析:z%3的值为1(求余数),1/4的值为0(整数除),x+0值为3.5。31.已知chara='R';则正确的赋值表达式是()。[单选题]*A.a=(a++)%4(正确答案)B.a+2=3C.a+=256--D.a='\078'答案解析:C语言在内存中存放字符时是用字符数据的ASCII码值存储的,字符数据可以参加算术运算。选项A是正确的,其中(a++)%4是将a的ASCII码值(字符’R’的ASCII码值为82)整除4的余数,值为2,赋值给a,然后a再加1,因此最后a的ASCII码值为3。选项B错误的原因是a+2不能作为赋值运算的“左值”。选项C错误的原因是自减运算符“--”不能作用于常量。在选项D中,’\ddd’是指用八进制数代表的转义符,而八进制只可以用0~7的字符,而选项D中出现了8,因此a得不到想要的数据。32.C语言中使用哪个关键字来定义常量?()[单选题]*A.const(正确答案)B.defineC.constantD.Static33.若有定义:intb=7;floata=2.5,c=4.7;,则表达式a+(b/2*(int)(a+c)/2)%4的值是()。[单选题]*A.2.5B.3.5C.4.5(正确答案)D.5.5答案解析:b/2的值为3,int(a+c)的值为7,3*7得21,整除以2得10,因此b/2*(int)(a+c)/2的值为10,整除以4的余数为2,与a相加得4.5。34.若已定义:inti=3,k;则语句k=(i--)+(i--);运行后k的值为()。[单选题]*A.4B.5C.6(正确答案)D.7答案解析:由于(i--)+(i--)中两个“—”都是后缀运算符,因此k的值等于i+i,为6。35.若已定义:inta=5;floatb=63.72;以下语句中能输出正确值的是()。[单选题]*A.printf("%d%d",a,b);B.printf("%d%.2f",a,b);(正确答案)C.printf("%.2f%.2f",a,b);D.printf("%.2f%d",a,b);答案解析:由于a和b分别是整型和浮点型变量,对应于printf函数的输出格式控制符是%d和%f;浮点型数据输出可以用%m.nf来指定数据输出总的宽度占m列,小数部分占n列。因此B选项可以输出正确值。36.C语言中,能正确表示条件10[单选题]*A.10<x<20B.x<10||x<20C.x>;10&&<20D.(x>;10)&&(x<20)(正确答案)答案解析:条件10<x>20表示x小于20并且大于10。A选项是数学上的表示方式,不符合C语言的语法;B选项中||表示或;C选项中的<20应为x<20。37.C语言中用于定义字符型数组的正确方式是()。[单选题]*A.chars[10]="hello";(正确答案)B.strings="hello";C.charss[10]="hello";D.strs="hello";38.若表达式!x的值为1,则以下哪个表达式的值为1()。[单选题]*A.x==0(正确答案)B.x==1C.x=!1D.x!=0答案解析:若表达式!x=1,则x的值一定为0,因此选项A正确。39.在C语言中,正确的整数数据类型是()。[单选题]*A.StringB.int(正确答案)C.boolD.Float40.语句x=(y=3,b=++y);运行后,x、y、b的值依次为()。[单选题]*A.4,4,3B.3,3,3C.4,4,4(正确答案)D.4,3,4答案解析:逗号表达式y=3,b=++y从左到右运算,首先y=3给y赋值3,接着b=++y先使y增1等于4再赋值给b,因此b和y的值都为4。由于逗号表达式是将最右边一个表达式的值作为整个表达式的值,因此x为4。41.若有定义:intx,c;,则语句x=(c=3,c+1);运行后,x,c的值分别是()。[单选题]*A.3,3B.4,4C.3,3D.4,3(正确答案)答案解析:逗号表达式(c=3,c+1)从左到右运算,首先为c赋值3,又因为逗号表达式的值为最右边表达式c+1的值,因此x的值为c+1等于4。42.语句a=(6/8)+6%5;运行后,a的值为()。[单选题]*A.1(正确答案)B.2C.1.75D.1.2答案解析:6/8表示6整除以8,值为0;6%5求6整除以5的余数,值为1。43.若有定义:intx,y;,则表达式(x=2,y=5,x*2,y++,x+y)的值是()。[单选题]*A.7B.8(正确答案)C.9D.10答案解析:逗号表达式的求值过程是,从左到右依次对各表达式求值,并将最右边一个表达式的值作为整个表达式的值,即x+y的值是整个表达式的值。此外,要注意:(1)x*2不改变x的值,x还是2;(2)y++表达式运算之后,y加了1为6,因此x+y值为8。44.对代数式(4ad)/(bc),不正确的C语言表达式是()。[单选题]*A.a/b/c*d*4B.4*a*d/b/cC.4*a*d/b*c(正确答案)D.a*d/c/b*4答案解析:由于算符“*”与“/”的优先级相同,运算顺序是从左到右,因此C选项4*a*d/b*c相当于(4ab/b)*c,不正确。45.在C语言中,下面哪个选项是合法的变量名?()[单选题]*A.2thingsB.things2(正确答案)C.this-thingD.&_thing46.C语言中的逻辑“非”运算符是()。[单选题]*A.?B.!(正确答案)C.~D.^47.C语言中用于定义字符型数组的正确方式是()。[单选题]*A.chars[10]="hello";(正确答案)B.strings="hello";C.charss[10]="hello";D.strs="hello";48.哪个运算符用于C语言中的取余运算?()[单选题]*A.%(正确答案)B./C.!D.&49.若x和y为整数,以下表达式中不能正确表示数学关系|x-y|<10的是()。[单选题]*A.abs(x-y)<10B.(x-y)>;-10&&(x-y)<10C.!(x-y)<-10||!(y-x)>;10(正确答案)D.(x-y)*(x-y)<100答案解析:由于逻辑非运算符!的优先级最高,因此对于C选项的运算顺序是:先运算!(x-y),结果只能为0或1;然后运算!(y-x),结果也只能为0或1;因此!(x-y)<-10与!(y-x)>;10两个表达式的值一定是0(假),最后两个表达式进行||(或)运算,值为0,因此不管x、y为任何值,该表达式的值一定为0,故选项C中的表达式不正确。50.C语言中,哪个预处理指令用于包含标准输入输出库?()[单选题]*A.#include<stdio.h>;(正确答案)B.#include"stdio.h"C.#library<stdio.h>;D.#library"stdio.h"51.C语言中用于输入整数的标准库函数是()。[单选题]*A.printfB.scanC.scanf(正确答案)D.Input52.若有以下程序段,则z的二进制值是()。[单选题]*A.00010100B.00011011(正确答案)C.00011000D.00000110答案解析:运算符<<的优先级高于^,因此先计算y<<2,由于y的二进制值为00000110,左移两位为00011000,然后与x(00000011)进行按位异或运算,值为00011011。53.有以下程序执行后输出结果是()。[单选题]*A.1,1,2B.2,2,1C.2,2,2(正确答案)D.2,2,3答案解析:本题主要考查逻辑运算符的运算规则。对于运算符“||”和“&&”,如果运算符左侧表达式的值足以确定整个逻辑表达式的值,则不再计算右侧表达式的值。对于表达式“(j++||k++)&&i++”,先计算括号内的“j++||k++”,因为j初值为1,在逻辑表达式中判定为真,真值与任何数进行或运算均为真,所以表达式“j++||k++”的值为真,且不计算k++;而对于“&&”运算符来说,左侧表达式为真,要确定整个表达式的值,还需要计算i++。在程序运行过程中,i++和j++被执行了,而k++没被执行,因此,输出i的值为2,j的值为2,k的值为2.54.下列哪一个不是C语言的基本控制语句?()[单选题]*A.forB.switchC.loop(正确答案)D.If55.定义inta=3,b=10,c=7,执行下列语句输出为()[单选题]*A.0101(正确答案)B.0100C.11111D.011156.有以下程序执行后输出结果是()。[单选题]*A.2B.3(正确答案)C.4D.编译时有错,无结果答案解析:本题主要考查比较运算符的运算规则。对于优先级别相同的比较运算符应从左到右依次计算。变量a,b,c,d初始值依次为5,4,3,2。对于第一个条件表达式“a>;b>;c”,先判断“a>;b”,条件成立,其值为1,再判断“1>;c”,条件不成立,因此第一个if语句的条件为假,执行其else部分;第二个条件表达式“((c-1>;=d)==1,”,结合运算符的优先级易得出条件成立,执行语句“printf("%d\n",d+1);”,输出3。57.以下程序的运行结果是()。[单选题]*A.8B.7C.89(正确答案)D.87答案解析:本题考查switch语句的使用。程序执行“switch(n--)”语句,因为自减运算符在变量之后,所以先用n与各个case语句的值相互匹配后再自减,因为n的值为9,无法找到与其相匹配的case语句,因此执行“default:printf("%d",n++);”语句,此时n自减为8后输出,n再自增为9;接着往下执行“case8:case7:printf("%d",n);break;”,直到遇到break语句退出switch结构。故本题答案选C。58.下列哪一个不是C语言的基本控制语句?()[单选题]*A.forB.switchC.loop(正确答案)D.If59.有以下程序:当输入247时,程序的输出结果是()。[单选题]*A.689B.6689(正确答案)C.66778D.66887答案解析:本题主要考查while循环结构的执行流程,switch语句在循环体中的执行过程。while语句中“((c=getchar())!='\n')”的作用是控制循环输入字符,直到输入回车符结束。执行while语句,第一次输入字符2,由于switch语句中“c-'2'”的值为0,便依次执行case0、case1和case2三种情况的子句,输出“66”;第二次输入字符4,“c-'2'”的值为2,执行case2情况的子句,输出“8”;第三次输入字符7,“c-'2'”的值为5,执行“default:putchar(c+2);”,输出9。故本题答案选B。60.在C语言中,以下哪个语句可以用于创建一个无限循环?()[单选题]*A.for(inti=0;i<10;i++)B.while(1)(正确答案)C.do{...}while(0);D.for(inti=0;i<100000;i++)61.以下程序段的输出结果是()。[单选题]*A.1B.30C.1-2(正确答案)D.死循环答案解析:本题主要考查do...while语句的使用,该语句的执行特点是无条件地执行循环体一次,再判断循环条件。程序第一次执行时,输出表达式“x-=2”的值为1,此时x的值为1。在循环判断时,!(--x)的值为1(x的值自减为0),条件成立,执行循环体,输出“x-=2”的值为-2。再进行循环判断时,!(--x)的值为0(其中x的值为-2),条件不成立,循环结束。故本题答案选C。62.do…while循环与while循环的主要区别是()。[单选题]*A.while循环体至少无条件执行一次,而do…while循环体可能一次都不执行。B.do…while循环体中可使用continue语句,while循环体中不允许出现continue语句。C.do…while循环体中可使用break语句,while循环体中不允许出现break语句。D.do…while循环体至少无条件执行一次,而while循环体可能一次都不执行。(正确答案)答案解析:本题主要考查while与do...while循环语句的区别。while语句的特点是先对循环条件进行判断再执行循环体,在第一次判断,循环条件就不成立时,则循环体一次都不执行;而do...while语句是先执行循环体再进行条件判断,因此它至少会执行一次循环体。故本题答案选D。63.在C语言中,引用数组元素时,其数组下标的数据类型允许是()。[单选题]*A.整型常量B.整型表达式C.整型常量或整型表达式(正确答案)D.任何类型的表达式答案解析:C语言规定,其数组元素下标的数据类型只允许是整型常量或整型表达式。64.以下对一维数组a进行正确初始化的语句是()。[单选题]*A.inta[10]=(0,0,0,0,0);B.inta[10]={};C.inta[]={0};(正确答案)D.inta[10]={10*1};答案解析:选项A错在初始化数据用了圆括号,选项B错在无初始化数据,选项D错在初始化数据是表达式,初始化数据应该是常量。65.若已定义intarr[10];,则不能正确引用arr数组元素的是()。[单选题]*A.arr[0]B.arr[1]C.arr[10-1]D.arr[7+3](正确答案)答案解析:已定义数组arr,其数组元素的最大下标值为9,选项D的超过了此值。66.若已定义intx[4]={2,1,3};,则元素x[1]的值为()。[单选题]*A.0B.2C.1(正确答案)D.3答案解析:数组x已定义并初始化后,其数组元素x[0]至x[3]的值应依次为2、1、3、0。67.以下程序段运行后,x[1]的值为()。[单选题]*A.6B.0(正确答案)C.1D.5答案解析:数组元素x[1]=x[3]+x[2+2]-x[3-1],即x[1]=x[3]+x[4]-x[2]=2+1-3=0。68.下面程序段的运行结果是()。[单选题]*A.71098114B.71098112C.51098112(正确答案)D.51098114答案解析:数组m经定义并初始化后,其数组元素x[0]至x[5]的值依次为5、8、7、6、9、2。执行do循环后,其x[0]、x[5]的值未变,x[1]至x[4]的值先后各增加2,依次变为,10、9、8、11,因此选C。69.下面程序段的运行结果是()。[单选题]*A.518716912(正确答案)B.151817161912C.158176192D.587692答案解析:循环变量i的取值依次为0、1、2、3、4、5,这些值被2取余,不等于0的是1、3、5,而这3个值作为下标,确定的数组元素,它们的值均增加10,其余数组元素的值未被改变。70.下面关于数组的叙述中,正确的是()。[单选题]*A.定义数组后,数组的大小是固定的,且数组元素的数据类型都相同(正确答案)B.定义数组时,可不加类型说明符C.定义数组后,可通过赋值运算符“=”对该数组名直接赋值D.在数据类型中,数组属基本类型答案解析:定义数组时,即(由类型说明符)确定了数组类型(即数组元素的数据类型)、数组名、数组的大小,数组元素的数据类型都相同,数组的大小是固定的。数组属构造类型,不能通过赋值运算符“=”对数组名直接赋值,使数组元素获得数据。71.以下程序段执行后输出的结果是()。[单选题]*A.2B.3C.6D.7(正确答案)答案解析:解析:由该数组定义及初始化知数组a有3行4列,a[1][2]为第2行第3个数组元素,其值为7,因此选D。72.下列关于函数定义的描述中,错误的是()。[单选题]*A.定义函数时,函数的存储类型可以省略B.定义函数时,函数名和函数类型必须指明C.定义函数时,必须有函数体D.定义函数时,必须指明函数参数(正确答案)答案解析:定义无参函数时不需要指明函数参数。定义函数时必须有函数体,即使函数体是空的,标示函数体的花括号也必须有。73.下列关于函数(原型)声明的描述中,错误的是()。[单选题]*A.函数声明可放在函数体内,也可放在函数体外B.函数声明既要给出函数名和类型,又要指出函数参数C.函数调用前必须给出被调函数的函数声明,否则出错(正确答案)D.被调函数的定义在主调函数前面时,可以不用函数声明答案解析:如果被调函数在主调函数之前已经定义,则函数调用前不必给出被调函数的函数声明。74.以下正确的定义函数首部的形式是()。[单选题]*A.floatfunc(intn;floatx)B.floatfunc(intn,floatx);C.floatfunc(intn;floatx);D.floatfunc(intn,floatx)(正确答案)答案解析:函数首部的形参之间应用逗号隔离,形参表结束处不用标点符号。75.下列关于函数参数的描述中,错误的是()。[单选题]*A.定义函数时可以有参数,也可以没有参数B.在传值调用时,实参只能是变量名,不可以是表达式(正确答案)C.函数的形参在该函数被调用前是没有确定值的D.要求函数的形参和对应的实参个数应相等、类型应赋值兼容答案解析:在传值调用时,实参不仅可以是变量名,还可以是常量、函数调用等表达式形式。76.下列说法中,不正确的是()。[单选题]*A.实参可以为任意类型B.形参与对应实参的类型要赋值兼容C.形参可以是常量、变量或表达式(正确答案)D.实参可以是常量、变量或表达式答案解析:形参不可以是常量或表达式。77.下面函数调用语句中,实参的个数是()。[单选题]*A.6B.5C.4D.3(正确答案)答案解析:该函数调用语句中,有3个实参。其中第一个实参是单一的变量,第二个实参为n2与n3相加的表达式,第三个实参是函数表达式。78.设有下面函数调用语句,则其所调函数fun中形参的个数是()。[单选题]*A.5B.4C.3(正确答案)D.2答案解析:该函数语句所调用的函数fun中,形参的个数应该有3个。因为该函数语句中有3个实参,按规定其所调用的函数中应该有相同个数的形参与之对应。79.下面说法中正确的是()。[单选题]*A.实参占用存储单元,形参不占用存储单元B.相对应的实参与形参共用同一存储单元C.相对应的实参与形参同名时,它们共用同一存储单元D.相对应的实参与形参占用不同的存储单元(正确答案)答案解析:函数的实参与形参,在个数、类型、顺序上要对应一致,函数调用过程中实参与形参,不仅占用不同的存储单元,而且占用的时间也不同。80.实参为简单变量,其与对应形参之间的数据传递方式为()。[单选题]*A.由用户另外指定传递方式B.双向值传递C.单向值传递(正确答案)D.地址传递答案解析:简单变量作实参时,函数调用过程中是将实参的值传递到对应形参(设置的临时变量存储单元)中,被调函数形参值的改变对主调函数的实参没有影响,调用结束后,形参存储单元被释放,实参仍保持原值不变,这种调用只能由实参向形参传递数据,称之为“单向值传递”。81.设已经有定义:floatx;,则下列对指针变量p进行定义且赋初值的语句中正确的是()。[单选题]*A.float*p=1024;B.int*p=(float)x;C.floatp=&x;D.float*p=&x;(正确答案)答案解析:一个指针变量被定义之后,其所能指向变量的类型就确定了。题中变量x为float型,所以用于存储变量x地址的指针也应为float型,故B项不正确。定义指针变量的一般形式为:类型说明符*标识符,故C项不正确。只能将相同数据类型的变量地址赋给指针变量,A项赋的值为整数,故不正确。只有D项正确,答案选D。82.若有以下定义则对x组元素的正确引用是()。[单选题]*A.*&xB.*(x+3)(正确答案)C.*(pt+10)D.pt+3答案解析:pt、x、&x[0]的值均为数组x首地址,也是数组x第1个元素a[0]的地址,或者说它们三者均指向首元素x[0]。而pt+i、x+i、&x[i](i小于数组a的元素个数)指向第i+1个元素x[i],*(pt+i)、*(x+i)、*(&x[i])均表示第i+1个元素。数组x定义下标为10表示包含10个元素,引用时数组下标为0~9,故A项、C项下标超界,不正确。D项表示第4个元素地址,仅有B项正确,故答案选B。83.有下列程序:该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,下列语句正确的是()。[单选题]*A.intn,*p=NULL;(正确答案)B.*p=&n;C.scanf("%d",&p);D.printf("%d",p);答案解析:选项A,定义整型变量n,整型指针变量p并赋空值是正确的。B项*p表示所指向的整型变量,不能接收取地址赋值,根据题义应改为p=&n,故B不正确。C项,通过scanf函数给整型变量n赋值,要取n的地址可以是&n或者p(前提要求p已经指向n),而采用&p表示取指针变量p的地址是不正确的。D项,表示要输入整型的值,参数可以是整型变量n,或者是通过p进行指针运算(*p)得到所指向的变量n,而直接写p是不正确的。所以,本题答案选A。84.有下列程序:程序运行后的输出结果是()。[单选题]*A.z(正确答案)B.0C.元素ch[5]的地址D.字符y的地址答案解析:根据题意,ch表示字符数组的首地址,故pc指向数组首元素,pc+5表示指向数组第6个元素,也即存储ch[5]的地址,*(p+5)表示ch[5]元素本身,故输出的值为字符′z′,所以本题答案选A。85.C语言中的指针算术运算中,假设p是指向整数的指针,p+1的值是什么?()[单选题]*A.p的内存地址加1B.p的内存地址加4C.p的内存地址加sizeof(int)(正确答案)D.p的内存地址减186.下面哪一个不是C语言的编译预处理命令()。[单选题]*A.#ifB.#undefine(正确答案)C.#defineD.#endif答案解析:#if是条件编译,“#define”是宏定义标识符,“#endif”是条件编译结束标识符,“#define”、“#if”、“#endif”三者均是编译预处理命令。C语言中不存在“#undefine”标识符,它不是C语言的编译预处理命令。故本题答案为B。87.下列使用文件包含的预处理命令中,哪一个是错误的()。[单选题]*A.#include<stdio.h>B.#include"stdio.h"C.#include"file1.c”D.#include'stdio.h'(正确答案)答案解析:文件包含预处理命令有两种格式:#include"文件名"或#include<文件名>;,故本题答案为D。88.下面哪一个不是C语言提供的3种条件编译命令()。[单选题]*A.#define…#undef(正确答案)B.#ifdef…#else…#endifC.#if…#else…#endifD.#ifndef…#else…#endif答案解析:B项为当标识符已经定义时才进行编译,C项为条件满足时才编译,D项为当标识符没有定义时进行编译。A为定义、取消宏定义标识。故本题答案选A。89.若程序中有宏定义行:#defineN100,则下列叙述中正确的是()。[单选题]*A.宏定义行中定义了标识符N的值为整数100B.在编译程序对C源程序进行预处理时用100替换标识符N(正确答案)C.对C源程序进行编译时用100替换标识符ND.在运行时用100替换标识符N答案解析:宏定义又称为宏代换、宏替换,简称“宏”。预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。故本题答案为B。90.关于结构体在C语言中的描述,哪个是错误的?()[单选题]*A.结构体可以包含不同类型的数据。B.结构体可以包含自己类型的指针。C.结构体不能包含自己类型的其他结构体。(正确答案)D.结构体可以嵌套其他结构体。91.若有定义:则变量stu1所占用的内存字节数是()。[单选题]*A.15(正确答案)B.16C.8D.19答案解析:结构体类型变量所占的内存字节数是其结构体内部成员的所占字节数的总和。因为变量num是int类型,其占用2个字节;name是char类型的数组,占用8个字节;sex是char类型变量占用1个字节,score是float类型,占用4个字节。因此,stu1所占的字节数是2+8+1+4=15。本题答案为A。92.若有定义:下列叙述不正确的是(

)。[单选题]*A.student是结构体类型名B.structstudent是结构体类型名(正确答案)C.stu1是用户定义的结构体类型变量名D.num,sex,age都是结构体变量stu1的成员答案解析:当一个结构体类型定义完成后,即可在其后面定义结构体变量,因此stu1是结构体类型的变量,C正确;结构体内部所定义的成员即是结构体变量的成员,D正确;structstudent是结构体类型的定义方式,其结构体类型名应是student,A正确,所以B错误。故本题答案为B。93.设有如下语句:则下面表达式的值为102的是()。[单选题]*A.(p++)->;numB.(*++p).num(正确答案)C.(*p++).numD.*(++p)->;num答案解析:访问结构体成员的方法有两种,如果是结构体变量,用“.”号访问,其格式是“结构体变量名.结构体成员名”;如果是结构体指针变量,则用“->;”号访问,其格式是“结构体指针变量名->;结构体成员变量”。在本题中,p是指向结构体数组s首地址的指针变量。选项A是先取得p->;num的值作为整个表达式的值,然后p自增向后移一个元素,因此其值是101;选项B是先对指针p自增指向下一个元素,即“++p”相当于“s[1]”的地址,“*++p”相当于“s[1]”,因此“(*++p).num”相当于“s[1].num”,其值为102;答案C是与A一样,只是访问方式换了。

温馨提示

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

评论

0/150

提交评论