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

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

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

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

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

    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,

    17、n,*p,*q”时,它们值分别为 1,2,2,1。6.下面选项中的程序段,没有编译错误的是(分数: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“:解析:解析:选项 B)中数组名为常量,不能赋值,选项 C)字符数组之间无法完成赋值操作,选项 D)和选项 B)相同,无法对数组进行赋值。7.设有定义 double a10,*s=a;以下能够代表数组元素 a3的是(分数:2.00)A.(*s)3B.*s3

    18、C.*s+3D.*(s+3) 解析:解析:语句*s=a,使用指针变量 s 指向一维数组 a 的首地址,所以*(s+3)表示的是引用数组 a3。8.有以下程序,执行后的输出结果是 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.3 C.1D.4解析:解析:程序使整型指针 p1、p2、p3 指向 a、b、c 值所存放的地址空间。然后再将指针变量*p1、*p2 中的值的乘积赋给指针变量*p,即赋给变量 c,输出 c 的值 3。9.若有定义语句: int a23,*p3;

    19、则以下语句中正确的是(分数:2.00)A.p0=&a12; B.p0=a;C.p=a;D.p1=&a;解析:解析:定义语句“int a23,*p3;”定义了整型二维数组 a23和指针数组 p3。在 C 语言中,二维数组名也是一个存放地址常量的指针,其值为二维数组中第一行的地址。所以选项 A)中,把整型数组 a0的指针赋给 p0。10.若有定义语句:int year=2009,*p=&year;以下不能使变量 year 中的值增至 2010 的语句是(分数:2.00)A.(*p)+;B.+(*p);C.*p+; D.*p+=1;解析:解析:由于自加运算符+一的运算级高于间接运算*的运算级,所以选

    20、项 A)的表达式*p+不能使变量 year 中的值增至 2010。11.有以下程序 main() int a5=2,4,6,8,10,*p,*k; p=a: k=&p; printf(“d“,*(p+);printf(“dn“,*k);程序运行后的输出结果是(分数:2.00)A.4 4B.2 4 C.2 2D.4 6解析:解析:主函数中指针变量 p 指向数组 a 中下标为 0 的元素,k 指向 p,那么*(p+)的值为 2,p 指向数组中下标为 1 的元素,k 指向 p,所以*k 的值为 4。12.以下叙述中正确的是(分数:2.00)A.如果 p 是指针变量,则*p 表示变量 P 的地址值B.

    21、如果 p 是指针变量,则&p 是不合法的表达式C.在对指针进行加、减算术运算时,数字 1 表示 1 个存储单元的长度 D.如果 p 是指针变量,则*p+1 和*(p+1)的效果是一样的解析:解析:移动指针是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。因此,只有当指针指向一串连续的存储单元时,指针的移动才有意义。当指针指向一串连续的存储单元时,可以对指针变量进行加上或减去一个整数的运算,也可以对指向同一串连续存储单元的两个指针进行相减的运算。除此之外,不可以对指针进行任何其他的算术运算。C 语言提供了一个间接访问运算符(*),又称间址运算符,它是一个单目运算符,优

    22、先级比较高,高于普通的算术运算符,但是低于 ()运算符,因此*p+1 和*(p+1)的含义是不一样。当指针变量中存放了一个确切的地址值时,就可以用“间接访问运算符”通过指针来引用该地址的存储单元。13.有以下程序(注:字符 a 的 ASCII 码值为 97) main()char*s=“abc“; doprintf(“d“,*s10);+s;while(*s);程序运行后的输出结果是(分数:2.00)A.abcB.7890C.979899D.789 解析:解析:因为小写字符 a,b,c 的 ASCII 的值分别为 97,98,99,而在 do while 循环语句中,每次对字符的 ASCII

    23、的值取余数并输出。第一次循环输出 7,第二次循环输出 8,第三次循环输出 9。14.设有定义: char*c;以下选项中能够使 c 正确指向一个字符串的是(分数:2.00)A.char str=“string“;c=str; B.scanf(“s“,c);C.c=getchar();D.*c=“string“;解析:解析:在题目的题干中定义了字符指针变量 c,在选项 A)中,首先定义字符数组 str,然后再把字符数组 str 的首地址赋给字符指针变量 c。所以选项 A)是正确的。在选项 D)中,如果在定义字符指针 c时,同时给 c 赋初值时,这样的表达式是正确的。而本题不是在定义指针 c 时,

    24、同时给 c 赋初值。15.有以下程序 #includestdioh main() int n,*p=NULL; *p=&n; printf(“Input n:“);scanf(“d“,&p);printf(“output n:“); printf(“dn“,p);该程序试图通过指针 P 为变量 n读入数据并输出,但程序有多处错误,以下语句正确的是(分数:2.00)A.int n,*p=NULL; B.*p=&n;C.scanf(“d“ ,&p)D.printf(“dn“,p);解析:解析:选项 A)表示在程序中,声明定义变量语句“int n,*p=NULL;”定义了整型变量 n 和指针变量 p

    25、,并且指针变量 p 初始化为空。其他的语句都是错误的。其中选项 B),&n 的地址应存放到指针变量 p 中,而选项 C)中数据输入项错误,选项 D)输出地址信息。16.若有定义语句:double a,*p=&a;以下叙述中错误的是(分数:2.00)A.定义语句中的*号是一个说明符B.定义语句中的 p 只能存放 double 类型变量的地址C.定义语句中*p=&a 把变量 a 的地址作为初值赋给指针变量 pD.定义语句中的*号是一个间址运算符 解析:解析:在指针定义语句“double a,*p=a”中,指针变量 p 前面的*号,只是一个说明符,说明变量 p 是指针类型的变量。17.若有以下定义

    26、int x10,*pt=x;则对 x 数组元素的正确引用是(分数:2.00)A.*(x+3) B.*&x10C.*(pt+10)D.pt+3解析:解析:本题考查指针的调用。x 代表 x10数组的首地址指针,pt 是指向 x10数组的首地址的指针,即两者指向同一内存单元。*(x+3)等同于 x3。18.有以下程序 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);

    27、程序执行后输出结果是(分数:2.00)A.500 B.5C.521D.00解析:解析:子函数 fun1(doubIe a)的功能是返回 a 的平方值的整数部分。子函数 fun2(double x,double y)的功能是返回 x 的平方值的整数部分与 y 的平方值的整数部分的和。又因为题中变量 w 的定义为 double 型,函数 fun(2)的定义为 int 型,按照各类数值型数据间的混合运算,整型数据被转换为实型数据。所以双精度型变量 w 的值为 500。19.有以下程序 void fun(char*s)char a10; main()char*p=“PROGRAM“; strcpy(a

    28、,“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 的指向没有改变。20.有以下程序 void fun(int n,int*s)int f; if(n=1)*s=n+1; elsefun(n1,&f);*s=f; m

    29、ain() int x=0; fun(4,&x); printf(“dn“,x); 程序运行后的输出结果是(分数:2.00)A.1B.3C.4D.2 解析:解析:函数 fun 为递归调用函数,如果 n 的值为 1,那么后面形参指向的空间存放 n+1,否则继续计算 fun(n1)的值。调用分析过程:fun(4,&x)fun(3,x)fun(2,x)fun(1,x)在回归的过程中,对于 x 内的数据并没有改动。21.有以下程序 #includestdioh int fun(char*s) char*p=s; while(*p!=0)p+; return(p-s); main()printf(“dn

    30、“,fun(“goodbey!“);程序的输出结果是(分数:2.00)A.6B.8 C.0D.7解析:解析:函数 fun 的主要功能是计算字符串中实际字符的个数,因此。“goodbey!“含有字符为 8,返回值为 8。22.有以下程序 #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“);程序的运行

    31、结果是(分数:2.00)A.1,2,3,4,B.1,4,5,9,C.1,0,7,0, D.3,4,8,10,解析:解析:函数 fun(int aN,int b)的功能是把矩阵 aNN主对角线上的元素赋给一维数组b。在主函数中由 xN的初始化可知,其主对角线上的元素是 1,0,7,0,所以当执行完函数够(x,y)后,一维数组元素 y中的元素值为 1,0,7,0。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);程序运行

    32、后的输出结果是(分数: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。24.有以下程序 #includestdioh main() void fun(char*c,int d) char b=a,a=A; *c=*c+1;d=d+

    33、1; fun(&b,a);printf(“c,cn“,b,a); printf(“c,c,“,*c,d); 程序运行后的输出结果是(分数:2.00)A.b,B,b,A B.b,B,B,AC.a,B,B,aD.a,B,a,B解析:解析:本题中 fun 函数的参数传递方式,形参 c 是传地址,形参 d 是传值,所以在主函数中,执行胁时,把变量 b 的地址传给了 c,把 a 的值传递给了 d,经过运算,输出的值为 bB。在主函数的输出语句中,输出变量 b 的值为 b,变量 a 的值为 A。25.以下函数按每行 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)continue;解析:解析:本题考查判断语句与循环语句。欲使每行输出 8 个数据,则必然使用取余运算,当 i8=0时先输出一个换行符再输出字符。选项 D)中,continue 语句的作用是停止执行本次循环位于 continue 后面的语句,而进入下一次循环。


    注意事项

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




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

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

    收起
    展开