欢迎来到麦多课文档分享! | 帮助中心 海量文档,免费浏览,给你所需,享你所想!
麦多课文档分享
全部分类
  • 标准规范>
  • 教学课件>
  • 考试资料>
  • 办公文档>
  • 学术论文>
  • 行业资料>
  • 易语言源码>
  • ImageVerifierCode 换一换
    首页 麦多课文档分享 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    【计算机类职业资格】国家二级(C语言)机试模拟试卷138及答案解析.doc

    • 资源ID:1334728       资源大小:85KB        全文页数:14页
    • 资源格式: DOC        下载积分:5000积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    二维码
    微信扫一扫登录
    下载资源需要5000积分(如需开发票,请勿充值!)
    邮箱/手机:
    温馨提示:
    如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如需开发票,请勿充值!如填写123,账号就是123,密码也是123。
    支付方式: 支付宝扫码支付    微信扫码支付   
    验证码:   换一换

    加入VIP,交流精品资源
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    【计算机类职业资格】国家二级(C语言)机试模拟试卷138及答案解析.doc

    1、国家二级(C 语言)机试模拟试卷 138 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.在下列数据结构中,支持子程序调用的是( )。(分数:2.00)A.循环队列B.树C.栈D.二叉树2.关于计算机栈和队列的叙述中正确的是( )。(分数:2.00)A.栈是“先进先出”的线性表B.队列是“先进后出”的线性表C.循环队列是非线性结构D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构3.设二叉树中度为 2 的节点有 8 个,则叶子节点数是( )。(分数:2.00)A.10B.8C.6D.94.下列排序方法中,最坏情况下比较次数最少的是(

    2、 )。(分数:2.00)A.堆排序B.简单选择排序C.直接插入排序D.冒泡排序5.计算机软件通常分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是( )。(分数:2.00)A.编译程序B.操作系统C.图书借阅系统D.汇编程序6.关于软件测试和调试的叙述中错误的是( )。(分数:2.00)A.软件测试的目的是发现错误并改正错误B.对被调试的程序进行“错误定位”是程序调试的必要步骤C.程序调试通常也称为 DebugD.软件测试应严格执行测试计划,排除测试的随意性7.关于耦合性和内聚性的叙述中正确的是( )。(分数:2.00)A.提高耦合性降低内聚性有利于提高模块的独立性B.降低耦

    3、合性提高内聚性有利于提高模块的独立性C.耦合性是指一个模块内部各个元素间彼此结合的紧密程度D.内聚性是指模块间互相连接的紧密程度8.计算机数据库管理系统中的核心问题是( )。(分数:2.00)A.数据库管理B.数据库设计C.数据库维护D.数据库管理员培训9.有两个关系 R、S 如下: (分数:2.00)A.并B.投影C.插入D.自然连接10.软件设计过程中的 E 一 R 图转换为关系时,其中的实体和联系都可以表示为( )。(分数:2.00)A.属性B.键C.关系D.域11.关于程序设计结构的叙述中错误的是( )。(分数:2.00)A.结构化程序设计提倡模块化的设计方法B.结构化程序由顺序、分支

    4、、循环三种基本结构组成C.C 语言是一种结构化程序设计语言D.使用三种基本结构构成的程序只能解决简单问题12.以下四个程序中,完全正确的是( )。(分数:2.00)A.#includestdioh main(); *programming pfintf(programming!n);B.#includestdioh main() *programming* pfintf(programming!n);C.#includestdioh main() *programming* pfintf(programming!n);D.includestdioh main() *programming* p

    5、fintf(programming!n);13.设 int x=5,则表达式 x 一=x+x 的值为( )。(分数:2.00)A.0B.一 10C.一 5D.514.C 程序中合法的用户标识符的是( )。(分数:2.00)A._0_B.1_aC.intD.unsigned15.下列规格的数在 C 语言源程序中不合法的是( )。(分数:2.00)A.十进制B.八进制C.十六进制D.二进制16.有以下程序: #include main() intx=10,y=5; printf(d,y=x+y); printf(dn,x=2*y); 程序运行后的输出结果是( )。(分数:2.00)A.15,30B

    6、.10,30C.5,10D.5,1517.有以下程序: #include main() int al,a2;char c1,c2; scanf(dcdc,&a1,&e1,&a2,&c2); printf(d,d,c,c,a1,a2,c1,c2); 若想通过键盘输入,使得输出结果是:12,34,a,b。则正确的输入格式是(以下代表空格,代表回车)( )。(分数:2.00)A.12a34bCRB.12a34bCRC.12,a,34,bCRD.12a34bCR18.关于分支语句 if(E)printf(dn,k);中,不可以替代 E 的表达式是( )。(分数:2.00)A.ab+c B.ch=get

    7、char()C.a=b+cD.a+解析:解析:在数学上有时候会使用表示不等于,但在 C 语言中没有这种表达方式,所以 A 的表达式有误,其它选项均可以替代 E,用来进行条件判断。19.有以下程序段: #include main() int a,b,c; a=10;b=20;c=30; if(ab)a=b,b=c;c=a; printf(a=d b=d c=dn,a,b,c); 程序运行后的输出结果是( )。(分数:2.00)A.a=10 b=20 c=30B.a=10 b=20 c=10 C.a=10 b=30 c=10D.a=20 b=30 c=20解析:解析:此题结合 if 语句考查逗号表

    8、达式。if 语句后面只执行一个语句,即以分号结束的一个语句。或用大括号包围的多条语句,此题中 if 后面是一个逗号表达式,若 if 条件为真,则执行此逗号语句,本题中 if 条件为假,所以此逗号表达式不会执行,所以程序将只执行 c=a;这一句,所以 a 和 b 的值没有发生变化。20.关于 switch 语句的叙述正确的是( )。(分数:2.00)A.在 switch 语句中,不一定使用 break 语句 B.在 switch 语句中必须使用 defaultC.break 语句只能用于 switch 语句D.switch 语句中,必须使用 break 语句解析:解析:break 用于跳出 sw

    9、itch 分支语句,若不使用 break 语句将继续执行此分支语句后面的分支语句,因此,不使用 break 语句不会出现语法错误,也不一定必须使用 break 语句,break 语句除了在switch 语句中使用外,也可以用于跳出循环语句,所以 A 正确,C、D 不正确。default 语句也不是必需的。21.下列选项中,不会出现无限循环的是( )。(分数:2.00)A.for(n=0,i=3;i+)n+=i;B.n=0; while(1);n 一一;C.n=1; while(n);n 一=2;D.n=一 3; do+n;while(n0); 解析:解析:无限循环是指循环变量一直为真的情况。选

    10、项 A 中没有条件判别式,注意前面两个赋值语句中间是逗号,两个分号中间为空,所以会出现无限循环;选项 B 中的 while 条件变量是恒为真的常量,选项 C 看似循环变量 n 会在循环体内通过减操作成为负数,但注意到 while(n)后面紧跟的分号,此分号代表一个空语句,因此也是无限循环;只有 D 选项中会正常结束循环。22.有以下程序: #include main() int s=5,i; for(i=1;i3;i+) switch(i) default:s+=i; case 2:s+;break; case 4:s+=2;break; printf(dn,s); 程序运行后的输出结果是(

    11、)。(分数:2.00)A.7B.8 C.9D.10解析:解析:在 switch 语句中一般会将 default 语句放在最后,作为最后一个分支,所以通常后面不会跟 break 语句,但本题中将 default 放在了最前面,所以其后要跟 break 才不会出现误操作,但本题中没有 break,所以要仔细分析。for 循环只执行 2 次,第 1 次 i=1,此时执行 switch 语句中的 default 语句。但因为后面没有 break 语句,所以会继续执行 case 2 语句,并在碰到其后的 break 语句后跳出 switch 语句,此时 s=7;当执行第 2 次 for 循环是。i=2,

    12、此时只执行 s+一句,所以结果是 s=8。23.有以下程序: #include int fun(int x,int y) return(2*x*y); main() int a=1,b=2,c=3,d; d=fun(fun(a,b),fun(a,c); printf(dn,d); 程序运行后的输出结果是( )。(分数:2.00)A.12B.24C.48 D.36解析:解析:子函数的功能比较简单,此题主要考查主函数的多次调用,fun(1,2)=4,fun(1,3)=6,所以最后结果是 fun(4,6)=2*4*6=48。24.设 double x,y,*px=&x,*py=&y;则正确的输入语句

    13、是( )。(分数:2.00)A.scanf(lflf,px,Py); B.scanf(ff&x,&y);C.scanf(ff,x,y);D.scanf(lflf,x,y);解析:解析:double 型数据的输入格式是lf,接收输入的应该是变量的地址,所以 B、C、D 有误。25.关于 double a,*p=&a;的叙述中错误的是( )。(分数:2.00)A.定义语句中的&是一个地址运算符B.定义语句中的*是一个指针变量说明符C.定义语句中的 P 可以存放 double 以外数据类型变量的地址 D.定义语句中的*p=&a 把变量 a 的地址作为初值赋给指针变量 p解析:解析:指针变量在定义时便

    14、指定了其类型,本题中 double*p 的定义,说明 p 只能存放 double 类型变量的地址。其他选项正确。26.C 语言中的数组定义语句中不正确的是( )。(分数:2.00)A.int a3=1,2,3,4,5,6;B.int a241=1,2,3,4,5,6; C.int a=1,2,3,4,5,6;D.int a4=1,2,3,4,5,6;解析:解析:定义数组时一维数组可以不指定列数,二维数组可以不指定行数,系统将根据输入的数据来决定,但如果指定了具体的行列数,赋值时就必须按照行列数输入,选项 B 定义了 2 行但输入却是 3 行,所以错误。27.有以下程序: #include vo

    15、id ex(int a,int b) int t; t=a;a=b;b=t; main( ) int c8=8,7,6,5,4,3,2,1,i; for(i=0;i8;i+=2)ex(ci,ci+1); for(i=0;i8;i+)printf(d,ei); printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.1,2,3,4,5,6,7,8B.2,1,4,3,6,5,8,7C.8,7,6,5,4,3,2,1 D.7,8,5,6,3,4,1,2解析:解析:子函数的功能是进行数据交换,但注意到形参是值传递,所以不会影响实参的值,因此,数组的值不会发生变化。28.有以下程序:

    16、#include main() int x32=0,i; for(i=0;i3;i+)scanf(d,xi);printf(3d3d3dn,x00,x10,x11); 若运行时输入:1 3 5,则输出结果为( )。(分数:2.00)A.1 0 3B.1 0 0C.1 3 0 D.1 3 5解析:解析:数组赋初值后各元素的值均为 0,scanf 中接收输入的地址是 xi,所以输入的 1,3,5 分别赋给了 x00,x10,x20,因此输出的结果是 1 3 0。29.有以下程序段: #include int x;float y;char s10; scanf(3dfs,&x,&y,name);当执

    17、行上述程序段,从键盘上输入 12345 568Tom 后,y 的值为( )。(分数:2.00)A.450 B.5680C.455680D.4505680解析:解析:scanf 输入时是严格按照格式接收数据的,3d 只接收 3 位整数作为 x 的值,所以 y 的值是45,因为后面有个空格将会作为 s 的值,s 的值是 568Tom。30.下列语句组中正确的是( )。(分数:2.00)A.char*s;s=Chinese;B.char s 7;s=Chinese;C.char*s;s=Chinese; D.char s 7;s=Chinese;解析:解析:字符串赋值时只用双引号,不用大括号,所以

    18、A 有误,B 和 D 是定义的字符数组,如果未在定义时赋值,则数组内的元素要进行逐个赋值,所以 B 和 D 有误。31.有以下函数:int fun(char*s)char*c=s;while(*c+);return(c 一 s);该函数的功能是( )。(分数:2.00)A.计算 s 所指字符串占用内存字节的个数B.比较两个字符串的大小C.计算 s 所指字符串的长度 D.将 s 所指字符串复制到字符串 c 中解析:解析:while(*cc+)的结果是将 c 移动到字符串的结尾,即当 c=0时,循环结束。此时 s 依然指向的是字符串的首字符,因此,返回值 c 一 s 是字符串的长度,答案 C 正确

    19、。32.有以下程序(注:字符 a 的 ASC码值为 97): #include main() char*s=abc; while(*s) printf(d,*s9);s+; 程序运行后的输出结果是( )。(分数:2.00)A.789B.abcC.780 D.987解析:解析:将字符以整数格式打印,输出的是字符所对应的 ASC值,当*s=a 时,*cs9=7;当*s=b时,*s9=8;当*s=c 时,*s9=0,所以结果是 C。33.设有如下函数定义:int g(int k)if(k1)return 0;else if(k=1)return 1;else return g(k一 1)+1;若执行

    20、调用语句 m=g(3);,则函数 g 总共被调用的次数是( )。(分数:2.00)A.2B.3 C.4D.5解析:解析:将 3 代入将执行 g(2),将 2 代入将执行 g(1),将 1 代入将直接返回 1,所以总共调用了 3次。34.有以下程序: #include int g(int n); main() int a=1,s; s=g(a);s=s+g(a);printf(dn,s); int g(int n) static int x=1; n+=x+: return n; 程序运行后的输出结果是( )。(分数:2.00)A.3B.4C.5 D.6解析:解析:静态变量只在第一次初始化时赋初

    21、值,且常驻内存中,第 1 次调用函数 g 时,x 的初值是1,并将其加上实参的值返回(n=2),自身也再加 1,此时 x=2,当第 2 次调用 g 时,x=2,n=1+2=3,所以主函数中的 s=2+3=5。35.设有定义:struct complexint real,unreal;a=1,8,b;则以下赋值语句中错误的是( )。(分数:2.00)A.b=(2,9); B.b=a;C.breal=areal;D.breal=aunreal;解析:解析:结构体赋值时,应该用大括号;选项 B 和 C 是正常赋值表达式,选项 D 中的结构体元素虽然不对应,但合法引用后进行运算时,只会进行赋值,如果数

    22、据格式不一致系统会进行格式转换。36.有以下程序: #include Struct Sint n;int a20; void f(struct S*p) int i,j,t; for(i=0;in 一 1;i+) for(j=i+1;jn;j+) if(p 一aip 一aj) t=p 一ai;p 一ai=p 一aj;p 一aj=t; main() int i;struct S data=10,2,3,1,6,8,7,5,4,10,9; f(&data); for(i=0;idata_n;i+)printf(d,dataa i); 程序运行后的输出结果是( )。(分数:2.00)A.2,3,1,

    23、68,7,5,4,10,9B.10,9,87,6,5,4,3,2,1C.1,2,3,4,5,6,7,8,9,10 D.10,9,8,7,6,1,2,3,4,5解析:解析:子函数的功能是对结构体的第 2 个元素数组中的元素进行从小到大的排序,因此结果是 C,注意这里是地址传值,所以主函数中的结构体的值会变化,如果采用值传递,则主函数中的结构体的值不会发生变化。37.有以下程序: #include #include typedef strtutchar name9;char sex;float score2;STU; STU fun(STU a) STU b=Tom,m,85,90; int i;

    24、 strcpy(aname,bname); asex=bsex: for(i=0;i2;i+)ascorei=bscorei; return a; main() STU c=Alex,f,95,92,d; d=fun(c); printf(s,c,d,d,dname,dsex,dscore0,dscore1); printf(s,c,d,dn,cname,csex,cscore0,cscore1); 程序运行后的输出结果是( )。(分数:2.00)A.Tom,m,85,90,Alex,f,95,92 B.Tom,m,85,90,Tom,m,85,90C.Qian,f,95,92,Alex,f,

    25、95,92D.Alex,f,95,92,Tom,m,85,90解析:解析:注意使用 typedef 定义结构体时,大括号后面的标识符将成为该结构体类型的定义关键字,可以用来定义新的结构体变量。使用值传递调用函数时实参的值不会改变,所以调用后结构 c 的值没有发生变化,调用函数会返回一个固定的结构体内容,所以答案 A 正确。38.关于 C 语言宏的叙述中正确的是( )。(分数:2.00)A.宏名必须用大写字母表示B.宏定义必须位于源程序中所有语句之前C.宏调用比函数调用耗费时间D.宏替换没有数据类型限制 解析:解析:宏定义通常使用大写,但不是必需的;宏定义一般在函数的大括号外面,但并不一定在所有

    26、语句之前;宏调用比函数调用省时间,只有 D 正确。39.有以下程序: #include main() FILE*fp;int a10=1,2,3,i,n; fp=fopen(filedat,w); for(i=0;i3;i+)fprintf(fp,d,ai); fprintf(fp,n); fclose(fp); fp=fopen(filedat,r); fscanf(fp,dt,&n);fclose(fp); printf(dn,n); 程序运行后的输出结果是( )。(分数:2.00)A.321B.123 C.1D.12300解析:解析:文件打开后写入了 1、2、3 和一个回车符,再次以只读

    27、的方式打开后,指针位于文件头,所以读到的数据是 123,所赋给 n 的值也是 123。40.若有 int a=2,b=1,c;则 c=a (b2);语句执行后 c 的值为( )。(分数:2.00)A.6 B.7C.8D.9解析:解析:的位操作,1 的二进制码是 00000001,向左移动 2 位后是 00000100,与 2 进行异或操作,结果是 6。二、程序填空题(总题数:1,分数:2.00)41.下列给定程序中,函数 fun 的功能是:将形参 n 中的奇数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。 例如,输入一个整数 27638496,函数返回值为 973。 请在程

    28、序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1C 中。不得增行或删行,也不得更改程序的结构! #lnclude unsigned long fun(unsigned long n) unsigned long x=0;int t; while(n) t=n10; *found* if(t2=【1】) *found* x=【2】+t; *found* n=【3】; returnx; main() unsigned long n=一 1; while(n99999999n0) printf(Please input(0n100000000):

    29、);scanf(1d,&n); printf(nThe result is:ldn,fun(n); (分数:2.00)_正确答案:(正确答案:11 210 * x 3n10)解析:解析:填空 1:定义变量 t 用来存放某数的各个位数值,此处判断 t 是否为奇数,即对 2 求余结果是否为 1。 填空 2:将 t 作为 x 的个位数,原来 x 的各个位上升 l 位,即 x=10*x+1。 填空 3:每循环一次,通过除法运算,去掉数值最后一位。 如果知道某数 n 的各个位的数值,可以得到该数值 n,如 n 的个位为 a、十位为 b、百位为 c,那么 n=c*100+b*10+a。如果知道数值 n,可

    30、以采用求余和除法操作来表示其各个位,如 n10(取个位)、n10(取十位),读者可以自己考虑一下,如果是三位数,如何提取各个位?四位数呢?三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun 的功能是:从低位开始依次取出长整型变量 s 中偶数位上的数,构成一个新数存放在 t 中。高位仍在高位,低位仍在低位。例如,当 S 中的数为 7654321 时,t 中的数为 642。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件 MOD11C 中,不得增行或删行,也不得更改程序的结构!#includestdioh*found*void fun(10ng s,lo

    31、ng t)long s1=10;s=s10;*t=s10:while(s0)s=s100;*t=s10*s1+*t;*found*s1=s1*100;main()long s,t;printf(nPlease enter s:);scanf(1d,&s);fun(s,&t);printf(Ihe result is:ldn,t); (分数:2.00)_正确答案:(正确答案:1void fun(1ong s,long*t) 2s1=s1*10;)解析:解析:1主函数中调用函数的参数为地址,因此函数 fun 的形式参数应为指针类型。 2重新组合一个数,从十位开始,然后百位,依次类推。每增加一位数,

    32、原数值需乘 10,即 s1=s1*10;。四、程序设计题(总题数:1,分数:2.00)43.规定输入的字符串中只包含字母和#。请编写函数 fun,其功能是:除了字符串前导的#之外,将串中其他#全部删除。在编写函数时,不得使用 C 语言提供的字符串函数。例如,字符串中的内容为:“#aBcdE#FG#”,删除后,字符串中的内容应当是:#aBcdEFG。 注意:部分源程序在文件PROG1C 中。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。#includestdiohvoid fun(char*a)main()char s81;void NONO

    33、();printf(Enter a string:n);gets(s);fun(s);printf(The string after deleted:n);puts(s);NONO();void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*FILE*in,*out;int i;char s81; in=fopen(indat,r);out=fopen(outdat,W);for(i=0;i10;i+)fscanf(in,s,s);fun(s);fprintf(out,sn,s); fclose(in);fclose(out);(分数:2.00)_正确答案:(正确

    34、答案:void fun(char*a) int i=0;char*p=a; while(*p&*p=#) ai=*p; i+: p+; while(*p) if(*p!=#) ai=*p;i+; p+; ai=0; )解析:解析:函数 fun 的功能:除了字符串前导的#之外,将串中其他#全部删除。解答本题 (1)定义一个临时指针 p,初始指向原串首地址; (2)利用循环语句把字符串前导#拷贝到原串; (3)继续移动指针,把串中和串尾的非#字符拷贝到原串; (4)为修改后的字符串赋结束字符0。 要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串。即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。


    注意事项

    本文(【计算机类职业资格】国家二级(C语言)机试模拟试卷138及答案解析.doc)为本站会员(priceawful190)主动上传,麦多课文档分享仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文档分享(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

    收起
    展开