1、二级 C 语言笔试 65 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)1.以下叙述中错误的是(分数:1.00)A.二进制文件打开后可以先读文件的末尾,而顺序文件不可以B.在程序结束时,应当用 fclose 函数关闭已打开的文件C.在利用 fread 函数从二进制文件中读数据时,可以用数组名给数组中所有元素读入数据D.不可以用 FILE 定义指向二进制文件的文件指针2.有以下程序段: int a10=1,2,3,4,5,6,7,8,9,10,*p= printf(“/“%s/“/n“,cf1); (分数:1.00)A.“AAAA“B.“
2、BBB“C.“BBBCC“D.“CC“6.有以下程序 main() char s=“ABCD“, *p; for( p=s+1;ps+4;p+) printf(“%s/n“,p); 程序运行后的输出结果是(分数:1.00)A.ABCD BCD CDB.A B C DC.B C DD.BCD CD D8.有以下程序: Void f(int a,iht i,int j) int t; if(ij) t=ai; ai=aj; aj=t; f(a,i+1,i-1); main() int i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;i5;i+) printf(“%d“ ,a
3、ai);printf(“/n“); 执行后输出结果是(分数:1.00)A.5,4,3,2,1,B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,9.有以下程序 #includestringh main(int argc,char *argv) int i,len=0; for(i=1;iargc;i+)len+=strlen(argvi); printf(“%d/n“,len); 程序编译连接后生成的可执行文件是 exl.exe,若运行时输入带参数的命令行是: exl abcd efg 10回车 则运行的结果是:(分数:1.00)A.22B.17C.12D.910.设有定
4、义:int k=1,m=2;float f=7;,则以下选项中错误的表达式是(分数:1.00)A.k=k=kB.-k+C.k%int(D.k=f=m11.有以下程序 #define N 20 fun(int a,int n,:Int m) int i,i; for(i=m; in; i-) ai+1);ai; main() int i,aN=1,2,3,4,5,6,7,8,9,10; fuu(a,2,9); for(i=0; i5; i+) printf(“%d“,ai); 程序运行后的输出结果是(分数:1.00)A.10234B.12344C.12334D.1223412.若有语句:char
5、*line5,以下叙述中正确的是(分数:1.00)A.定义 line 是一个数组,每个数组元素是一个基类型为 char 的指针变量B.定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型数组C.定义 line 是一个指针数组,语句中的*号称为间址运算符D.定义 line 是一个指向字符型函数的指针13.以下 4 组用户定义标识符中,全部合法的一组是(分数:1.00)A.main enclude sinB.If -max turboC.txt REAL 3COMD.int 12 _00114.以下符合 C 语言语法的实犁常量是(分数:1.00)A.1.2E0.5B.3.1415
6、9EC.5E-3D.E1515.对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(分数:1.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/216.以下叙述中错误的是(分数:1.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句17.以下选项中,与 k=n+完全等价的表达式是(分数:1.00)A.k=n,n=n+1B.n=n+l,k=nC.k=+nD.k+=n+118.以下程序调用 findmax 函数返回数组中的最大值 f
7、indmax (inE *a,int n) int*p,*s; for(p=a,s=a;p-an;p+) if(_)s=p; return(*S); main() int x5=12,21,13,6,18);printf(“%d/n“,findmax(x5); 在下划线处应填入的是(分数:1.00)A.psB.*p*sC.aaD.p-ap-s19.下面不属于软件设计原则的是(分数:1.00)A.抽象B.模块化C.自底向上D.信息隐藏20.算法的空间复杂度是指(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间21.以下 4 个
8、选项中,不能看作一条语句的是(分数:1.00)A.;B.a=0,b=0,c=0;C.if(a0);D.if(b=0)m=1;n=2;22.不合法的 main 函数命令行参数表示形式是(分数:1.00)A.main(inta,char *c)B.mmn(int arc,char *arC.main(int argc,char *argD.majn(int argv,char *atgc)23.数据的存储结构是指(分数:1.00)A.数据所占的存储空间量B.数据的逻辑结构在汁算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据24.设有下列二叉树: (分数:1.00)A.ABCDEF
9、B.BDAECFC.ABDCEFD.DBEFCA25.有以下程序 main() int a3=(1,2,3,4,5,0,(*pa) 3,i; pa=a; for(i=0;i3;i+) if(i2) pali=pa1 i-1; else pa1i=1; printf(“%d/n“a01+a11+a12); 执行后输出结果是(分数:1.00)A.7B.6C.8D.无确定值26.若要打开 A 盘上 user 了目录下名为 abc.txt 的文本文件进行读、写操作,下面符合此要求的函数调用是(分数:1.00)A.fopen(“A:/user/abtxt“,“,“r“)B.fopen(“A:/user/
10、abtxt“,“r+“)C.fopen(“A:/user/abtxt“,“rb“)D.fopen(“A:/user/abtxt“,“w“)27.以下叙述中正确的是(分数:1.00)A.C 程序中注释部分可以出现在程序中任意合适的地方B.花括号“”和“”只能作为函数体的定界符C.构成 C 程序的基本单位是函数,所有函数名都可以山用户命名D.分号是 C 语句之间的分隔符,不是语句的一部分28.要求以下程序的功能是计算 (分数:1.00)A.s=1.0;B.for(n=10;n1;n-)C.s=s+1/n;D.prind(“%6.4f/n“,;29.有以下程序 vold soru(int a, in
11、t n) int i,i,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) t=ai; ai=ai; aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10),i; sore(aa+2, 5); for(i=0;i10;i+) printf(“%d,“,aai); printf(“/n“); 程序运行后的输出结果是(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5,8,9,10,C.1,2,7,6,5,4,3,8,9,10,D.1,2,9,8,7,6,5,4,3,10,30.下列
12、对于线性链表的描述中正确的是(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的31.若有以下说明和语句 int c4 5,(*p)5; p=c; 能够正确引用 c 数组元素的是(分数:1.00)A.p+1B.*(p+3)C.*(p+1)+3D.*(P0+2)32.以下选项中合法的实型常数是(分数:1.00)A.5E2.0B.E-3C2E0D.1.3E33.有以下程序 main() iht a2,4,6,9,10,
13、 y=0,x,*p; p= main() char c1=A,c2=a,*p1,*p2; p1=fun(p);int fun(int *p) ints; p=B ) main() int *p;fun(int fun(int *p) int s; *p=)C) #includemain() int *p;fun(int fun(int *p)*p=(int*)malloc(2);D) #includemain() iht *p;fun(p);iht fun(iht *p) p=(int*)malloc(sizeof(int); (分数:1.00)A.B.C.D.42.有以下程序 int fl(
14、int x.iht y) return xy?x:y; int f2(int x,int y) return xy?y:X; main() int a=4,b=3c=5,d,e,f; d=fla,B) ; d=f1(d,C) : e=f2a,B) ; e=f2(e.C) ; f=a+b+c-d-e; printf(“%d,%d,%d/n“,d,f,e); 执行后输出的结果是(分数:1.00)A.3,4,5B.13,4C.5,4,3D.3,5,443.若有以下程序段 int m=0xabc,n=0xabc; m-=n; printf(“%X/n“.m); 执行后输出结果是(分数:1.00)A.0
15、X0B.0x0C.0D.0XABC44.若有定义:inl a=8,b=5,c;,执行语句 c=a/b+0.4;后,c 的值为(分数:1.00)A.1.4B.1C.2.0D.245.以下能正确定义一维数组的选项是(分数:1.00)A.int a5=0,1,2,3,4,5);B.char a=0,1,2,3,4,5);C.char a=ABC);D.int a5=“0123“;46.有以下程序段: main) int a=5,*b,*C; c= printf(“/“%s/“/n“,cf1); (分数:1.00)A.“AAAA“B.“BBB“ C.“BBBCC“D.“CC“解析:解析 ;维字符数组可
16、以看成由若干个一维字符数组组成,每行是一个一维字符数组。本题首先定义了一个数组 ch35并给它们按行赋初值,即相当于给 ch0赋值“AAAA”,给 ch1赋值“BBB”,给 ch2赋值“BBB”,最后输出转义字符“/”、ch1和转义字符“/”,因此输出为“BBB”所以,4 个选项中 B 为所选。6.有以下程序 main() char s=“ABCD“, *p; for( p=s+1;ps+4;p+) printf(“%s/n“,p); 程序运行后的输出结果是(分数:1.00)A.ABCD BCD CDB.A B C DC.B C DD.BCD CD D 解析:解析 本题中首先定义一个字符数组
17、s,并将字符串“ABCD”存到数组 s 中,定义了一个字符指针变量 p,在接下来 for 循环中,循环体共执行了三次,第一次 p 指向 31,所以此时输出的 p 所指的字符串的值为 BCD,第二次循环 p 指向 s2,所以此时输出的 p 所指的字符串的值为 CD,第三次循环 p 指向 s3,因此此时输出的 p 所指的字符串的值为 D。所以,4 个选项中选项 D 符合题意。解析:解析 在 C 语言中函数名代表该函数的入口地址, 因此可以定义一种指向函数的指针来存放这种地址其定义形式为: 函数类型 (*函数指针名)(函数参数列表); 其中,函数参数列表可以省略。通过函数指针调用函数的形式为: (*
18、函数指针)(函数参数列表) 调用时函数的参数列表是不能省略的。所以本题的正确答案为选项 A。8.有以下程序: Void f(int a,iht i,int j) int t; if(ij) t=ai; ai=aj; aj=t; f(a,i+1,i-1); main() int i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;i5;i+) printf(“%d“ ,aai);printf(“/n“); 执行后输出结果是(分数:1.00)A.5,4,3,2,1, B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,解析:解析 在 C 语言中所谓函数的递归
19、是在指在调用一个函数的过程中,又出现了直接或间接地调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用由程序可以看出函数 f(a,i,j)为一递归函数,其功能是 i9.有以下程序 #includestringh main(int argc,char *argv) int i,len=0; for(i=1;iargc;i+)len+=strlen(argvi); printf(“%d/n“,len); 程序编译连接后生成的可执行文件是 exl.exe,若运行时输入带参数的命令行是: exl abcd efg 10回车 则运行的结果是:(分数:1.00)A.22
20、B.17C.12D.9 解析:解析 main()函数可以带参数,并且参数只能有两个,第一个参数(argc)类型为整型用来记下命令行的参数个数,第二个参数 (argv)为一个字符型指针数组,其各个元素用来记下命令行各参数字符串的首地址。本题执行时,argc 的值为 4,在循环中依次求出 argv1、argv2和 argv3指向的字符串(“abcd“、“efg“和“10“)的长度,并把它们加到变量 len 中,得到 len 的值 9。所以最后输出的 len 值为9,所以 4 个选项中 D 正确。10.设有定义:int k=1,m=2;float f=7;,则以下选项中错误的表达式是(分数:1.00
21、)A.k=k=kB.-k+C.k%int( D.k=f=m解析:解析 本题考查的是强制类型转换运算符。强制类型转换运算符的格式是: (类型名)变量名 所以将浮点型变量 f 转换为整型应写作(int)f,故选项 C 是错误的。11.有以下程序 #define N 20 fun(int a,int n,:Int m) int i,i; for(i=m; in; i-) ai+1);ai; main() int i,aN=1,2,3,4,5,6,7,8,9,10; fuu(a,2,9); for(i=0; i5; i+) printf(“%d“,ai); 程序运行后的输出结果是(分数:1.00)A.
22、10234B.12344C.12334 D.12234解析:解析 数组名可以作为实参传送,由于数组名本身是一个地址值,因此,在函数中对形参数组元素的修改也会相应改变实参数组的元素在本题中,函数 fun()通过一个 for 循环,将形参数组 a 中下标为 n 到 m 之间的元素向后移动一位,an元素的值不变。所以主函数调用 fun(a,2,9);之后,数组 a 的内容变成1,2,3,3,4,5,5,6,7,8,9,10,最后通过 for 循环输出数组前 5 个元素为 12334。选项 C 符合题意。12.若有语句:char*line5,以下叙述中正确的是(分数:1.00)A.定义 line 是一
23、个数组,每个数组元素是一个基类型为 char 的指针变量 B.定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型数组C.定义 line 是一个指针数组,语句中的*号称为间址运算符D.定义 line 是一个指向字符型函数的指针解析:解析 理解复杂定义要掌握两点:一、右结合原则本题中的定义 char*line5;等价于char*(line5);二、自外向内分解成 typedef 语句。char*(line5);等价于 typedef char*A;A line5;其中 A 被 typedef 定义成字符指针的别名,然后 line 被定义成 A 的一维数组,即字符指针的一维数组。
24、再来看看行指针的定义 char(*line)5;它应该被分解成 typedef char B5;B*line;其中 B被定义成包含 5 个元素的一维字符数组,然后 line 被定义成指向 B 的指针,即指向包含 5 个元素的一维字符数组的指针。所以两者切不可混淆了,后者的括号不能省略。故本题应该选择 A。13.以下 4 组用户定义标识符中,全部合法的一组是(分数:1.00)A.main enclude sin B.If -max turboC.txt REAL 3COMD.int 12 _001解析:解析 标识符是以字母或下划线开头, 由字母、数字或下划线组成的字符序列 例如,-max 含非法
25、字符-),并且用户标识符不能与 C 语言中的 32 个关键字同名(例如,int 是关键字,不是合法的用户标识符)。选项 B 中-max 不是字母、数字或下划线组成的字符序列,故选项 B 不正确;选项 C 中 3COM 不是由字母或下划线开头,故选项 C 不正确;选项 D 中 int 为 C 语言中的关键字,故选项 D 不正确;选项 A中全部为合法的标识符,所以,4 个选项中选项 A 符合题意。14.以下符合 C 语言语法的实犁常量是(分数:1.00)A.1.2E0.5B.3.14159EC.5E-3 D.E15解析:解析 实型常量只能用十进制形式表示,不能用八进制或十六进制形式表示,实型常量可
26、以用小数形式或指数形式表示,在 C 语言中,可以用指数形式将实型常量表示为数值和指数两部分,数值部分不能为空,指数部分只能为整数表示。选项 A 中 1.2 和 0.5 都不是整数,故选项 A 不正确;选项 B 中3.14159 也不是整数,故选项 B 不正确;选项 D 中数值部分不能为空,故选项 D 也不正确;所以,4 个选项中选项 C 符合题意。15.对于长度为 n 的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(分数:1.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:解析 假设线性表的长度为 n,在最坏情况下,冒泡排
27、序和快速排序需要的比较次数为 n(n-4)/2。由此可见,选项 D 正确。16.以下叙述中错误的是(分数:1.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:解析 C 语句必须以分号结束,选项 A 是正确的。复合语句在语法上被看作一条语句,选项 B 也是正确的。空语句也算是一条语句,因此如果空语句出现在条件或者循环语句中,一样会被当作条件子句或者循环体来看待,所以选项 c 是错误的。赋值表达式末尾加分号就构成赋值语句,选项 D 正确。故本题应该选择 C。17.以下选项中,与 k=n+完全等
28、价的表达式是(分数:1.00)A.k=n,n=n+1 B.n=n+l,k=nC.k=+nD.k+=n+1解析:解析 在本题中 k=n+,为后缀运算。根据其运算规则,首先 n 先加一,但 n+表达式的值依然 n原来的值,即 k 的值没有改变。选项 A 中先给 k 赋值为 n,然后 n 再加 1,k 值没有变化,所以这个表达式和本题中表达式等价;选项 B 中先 n 加 1,然后将 n 加 1 后的值赋给 k,k 变化了比原来的值大 1,所以这个表达式和本题中表达式不等价;选项 C 中先计算表达式左边的表达式+n 的值,执行+n 后,左边的表达式的值为 n 的值加 1,然后将 n+1 后的值赋给 k
29、,所以这个表达式和本题中的表达式不等价; 选项 D中表达式展开为 k=k/(n+1),k 的值发生了变化,所以这个表达式和本题中的表达式不等价所以 4 个选项中 A 正确。18.以下程序调用 findmax 函数返回数组中的最大值 findmax (inE *a,int n) int*p,*s; for(p=a,s=a;p-an;p+) if(_)s=p; return(*S); main() int x5=12,21,13,6,18);printf(“%d/n“,findmax(x5); 在下划线处应填入的是(分数:1.00)A.psB.*p*s C.aaD.p-ap-s解析:解析 在 ma
30、in()函数中定义了一个具有 5 个元素的 x 数组并赋初值,然后调用 findmax()函数求数组中元素的最大值。调用时把数组元素 x 的首地址,传给了形参指针变量 a,把 5 传给形参 n。在函数findmax()中定义了两种指针变量 p 和 s,其中 s 用来记录最大元素的地址,p 作为循环控制变量,表示每个元素的地址求最大值的算法是先将第一个元素(用 s 记下它的地址)做为最大值,然后用最大值(*s)与后面的每个元素比较(*p),若后面的元素大,则用 s 记下它的地址,所以下划线应填“*s*s”。所以,4个选项中 B 为所选。19.下面不属于软件设计原则的是(分数:1.00)A.抽象B
31、.模块化C.自底向上 D.信息隐藏解析:解析 软件设计的原则包括:抽象、模块化,信息隐蔽和模块独立性。所以自底向上不是软件设计原则。答案为 C。20.算法的空间复杂度是指(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 解析:解析 算法的空间复杂度一般是指这个算法执行时所需要的内存空间,其中包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据结构所需要的附加存储空间。21.以下 4 个选项中,不能看作一条语句的是(分数:1.00)A
32、.;B.a=0,b=0,c=0;C.if(a0);D.if(b=0)m=1;n=2; 解析:解析 C 语言是一种表达式语言,所有的操作运算都通过表达式来实现,由表达式组成的语句称为表达式语句,它有一个表达式后接一个分号组成。本题中,选项 D 中 if(b=0) m=1;n=2;是两个表达式语句所以,4 个选项中选项 D 符合题意。22.不合法的 main 函数命令行参数表示形式是(分数:1.00)A.main(inta,char *c)B.mmn(int arc,char *arC.main(int argc,char *arg D.majn(int argv,char *atgc)解析:解析
33、 main()函数可以带有参数,并且参数只能有两个,第一个参数类型为整型,用来记下命令行的参数个数,第二个参数为一个字符型指针数组,或字符型二级指针变量(指向一个数组,数组元素又是一个一级字符指针),其各个元素用来记下从命令行各参数字符串的首地址故本题只有 C 选项不符合要求。所以,4 个选项中 C 为所选。23.数据的存储结构是指(分数:1.00)A.数据所占的存储空间量B.数据的逻辑结构在汁算机中的表示 C.数据在计算机中的顺序存储方式D.存储在外存中的数据解析:解析 数据的存储结构是数据元素在计算机存储器内的表示。数据的存储结构是逻辑结构用计算机语言的实现,即建立数据的机内表示。24.设
34、有下列二叉树: (分数:1.00)A.ABCDEFB.BDAECFC.ABDCEFD.DBEFCA 解析:解析 二叉树的遍历分为先序、中序、后序三种不同方式本题要求后序遍历,其遍历顺序应该为:后序遍历左子树-后序遍历右子树-访问根结点。按照定义,后序遍历序列是 DBEPCA,故答案为D。25.有以下程序 main() int a3=(1,2,3,4,5,0,(*pa) 3,i; pa=a; for(i=0;i3;i+) if(i2) pali=pa1 i-1; else pa1i=1; printf(“%d/n“a01+a11+a12); 执行后输出结果是(分数:1.00)A.7 B.6C.8
35、D.无确定值解析:解析 本题定义了一个指向由 3 个元素组成的一维数组的指针变量 pa,通过赋值让它指向具有 2行 3 列的数组 a,此时用指针变量 pa,表示数组元素 aij的形式是 paij。for 循环执行了 3 次;第一次 i 值为 0,执行 pa10=pa10-1 执行后 a10的值变为 3;第二次 i 值为 1,执行 pa11=pa11-1,执行后 a11的值为 4;第三次 i 值为 2,执行 pa12=1,执行后 a12的值变为1。故 printf 语句输入的值为 2+4+1=7。所以,A 选项为所选。26.若要打开 A 盘上 user 了目录下名为 abc.txt 的文本文件进
36、行读、写操作,下面符合此要求的函数调用是(分数:1.00)A.fopen(“A:/user/abtxt“,“,“r“)B.fopen(“A:/user/abtxt“,“r+“) C.fopen(“A:/user/abtxt“,“rb“)D.fopen(“A:/user/abtxt“,“w“)解析:解析 由于“/”是转义字符,所以在文件名中的“”用“/”来表示,因此选项 A 和选项 C 不正确。要打开文本文件进行读写,应使用读写模式“r+”,因此选项 D 不正确。所以, 4 个选项中 B 为所选。27.以下叙述中正确的是(分数:1.00)A.C 程序中注释部分可以出现在程序中任意合适的地方 B.
37、花括号“”和“”只能作为函数体的定界符C.构成 C 程序的基本单位是函数,所有函数名都可以山用户命名D.分号是 C 语句之间的分隔符,不是语句的一部分解析:解析 “/*”与“*/”之间的信息称为注释信息,在 C 语言中,允许在任何能够插入空格符的位置插入注释,但 C 语言的注释不能进行嵌套,故选项 A 正确;在 C 语言中,函数体是从花括号“”开始,到花括号“”结束但没有规定花括号“”和“”只能作为函数体定界符,故选项 B 错误;选项 C 中前半句是正确的,在 C 程序中由有一个或多个函数所组成,但不是所有的函数都由用户自己命名,有些函数比如库函数,主函数 main()就不能由用户来命名,故选
38、 C 不正确;在 C 语言中明确规定每条语句以分号“;”结束,分号是语句不可缺少的一部分,故选项 D 不正确。所以, 4 个选项中选项 A 符合题意。28.要求以下程序的功能是计算 (分数:1.00)A.s=1.0;B.for(n=10;n1;n-)C.s=s+1/n; D.prind(“%6.4f/n“,;解析:解析 程序中由于 n 为整型,所以 1/n 的结果始终为 0,故程序最后输出的结果为 0,其结果错误,原因为在表达式 1/n 中 1 和 n 均为整型,所以应该将 1 改为 1.0,这样表达式 1.0/n 的值不为 0,为该数学表达式的值,因此我们可以知道导致程序运行后输出结果错误的
39、行为 s=s+1/n;,所以,4 个选项中选项 C 符合题意。29.有以下程序 vold soru(int a, int n) int i,i,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) t=ai; ai=ai; aj=t; main() int aa10=1,2,3,4,5,6,7,8,9,10),i; sore(aa+2, 5); for(i=0;i10;i+) printf(“%d,“,aai); printf(“/n“); 程序运行后的输出结果是(分数:1.00)A.1,2,3,4,5,6,7,8,9,10,B.1,2,7,6,3,4,5
40、,8,9,10,C.1,2,7,6,5,4,3,8,9,10, D.1,2,9,8,7,6,5,4,3,10,解析:解析 先看 sort()函数,它没有返回值,有两个参数,一个 int 型数组和一个 int 型变量。在函数中是一个;重循环,外循环变量 i 从 0 递增到 n-2,内循环变量 j 从 i+l 递增到 n-1。内循环体是一条if 语句“如果 ai30.下列对于线性链表的描述中正确的是(分数:1.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的 B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必
41、须连续,且各元素的存储顺序是任意的解析:解析 在链式存储结构中,存储数据的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系,是由指针域来确定的。由此可见,选项 A 的描述正确。31.若有以下说明和语句 int c4 5,(*p)5; p=c; 能够正确引用 c 数组元素的是(分数:1.00)A.p+1B.*(p+3)C.*(p+1)+3D.*(P0+2) 解析:解析 本题中定义了一个二维数组 c 和一个指针数组 p 并初始化让它指向 c,显然此时 p 中的各元素为地址,选项 A 中 p+1,此时其中的 1 代表的长度是整个;维数组 c 的长度,
42、故 p+1 将让 p 指向 c 数组后面的元素,故不能引用 c 数组中的成员,故选项 A 错误; 同理选项 B 和选项 C 都不正确,选项 D 中p0指的是指针数组中的第一个元素的地址即 c 的首地址,此时的 1 的长度代表的是数组 c 中一行的长度,故 p0+2 代表的是第三行的首地址,而*(p0+2)将代表第三行的第一个元素的地址,所以,4 个选项中选项 D 符合题意。32.以下选项中合法的实型常数是(分数:1.00)A.5E2.0B.E-3C2E0 D.1.3E解析:解析 在 C 语言中,实数有两种表示形式:十进制数形式与指数形式。 一般形式的实数:小数形式的实数由整数部分、小数点和小数
43、部分组成(必须要有小数点), 指数形式的小数;指数形式的实数由尾数部分、 e(E)和指数部分组成(字母 e 或 E 的前后必须要有数字,且其后面的指数必须为整数)。 选项A 中,5E2.0 中 E 后面的 2.0 不是整数;选项 B 中,E 前面没有数字:选项 D 中,E 后面没有数字。最终可以判断选项 C 正确。33.有以下程序 main() iht a2,4,6,9,10, y=0,x,*p; p= main() char c1=A,c2=a,*p1,*p2; p1=fun(p);int fun(int *p) ints; p=B ) main() int *p;fun(int fun(i
44、nt *p) int s; *p=)C) #includemain() int *p;fun(int fun(int *p)*p=(int*)malloc(2);D) #includemain() iht *p;fun(p);iht fun(iht *p) p=(int*)malloc(sizeof(int); (分数:1.00)A.B.C. D.解析:解析 本题考核的知识点是指针变量作为函数的参数以及变量的作用域。在选项 A 中,main()函数中定义了一个指针变量 p,调用 fun()函数时把 p 传给形参 p,在函数中让 p 指向局部变量 s,由于函数调用返回后,局部变量 s 将被释放,
45、因此无法实现让实参 p 指向一个整型单元,故选项 A 错误选项 B中实现的也是让实参 p,指向一个在函数 fun()定义的局部变量 s,因此也是错误的;选项 C 在函数 fun()中分配了两个字节的内存单元并把首地址赋值给形参 p 指向的变量,即 main()函数的指针变量 p 中,由于整型变量占两个字节,因此,选项 C 是正确的;选项 D 在主函数中定义了一个指针地址变量 p,并把指针变量的值传给形参变量 p,在 fun()函数分配了一个整型单元并把首地址赋值给行参指针变量 p,由于C 语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项 D 也是错误的所以,C 选项为所
46、选。42.有以下程序 int fl(int x.iht y) return xy?x:y; int f2(int x,int y) return xy?y:X; main() int a=4,b=3c=5,d,e,f; d=fla,B) ; d=f1(d,C) : e=f2a,B) ; e=f2(e.C) ; f=a+b+c-d-e; printf(“%d,%d,%d/n“,d,f,e); 执行后输出的结果是(分数:1.00)A.3,4,5B.13,4C.5,4,3 D.3,5,4解析:解析 本题考核的知识点是函数的定义与函数调用。函数 f1()的作用是返回形参 x 和 y 的较大值,函数 f
47、2()的作用是返回形参 x 和 y 的较小值,在 main()函数中通过调用两次 f1()函数,求得 a、b、c 的最大值并存放在变量 d 中,通过调用两次 f2()函数,求得 a、b、c 的最小值并存放到变量 e 中由程序可知 d 值为 5,f 的值为 4,e 的值为 3,因此最后输出的 d,f、e 的值为 5、4,3。所以, C 选项为所选。43.若有以下程序段 int m=0xabc,n=0xabc; m-=n; printf(“%X/n“.m); 执行后输出结果是(分数:1.00)A.0X0B.0x0C.0 D.0XABC解析:解析 本题考核的知识点是 C 语言中的自反赋值运算符。 “m-=n”相当于“m=m-n”,两个相等的数相减,其值为 0。所以, C 选项为所选。44.若有定义:inl a=8,b=5,c;,执行语句 c=a/b+0.4;后,c 的值为(分数:1.00)A.1.4B.1 C.2.0D.2解析: