1、二级 C语言笔试-193 及答案解析(总分:94.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.从工程管理角度,软件设计一般分为两步完成,它们是( )。(分数:1.00)A.概要设计与详细设计B.数据设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计2.以下与函数 fseek(fp,0L,SEEK_SE乃有相同作用的是( )。(分数:1.00)A.feof(fp)B.ftell(fp)C.fgetc(fp)D.rewind(fp)3.有以下程序:mam()char s=“ABCD“,*p;for( p=s+1;ps+4;p+)printf(“%s/n“
2、,p);程序运行后的输出结果是( )。(分数:1.00)A.ABCD BCD DB.ABCDC.BCDD.BCDCDD4.有以下程序:mam()int i=10,j=1;printf(“%d,%d/n“,i-,+j);执行后输出的结果是( )。(分数:1.00)A.9,2B.10,2C.9,1D.10,15.下面不属于软件设计原则的是( )。(分数:1.00)A.抽象B.模块化C.自底向上D.信息隐蔽6.有以下程序:main()int a3=1,2,3,4,5,0,(*p(分数:1.00)A.3,i;7.指出下面不了确的赋值语句( )。(分数:1.00)A.a+;B.a=b;C.a+=b;D.
3、a=1,b=1;8.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:1.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参9.有以下函数:fun(char *a, char *b)while(*a!=/0) b+;return(*a-*b);该函数的功能是( )。(分数:1.00)A.计算 a和 b所指字符串的长度之差B.将 b所指字符串复制到 a所指字符串中C.将 b所指字符串连接到 a所指字符串后面D.比较 a和 b所指字符串的大小10.有以下程序:void fun(int
4、*a,int i,int j)int t;if(ij)t=ai;ai=aj;aj=t;i+; j-;fun(a,ij);main()int x=2,6,1,8,i;fun(x,0,3);for(i=0;i4;i+) printf(“%2d“,xi);printf(“/“n);程序运行后的输出结果是( )。(分数:1.00)A.1 2 6 8B.8 6 2 1C.8 1 6 2D.8 6 1 211.设有如下定义:struct sschar name10int age;char sex;std3,*p=std;下面各输入语句中错误的是( )。(分数:1.00)A.scanf(“%d“,B.sca
5、nf(“%st“,C.scanf(“%c“,D.scanf(“%c“,12.有以下程序:int fun1(double(分数:1.00)A.return a*=a;int fun2(double x,double y)double a=0,b=0;a=fun1(x);b=funl(y); return(int)(a+B.;p=x-fun(x-2);return p;main()printf(“%d/n“,fun(7);执行后的输出结果是( )。(分数:1.00)A.7B.3C.2D.014.有以下程序段:typedef struct NODEint num; struct NODE * nex
6、t;OLD;以下叙述中正确的是( )。(分数:1.00)A.以上的说明形式非法B.NODE是一个结构体类型C.OLD是一个结构体类犁D.OLD是一个结构体变量15.以下选项中,合法的一组 C语言数值常量是( )。(分数:1.00)A.028 .5e-3 -0xfB.120X0234.5e0C1774e1.50abeD.0x8A10,0003.e516.在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是( )。(分数:1.00)A.概要设计B.详细设计C.可行性分析D.需求分析17.下列叙述中正确的是( )。(分数:1.00)A.数据库系统是一个独立的系统,不需要操作系统
7、的支持B.数据库技术的根本目标是要解决数据的共享问题C.数据库管理系统就是数据库系统D.以上 3种说法都不对18.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。(分数:1.00)A.if(aB.B) if(aB) (bC) k=1;else k=0; else k=0;C) if(a=B) else if(b=e) k=1; else if(bC) k=1;e19.有以下程序:void fun1(char*p)char *q;q=p;while(*q!=/0)(*q)+; q+; main()char a=“Program“),*p;p= fun1(p) printf
8、(“%s/n“,(分数:1.00)A.;程序执行后的输出结果是( )。A) ProhsbnB.PrphsbnC.ProgsbnD.Program20.若有定义;int w35;,则以下不能正确表示该数组元素的表达式是( )。(分数:1.00)A.*(*w+3)B.*(w+1)4C.*(*(w+1)D.*(i6;i+)bi*=2;main()int a10=1,2,3,4,5,6,7,8,9,10,i;f((分数:1.00)_23.有以下程序:int fa(int x)return x*x; int fb(int x)return x*x*x; int f(int(*f1)(),int(*f2)
9、(),int x)return f2(x)-f1(x); main()int i;i=f(fa,fb,2);printf(“%d/n“,i);程序运行后的输出结果是( )。(分数:1.00)A.1 2 6 8B.8 6 2 1C.8 1 6 2D.8 6 1 224.下列关于单目运算符+、-的叙述中正确的是( )。(分数:1.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char型变量和 int型变量,但不能是 float型变量C.它们的运算对象可以是 int型变量,但不能是 double型变量和 float型变量D.它们的运算对象可以是 char型变量、int 型变量
10、和 float型变量25.下列叙述中错误的是( )。(分数:1.00)A.一种数据的逻辑结构可以有多种存储结构B.数据的存储结构与数据处理的效率无关C.数据的存储结构与数据处理的效率密切相关D.数据的存储结构在计算机中所占的空间不一定是连续的26.有以下程序:#includestudio.h#defme F(X,Y) (X)*(Y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是( )。(分数:1.00)A.12B.15C.16D.2027.设函数 fun的定义形式为void fun(char ch,float x) 则以下对函数 fun
11、的调用语句中,正确的是( )。(分数:1.00)A.fun(“abc“,3.0);B.t=fun(D,16.5);C.fun(65,2.8);D.fun(32,32);28.有以下程序:main()int a33,*p.i;p=i9;i+)pi=i;for(i=0;i3;i+)printf(“%d“,a1i);程序运行后的输出结果是( )。(分数:1.00)A.0 1 2B.1 2 3C.2 3 4D.3 4 529.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为( )。(分数:1.00)A.log2nB.n/2C.nD.n+130.若有以下程序:main()int k=2,
12、i=2,m;m=(k+=i*=k);print f(“%d,%d/n“,m,i);执行后的输出结果是( )。(分数:1.00)A.8,6B.8,3C.6,4D.7,431.若有定义“int*p3;“,则以下叙述中正确的是( )。(分数:1.00)A.定义了一个基类型为 int的指针变量 p,该变量具有 3个指针B.定义了一个指针数组 p,该数组含有 3个元素,每个元素都是基类型为 int的指针C.定义了个名为*p 的整型数组,该数组含有 3个 int类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组应具有 3个 int类型元素32.有以下函数定义:void fun(int n,d
13、oub x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun的正确调用语句是( )。(分数:1.00)A.fun(int y,double m);B.k=fun(10,12.5);C.fun(x,n);D.void fum(n,x);33.用 C言编写的代码程序( )。(分数:1.00)A.可立即执行B.是个源程序C.经过编译即可执行D.经过编译解释即可执行34.以下能正确定义一维数组的选项是( )。(分数:1.00)A.int num;B.#define N 100int numN;C.int num0100;D.int N=100;int numN;35.以下程序的输出结果是( )
14、。#include stdio.h#includestring.hmam()char b18=“abcdefg“,b28,*pb=b1+3;while(-pb=b1) strcpy(b2,pB) ;printf(“%d/n“,strlen(b2);(分数:1.00)A.8B.3C.1D.736.设有以下说明语句:typedef struetint n;char ch8;PER;则下面叙述中正确的是( )。(分数:1.00)A.PER是结构体变量名B.PER是结构体类型名C.typedef struct是结构体类型D.struct是结构体类型名37.已定义以下函数;int fun(int *p)
15、return*p; fun函数返回值是( )。(分数:1.00)A.不确定的值B.一个整数C.形参 p中存放的值D.形参 p的地址值38.有以下程序段:int j; float y; char name50;scanf(“%2d%f%s“, 当执行上述程序段,从键盘上输入 55566 7777abc后,y 的值为( )。(分数:1.00)A.55566.0B.566.0C.7777.0D.566777.039.有以下程序:main()unsigned char a,b,c;a=0x3;b=a0x8;c=b1;printf(“%d%d/n“,b,C) ;程序运行后的输出结果是( )。(分数:1.
16、00)A.-11 12B.-6 -13C.12 24D.11 2240.若变量已正确定义,有以下程序段:i=0;do printf(“%d,“,i); while(i+);print f(“%d/n“,i);其输出结果是( )。(分数:1.00)A.0,0B.0,1C.1,1D.程序进入无限循环41.在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为( )。(分数:2.00)A.63B.64C.6D.742.下列叙述中正确的是( )。(分数:2.00)A.C语言中既有逻辑类型也有集合类型B.C语言中没有逻辑类型但有集合类型C.C语言中有逻辑类型但没有集合类型D.C语言巾既没有
17、逻辑类型也没有集合类型43.有以下程序:#defme P 3void P(int x)return(p*x*x); main()pritnf(“%d/n“,F(3+5);程序运行后的输出结果是( )。(分数:2.00)A.192B.29C.25D.编译出错44.以下语句或语句组中,能正确进行字符串赋值的是( )。(分数:2.00)A.char *sp; *sp=“right!“;B.char s10; s=“right!“;C.char s10; *s=“right!“;D.char *sp=“right!“;45.以下程序的输出结果是( )。main()int a=5,b=4,c=6,d;p
18、rintf(“%d/n“,d=ab?(ac?a:C) :(B) );(分数:2.00)A.5B.4C.6D.不确定46.将 E-R图转换到关系模式时,实体与联系都可以表示成( )。(分数:2.00)A.属性B.关系C.键D.域47.数据库设计的 4个阶段是:需求分析、概念设计、逻辑设计和( )。(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计48.有以下程序:#include stdio.hmain()int y=9;for( ; y0; y-)if(y%3=0) printf(“%d“, -y);程序的运行结果是( )。(分数:2.00)A.741B.963C.852D.8
19、7542149.有以下程序:main()int x=3,y=2,z=1;printf(“%d/n“,x/y(分数:2.00)填空项 1:_57.以下程序运行后的输出结果是 【7】 。#define S(x)4*x*x+1mah()int i=6,j=8;printf(“%d/n“,S(i+j);(分数:2.00)填空项 1:_58.以下程序的输出结果是 【8】 。main()int a=0;a+=(a=8);printf(“%d/n“,A) ;(分数:2.00)填空项 1:_59.以下程序的输出结果是 【9】 。#include stdio.hmain()int n=12345,d;while
20、(n!=0) d=n%10; printf(“%d“,D) ; n/=10; (分数:2.00)填空项 1:_60.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。main()int t=0,s=0,i;for(i=1;i=5;i+)t=i+ 【10】 ;s=s+t; printf(“s=%d/n“,s);(分数:2.00)填空项 1:_61.已知字母 A的 ASCII码为 65。以下程序运行后的输出结果是 【11】 。main()char a,b;a=A+5-3;b=a+6-2;printf(“%d %c/n“,a,B) ;(分数:2.00)填空项 1:_62.以下
21、函数 fun的功能是返回 str所指字符串中以形参 c中字符开头的后续字符串的首地址,例如;str所指字符串为:Hello!,c 中的字符为 e,则函数返回字符串:ello!的首地址。若 str所指字符串为空串或不包含 c中的字符,则函数返回 NULL。请填空。char*fun(char *str,char c) int n=0; char *p=str;if(p!=NULL)while(pn!=c iK;i+)(分数:2.00)填空项 1:_64.以下程序的输出结果是 【14】 。main()int x=0;sub(s= 【15】 ;while( 【16】 =*p+);main()char
22、str1100=“abed“,str2=“efgh“;strcpy2(str1,str2); printf(“%s/n“,str1);(分数:2.00)填空项 1:_66.下面程序的运行结果是 【17】 。#define N 10#define s(x) x*x#define f(x)(x*x)mam()int il,i2;i1=1000/s(N);i2=1000/f(N);printf(“%d %d/n“,il,i2);(分数:2.00)填空项 1:_67.以下程序中函数 huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串: yes!,否则函数返回字符串:no!,
23、并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如:adgda。请填空。#include string.hchar*huiwen(char *str)char *p1,*p2; int i,t=0;p1=str;p2= 【18】 ;for(i=0;i=strlen(str)/2;i+)if(*p1+!=*p2-)t=1;bteak;if( 【19】 )return(“yes!“);else return(“no!“);main()char sb50;printf(“Input:“); scanf(“%s“,str);ptintf(“%s/n“, 【20】 );(分数:2.00)填空项 1
24、:_二级 C语言笔试-193 答案解析(总分:94.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.从工程管理角度,软件设计一般分为两步完成,它们是( )。(分数:1.00)A.概要设计与详细设计 B.数据设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计解析:从工程管理的角度,软件设计可分为概要设计和详细设计两大步骤。2.以下与函数 fseek(fp,0L,SEEK_SE乃有相同作用的是( )。(分数:1.00)A.feof(fp)B.ftell(fp)C.fgetc(fp)D.rewind(fp) 解析:题目中 fseek(fp,0L,SEEK_SE
25、T)的作用将文件指针定位到文件开始。feof(fp)的作用是判断文件指针是否已到文件结尾,因此选项 A不对。ftell(fp)的作用是获取当前文件指针的位置,因此选项 B不对。fgetc(fp)的作用是从文件中读取一个字节,因此选项 C不对。rewind(fp)的作用是将文件指针重定位到文件开头,所以应该选择 D。3.有以下程序:mam()char s=“ABCD“,*p;for( p=s+1;ps+4;p+)printf(“%s/n“,p);程序运行后的输出结果是( )。(分数:1.00)A.ABCD BCD DB.ABCDC.BCDD.BCDCDD 解析:本题中首先定义一个字符数组 s,井
26、将字符串“ABCD”存到数组 s中,定义了一个字符指针变量p,在接下来 for循环中,循环体共执行了三次,第一次 p指向 s1,所以此时输出的 p所指的字符串的值为 BCD,第二次循坏 p指向 s2,所以此时输出的 p所指的字符串的值为 CD,第三次循环 p指向 s3,因此此时输出的 p所指的字符串的值为 D。所以,4 个选项中选项 D符合题意。4.有以下程序:mam()int i=10,j=1;printf(“%d,%d/n“,i-,+j);执行后输出的结果是( )。(分数:1.00)A.9,2B.10,2 C.9,1D.10,1解析:+、-运算符在变量之前是先使变量的值加 1或减 1,然后
27、再使用变量的值:如果在变量之后则先使用变量之前的值,再把变量的值加 1或减 1。显然,程序中表达式“i-”的值为 10,“+j”的值为2,所以最后输出的值为 10和 2,所以,B 选项为所选。5.下面不属于软件设计原则的是( )。(分数:1.00)A.抽象B.模块化C.自底向上 D.信息隐蔽解析:软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念。它们是:抽象、模块化、信息隐蔽,模块独立性。没有白底向上。6.有以下程序:main()int a3=1,2,3,4,5,0,(*p(分数:1.00)A.3,i;解析:本题定义了一个指向由 3个元素组
28、成的一维数组的指针变量 pa,通过赋值让它指向具有 2行 3列的数组 a,此时用指针变量 pa,表示数组元素 aij的形式是 paimj)。for 循环执行了 3次;第一次 i值为 0,执行 pa10=pa10-1,执行后 a10的值变为 3;第二次 i值为 1,执行 pa=11=pa11-1,执行后 a11的值为 4;第三次 i值为 2,执行 pa12=1,执行后 a12的值变为 1。故 prinff语句输入的值为 2+4+1=7。所以,A 选项为所选。7.指出下面不了确的赋值语句( )。(分数:1.00)A.a+;B.a=b; C.a+=b;D.a=1,b=1;解析:选项 A中 a+相当于
29、 a+1,是赋值语句;选项 C和选项 D也是赋值语句。只有选项 B 不是,因为选项 B中“=”符号是等于的意思,并不是赋值运算符,所以,4 个选项中 B符合题意。8.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。(分数:1.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参 解析:在 C语言中规定:有返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为一条语句,故选项 A和选项 C正确;而有返回值的函数调用只能作为一个函数的实参(即将其返回值传给相应的形参),而不能作为形参(因
30、为行参是在函数定义时说明的),故选项 B正确选项 D 不正确。所以,4 个选项中选项D符合愿意。9.有以下函数:fun(char *a, char *b)while(*a!=/0) b+;return(*a-*b);该函数的功能是( )。(分数:1.00)A.计算 a和 b所指字符串的长度之差B.将 b所指字符串复制到 a所指字符串中C.将 b所指字符串连接到 a所指字符串后面D.比较 a和 b所指字符串的大小 解析:本题要求阅读的代码是一个函数,阅读之前先要看清函数的定义,该函数有两个参数,都是字符指针,这说明它接收的是两个字符串。该函数没有定义返回类型,C 语言规定函数的返回类型为 int
31、时可以省略,所以切不可将其看成是无返回类型的 void型函数,它是 int型函数。函数体中除了返回语句外,只有一条 while循环语句,该循环的循环条件为(*a!=/0)if(ij)t=ai;ai=aj;aj=t;i+; j-;fun(a,ij);main()int x=2,6,1,8,i;fun(x,0,3);for(i=0;i4;i+) printf(“%2d“,xi);printf(“/“n);程序运行后的输出结果是( )。(分数:1.00)A.1 2 6 8B.8 6 2 1C.8 1 6 2 D.8 6 1 2解析:函数 fun()中用了个 if语句,当数组下标 i小于数组下标 j时
32、,交换数组元素 ai和 aj的值,并使 i值加 1,j 值减 1。其功能就是把数组 a中从下标 i到 j的元素首尾互换。主函数中定义一个数组,在定义该数组的时候缺省了定义长度,定义的同时将其初始化赋值,所以该数组的长度为初始化该数组时的元素的个数即 4,接着调用 fun(a,0,3),其中将 a数组的第一个元素的下标 0和最后一个元素的下标 3传给了函数 fun(),故执行完该函数后,数组 a中的元素首尾互换,因此最后依次输出的数组 a中值为8,1,6 和 2,所以,4 个选项中选项 C符合题意。11.设有如下定义:struct sschar name10int age;char sex;st
33、d3,*p=std;下面各输入语句中错误的是( )。(分数:1.00)A.scanf(“%d“,B.scanf(“%st“, C.scanf(“%c“,D.scanf(“%c“,解析:选项 A中“int fun2(double x,double y)double a=0,b=0;a=fun1(x);b=funl(y); return(int)(a+B.;p=x-fun(x-2);return p;main()printf(“%d/n“,fun(7);执行后的输出结果是( )。(分数:1.00)A.7B.3C.2 D.0解析:本题的 fun()函数在 x等于 0或 1时返回 3,而在其余情况下返
34、回 x-fun(x-2),所以本题的递归算法可以这样来表示:*在主函数中输出的结果是 fun(7),而 fun(7)=7-fun(5)=7-(5-fun(3)=7-(5-(3-fun(1)=7-(5-(3-3)= 7-(5-0)=7-5=2。故本题应该选择 C。14.有以下程序段:typedef struct NODEint num; struct NODE * next;OLD;以下叙述中正确的是( )。(分数:1.00)A.以上的说明形式非法B.NODE是一个结构体类型C.OLD是一个结构体类犁 D.OLD是一个结构体变量解析:将题目中的定义语句去掉前面的 typedef和后面的 OLD(
35、分号保留),就是一条完整的结构体定义语句,其中 struct是说明符,NODE 是结构体名,大括号里面的是结构体成员的定义。此时要声明该结构体变量时需要使用 struct加结构体名起来声明,struct NODE 一起构成一个结构体类型,就好像字符类型 char。若只去掉前面的 typedcf,就是一条结构体定义同时声明一个结构体变量 OLD 的语句,因为 OLD的前面部分是 struct NODE的完整写法,可以看作是 struct NODE。C 语言允许用 typedef说明一种新类型名,其语法格式为:typedef类型名标识符;以后就可以用该标识符来代替被说明的类型名了。因此,当前面存在
36、 typedef时,该语句就变成了给struct NODE的完辖写法定义一个新的名称 OLD。所以,此时的 OLD是一个结构体类型,它相当于 struct NODE,即可以和 char一样单独用来声明该结构体变量,而 NODE只是一个结构体名,不能单独用来声明变量。所以, 4 个选项中 C符合题意。15.以下选项中,合法的一组 C语言数值常量是( )。(分数:1.00)A.028 .5e-3 -0xfB.120X0234.5e0 C1774e1.50abeD.0x8A10,0003.e5解析:选项 A中,028 是八进制形式,但后面跟的 8不在 07 之内,所以非法;选项 C中, 4e1.5
37、是指数形式,但 e后面所跟的不是整数,所以非法;选项 D中,10,000 中不能有“,”,所以非法。故本题应该选择 B。16.在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是( )。(分数:1.00)A.概要设计B.详细设计C.可行性分析D.需求分析 解析:在需求分析阶段中,根据可行性研究阶段所提交的文档,特别是从数据流图出发,对目标系统提出清晰、准确和具体的要求,即要明确系统必须做什么的问题。17.下列叙述中正确的是( )。(分数:1.00)A.数据库系统是一个独立的系统,不需要操作系统的支持B.数据库技术的根本目标是要解决数据的共享问题 C.数据库管理系统就是数据
38、库系统D.以上 3种说法都不对解析:数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等,选项 A的说法是错误的数据库具有为各种用户所共享的特点,选项 B的说法是正确的。通常将引入数据库技术的计算机系统称为数据库系统。一个数据库系统通常由 5个部分组成,包括相关计算机的硬件、数据库集合、数据库管理系统、相关软件和人员。因此,选项 C的说法是错误的。18.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是( )。(分数:1.00)A.if(a B.B) if(aB) (bC) k=1;else k=0; else k=0;
39、C) if(a=B) else if(b=e) k=1; else if(bC) k=1;e解析:分析题目中给出的表达式可知,如果 ab 和 bc 同时成立,k=1,否则 k=0。所以, 4 个选项中选项 A符合题意。19.有以下程序:void fun1(char*p)char *q;q=p;while(*q!=/0)(*q)+; q+; main()char a=“Program“),*p;p= fun1(p) printf(“%s/n“,(分数:1.00)A.;程序执行后的输出结果是( )。A) Prohsbn B.PrphsbnC.ProgsbnD.Program解析:在函数 fun1(
40、)中,首先将形参 p的内容存入临时指针 q中,然后使用个 while循环,当 q所指内容不是字符串结束标志“/0时,让 q所指内容增 1,然后将指针 q增 1指向下一个位置。所以函数fun1()实现的功能是:将传入字符串的所有字符自增 1。主函数,指针 p在被传入 fun1()函数之前,初始化指向的是宁符数组 a的第 4个元素g,所以最终输出的结果应该是 Prohsbn。故应该选择 A。20.若有定义;int w35;,则以下不能正确表示该数组元素的表达式是( )。(分数:1.00)A.*(*w+3)B.*(w+1)4 C.*(*(w+1)D.*(i6;i+)bi*=2;main()int a
41、10=1,2,3,4,5,6,7,8,9,10,i;f((分数:1.00)_解析:本题中,f()函数通过一个 for循环语句,将传入数组的元素从下标 2到下标 5每个自乘以 2。因此,调用结束时,数组 a中的内容为1,2,6,8,10,12,7,8,9,1023.有以下程序:int fa(int x)return x*x; int fb(int x)return x*x*x; int f(int(*f1)(),int(*f2)(),int x)return f2(x)-f1(x); main()int i;i=f(fa,fb,2);printf(“%d/n“,i);程序运行后的输出结果是( )
42、。(分数:1.00)A.1 2 6 8B.8 6 2 1C.8 1 6 2 D.8 6 1 2解析:函数 f()有 3个形式参数 f1、f2 和 x,其中 f1、f2 是指向函数的指针变量。在 main()函数中执行了函数调用“f(fa,fb,2)”,从而使 f()的形式参数 f1指向了 fa,形式参数 f2指向了 fb,把实参 2传给了行参变量 x。函数 f()中的 return语句中的相当于“fb(2)-fa(2)” (fb(2)的返回值为 2*2*2=8, fa(2)返回值为 2*2=4)即(8-4),值为 4。函数 f()执行后把返回值 4赋给了 i,输出 i的值是 4。所以 4个选项
43、中 C正确。24.下列关于单目运算符+、-的叙述中正确的是( )。(分数:1.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char型变量和 int型变量,但不能是 float型变量C.它们的运算对象可以是 int型变量,但不能是 double型变量和 float型变量D.它们的运算对象可以是 char型变量、int 型变量和 float型变量 解析:C 语言中的+和-运算符是单目运算符,其运算对象可以是整型、字符型、float 型和 double型等基本数据类型。所以,D 选项为所选。25.下列叙述中错误的是( )。(分数:1.00)A.一种数据的逻辑结构可以有多种存
44、储结构B.数据的存储结构与数据处理的效率无关 C.数据的存储结构与数据处理的效率密切相关D.数据的存储结构在计算机中所占的空间不一定是连续的解析:一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等,选项 A和选项 D正确。采用不同的存储结构,其数据处理的效率不同,因此,在进行数据处理时,选择合适的存储结构是很重要的,选项 C正确,选项 B错误,应为本题正确答案。26.有以下程序:#includestudio.h#defme F(X,Y) (X)*(Y)main()int a=3,b=4;printf(“%d/n“,F(a+,b+);程序运行后的输出结果是( )
45、。(分数:1.00)A.12 B.15C.16D.20解析:在程序中先用表达式将宏替换掉,则输出语句中的表达式为(a+)*(b+),而 a+的值为 3,b+的值为 4。因此最后的值为 3*4=12。所以,4 个选项中选项 A符合题意。27.设函数 fun的定义形式为void fun(char ch,float x) 则以下对函数 fun的调用语句中,正确的是( )。(分数:1.00)A.fun(“abc“,3.0);B.t=fun(D,16.5);C.fun(65,2.8);D.fun(32,32); 解析:题目中定义的函数 fun()有两个参数,一个是字符型变量 ch,另一个是浮点型变景 x
46、,函数类型是void即无返回值。选项 A调用 fun的第 1个参数是字符串常量与字符变量不匹配,所以不正确。选项 B是有返回值函数的调用形式,不正确。选项 C的第 1个参数是错误的字符常量,字符常量是用单引号括起来的个字符(是转义字符可能有多个字符),故也不正确。选项 D使用两个整型常量调用 fun这在 C语言中是允许的。因为整型到字符型可以自动转换,整型到浮点型也可以自动转换。故应该选择 D。28.有以下程序:main()int a33,*p.i;p=i9;i+)pi=i;for(i=0;i3;i+)printf(“%d“,a1i);程序运行后的输出结果是( )。(分数:1.00)A.0 1
47、 2B.1 2 3C.2 3 4D.3 4 5 解析:本题中定义的二维数组 a33中 9个元素在内存中的排列顺序是:a00,a01, a02,a10,a11,a12,a20,a21,a22。在主函数中,首先定义了二维数组 a33,然后定义了个指针 p指向数组 a的第 1个元素 a00在第一个 for循环中,依数组 a在内存中的排列顺序为其元素赋从 08 九个值,然后用第二个 for循环依次输出 a10,a11,a12三个元素的值。所以,4 个选项中选项 D符合题意。29.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为( )。(分数:1.00)A.log2nB.n/2C.n D.n+1解析:在长度为 n的线性表中进行顺序查找,最坏情况下需要比较 n次。30.若有以下程序:main()int k=2,i=2,m;m=(k+=i*=k);print f(“%d,%d/n“,m,i);执行后的输出结果是(