国家二级C语言(编译预处理和指针)机试模拟试卷16(题后含答案及解析)_第1页
国家二级C语言(编译预处理和指针)机试模拟试卷16(题后含答案及解析)_第2页
国家二级C语言(编译预处理和指针)机试模拟试卷16(题后含答案及解析)_第3页
国家二级C语言(编译预处理和指针)机试模拟试卷16(题后含答案及解析)_第4页
国家二级C语言(编译预处理和指针)机试模拟试卷16(题后含答案及解析)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言(编译预处理和指针)机试模拟试卷16(题后含答案及解析)题型有:1.选择题选择题1.有以下程序#include<stdio.h>voidfun(int*a,int*b){int*c;c=a:a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf(“%d,%d,”,*p,*q);fun(&x,&y);printf(“%d,%d\n”,*p,*q);}程序运行后的输出结果是A.3,5,5,3B.3,5,3,5C.5,3,3,5D.5,3,5,3正确答案:B解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y1)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。知识模块:编译预处理和指针2.有下列程序:voidf(intb[]){intI;for(i=2;i<6;i++)b[i]*=2;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10,i++)printf(“%d,”,a[i]);}程序运行后的输出结果是A.1,2,3,4,5,6,7,8,9,10,B.1,2,3,4,10,12,14,16,9,10,C.1,2,6,8,10,12,7,8,9,10,D.1,2,6,8,10,12,14,16,9,10,正确答案:C解析:函数voidf(intb[])的功能是对数组b[]中第2个到第5个元素的值逐个扩大2倍。所以在main()函数中,f(a)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10}。知识模块:编译预处理和指针3.有以下程序#include<stdio.h>intfun(chars[]){intn=0;while(*s<=‘9’&&*s>=‘0’){n=10*n+*s-0’;s++;}return(n];}main(){charsi10]={‘6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};printf(“%d\n”,fun(s));}程序的运行结果是A.61490B.61C.9D.5正确答案:B解析:在fun函数中,while循环的功能是逐个取字符数组s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量n中,并返回变量n的值。所以在主函数中调用fun(s)时,将把字符数组s中的数字组成一个数输出。因为当指针s指向数组的第3位时,即字符’*’,循环条件不成立,循环结束,返回n的值。所以输出n的值为61。知识模块:编译预处理和指针4.若有以下程序#include<stdio.h>voidsp(int*a){intb=2;a=&b:*a=*a*2;printf(“%d,”,*a);}main(){intk=3,*p=&k;sp(p);printf(“%d,%d\n”,k,*p);}则程序的输出结果是A.4,3,4B.4,3,3C.6,3,6D.6,6,6正确答案:B解析:主函数中定义指针变量p指向k,调用函数sp(p),将k的地址传递给形参指针a,函数转到sp运行,a指向b的地址,表达式*a=*a*2,相当于b=b*2,得到*a的数据4输出。函数调用结束,此时a和b的空间撤销,而对实参k和p的值并没有改变,仍旧是3。知识模块:编译预处理和指针5.若有以下程序#include<stdio.h>intk=7;voidflint**s){int*t=&k;*s=t;printf(“%d,%d,%d,”,k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf(“%d,%d,%d\n”,i,*p,*r);}则程序的输出结果是A.3,7,7,7,7,7B.7,7,7,3,3,3C.3,3,3,7,7,7D.7,7,7,3,7,7正确答案:D解析:本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中p指向i,r指向p,函数调用后s指向p,在f函数中t指向全局变量k=7,s指向t,同时s保存了实参p的地址,此时p也指向t,输出三个7,流程转到主函数,i的值为3,p以及r的值为7。知识模块:编译预处理和指针6.若有以下程序#include<stdio.h>int*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf(“%d,%d,%d,%d,%d\n”,i,j,*p,*q,*r);}则程序的输出结果是A.3,5,5,3,5B.5,3,5,3,5C.5,3,3,5,5D.3,5,3,5,5正确答案:D解析:本题考查了返回值为指针的函数,函数f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中p指向i,q指向j,调用r=f(P,q),返回q的地址,因此*p=3,*q=5,*r=5。知识模块:编译预处理和指针7.若有以下程序#include<stdio.h>voidsp(int*a){intb=2;*a=*a*2;printf(“%d,”,*a);a=&b:*a=*a*2;printf(“%d,”,*a);}main(){intk=3;sp(&k);printf(“%d\n”,k);}则程序的输出结果是A.6,4,6B.6,4,3C.6,12,12D.9,4,9正确答案:A解析:本题考查了指针作为函数的参数,可以接收实参变量的地址,改变实参的值。主函数调用sp(&k),执行sp函数a指向向k,执行语句*a=*a*2后a指向空间的值k的值为6,改变a的指向以后,此时a指向b,则执行*a=*a*2以后,a指向空间b的值为4。调用结束返回主函数,输出k的值为6。知识模块:编译预处理和指针8.若有以下程序#include<stdio.h>intk=7,m=5;voidf(int**s){int*t=&k;s=&t;*s=&m;printf(“%d,%d,%ct,”,k,*t,*s);}main(){inti=3,*p=&i,*r=&p;f(r);printf(“%d,%d,%d\n”,i,*p,**r);}则程序的输出结果是A.7,5,7,3,3,3,B.7,5,7,3,5,7,C.7,5,5,3,3,3,D.7,7,5,3,3,3,正确答案:C解析:本题考查二级指针作为函数的参数,可以通过函数调用来改变主函数中一级指针的指向。主函数中指针变量p指向i,r指向p,调用f函数,形参指针s指向p,流程转到f函数执行,指针变量t指向k,s指向t,此时更改了s的指向,s指向了t,更改了s指向的地址空间内容为m的地址,同时t也指向变量m,因此**s的值为m的值,*t为m的值,k为7。流程返回到主函数,没有对主函数空间的数据和指向作出更改,因此全部为3。知识模块:编译预处理和指针9.若有以下程序#include<stdio.h>int*f(int*s,int*t){intk;if(*s<*t){k=*s;*s=*t;*t=k;}returns;)main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf(“%d,%d,%d,%d,%d\n”,i,j,*p,*q,*r);}则程序的输出结果是A.3,5,5,3,5B.3,5,3,5,5C.5,3,5,3,5D.5,3,3,5,5正确答案:C解析:函数f为返回值为指针的函数,主要功能是返回s和t指向空间值大的数据的地址,同时如何s指向空间数据大于t指向空间的数据,那么交换。主函数p和q指向i和j,值为3和5,{的值大于i的值,因此调用函数f以后,返回j的地址,r指向i,同时i和j的值交换,i=5,j=3,p和q的指向不变,p指向i,q指向j。知识模块:编译预处理和指针10.有以下程序#include<stdio.h>intfuna(inta,intb){returna+b;}intfunb(inta,intb){returna-b;}intsss(int(*t)(),intx,inty){return((*t)(x,y));}main(){intx;X=sss(funa,9,3);x+=sss(funb,8,3);printf(“%d\n”,x);}程序运行后的输出结果是A.17B.23C.24D.22正确答案:A解析:函数funa的功能计算两个数据的和,funb的功能计算两个数据的差,函数SSS中利用指向函数的指针作为函数的参数,可以在调用的时候,根据接收的函数地址来决定调用那一个函数。主函数中调用x=sss(funa,9,3),将funa函数的地址传递给t,因此sss函数成为求两个数据的和12,继续将funb函数地址传给t,求两个数据差为5,和s累加后结果为17。知识模块:编译预处理和指针11.有以下程序voidfun(intx,inty,int*c,int*d){*c=x+y;*d=x-y;}main(){inta=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf(“%d%d\n”,c,d);}程序的输出结果是A.43B.34C.71D.00正确答案:C解析:函数fun有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差。主函数中调用fun函数c计算4+3,d计算4.3值为1。知识模块:编译预处理和指针12.有以下程序voidfun(int*p,int*q){intt;t=*p;*p=*q;*q=t;*q=*p;}main(){inta=0,b=9;fun(&a,&b);printf(“%d%d\n”,a,b);}程序的输出结果是A.00B.99C.90D.09正确答案:B解析:函数fun的主要功能是交换p和q指向的地址空间的数据,然后更改p的指向的地址空间数据,使之和q指向的数据相同。主函数调用fun后,p指向a,q指向b,因此a和b的数据全部为9。知识模块:编译预处理和指针13.有以下程序charfun(char*c){if(*c<=‘Z’&&*c>=‘A’)*c-=‘A’-’a’;return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}printf(“\n”);}若运行时从键盘上输入OPENTHEDOOR,程序的输出结果是A.oPENtHEdOORB.openthedoorC.OPENTHEDOORD.OpenTheDoor正确答案:B解析:函数fun的主要功能是判断字符是否为大写字符,如果是则转换为小写字符,主函数读入大写字符串,转换成小写。知识模块:编译预处理和指针14.有以下程序voidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;}main(){char*s1=“abc”,*s2=“123”;swap(s1,s2);printf(“%s,%s\n”,s1,s2);}程序执行后的输出结果是A.abc,123B.123,abcC.321,cbaD.1bc,a23正确答案:D解析:函数voidswap(char*x,char*y)的功能是交换两个字符*x和*y中的内容。在主函数中字符指针s1指向字符串’abc’,s2指向字符串’123’。所以函数swap(s1,s2)的执行结果就是字符’a’和’1’相互交换。知识模块:编译预处理和指针15.有以下函数intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=‘\0’){x++;y++;n++;}returnn;}函数的功能是A.查找x和y所指字符串中是否有’\0’B.统计x和y所指字符串中最前面连续相同的字符个数C.将y所指字符串赋给x所指存储空间D.统计x和y所指字符串中相同的字符个数正确答案:B解析:在while循环中的判断表达式为(*x==*y)&&*x!=‘\0’,所以只要字符串x与y的当前字符不相等时,循环就结束。知识模块:编译预处理和指针16.有以下函数intfun(char*s){char*t=s;while(*t++);return(t-s);}该函数的功能是A.比较两个字符串的大小B.计算s所指字符串的长度C.计算s所指字符串占用内存字节的个数D.将s所指字符串复制到字符串t中正确答案:C解析:在函数fun(char*s)中,首先用字符指针变量t指向s,而循环语句while(*t++);的功能是使指针变量t指向字符串变量s的末尾,这时退出循环,因而语句return(t-s);返回的就是字符串s所指字符串的长度。知识模块:编译预处理和指针17.有以下程序(说明:字母A的ASCII码值是65)voidfun(char*s){while(*s){if(*s%2)printf(“%c”,*s);s++;}}main(){chara[]=“BYTE”;fun(a);printf(“\n”);}程序运行后的输出结果是A.BTB.YEC.YTD.BY正确答案:B解析:程序只输出字母ASCII值为奇数的字母,根据字母B,Y,T,E的.ASCII值的奇偶性相应输出。知识模块:编译预处理和指针18.有以下程序#include<stdio.h>voidfun(char**p){++p;printf(“%s\n”,*p);}main(){char*a[]=(“Morning”,”Afternoon”,”Evening”,”Night”);fun(a);}程序的运行结果是A.fternoonB.MorningC.omingD.Afternoon正确答案:D解析:在程序中,指针的指针变量a和p都是指向字符串的指针。执行fun(a)语句时,p指向的是字符串数组a的第一个字符串“Morning”,p自加1之后,*p指向了字符串数组a的第2个字符串“Aftemoon”。知识模块:编译预处理和指针19.有以下程序voidfunl(char*p){char*q;q=p;while(*q!=‘\0’){(*q)++;q++;}}main(){chara[]={“Program”),*p;p=&a[3];fun1(p);printf(“%s\n”,a);}程序执行后的输出结果是A.PrphsbnB.ProhsbnC.ProgsbnD.Program正确答案:B解析:在函数voidfunl(char*p)中,语句(*q)++的功能是q所指的字符加1,变成其后面的字符;q++就是指针q指向下一个字符的位置。所以在主函数中,语句p=&a[3]的作用是使指针p指向字符数组a[]中的第四个字符的位置,即p指向字符’g’;然后调用函数funl(p)后,字符’g’变成’g’,字符’h’变成’s’,字符’a’变成’b’,字符’m’变成’n’,因而字符数组a[]中的内容就成“Prohsbn”。知识模块:编译预处理和指针20.有以下程序#include<stdio-h>voidfun(char*a,char*b){while(*a=‘*’)a++;while(*b=*a){b++;a++;}}main(){char*s=“****a*b****”,t[80];fun(s,t);puts(t);}程序的运行结果是A.a*bB.*****a*bC.a*b****D.ab正确答案:C解析:主函数main()定义了指向字符串的指针和一个字符数组,接着调用fun(s,t)函数,进行实参向形参传递,函数fun()第一个while语句判断*a中的值为“*”时继续扫描,当遇到不是“*”时结束,接着第二个while循环语句,将*a中从“a”开始的后续所有字符都赋予*b,也就是t[80]中的内容为“a*b****”。知识模块:编译预处理和指针21.下列函数的功能是voidfun(char*a,char*b){while((*b=*a)!=‘\0’){a++;b++;}}A.使指针b指向a所指字符串B.将a所指字符串和b所指字符串进行比较C.将a所指字符串赋给b所指空间D.检查a和b所指字符串中是否有’\0’正确答案:C解析:在while语句的条件中是把字符*a的值赋给字符*b,然后再判断字符*b的值是否等于字符串的结束字符(‘\0’),当不等于结束字符(‘\0’)时,把字符指针变量a,b分别加1,指它们的下一个字符,直到字符串a的结束。这样程序执行的结果就是把字符串a赋给了b所指的存储空间。知识模块:编译预处理和指针22.有以下程序#include<stdio.h>#include<string.h>voidfun(chars[][10],intn){chart;inti,j;for(i=0;i<n-1;i++)for0=i+1;j<nj++)if(s[i][0]>s[j][0]){t=s[i][0];s[][0]=s[j][0];s[j][0]=t;}}main(){charss[5][10]={“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”};fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);}程序的运行结果是A.aaaacc,xyB.bcc,aabccC.xy,aaaaccD.aabcc,bcc正确答案:C解析:函数fun(chars[][10],intn)通过两重for循环语句,比较二维字符数组s[][10]的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。在主函数中,语句fun(ss,5)的作用是对二维字符数组ss[5][10]的5个字符串的首字符进行从小到大的排序,不影响各个字符串另外的字符。所以排序结束后,5个字符串的第一个字符依次变为a、a、b、b和x;最后输出第1个和第4个字符串。知识模块:编译预处理和指针23.有以下程序#include<stdio.h>voidfun(char*t,char*s){while(*t!=0)t++;while((*t++=*s++)!=0);}main(){charss[10]=“acc”,aa[10]=“bbxxyy”;fun(ss,aa);printf(“%s,%s\n”,ss,aa);}程序的运行结果是A.acc,bbxxyyB.accxxyy,bbxxyyC.accbbxxyy,bbxxyyD.accxyy,bbxxyy正确答案:C解析:fun函数中,第1个while循环语句使指针t指向字符串的末尾,第2个while循环语句实现了字符串t和s的连接。主函数中语句fun(ss,aa)的功能是将字符串aa连接到字符串ss的末尾。知识模块:编译预处理和指针24.有以下程序#include<stdio.h>#include<string.h>voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1;whil

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论