【计算机类职业资格】二级C语言分类模拟题570及答案解析.doc

上传人:rimleave225 文档编号:1325599 上传时间:2019-10-17 格式:DOC 页数:15 大小:70KB
下载 相关 举报
【计算机类职业资格】二级C语言分类模拟题570及答案解析.doc_第1页
第1页 / 共15页
【计算机类职业资格】二级C语言分类模拟题570及答案解析.doc_第2页
第2页 / 共15页
【计算机类职业资格】二级C语言分类模拟题570及答案解析.doc_第3页
第3页 / 共15页
【计算机类职业资格】二级C语言分类模拟题570及答案解析.doc_第4页
第4页 / 共15页
【计算机类职业资格】二级C语言分类模拟题570及答案解析.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、二级 C 语言分类模拟题 570 及答案解析(总分:42.50,做题时间:90 分钟)一、选择题(总题数:30,分数:42.50)1.设有以下说明语句: struct ex int x; float y; char z; example; 则下面的叙述中,不正确的是_。(分数:2.50)A.struct 是结构体类型的关键字B.example 是结构体类型名C.x,y,z 都是结构体成员名D.structex 是结构体类型名2.有以下程序(注:字母 A 的 ASCII 码值是 65) #include stdio.h void fun(char *s) while(*s) if(*s%2) p

2、rintf(“%c“,*s); s+; main() char a=“BYTE“; fun(a); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YTB.BTC.YED.BY3.以下叙述中错误的是_。(分数:1.00)A.用户定义的函数中可以没有 return 语句B.用户定义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式4.有以下程序: #includestdio.h main() char s=“rstuv“;

3、printf(“%c/n“, *s+2); 程序运行后的输出结果是_。(分数:1.00)A.tuvB.字符 t 的 ASCII 码值CtD.出错5.有以下程序 #includestdio.h main() int i,j,m=1; for(i=1;i3;i+) for(j=3;j0;j-) if(i*j3)break; m*=i*j; printf(“m=%d/n“,m); 程序运行后的输出结果是_。(分数:1.00)A.m=4B.m=2C.m=6D.m=56.下列程序段的输出结果是 int n=“c“; switch(n+) default: printf(“error“);break; c

