1、计算机二级(C)38 及答案解析(总分:3040.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:50,分数:3000.00)1.以下不能正确计算代数式 1/3sin2(1/2)值的 C 语言表达式是【 】。(分数:60.00)A.1/3*sin(1/2)*sin(1/2)B.sin(0.5)*sin(0.5)/3C.pow(sin(0.5),2)/3D.1/3.0*pow(sin(1.0.2),2)2.与十六进制数 200 等值得十进制数为( )。(分数:60.00)A.256B.512C.1024D.20483.以下叙述中错误的是【 】。(分数:
2、60.00)A.可以通过 typedef 增加新的类型B.可以用 typedef 将已存在的类型用一个新的名字来代表C.用 typedef 定义新的类型名后,原有类型名仍有效D.用 typedef 可以为各种类型起别名,但不能为变量起别名4.有以下程序: main() int a=1,b; for(b=1;b=10;b+) if(a=8)break; if(a%21)a+=5;continue; a-=3; printf(“%d/n“,b); 程序运行后的输出结果是【 】。(分数:60.00)A.3B.4C.5D.65.以下叙述中错误的是【 】。(分数:60.00)A.C 语言是一种结构化程序
3、设计语言B.结构化程序由顺序、分支、循环三种基本结构组成C.使用三种基本结构构成的程序只能解决简单问题D.结构化程序设计提倡模块化的设计方法6.有以下程序 main() char S=“abcde“; S+=2; printf(“dn“,s 0); 执行后的结果是【 】。 (分数:60.00)A.输出字符 a 的 ASCII 码B.输出字符 c 的 ASCII 码C.输出字符 cD.程序出错7.在 Windows 环境下,下列叙述中正确的是( )。(分数:60.00)A.在“开始“菜单中可以增加项目,也可以删除项目B.在“开始“菜单中不能增加项目,也不能删除项目C.在“开始“菜单中可以增加项目
4、,但不能删除项目D.在“开始“菜单中不能增加项目,但可以删除项目8.有以下程序 main() int i,S=0,t=l,2,3,4,5,6,7,8,9; for(i=0;iA.45B.20C.25D.369.有以下程序: prt(int*m,int n) int i; for(i=0;in;i+)mi)+; main() int a=1,2,3,4,5,i; prt(a,5); for(i=0;i5;i+) printf(“%d,“,ai); 程序运行后的输出结果是【 】。(分数:60.00)A.1,2,3,4,5,B.2,3,4,5,6,C.3,4,5,6,7,D.2,3,4,5,1,10
5、.有以下程序 main() int a=1,b=3,C=5,*P; int *pl= struct node *next; *p, *q, *r; (分数:60.00)A.r-next=q; q-next=r-next; p-next=r;B.q-next=r-next; p-next=r; r-next=q;C.p-next=r; q-next=r-next; r-next=q;D.q-next=r-next; r-next=q; p-next=r;13.有以下程序 void f(int*q) int i=0; for(;iA.2,2,3,4,5,B.6,2,3,4,5,C.1,2,3,4,
6、5,D.2,3,4,5,6,14.有以下程序: #include main() int n,*P=NULL; *P= prinff(“Input n:“);scanf(“d“, while(i7 i+; printf(“%d/n“,k); 执行后输出的结果是( )。 (分数:60.00)A.58B.56C.45D.2416.有以下程序: main( ) char a,b,c,d; scanf(“%c,%c,%d,%d“, printf(“c,%c,%c,%c/n“,a,b,c,d); 若运行时从键盘上输入:6,5,65,66。则输出结果是( )。(分数:60.00)A.6,5,A,BB.6,5
7、,65,66C.6,5,6,5D.6,5,6,617.有以下程序: void sort(int a ,int n) int i,j,t; for(i=0;in-1;i+=2) for(j=i+2;jn;j+=2) if(aiaj) t=ai;ai=aj;aj=t; main ( ) int aa10=1,2,3,4,5,6,7,8,9,10,i; sort(aa,10); for(i=0;i10;i+) printf(“%d”,aai); printf(“/n”); 其输出结果是( )。 (分数:60.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2
8、,1,C.9,2,7,4,5,6,3,8,1,10,D.1,10,3,8,5,6,7,4,9,2,18.有以下程序 #include main() FILE *fp; int i; char ch=“abcd“,t; fp=fopen(“abc.dat“, “wb+“); for(i=0;iA.dB.cC.bD.a19.在 32 位计算机中,一个字长所占的字节数为( )。(分数:60.00)A.1B.2C.4D.820.有以下程序: #define f(x) x*x main( ) int i; i=f(4+4)/f(2+2); printf(“%d/n”,i); 执行后输出结果是( )。 (
9、分数:60.00)A.28B.22C.16D.421.有以下程序 main() union char ch2; int d; S; S.d=0x4321; printf(“x,xn“,S.ch0,S.ch1); 在 16 位编译系统上,程序执行后的输出结果是【 】。 (分数:60.00)A.21,43B.43,21C.43D.21,0022.下列叙述中正确的是( )。(分数:60.00)A.计算机病毒只感染可执行文件B.计算机病毒只感染文本文件C.计算机病毒只能通过软件复制的方式进行传播D.计算机病毒可以通过网络或读写磁盘方式进行传播23.有以下程序 main( ) int i=1,j=1,k
10、=2; if(j+|k+) 执行后输出的结果是( )。 (分数:60.00)A.1,1,2B.2,2,1C.2,2,2D.2,2,324.有以下程序 #include main() FILE * fp;int k , n,a6=1,2,3,4, 5,6; fp=fopen(“d2.dat“,“W“); fprintf(fp,“dddn“,a0,a1,a2);fprintf(fp,“dddn“,a3,a4,aS); fclose(fp); fp=fopen(“d2.dat“,“r“); fscanf(fp,“dd“,则合法的赋值语句是( )。(分数:60.00)A.p=100;B.p=a5;C.
11、p=a2+2;D.p=a+2;27.数据库系统的核心是【 】。(分数:60.00)A.数据模型B.数据库管理系统C.数据库D.数据库管理员28.与十进制数 200 等值的十六进制数为( )。(分数:60.00)A.A8B.A4C.C8D.C429.有以下程序 main() int x,y,z; x=y=1; Z=X+,Y+,+Y; printf(“d,d,dn“,X,Y,Z); 程序运行后的输出结果是【 】。 (分数:60.00)A.2,3,3B.2,3,2C.2,3,1D.2,2,130.以下不合法的字符常量是【 】。(分数:60.00)A.018B.C.D.xcc31.有以下程序 main
12、(int argc,char * argv) int n=0,i; flor(i=l;iA.12B.12345C.12345678D.13632.设变量已正确定义,则以下能正确计算 f=n!的程序段是【 】。(分数:60.00)A.F=0: for(i=1;i=n;i+) f*=i;B.f=1; for(i=1;in;i+) f*=i;C.f=1; for(i=n;i1;i+)f*=i;D.f=-1; for(i=n;i=2;i-)f*=i;33.在 64 位高档微机中,一个字长所占的二进制位数为( )。(分数:60.00)A.8B.16C.32D.6434.有以下程序: main( ) in
13、t a=7,b=8,*p,*q,*r; p=q= r=p; p=q;q=r; printf(“%d,%d,%d,%d/n“,*p,*q,a,b); 程序运行后的输出结果是( )。 (分数:60.00)A.8,7,8,7B.7,8,7,8C.8,7,7,8D.7,8,8,735.以下选项中合法的实型常数是( )。(分数:60.00)A.5E2.0B.E-3C.0.2D.1.3E36.有以下程序: main( ) int a33,*p,i; p= for(i=0;iA.3B.6C.9D.237.有以下程序 main( ) char a,b,c,*d; a=/; b=/xbc; c=/0xab; d
14、=“/0127“; printf(“%c%c%c%c/n“,a,b,c,*d); 编译时出现错误,以下叙述中正确的是( )。 (分数:60.00)A.程序中只有 a=/;语句不正确B.b=/xbc;语句不正确C.d=“/0127“;语句不正确D.a=/;和 c=/0xab;语句都不正确38.有以下程序,其中u 表示按无符号整数输出 main() unsigned int X=OXIFFF;* X 的初值为十六进制数 * printf(“un“,X); 程序运行后的输出结果是【 】。 (分数:60.00)A.-1B.65535C.32767D.0XFFFF39.设有定义语句 int x6=2,4
15、,6,8,5,7,*p=x,i; 要求依次输出 x 数组 6 个元素中的值,不能完成此操作的语句是( )。 (分数:60.00)A.for(i=0;i1;n-) s=s+1/n; printf(“%6.4f/n“,s); 程序运行后输出结果错误,导致错误结果的程序行是( )。 (分数:60.00)A.s=1.0;B.for(n=10;n1;n-)C.s=s+1/n;D.printf(“%6.4f/n“,s);47.数据的存储结构是指【 】。(分数:60.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示48.有以下程序 mai
16、n( ) int a 3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;iA.7B.6C.8D.无确定值49.有以下程序 int fun(int X,int n) static int sum=0,i; for(i=0;iA.45B.50C.60D.5550.以下程序企图把从终端输入的字符输出到名为 abc.txt 的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。 #include stdio.h main( ) FILE *fout; char ch; fout=fopen(abc.txt,w); ch=fgetc(stdin); while(ch
17、!=#) fputc(ch,fout); ch =fgetc(stdin); fclose(fout); 出错的原因是( )。 (分数:60.00)A.函数 fopen 调用形式有误B.输入文件没有关闭C.函数 fgetc 调用形式有误D.文件指针 stdin 没有定义二、填空题(每空 2 分,共 40 分)(总题数:20,分数:40.00)51.软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于 1 测试。(分数:2.00)填空项 1:_52.已知字符 A 的 ACSII 码值为 65,以下语句的输出结果是 1。 char ch=B; printf(“%c %d/n”,ch,ch)
18、; (分数:2.00)填空项 1:_53.已知字符 A 的 ASCII 码为 65,以下程序运行后的输出结果是 1。 main2 char a,b; a=A+5-3; b=a+6-2; printf(“%d %c/n“,a,b) ; (分数:2.00)填空项 1:_54.以下 sstrcpy1 函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+= 2); main( ) char str1100,str2 =”abcdefgh”; sstrcpy(str1,str
19、2); printf(“%s/n”,str1); (分数:2.00)填空项 1:_55.以下程序运行后的输出结果是 1。 main( ) int x=15; while(x10 x填空项 1:_56.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。 main1 int t=0,s=0,i; for(i=1;i=5;i+)t=i+ 2; s=s+t; printf(“s=%d/n“,s); (分数:2.00)填空项 1:_57.设有定义:int n,* K=n;以下语句将利用指针变量 k 读写变量 n 中的内容,请将语句补充完整。 scanf(“%d“, 1); pri
20、ntf(“%d/n“, 2); (分数:2.00)填空项 1:_58.以下程序的输出结果是 1。 #include main2 char a=1,2,3,4,O; printf(“ddn“,sizeof(a),strlen(a); (分数:2.00)填空项 1:_59.以下程序运行后的输出结果是 1。 main2 int x,a=1,b=2,C=3,d=4; x=(ax)?x:d; printf(“dn“,x); (分数:2.00)填空项 1:_60.以下程序运行后的输出结果是 1。 #define S(x)4*x*x+1 main2 int i=6,j=8; printf(“%d/n“,S(
21、i+j); (分数:2.00)填空项 1:_61.下列程序的运行结果是: 1 #include string.h char *ss(char *s) return s+strlen(s)/2; main( ) char *p,*str=”abcdefgh”; p=ss(str); printf(“%s/n”,p); (分数:2.00)填空项 1:_62.现有两个 C 程序文件 T18.C 和 myfun.C 同在 TC 系统目录(文件夹)下,其中 T18.C 文件如下: #include #include“myfun.c“ main1 fun2;printf(“n“); myfun.C 文件如
22、下: void fun3 char S80,C;int n=0; while(C=getchar4)!=n)Sn+=c; n-; while(n=0)prinff(“C“,sn-); 当编译连接通过后,运行程序 T18 时,输入 Thank!则输出结果是: 5。 (分数:2.00)填空项 1:_63.以下程序的功能是:输出 100 以内(不含 100)能被 3 整除且个位数为 6 的所有整数,请填空。 main1 (int i,j; for(i=0; 2;i+) j=i*10+6; if( 3)continue; printf(“d“,j); (分数:2.00)填空项 1:_64.软件生命周期
23、可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测试属于 1 阶段。(分数:2.00)填空项 1:_65. E-mail 地址由域名和用户名两部分组成,它们之间用分隔,其中在后面的部分是 1。(分数:2.00)填空项 1:_66.假设在当前盘当前目录下有一个可执行程序 USER.EXE。现要执行该程序,并要求在执行过程中将显示输出的结果信息存入当前盘当前目录的文件 OUT.DAT 中,则完整的 DOS 命令为 1。(分数:2.00)填空项 1:_67.假设在当前盘的当前目录下有两个文件 A.TXT 和 B.TXT,现要将文件 B.TXT 合并连接到文件 A.TXT 的后面。若使用
24、TYPE 命令,则完整的命令为 1。(分数:2.00)填空项 1:_68.以下程序的功能是;求出数组 X 中各相邻两个元素的和依次存放到 a 数组中,然后输出。请填空。 main1 int x10,a9,i; for(i=O;i1;n-) s=s+1/n; printf(“%6.4f/n“,s); 程序运行后输出结果错误,导致错误结果的程序行是( )。 (分数:60.00)A.s=1.0;B.for(n=10;n1;n-)C.s=s+1/n; D.printf(“%6.4f/n“,s);解析:47.数据的存储结构是指【 】。(分数:60.00)A.存储在外存中的数据B.数据所占的存储空间量C.
25、数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示 解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。 48.有以下程序 main( ) int a 3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;iA.7 B.6C.8D.无确定值解析:49.有以下程序 int fun(int X,int n) static int sum=0,i; for(i=0;iA.45B.50C.60 D.55解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。Fun(
26、a,5)的值是 15,再次调用后 sum=15,所以 Fun(b,4):45,s=45+15=60。50.以下程序企图把从终端输入的字符输出到名为 abc.txt 的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。 #include stdio.h main( ) FILE *fout; char ch; fout=fopen(abc.txt,w); ch=fgetc(stdin); while(ch!=#) fputc(ch,fout); ch =fgetc(stdin); fclose(fout); 出错的原因是( )。 (分数:60.00)A.函数 fopen 调用形式有
27、误 B.输入文件没有关闭C.函数 fgetc 调用形式有误D.文件指针 stdin 没有定义解析:二、填空题(每空 2 分,共 40 分)(总题数:20,分数:40.00)51.软件测试分为白箱(盒)测试和黑箱(盒)测试。等价类划分法属于 1 测试。(分数:2.00)填空项 1:_ (正确答案:黑箱或黑盒)解析:黑箱测试是根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑箱测试技术分为等价类划分、边界分析、错误猜测以及因果图等。52.已知字符 A 的 ACSII 码值为 65,以下语句的输出结果是 1。 char ch=B; printf(“%c %d/n”
28、,ch,ch); (分数:2.00)填空项 1:_ (正确答案:B 66)解析:53.已知字符 A 的 ASCII 码为 65,以下程序运行后的输出结果是 1。 main2 char a,b; a=A+5-3; b=a+6-2; printf(“%d %c/n“,a,b) ; (分数:2.00)填空项 1:_ (正确答案:67 G)解析:由于“5“和“3“的 ASCII 码相差为 2,所以变量 a 经过运算,得出其值为字符“C“,又因为输出时其形式是“%d“,故输出的值是字符“C“的 ASCII 码,即 67;同理,变量 b 的值等于变量 a 的值加上字符“6“与字符“2“的 ASCII 码的
29、差值,即得到字符“G“,输出时以“%c“的形式输出“G“。 54.以下 sstrcpy1 函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+= 2); main( ) char str1100,str2 =”abcdefgh”; sstrcpy(str1,str2); printf(“%s/n”,str1); (分数:2.00)填空项 1:_ (正确答案:*t+)解析:55.以下程序运行后的输出结果是 1。 main( ) int x=15; while(x10
30、x填空项 1:_ (正确答案:17)解析:56.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。 main1 int t=0,s=0,i; for(i=1;i=5;i+)t=i+ 2; s=s+t; printf(“s=%d/n“,s); (分数:2.00)填空项 1:_ (正确答案:t*10)解析:本程序中变量 s 用于存放表达式“1+12+123+1234+12345“之和变量 t 用于存放其表达式的各项,由于i=1 时,要使得 t=1;i=2 时,要使得 t=12;i=3 时,要使得 t=123;依此类推。故每一次循环的 t 的值与此次的 i 及上次的 t 密切
31、相关,即每一次的 t 值可用上次的 t 乘以 10 再加上此次的 i 的值就可以了,所以本题答案为 t*10。 57.设有定义:int n,* K=n;以下语句将利用指针变量 k 读写变量 n 中的内容,请将语句补充完整。 scanf(“%d“, 1); printf(“%d/n“, 2); (分数:2.00)填空项 1:_ (正确答案:k)解析:在语句 int n,* k=n;中,变量 k 中存放的是 n 的存储地址,* k 表示变量 n 中的值。58.以下程序的输出结果是 1。 #include main2 char a=1,2,3,4,O; printf(“ddn“,sizeof(a),
32、strlen(a); (分数:2.00)填空项 1:_ (正确答案:5 4)解析:字符串处理函数 strlen-|_|-返回的是字符数组的实际长度,不包括字符串结束标志0。而 sizeof 运算符则计算的是字符数组的总长度,包括串末尾的结束标志。59.以下程序运行后的输出结果是 1。 main2 int x,a=1,b=2,C=3,d=4; x=(ax)?x:d; printf(“dn“,x); (分数:2.00)填空项 1:_ (正确答案:1)解析:因为在条件表达式(a=0)prinff(“C“,sn-); 当编译连接通过后,运行程序 T18 时,输入 Thank!则输出结果是: 5。 (分
33、数:2.00)填空项 1:_ (正确答案:!knahT)解析:此程序是一道次序颠倒题,即输入“Thank!“,则输出“!knahT“。63.以下程序的功能是:输出 100 以内(不含 100)能被 3 整除且个位数为 6 的所有整数,请填空。 main1 (int i,j; for(i=0; 2;i+) j=i*10+6; if( 3)continue; printf(“d“,j); (分数:2.00)填空项 1:_ (正确答案:i解析:(j=i*10+6)64.软件生命周期可分为多个阶段,一般分为定义阶段、开发阶段和维护阶段。编码和测试属于 1 阶段。(分数:2.00)填空项 1:_ (正确
34、答案:开发)解析:软件生命周期(SDILC,软件生存周期)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,其中的编码和测试属于开发阶段。65. E-mail 地址由域名和用户名两部分组成,它们之间用分隔,其中在后面的部分是 1。(分数:2.00)填空项 1:_ (正确答案:域名)解析:66.假设在当前盘当前目录下有一个可执行程序 USER.EXE。现要执行该程序,并要求在执行过程中将显示输出的结果信息存入当前盘当前目录的文件 OUT.DAT 中,则完整的 DOS 命令为 1。(分数:2.00)填空项 1:_
35、(正确答案:USEROUT.DAT)解析:67.假设在当前盘的当前目录下有两个文件 A.TXT 和 B.TXT,现要将文件 B.TXT 合并连接到文件 A.TXT 的后面。若使用 TYPE 命令,则完整的命令为 1。(分数:2.00)填空项 1:_ (正确答案:TYPE B.TXT A.TXT)解析:68.以下程序的功能是;求出数组 X 中各相邻两个元素的和依次存放到 a 数组中,然后输出。请填空。 main1 int x10,a9,i; for(i=O;i10;i+)scanf(“d“, for(i=O;i填空项 1:_ (正确答案:i=1)填空项 1:_ (正确答案:xi-1)解析:对于
36、l0 个数,相临的两个数相加取和,总共要进行 9 次加法运算。所以空 14 处应填入 i-1。相临的两个数相加取和,放在数组 a 中,x0与 x1的和存放在 a0中。所以空 15 处应填入 xi-1。69.设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便可以向文本文件 readme.txt 的最后续写内容。fw=fopen(“readme.txt“, 1);(分数:2.00)填空项 1:_ (正确答案:“a“)解析:本题考查的是文件的打开方式。要向文本文件的末尾续写内容,需要使用方式“a“(追加)打开文件。70.以下程序的功能是:将输入的正整数按逆序输出。例如:若输入 135 则输出 531。请填空。 #include main1 int n,s; prinff(“Enter a number:“);scanf(“d“,&n); printf(“output: “); do S=n10;printf(“d“,s). 2; while(n!=O); printf(“n“); (分数:2.00)填空项 1:_ (正确答案:n=l0 或 n=n/10)解析:每次循环把 n 除以 10 所得的商赋给 n。