【计算机类职业资格】国家二级C语言机试(编译预处理和指针)模拟试卷6及答案解析.doc
《【计算机类职业资格】国家二级C语言机试(编译预处理和指针)模拟试卷6及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】国家二级C语言机试(编译预处理和指针)模拟试卷6及答案解析.doc(9页珍藏版)》请在麦多课文档分享上搜索。
1、国家二级 C 语言机试(编译预处理和指针)模拟试卷 6 及答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.设有某函数的说明为 int*func(int a10,int n);则下列叙述中,正确的是(分数:2.00)A.说明中的 a10写成 a或*a 效果完全一样B.形参 a 对应的实参只能是数组名C.func 的函数体中不能对 a 进行移动指针(如 a+)的操作D.只有指向 10 个整数内存单元的指针,才能作为实参传给 a2.设有定义:int x=0,*p;紧接着的赋值语句正确的是(分数:2.00)A.*p=NULL;B.p=NULL;C.p=
2、x;D.*p=x:3.以下叙述中错误的是(分数:2.00)A.函数可以返回地址值B.改变函数形参的值,不会改变对应实参的值C.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULLD.可以给指针变量赋一个整数作为地址值4.设已有定义:float x;则以下对指针变量 p 进行定义且赋初值的语句中正确的是(分数:2.00)A.int*p=(float)x;B.float*p=&x;C.float p=&x;D.float*p=1024;5.有以下程序,程序运行后的输出结果是 main()int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf
3、(“d,d,d,dn“,m,n,*p,*q);(分数:2.00)A.1,2,1,2B.1,2,2,1C.2,1,2,1D.2,1,1,26.下面选项中的程序段,没有编译错误的是(分数:2.00)A.char*sp,s10;sp=“Hello“;B.char*sp,s10;s=“Hello“;C.char str110=“computer“,str210;str2=str1;D.char mark;mark=“PROGRAM“:7.设有定义 double a10,*s=a;以下能够代表数组元素 a3的是(分数:2.00)A.(*s)3B.*s3C.*s+3D.*(s+3)8.有以下程序,执行后的
4、输出结果是 main()int a=1,b=3,c=5; int*p1=&a,*p2=&b,*p=&c; *P=*p1*(*p2); printf(“dn“,c);(分数:2.00)A.2B.3C.1D.49.若有定义语句: int a23,*p3;则以下语句中正确的是(分数:2.00)A.p0=&a12;B.p0=a;C.p=a;D.p1=&a;10.若有定义语句:int year=2009,*p=&year;以下不能使变量 year 中的值增至 2010 的语句是(分数:2.00)A.(*p)+;B.+(*p);C.*p+;D.*p+=1;11.有以下程序 main() int a5=2,
5、4,6,8,10,*p,*k; p=a: k=&p; printf(“d“,*(p+);printf(“dn“,*k);程序运行后的输出结果是(分数:2.00)A.4 4B.2 4C.2 2D.4 612.以下叙述中正确的是(分数:2.00)A.如果 p 是指针变量,则*p 表示变量 P 的地址值B.如果 p 是指针变量,则&p 是不合法的表达式C.在对指针进行加、减算术运算时,数字 1 表示 1 个存储单元的长度D.如果 p 是指针变量,则*p+1 和*(p+1)的效果是一样的13.有以下程序(注:字符 a 的 ASCII 码值为 97) main()char*s=“abc“; doprin
6、tf(“d“,*s10);+s;while(*s);程序运行后的输出结果是(分数:2.00)A.abcB.7890C.979899D.78914.设有定义: char*c;以下选项中能够使 c 正确指向一个字符串的是(分数:2.00)A.char str=“string“;c=str;B.scanf(“s“,c);C.c=getchar();D.*c=“string“;15.有以下程序 #includestdioh main() int n,*p=NULL; *p=&n; printf(“Input n:“);scanf(“d“,&p);printf(“output n:“); printf(
7、“dn“,p);该程序试图通过指针 P 为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是(分数:2.00)A.int n,*p=NULL;B.*p=&n;C.scanf(“d“ ,&p)D.printf(“dn“,p);16.若有定义语句:double a,*p=&a;以下叙述中错误的是(分数:2.00)A.定义语句中的*号是一个说明符B.定义语句中的 p 只能存放 double 类型变量的地址C.定义语句中*p=&a 把变量 a 的地址作为初值赋给指针变量 pD.定义语句中的*号是一个间址运算符17.若有以下定义 int x10,*pt=x;则对 x 数组元素的正确引用是(分数:
8、2.00)A.*(x+3)B.*&x10C.*(pt+10)D.pt+318.有以下程序 int fun1(double a)return a*=a; int fun2(double x,double y) double a=0,b=0; a=fun1(x);b=fun1(y);return(int)(a+b); main() double w;w=fun2(11,20);程序执行后输出结果是(分数:2.00)A.500B.5C.521D.0019.有以下程序 void fun(char*s)char a10; main()char*p=“PROGRAM“; strcpy(a,“STRING“
9、); fun(P); s=a; printf(“sn“,p);程序运行后的输出结果是(此处口代表空格)(分数:2.00)A.STRING 口口口口B.PROGRAMC.STRING 口口口D.STRING20.有以下程序 void fun(int n,int*s)int f; if(n=1)*s=n+1; elsefun(n1,&f);*s=f; main() int x=0; fun(4,&x); printf(“dn“,x); 程序运行后的输出结果是(分数:2.00)A.1B.3C.4D.221.有以下程序 #includestdioh int fun(char*s) char*p=s;
10、while(*p!=0)p+; return(p-s); main()printf(“dn“,fun(“goodbey!“);程序的输出结果是(分数:2.00)A.6B.8C.0D.722.有以下程序 #includestdioh main() #define N 4 int xN=1,2,3),4),5,6,7,8),9,10, void fun(int aN,int b) yN,i; int i; fun(x,y); for(i=0;iN;i+)bi=aii; for(i=0;iN;i+)printf(“d,“,yi); printf(“n“);程序的运行结果是(分数:2.00)A.1,2
11、,3,4,B.1,4,5,9,C.1,0,7,0,D.3,4,8,10,23.有下列程序: void f(int*q) main() int i=0; int a5=l,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,24.有以下程序 #includestdioh main() void fun(char*c,int d) char b=a,a=A; *c=*c+1;d=d+1
12、; fun(&b,a);printf(“c,cn“,b,a); printf(“c,c,“,*c,d); 程序运行后的输出结果是(分数:2.00)A.b,B,b,AB.b,B,B,AC.a,B,B,aD.a,B,a,B25.以下函数按每行 8 个输出数组中的数据: void fun(int*w,int n) int i; for(i=0;in;i+) _ printf(“d“,wi); printf(“n“); 下划线处应填入的语句是(分数:2.00)A.if(i8=0)printf(“n“);B.if(i8=0)continue;C.if(i8=0)printf(“n“);D.if(i8=0
13、)continue;国家二级 C 语言机试(编译预处理和指针)模拟试卷 6 答案解析(总分:50.00,做题时间:90 分钟)一、选择题(总题数:25,分数:50.00)1.设有某函数的说明为 int*func(int a10,int n);则下列叙述中,正确的是(分数:2.00)A.说明中的 a10写成 a或*a 效果完全一样 B.形参 a 对应的实参只能是数组名C.func 的函数体中不能对 a 进行移动指针(如 a+)的操作D.只有指向 10 个整数内存单元的指针,才能作为实参传给 a解析:解析:函数 func 为返回值为指针的函数,有两个形参,形参数组 a 为指针变量,保存实参数组的首
14、地址,其元素个数由实参数组决定,因此说明中的 a10写成 a或*a 效果完全一样。2.设有定义:int x=0,*p;紧接着的赋值语句正确的是(分数:2.00)A.*p=NULL;B.p=NULL; C.p=x;D.*p=x:解析:解析:定义指针变量时,必须将指针变量初始化为 NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址。3.以下叙述中错误的是(分数:2.00)A.函数可以返回地址值B.改变函数形参的值,不会改变对应实参的值C.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULLD.可以给指针变量赋一个整数作为地址值 解析:解析:指针变量的值只能是存储
15、单元地址,而不能是一个整数,选项 D)的描述是错误,为待选答案。函数可以返回内存空间的地址,同时函数形参和实参分别占用不同的内存单元,改变形参的值不会改变对应实参的值,在头文件 stdio.h 中,NULL 被定义为 void 型的指针。4.设已有定义:float x;则以下对指针变量 p 进行定义且赋初值的语句中正确的是(分数:2.00)A.int*p=(float)x;B.float*p=&x; C.float p=&x;D.float*p=1024;解析:解析:定义指针变量的一般形式为:类型名 *指针变量名 1,*指针变量名 2;。对一个指针变量赋值要通过求地址运算符()获得变量的地址值
16、,然后把此地址值赋给指针变量。因而在选项 A)的表达式中,赋值号的左边表示定义了指针变量 D,而右边表示求变量 x 的地址值。5.有以下程序,程序运行后的输出结果是 main()int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(“d,d,d,dn“,m,n,*p,*q);(分数:2.00)A.1,2,1,2B.1,2,2,1 C.2,1,2,1D.2,1,1,2解析:解析:在主函数定义了 3 个整数指针变量 p,q,r,并且使 p 指向 m,q 指向 n,再执行“r=p;p=q;q=r;”这三条语句,使 q 指向 m,p 指向 n,再输出变量“m,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 国家 二级 语言 编译 预处理 指针 模拟 试卷 答案 解析 DOC