4、ase “a“: case “A“: case “b“: case “B“: printf(“good“);break; case “c“: case “C“: printf(“pass“); case “d“: case “D“: printf(“warn“); (分数:1.00)A.passwarnB.passerrorC.goodpasswarnD.pass7.下面程序段的运行结果是( )。 char a=“abcdefgh“; char *p=a; p+=3; printf(“%d/n“,strlen(strcpy(p,“ABCD“);(分数:1.00)A.8B.12C.4D.78.有

5、以下程序: #includestdio.h main() int a1,a2;char c1,c2; scanf(“%d%c%d%c“, printf(“%d,%c,%d,%c“,a1,c1,a2,c2); 若想通过键盘输入,使得 a1 的值为 12,a2 的值为 34,c1 的值为字符 a,c2 的值为字符 b,程序运行后的输出结果是:12,a,34,b。则正确的输入格式是(以下 代表空格,CR代表回车)_。 A B (分数:1.00)A.B.C.D.9.有以下程序 #includestdio.h int f(int x); main() int a,b=0; for(a=0;a3;a+=1

6、) b+=f(a);putchar(“A“+b); int f(int x) ( return x*x+1; 程序运行后输出结果是_。(分数:2.00)A.BDIB.BCDC.ABED.BCF10.有以下程序 #include stdio.h void fun(int a,int n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; main() int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i8;i+) printf(“%d“,ki); printf(“/n“); 程序的运行结果是_。

7、(分数:1.00)A.321678B.876543C.1098765D.34567811.有以下函数: int aaa(char*s) char*t=s; while(*t+); t-; return(t-s); 以下关于 aaa 函数功能叙述正确的是_。(分数:1.00)A.将串 s 复制到串 tB.比较两个串的大小C.求字符串 s 的长度D.求字符串 s 所占字节数12.有以下计算公式 (分数:1.00)A.if(x=0) y=sqrt(x);else y=sqrt(-x);B.y=sqrt(x);if(x0) y=sqrt(-x);C.if(x=0) y=sqrt(x);if(x0) y

8、=sqrt(-x);D.y=sqrt(x=0 x:-x);13.若有以下函数首部 int fun(double x10, int*n) 则下面针对此函数的函数声明语句中正确的是_。(分数:2.00)A.int fun(double *, int*);B.int fun(double, int);C.int fun(double *x, int n);D.int fun(double x, int*n);14.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式15.有以下程序: # include stdio.h main() int a,b,k,m,*

9、p1,*p2; k=1,m=8; p1=k,p2=m; a=/*p1-m;b=*p1+*p2+6; printf(“%d“,a); printf(“%d/n“,b); 编译时编译器提示错误信息,你认为出错的语句是_。(分数:1.00)A.a=/*p1-m;B.b=*p1+*p2+6;C.k=1,m=8;D.p1=k,p2=m;16.计算机能直接执行的程序是_。(分数:2.00)A.源程序B.目标程序C.汇编程序D.可执行程序17.设有以下语句 int a=1, b=2, c; c=a(b2); 执行后,c 的值为_。(分数:2.00)A.9B.7C.8D.618.C 语言中,下列不合法的字符常

10、量是_。(分数:1.00)A.“/xff“B.“/65“C.“ int i; scanf(“% d“, for(i=1; i3; i+) a0=a0+ai; printf(“a0=% d/n“, a0); (分数:2.50)A.3B.6C.7D.420.一棵二叉树共有 25 个结点,其中 5 个是叶子结点,则度为 1 的结点数为_。(分数:1.00)A.16B.10C.6D.421.以下选项中,与 k=n+完全等价的表达式是_。(分数:1.00)A.k=n, n=n+1B.n=n+1, k=nC.k=+nD.k+=n+122.以下选项中可用作 C 语言中合法用户标识符的是_。(分数:1.00)

11、A._123B.voidC.-abcD.2a23.有以下程序: #includestdio.h int func(int, int); main() int k=4, m=1, p; p=func(k, m); printf(“%d, “, p); p=func(k, m); printf(“%d/n“, p); int func(int a, int b) static int m, i=2; i+=m+1; m=i+a+b; return(m); 程序运行后的输出结果是(分数:1.00)A.8,17B.8,16C.8,20D.8,824.请阅读以下程序: #includestdio.h m

12、ain() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0:a+;break; case 2: a+,b+;break; printf(“a=%d,b=%d/n“,a,b); 上面程序的输出结果是(分数:1.00)A.a=2,b=1B.a=1,b=1C.a=1,b=0D.a=2,b=225.若有以下定义和语句: int a=010,b=0x10,c=10; printf(“%d,%d,%d/n“,a,b,c); 则输出结果是_。(分数:2.00)A.8,10,10B.10,10,10C.8,8,10D.8,16,1026.有以下程

13、序 #includestdio.h int fun(int n) if(n) return fun(n-1)+n; else return 0; main() printf(“%d/n“, fun(3); 程序的运行结果是(分数:2.00)A.4B.5C.6D.727.设有以下说明,则不正确的叙述是_。 union un int a; char b; float c; arr;(分数:2.50)A.arr 所占的内存长度等于成员 c 的长度B.arr 的地址和它的各成员的地址都是同一地址C.arr 可以作为函数参数D.不能在定义 arr 时对它初始化28.有以下程序(注:字符 a 的 ASCI

14、I 码值为 97): #include stdio.h main( ) char *s=“abc“; do printf(“%d“, *s%10); +s; while(*s); 程序运行后的输出结果是_。(分数:2.00)A.789B.abcC.7890D.97989929.以下选项中,合法的实数是_。(分数:1.00)A.1.5E2B.E1.1C.2.10ED.1.9E1.430.以下叙述中正确的是_。(分数:2.00)A.如果根据算法需要使用无限循环(即通常所称的“死循环”),则只能使用 while 语句B.对于“for(表达式 1;表达式 2;表达式 3)循环体”首先要计算表达式 2

15、的值,以便决定是否开始循环C.对于“for(表达式 1;表达式 2;表达式 3)循环体”,只在个别情况下才能转换成 while 语句D.只要适当地修改代码,就可以将 do-while 与 while 相互转换二级 C 语言分类模拟题 570 答案解析(总分:42.50,做题时间:90 分钟)一、选择题(总题数:30,分数:42.50)1.设有以下说明语句: struct ex int x; float y; char z; example; 则下面的叙述中,不正确的是_。(分数:2.50)A.struct 是结构体类型的关键字B.example 是结构体类型名 C.x,y,z 都是结构体成员名

16、D.structex 是结构体类型名解析:2.有以下程序(注:字母 A 的 ASCII 码值是 65) #include stdio.h void fun(char *s) while(*s) if(*s%2) printf(“%c“,*s); s+; main() char a=“BYTE“; fun(a); printf(“/n“); 程序运行后的输出结果是_。(分数:1.00)A.YTB.BTC.YE D.BY解析:解析 fun 函数输出 ASCII 码值为奇数的字符,所以答案选择 C。3.以下叙述中错误的是_。(分数:1.00)A.用户定义的函数中可以没有 return 语句B.用户定

17、义的函数中可以有多个 return 语句,以便可以调用一次返回多个函数值 C.用户定义的函数中若没有 return 语句,则应当定义函数为 void 类型D.函数的 return 语句中可以没有表达式解析:解析 本题重点考察函数返回值的相关知识,函数的值只能通过 return 语句返回主调函数,在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void。因此 B 选项正确。4.有以下程序: #includestdio.h main() char s=“rstuv“; pri

18、ntf(“%c/n“, *s+2); 程序运行后的输出结果是_。(分数:1.00)A.tuvB.字符 t 的 ASCII 码值Ct D.出错解析:解析 本题中,语句 printf 函数输出的是字符指针 s 所指变量的 ASCII 表对应值,即 ASCII 表中值为 s0+2 的字符。所以选 C。5.有以下程序 #includestdio.h main() int i,j,m=1; for(i=1;i3;i+) for(j=3;j0;j-) if(i*j3)break; m*=i*j; printf(“m=%d/n“,m); 程序运行后的输出结果是_。(分数:1.00)A.m=4B.m=2C.m

19、=6 D.m=5解析:解析 第一次外循环 i 的值为 1,第一次内循环 j 的值为 3,不满足条件,则执行 m*=i*j,即 m的值为 3;第二次泊勺值为 2,不满足条件,则执行 m*=i*j,即 m 的值为 6;第三次 j 的值为 1,不满足条件,则执行 m*=i*j,即 m 的值仍为 6。第二次外循环 i 的值为 2,j 的值为 3,满足条件,执行 break语句,跳出循环。故本题答案为 C。6.下列程序段的输出结果是 int n=“c“; switch(n+) default: printf(“error“);break; case “a“: case “A“: case “b“: ca

20、se “B“: printf(“good“);break; case “c“: case “C“: printf(“pass“); case “d“: case “D“: printf(“warn“); (分数:1.00)A.passwarn B.passerrorC.goodpasswarnD.pass解析:解析 本题的考查点是 switch()语句。当用户输入的字符时,会进入一个多分支选择语句,根据n 的值,来确定下一步执行的选择语句;最后的结果应当为 passwarn。本题需要注意的是,当 case 语句没有跟随 break 语句时,不会跳出 switch,而是继续执行下一个 case

21、语句,直至遇到 break 语句。7.下面程序段的运行结果是( )。 char a=“abcdefgh“; char *p=a; p+=3; printf(“%d/n“,strlen(strcpy(p,“ABCD“);(分数:1.00)A.8B.12C.4 D.7解析:解析 p 被定义为指针型变量,指向字符数组 a 的首地址。执行 p+=3;指针后移 3 位,指向d。strcpy(p,“ABCD“)将字符串 “ABCD“(连同“/0“)复制到 p 所指向的地址单元中,strlen()函数计算 p 所指向的字符串的长度,返回字符串中字符的个数(不计“/0“),返回值为字符串“ABCD“中字符的个

22、数 4。8.有以下程序: #includestdio.h main() int a1,a2;char c1,c2; scanf(“%d%c%d%c“, printf(“%d,%c,%d,%c“,a1,c1,a2,c2); 若想通过键盘输入,使得 a1 的值为 12,a2 的值为 34,c1 的值为字符 a,c2 的值为字符 b,程序运行后的输出结果是:12,a,34,b。则正确的输入格式是(以下 代表空格,CR代表回车)_。 A B (分数:1.00)A.B.C.D. 解析:解析 在输入多个数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。所以应按选项 D 的顺序输入数据。

23、9.有以下程序 #includestdio.h int f(int x); main() int a,b=0; for(a=0;a3;a+=1) b+=f(a);putchar(“A“+b); int f(int x) ( return x*x+1; 程序运行后输出结果是_。(分数:2.00)A.BDI B.BCDC.ABED.BCF解析:解析 第一次循环,b 为 1,输出为 B,第二次循环 b 为 3,输出为 D,第三次循环 b 为 8,输出为I,所以选择 A。10.有以下程序 #include stdio.h void fun(int a,int n) int i,t; for(i=0;i

24、n/2;i+) t=ai;ai=an-1-i;an-1-i=t; main() int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i8;i+) printf(“%d“,ki); printf(“/n“); 程序的运行结果是_。(分数:1.00)A.321678 B.876543C.1098765D.345678解析:解析 本题中,函数 fun()的功能是将数组 k 中前 5 个元素倒序,因此返回后数组 k 中的元素排列是“5,4,3,2,1,6,7,8,9,10”。程序打印输出 k2到 k7元素的值,即 321678,所以选择 A。11.有以下

25、函数: int aaa(char*s) char*t=s; while(*t+); t-; return(t-s); 以下关于 aaa 函数功能叙述正确的是_。(分数:1.00)A.将串 s 复制到串 tB.比较两个串的大小C.求字符串 s 的长度 D.求字符串 s 所占字节数解析:解析 本题重点考察的知识点 while 循环语句的应用。aaa()函数中,首先定义了一个字符指针 t指向形参 s,然后通过一个 while 循环让指针 t 不断递增,直到 t 指向字符串结束标识处。当 t 指向结束标识处时,由于后缀+运算符的原因,它还会被再递增 1,所以接下来的 t-;语句让它回到结束标识处。最后

26、返回 t-s,s 还是指向字符串第 1 个字符处,而 t 指向了字符串结尾,故返回值为字符串的长度值。因此 C 选项正确。12.有以下计算公式 (分数:1.00)A.if(x=0) y=sqrt(x);else y=sqrt(-x);B.y=sqrt(x);if(x0) y=sqrt(-x); C.if(x=0) y=sqrt(x);if(x0) y=sqrt(-x);D.y=sqrt(x=0 x:-x);解析:解析 应该先判断 x 是正数还是负数,然后再调用 sqrt 函数,B 选项开始没有判断,所以 B 错误。13.若有以下函数首部 int fun(double x10, int*n) 则

27、下面针对此函数的函数声明语句中正确的是_。(分数:2.00)A.int fun(double *, int*); B.int fun(double, int);C.int fun(double *x, int n);D.int fun(double x, int*n);解析:解析 本题考查的是函数的声明。函数声明的一般形式为: 函数类型 函数名(参数类型 1,参数名 1,参数类型 2,参数名 2); 其中,参数名可以省略。本题中的 fun 函数有两个参数,一个类型是 double 型的一维数组,另一个是int 型的指针。而在 C 语言中,一维数组用作函数参数和该数组元素的指针类型是等价的。所以

28、本题的正确答案是选项 A。14.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式 解析:解析 数据库系统的三级模式是概念模式、外模式和内模式,不包括数据模式,因此选择 D。15.有以下程序: # include stdio.h main() int a,b,k,m,*p1,*p2; k=1,m=8; p1=k,p2=m; a=/*p1-m;b=*p1+*p2+6; printf(“%d“,a); printf(“%d/n“,b); 编译时编译器提示错误信息,你认为出错的语句是_。(分数:1.00)A.a=/*p1-m; B.b=*p1+*p2+6;C

29、.k=1,m=8;D.p1=k,p2=m;解析:解析 本题考查指针,p1=k 表示 p 指向 k 的地址,则*p=k,依次类推,在对指针进行赋值时没有错误。a=/*p+m 赋值,在 C 语言中“/*”表示注释,所以答案选择 A。16.计算机能直接执行的程序是_。(分数:2.00)A.源程序B.目标程序C.汇编程序D.可执行程序 解析:解析 计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe,所以选择 D 选项。17.设有以下语句 int a=1, b=2, c; c=a(b2); 执行后,c 的值为_。(分数:2.00)A.9 B.7C.8D.6解析:解析 b 为 2,二进制为 00

30、000010,执行左移两位操作后为 00001000,然后与 a 00000001 做异或操作,结果为 00001001,即十进制的 9,因此 A 选项正确。18.C 语言中,下列不合法的字符常量是_。(分数:1.00)A.“/xff“B.“/65“C.“ int i; scanf(“% d“, for(i=1; i3; i+) a0=a0+ai; printf(“a0=% d/n“, a0); (分数:2.50)A.3B.6C.7D.4 解析:解析 本题考查了一维数组的定义、初始化及元素的引用方法。第 4 行代码 scanf 输入数据时,要求输入项为地址,而数组名即为数组的首地址,所以不应该

31、再在前面加取地址符号 main() int k=4, m=1, p; p=func(k, m); printf(“%d, “, p); p=func(k, m); printf(“%d/n“, p); int func(int a, int b) static int m, i=2; i+=m+1; m=i+a+b; return(m); 程序运行后的输出结果是(分数:1.00)A.8,17 B.8,16C.8,20D.8,8解析:24.请阅读以下程序: #includestdio.h main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y

32、) case 0:a+;break; case 2: a+,b+;break; printf(“a=%d,b=%d/n“,a,b); 上面程序的输出结果是(分数:1.00)A.a=2,b=1 B.a=1,b=1C.a=1,b=0D.a=2,b=2解析:解析 考查 switch 语句的使用。 解题要点 switch 语句的执行过程为:进入 switch 结构舌,对条件表达式进行运算,然后从上至下去找与条件表达式直相匹配的 case,以此作为入口,执行 switch 结构中后面的各吾句,直到遇到 break 语句,则跳出 switch 语句,如果各 case 都不匹配时,则执行 default 后

33、面的语句。 考点链接 if 语句及 if 嵌套语句的使用。25.若有以下定义和语句: int a=010,b=0x10,c=10; printf(“%d,%d,%d/n“,a,b,c); 则输出结果是_。(分数:2.00)A.8,10,10B.10,10,10C.8,8,10D.8,16,10 解析:26.有以下程序 #includestdio.h int fun(int n) if(n) return fun(n-1)+n; else return 0; main() printf(“%d/n“, fun(3); 程序的运行结果是(分数:2.00)A.4B.5C.6 D.7解析:27.设有以

34、下说明,则不正确的叙述是_。 union un int a; char b; float c; arr;(分数:2.50)A.arr 所占的内存长度等于成员 c 的长度B.arr 的地址和它的各成员的地址都是同一地址C.arr 可以作为函数参数 D.不能在定义 arr 时对它初始化解析:解析 本题主要考查联合体的内存使用:联合体所占用的内存空间为最长的成员所占用的空间,int 占 2 个字节,char 占 1 个字节,float 占 4 个字节,所以 arr 所占的内存长度等于成员 c 的长度;arr 的地址和它的各成员的地址都是同一地址;不能直接对 arr 赋值,即不能在定义 arr 时对它

35、初始化;arr 也不可以作为函数参数。28.有以下程序(注:字符 a 的 ASCII 码值为 97): #include stdio.h main( ) char *s=“abc“; do printf(“%d“, *s%10); +s; while(*s); 程序运行后的输出结果是_。(分数:2.00)A.789 B.abcC.7890D.979899解析:解析 因为小写字符 a、b、c 的 ASCII 的值分别为 97、98、99,而在 do while 循环语句中,每次对字符的 ASCII 的值取余数并输出,所以分别输出 7、8、9。29.以下选项中,合法的实数是_。(分数:1.00)A

36、.1.5E2 B.E1.1C.2.10ED.1.9E1.4解析:解析 E 表示“10 的幂次”,E 的右侧必须是整数,排除 B、C、D 选项,答案为 A 选项。30.以下叙述中正确的是_。(分数:2.00)A.如果根据算法需要使用无限循环(即通常所称的“死循环”),则只能使用 while 语句B.对于“for(表达式 1;表达式 2;表达式 3)循环体”首先要计算表达式 2 的值,以便决定是否开始循环C.对于“for(表达式 1;表达式 2;表达式 3)循环体”,只在个别情况下才能转换成 while 语句D.只要适当地修改代码,就可以将 do-while 与 while 相互转换 解析:解析 do-while 与 whlile 可以相互转换,所以选择 D。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1