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

    【计算机类职业资格】国家二级C语言机试(翻译预处理和指针)模拟试卷12及答案解析.doc

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

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

    【计算机类职业资格】国家二级C语言机试(翻译预处理和指针)模拟试卷12及答案解析.doc

    1、国家二级 C语言机试(翻译预处理和指针)模拟试卷 12及答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.以下程序的输出结果是( )。#define PT 35;#define S(x)PT*x*x;main()int a=1,b=2;printf(41fn,S(a+b);(分数:2.00)A.140B.75C.程序有错无输出结果D.3152.以下程序的输出结果是( )。 #include #define S(x)4*(x)*x+1 void main() int k=5,j=2; printf(dn,S(k+j); (分数:2.00)A.33B

    2、.143C.28D.1973.以下程序的输出结果是( )。 #include #define SUB(A)(A)(A) main()int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(dn,d);(分数:2.00)A.0B.10C.一 12D.一 204.以下程序的输出结果是( )。 #include #define N 5 #define M N+1 #define f(x)(x*M) main() int i1,i2; il=f(2); i2=f(1+1); printf(ddn,il,i2);(分数:2.00)A.12 12B.12 7C.12 11D.11

    3、75.关于#define N 100 的叙述中正确的是( )。(分数:2.00)A.宏定义行中定义了标识符 N的值为整数 100B.上述宏定义行实现将 100赋给标识符 NC.在运行时用 100替换标识符 ND.在编译程序对 C源程序进行预处理时用 100替换标识符 N6.以下程序的输出结果是( )。#includestdioh#define N 2#define M N+1#define NUM(M+1)*M2main()printf(dn,NUM);(分数:2.00)A.9B.8C.7D.67.以下程序的输出结果是( )。 #include #include int fun(int n)

    4、main() int *P; int a; p=(int *)malloc(sizeof(int); a=fun(10); *p=n;return *p; printf(dn,a+fun(10); (分数:2.00)A.21B.20C.10D.118.关于 int(*f)(int);的叙述中正确的是( )。(分数:2.00)A.f是基类型为 int的指针变量B.f是指向 int类型一维数组的指针变量C.f是指向函数的指针变量,该函数具有一个 int类型的形参D.f是函数名,该函数的返回值是基类型为 int类型的地址9.关于函数参数的叙述中正确的是( )。(分数:2.00)A.函数的形参类型不能

    5、是指针类型B.函数的类型不能是指针类型C.基类型不同的指针变量可以相互混用D.设有指针变量为“double *p”,则“p+1”将指针 p移动 8个字节10.设 int x=0,*p;下列赋值语句正确的是( )。(分数:2.00)A.*p=x;B.p=NULL;C.p=x;D.*p=NULL;11.22设 float x;则以下对指针变量 P进行定义且赋初值的语句中正确的是( )。(分数:2.00)A.float *p=1;B.float *p=&x;C.float p=&x;D.int *p=(float)x;12.没有编译错误的程序段是( )。(分数:2.00)A.char*sp,s10;

    6、sp=Hello;B.char*sp:s10;s=Hello;C.char strl10=computer,str210;str2=str1:D.char mark;mark=PROGRAM;13.以下程序的输出结果是( )。 main() int a=I,b=3,c=5; int *pl=&a,*p2=&b,*p=&c; *p=*p1*(*p2);printf(dn,c);(分数:2.00)A.4B.3C.2D.114.若 int year=一 2009,*p=&year;以下不能使变量 year中的值增至 2010的语句是( )。(分数:2.00)A.(*p)+;B.+(*P);C.*p+

    7、;D.*p+=1;15.若 int x10,*pt=x;则对 x数组元素的正确引用是( )。(分数:2.00)A.*(x+3)B.*&x10C.*(pt+10)D.pt+316.以下程序的输出结果是( )。void fun(char *s)char a10; main()char *p=PROGRAM;strcpy(a,STRING); fun(p);s=a; printf(sn,p);(分数:2.00)A.STRING?B.PROGRAMC.STRING?D.STRING?17.以下程序的输出结果是( )。 #include int fun(char*s)char*p=s; while(*p

    8、!=0)p+; return(pS); main()printf(dn,fun(goodbey!);(分数:2.00)A.7B.8C.9D.018.以下程序的输出结果是( )。void f(int*q) main()int i=0; int a5=1,2,3,4,5,i;for(;i5;i+)(*q)+; f(a);for(i=0;i5;i+) printf(d,ai);(分数:2.00)A.2,2,3,4,5,B.6,2,3,4,5,C.1,2,3,4,5,D.2,3,4,5,6,19.以下程序的输出结果是( )。 #include int*f(int*s,int*t)int k; if(*

    9、s*t) k=*s;*s=*t;*t=k; return s; main()int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf(d,d,d,d,dn,i,j,*P,*q,*r);(分数:2.00)A.3,5,5,3,5B.3,5,3,5,5C.5,3,5,3,5D.5,3,3,5,520.以下程序的输出结果是( )。void fun(int x,int y,int *c,int *d)*c=x+y;*d=x 一 y;main()int a=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf(ddn,c,d);(分数:2.00)A.0 0

    10、B.3 4C.7 1D.4 321.若运行时从键盘上输入 OPEN THE DOOR,以下程序的输出结果是( )。char fun(char*C)if(*e=Z&*c=A)*c 一=A一a:return*c;main()char s81,*p=s;gets(s);while(*P)*p=fun(p);putchar(*P);p+;prinnf(n);(分数:2.00)A.OPEN THE DOORB.open the doorC.oPEN tHE dOORD.Open The Door22.以下函数的功能是( )。int fun(char*x,char*y)int n=0;while(*x=*

    11、y)&*x!=0)x+;y+;n+;return n;(分数:2.00)A.统计 x和 y所指字符串中相同的字符个数B.统计 x和 y所指字符串中最前面连续相同的字符个数C.将 y所指字符串赋给 x所指存储空间D.查找 x和 y所指字符串中是否有023.以下程序的输出结果是( )。(说明:字母 A的 ASC码值是 65)void fun(char*s)while(*s)if(*s2)printf(c,s);s+;main()char a=BYTE;fun(a);printf(n);(分数:2.00)A.YTB.YEC.BTD.BY24.以下程序的输出结果是( )。void funl(char*

    12、p) main()char*q; char a=Program,*p;q=p; p=&a3;funl(p);printf(sn,a);while(*q!=0)(*q)+;q+;(分数:2.00)A.ProgramB.ProhsbnC.ProgsbnD.Prphsbn25.以下函数的功能是( )。void fun(char*a,char*b)while(*b=*a)!=0)a+;b+;(分数:2.00)A.使指针 a指向 b所指字符串B.检查 a和 b所指字符串中是否有0C.将 a所指字符串赋给 b所指空间D.将 a所指字符串和 b所指字符串进行比较国家二级 C语言机试(翻译预处理和指针)模拟试

    13、卷 12答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.以下程序的输出结果是( )。#define PT 35;#define S(x)PT*x*x;main()int a=1,b=2;printf(41fn,S(a+b);(分数:2.00)A.140B.75C.程序有错无输出结果 D.315解析:解析:C 语言规定预处理语句后面不能加分号,因此程序有错。如果没加分号的话 S(a+b)=PT*a+b*a+b=35*1+2*1+2=75。2.以下程序的输出结果是( )。 #include #define S(x)4*(x)*x+1 void ma

    14、in() int k=5,j=2; printf(dn,S(k+j); (分数:2.00)A.33B.143 C.28D.197解析:解析:本题考查带参数的宏的定义和替换点。在程序中定义了带参数的宏 S(x),当在主函数中用参数 k+i调用宏 S时,根据宏替换的原则,则 S(k+j)=S(5+2)=4*7*5+2+1=143。3.以下程序的输出结果是( )。 #include #define SUB(A)(A)(A) main()int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(dn,d);(分数:2.00)A.0B.10C.一 12D.一 20 解析:解析:本题

    15、主要考查的是宏替换,在程序中执行 d=SUB(a+b)*c这条语句时,首先要进行宏替换,依据宏 SUB(A)的定义可知,上面这条语句替换为 d=(a+b)一(a+b)*c,因为乘法的优先级比减法的优先级高,所以先进行乘法运算,即 d=55*5=一 20,可以看出,出现了运算错误。4.以下程序的输出结果是( )。 #include #define N 5 #define M N+1 #define f(x)(x*M) main() int i1,i2; il=f(2); i2=f(1+1); printf(ddn,il,i2);(分数:2.00)A.12 12B.12 7C.12 11D.11

    16、7 解析:解析:本题考查了宏的嵌套定义定义了 3个宏定义语句,分别是:#defineN 5、#defineM N+1 和#definef(x)(x*M),所以根据 C语言的宏交替规则,我们可知,f(2)=2*N+1 2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。5.关于#define N 100 的叙述中正确的是( )。(分数:2.00)A.宏定义行中定义了标识符 N的值为整数 100B.上述宏定义行实现将 100赋给标识符 NC.在运行时用 100替换标识符 ND.在编译程序对 C源程序进行预处理时用 100替换标识符 N 解析:解析:在 C语言中,凡是以“#”开头的行

    17、,都称为“翻译预处理”。其含义是在 C编译程序对 C源程序进行编译前,由编译预处理程序对这些编译预处理命令进行处理的过程,即在程序执行之前就处理了。由#define 定义的宏就是编译预处理命令。C 程序在进行编译之前,都要先对程序中所有出现的“宏名”。都用宏定义中的替换文本进行替换。6.以下程序的输出结果是( )。#includestdioh#define N 2#define M N+1#define NUM(M+1)*M2main()printf(dn,NUM);(分数:2.00)A.9B.8 C.7D.6解析:解析:本题考查宏替换。宏展开以后 NUM为(2+1+1)*2+12,计算以后值

    18、为 8。在进行宏展开的时候,要展开以后再进行计算。7.以下程序的输出结果是( )。 #include #include int fun(int n) main() int *P; int a; p=(int *)malloc(sizeof(int); a=fun(10); *p=n;return *p; printf(dn,a+fun(10); (分数:2.00)A.21B.20 C.10D.11解析:解析:本题考查内存申请。函数 fun(int n)的功能是在内存中每次动态地申请一个整型变量的存储空间,把整型变量 n的值存入这个存储空间中。所以当在主函数中执行输出语句时,a+fun(10)的

    19、值等于 20。8.关于 int(*f)(int);的叙述中正确的是( )。(分数:2.00)A.f是基类型为 int的指针变量B.f是指向 int类型一维数组的指针变量C.f是指向函数的指针变量,该函数具有一个 int类型的形参 D.f是函数名,该函数的返回值是基类型为 int类型的地址解析:解析:题目中定义语句 int(*f)(int)中 f是指向函数的指针变量,该函数中也只有一个 int型的形参。9.关于函数参数的叙述中正确的是( )。(分数:2.00)A.函数的形参类型不能是指针类型B.函数的类型不能是指针类型C.基类型不同的指针变量可以相互混用D.设有指针变量为“double *p”,

    20、则“p+1”将指针 p移动 8个字节 解析:解析:C 语言中在对指针进行加、减算术运算时,数字 1表示 1个存储单元的长度,而 double类型数据在内存中占 8个字节,因此移动一次移动 8个字节。其他三个都不正确。10.设 int x=0,*p;下列赋值语句正确的是( )。(分数:2.00)A.*p=x;B.p=NULL; C.p=x;D.*p=NULL;解析:解析:定义指针变量时,必须将指针变量初始化为 NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址以致出现错误的运算结果。11.22设 float x;则以下对指针变量 P进行定义且赋初值的语句中正确的是( )。(分数

    21、:2.00)A.float *p=1;B.float *p=&x; C.float p=&x;D.int *p=(float)x;解析:解析:C 语言中定义指针变量的一般形式为类型名木指针变量名 1,*指针变量名 2,因而在选项 B的表达式中,赋值号的左边表示定义了指针变量 p,而右边表示求变量 x的地址值。12.没有编译错误的程序段是( )。(分数:2.00)A.char*sp,s10;sp=Hello; B.char*sp:s10;s=Hello;C.char strl10=computer,str210;str2=str1:D.char mark;mark=PROGRAM;解析:解析:本

    22、题考查了赋值表达式。选项 B中数组名为常量,不能赋值,选项 C数组之间无法完成赋值操作,选项 D和选项 B相同,无法对数组进行赋值。13.以下程序的输出结果是( )。 main() int a=I,b=3,c=5; int *pl=&a,*p2=&b,*p=&c; *p=*p1*(*p2);printf(dn,c);(分数:2.00)A.4B.3 C.2D.1解析:解析:C 语言中,指针可以指向一个数组,程序使整型指针 p1、p2、p 指向 a、b、c 值所存放的地址空间。然后再将指针变量*pl、*p2 中的值的乘积赋给指针变量*p,即赋给变量 c,输出 c的值 3。14.若 int year

    23、=一 2009,*p=&year;以下不能使变量 year中的值增至 2010的语句是( )。(分数:2.00)A.(*p)+;B.+(*P);C.*p+; D.*p+=1;解析:解析:本题考查运算符的优先级。由于自加运算符+的运算级高于间接运算符*的运算级,所以选项 C的表达式*p+不能使变量 year中的值增至 2010。15.若 int x10,*pt=x;则对 x数组元素的正确引用是( )。(分数:2.00)A.*(x+3) B.*&x10C.*(pt+10)D.pt+3解析:解析:本题考查指针的调用。x 代表数组的首地址指针,pt 是指向 x10数组的首地址的指针,即两者指向同一内存

    24、单元。*(x+3)等同于 x3,pt+3 是指针类型,B 和 C下标超限。16.以下程序的输出结果是( )。void fun(char *s)char a10; main()char *p=PROGRAM;strcpy(a,STRING); fun(p);s=a; printf(sn,p);(分数:2.00)A.STRING?B.PROGRAM C.STRING?D.STRING?解析:解析:题目中函数 fun的主要功能是把字符串“STRING”,存放到字符数组 a中,s 指向该字符串,函数调用结束以后,释放 s和 a指向的空间。主函数调用 fun(p),并不能更改 p的值,因此 p的指向没有

    25、改变,还是原来的值。17.以下程序的输出结果是( )。 #include int fun(char*s)char*p=s; while(*p!=0)p+; return(pS); main()printf(dn,fun(goodbey!);(分数:2.00)A.7B.8 C.9D.0解析:解析:题目中函数 fun的主要功能是计算字符串中实际字符的个数不包括结束符0,因此“goodbey!”含有字符为 8,返回值为 8。18.以下程序的输出结果是( )。void f(int*q) main()int i=0; int a5=1,2,3,4,5,i;for(;i5;i+)(*q)+; f(a);f

    26、or(i=0;i5;i+) printf(d,ai);(分数:2.00)A.2,2,3,4,5,B.6,2,3,4,5, C.1,2,3,4,5,D.2,3,4,5,6,解析:解析:题目中 void f(int*q)函数的功能是对(*q)的值连续 5次自加 1。在 main函数中 f(a)语句把一维数组 a5的首地址作为实参,传递给函数 f(int*q)的形参 q,然后在函数 f(int*q)内,a0连续5次自加 1后,a0的值就变成 6。所以输出为 6,2,3,4,5,选项 B正确。19.以下程序的输出结果是( )。 #include int*f(int*s,int*t)int k; if(

    27、*s*t) k=*s;*s=*t;*t=k; return s; main()int i=3,j=5,*p=&i,*q=&j,*r; r=f(p,q); printf(d,d,d,d,dn,i,j,*P,*q,*r);(分数:2.00)A.3,5,5,3,5B.3,5,3,5,5C.5,3,5,3,5 D.5,3,3,5,5解析:解析:题目中函数 f为返回值为指针的函数,主要功能是返回 s和 t指向空间值大的数据的地址,同时如果 s指向空间数据小于 t指向空间的数据,那么交换。主函数 p和 q指向 i和 j,值为 3和 5,j的值大于 i的值,因此调用函数 f以后,返回 j的地址,r 指向 j

    28、,同时 i和 j的值交换,i=5,j=3,p和 q的指向不变,p 指向 i,q 指向 i,选项 C正确。20.以下程序的输出结果是( )。void fun(int x,int y,int *c,int *d)*c=x+y;*d=x 一 y;main()int a=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf(ddn,c,d);(分数:2.00)A.0 0B.3 4C.7 1 D.4 3解析:解析:题目中函数 fun有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差。主函数中调用 fun函数 c计算 4+3,d 计算 43值为 1,选项 C正确。21.若运行时

    29、从键盘上输入 OPEN THE DOOR,以下程序的输出结果是( )。char fun(char*C)if(*e=Z&*c=A)*c 一=A一a:return*c;main()char s81,*p=s;gets(s);while(*P)*p=fun(p);putchar(*P);p+;prinnf(n);(分数:2.00)A.OPEN THE DOORB.open the door C.oPEN tHE dOORD.Open The Door解析:解析:题目中函数 fun的主要功能是判断字符是否为大写字符,如果是则转换为小写字符,主函数读入大写字符串,转换成小写,所以输出结果应该是全部小写的

    30、字符串。22.以下函数的功能是( )。int fun(char*x,char*y)int n=0;while(*x=*y)&*x!=0)x+;y+;n+;return n;(分数:2.00)A.统计 x和 y所指字符串中相同的字符个数B.统计 x和 y所指字符串中最前面连续相同的字符个数 C.将 y所指字符串赋给 x所指存储空间D.查找 x和 y所指字符串中是否有0解析:解析:在 while循环中的判断表达式为(*x=*y)&*x!=0所以只要字符串 x与 y的当前字符不相等时,循环就结束。若 x到达字符串结尾,循环也结束。23.以下程序的输出结果是( )。(说明:字母 A的 ASC码值是 6

    31、5)void fun(char*s)while(*s)if(*s2)printf(c,s);s+;main()char a=BYTE;fun(a);printf(n);(分数:2.00)A.YTB.YE C.BTD.BY解析:解析:题目中程序只输出字母 ASC值为奇数的字母,注意 if(*s2),当*s 为奇数时执行条件语句根据字母 B,y,T,E 的 ASC值的奇偶性相应输出。24.以下程序的输出结果是( )。void funl(char*p) main()char*q; char a=Program,*p;q=p; p=&a3;funl(p);printf(sn,a);while(*q!=

    32、0)(*q)+;q+;(分数:2.00)A.ProgramB.Prohsbn C.ProgsbnD.Prphsbn解析:解析:题目中语句(*q)+的功能是 q所指的字符加 1,变成其后面的字符;q+就是指针 q指向下一个字符的位置。所以在主函数中,语句 p=&a3的作用是使指针 p指向字符数组 a中的第四个字符的位置,即 p指向字符g;然后调用函数 funl(p)后,字符g变成h,字符 r变成 s,字符,a变成b,字符m变成n,因而字符数组 a中的内容就成“Prohsbn”。25.以下函数的功能是( )。void fun(char*a,char*b)while(*b=*a)!=0)a+;b+;(分数:2.00)A.使指针 a指向 b所指字符串B.检查 a和 b所指字符串中是否有0C.将 a所指字符串赋给 b所指空间 D.将 a所指字符串和 b所指字符串进行比较解析:解析:题目中在 while语句的条件中是把字符*a 的值赋给字符*b,然后再判断字符*b 的值是否等于字符串的结束字符(0),当不等于结束字符(0)时,把字符指针变量 a,b 分别加 1,指向它们的下一个字符,直到字符串 a的结束。这样程序执行的结果就是把字符串 a赋给了 b所指的存储空间,选项 C正确。


    注意事项

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




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

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

    收起
    展开