ImageVerifierCode 换一换
格式:DOC , 页数:24 ,大小:88KB ,
资源ID:1324863      下载积分:5000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-1324863.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(【计算机类职业资格】二级C语言-113及答案解析.doc)为本站会员(eventdump275)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

【计算机类职业资格】二级C语言-113及答案解析.doc

1、二级 C 语言-113 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:44,分数:100.00)1.有以下程序: #include stdio.h void f(int *p,int *q); main( ) int m=1,n=2,*r= f(r, printf(“%d,%d“,m,n); void f(int *p,int *q) p=p+1; *q=*q+1; 程序运行后的输出结果是_。(分数:5.00)A.2,3B.1,3C.1,4D.1,22.设已有定义:float x;,则以下对指针变量 p 进行定义且赋初值的语句中正确的是_。(分数:2.00)A.in

2、t *p=(float)x;B.float *p=C.float p=D.float *p=1024;3.若有定义语句:double a, *p= 以下叙述中错误的是_。(分数:2.00)A.定义语句中的*号是一个间址运算符B.定义语句中的*号是一个说明符C.定义语句中的 P 只能存放 double 类型变量的地址D.定义语句中,*P= int *p1= *p=*p1*(*p2); printf(“%d/n“,c); 执行后的输出结果是_。(分数:5.00)A.1B.2C.3D.45.以下叙述中正确的是_。(分数:2.00)A.int * p1; int * * p2; int *p3;都是合

3、法的定义指针变量的语句B.指针变量只能通过求地址运算符(与 p=/0;是等价的语句D.语句 p=NULL;执行后,指针 p 指向地址为 0 的存储单元6.以下叙述中正确的是_。(分数:2.00)A.即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同B.如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息C.设变量 p 是一个指针变量,则语句 p=0;是非法的,应该使用 p=NULL;D.指针变量之间不能用关系运算符进行比较7.有以下程序: #include stdio.h main( ) int n, *p=NULL; *p= printf(“Input n:“

4、); scanf(“%d“, printf(“output n:“); printf(“%d/n“,p); 该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,以下语句正确的是_。(分数:2.00)A.int n,*p=NULL;B.*p=C.scanf(“%d“,8.若有定义语句:double x,y,*px,*py;执行了 px= py=之后,正确的输入语句是_。(分数:2.00)A.scanf(“%if%le“,px,py);B.scanf(“%f%f“ C.scanf(“%f%f“,x,y);D.scanf(“%1f%1f“,x,y);9.以下程序段完全正确的是_。(

5、分数:2.00)A.int *p; scanf(“%d“,B.int *p; scanf(“%d“,p);C.int k,*p= scanf(“%d“,p);D.int k, *p; *p= scanf(“%d“,p);10.若有定义语句: int a23,*p3; 则以下语句中正确的是_。(分数:2.00)A.p=a;B.p0=a;C.p0=D.p1=11.若有以下程序: #include stdio.h int *f(int *s,int *t) int *k; if(*s*t) k=s; s=t; t=k; return s; main( ) int i=3,j=5, *p= r=f(p

6、,q); printf(“%d,%d,%d,%d,%d/n“,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,512.有以下程序: #include stdio.h #include stdlib.h int fun(int n) int *p; p=(int*)malloc(aizeof(int); *p=n; return *p; main( ) int a; a=fun(10); printf(“%d/n“,a+fun(10); 程序的运行结果是_。(分数:2.00)A.0B.10

7、C.20D.出错13.有以下程序: #include stdio.h void fun(int a, int n) int i,t; for(i=0;in/2;i+ +) t=ai; ai=an-1-i; an-1-i=t; main( ) int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2; i8; i+ +) printf(“%d“,ki); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.321678B.876543C.1098765D.34567814.有以下程序: #include stdio.h #define

8、N 4 void fun(int aN, int b) int i; for(i=0; iN; i+ +) bi=aii-aiN-1-i; main( ) int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN; i+ +) printf(“%d,“,yi); printf(“/n“); 程序运行后的输出结果是_。(分数:2.00)A.-3,-1,1,3,B.-12,-3,0,0,C.0,1,2,3,D.-3,-3,-3,-3,15.有以下程序: #include stdio.h #include st

9、dlib.h void fun(int *p1, int *p2, int *s) s=(int * )malloc(sizeof(int); *s=*p1+*(p2+); main( ) int a2=1,2,b2=10,20,*s=a; fun(a,b,s); printf(“%d/n“, *s); 程序运行后的输出结果是_。(分数:2.00)A.11B.10C.1D.216.有以下程序: #include stdio.h #include string.h main( ) char str20=“One * World“,“One * Dream!“,*p=str1; printf(“%

10、d,“,strlen(P); printf(“%s/n“,p); 程序运行后的输出结果是_。(分数:2.00)A.10, One * Dream!B.9, One * Dream!C.9,One * WorldD.10,One * World17.若有定义: int w35; 则以下不能正确表示该数组元素的表达式是_。(分数:2.00)A.*( printf(“%s/n“,*p); main( ) char * a=“Morning“, “Mtemoon“, “Evening“, “Night“; fun(a); 程序的运行结果是_。(分数:2.00)A.AfternoonB.fternoon

11、C.MorningD.oming19.有以下程序,程序中库函数 islower(ch)用以判断 ch 中的字母是否为小写字母: #include stdio.h #include void fun(char *p)int i=0;while(pi)if(pi=“i+ +;main( )char s1100=“ab cd EFG!“;fun(s1);printf(“%s/n“,s1);程序运行后的输出结果是_。 A.ab cd EFg! B.Ab Cd EFg! C.ab cd EFG! D.aB cD EFG!A B C D D解析 调用 fun 函数后,实参数组名 s1 传给形参指针 p,p

12、 也指向数组 sl。fun 函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母,就把前一个字符转换为大写。程序中语句 pi-1=pi-1-“a“+“A“;即 pi-1=pi-1=32,意思是将 pi-1中的字符转换为大写。因此 D选项正确。(分数:2.00)A.ab cd EFg!B.Ab Cd EFg!C.ab cd EFG!D.aB cD EFG!20.有以下程序: #include stdio.h void fun(char * * p) int i; for(i=0; i4; i+ + ) printf(“%s“,pi); main( ) char *s

13、6=“ABCD“,“EFGH“,“LIKL“,“MNOP“,“QRST“,“UVWX“; fun(s); printf(“/n“ ); 程序运行后的输出结果是_。(分数:2.00)A.ABCDEFGHIJKLB.ABCDC.AEIMD.ABCDEFGHUKLMNOP21.下列语句组中,正确的是_。(分数:2.00)A.char *s;s=*Olympic“;B.char s 7;s=“Olympic“;C.char *s;s=“Olympic“;D.char s7; s=“Olympic“;22.有以下程序(注:字符 a 的 ASCII 码值为 97): #include stdio.h ma

14、in( ) char *s=“abc“; do printf(“%d“, *s%10); +s; while(*s); 程序运行后的输出结果是_。(分数:2.00)A.789B.abcC.7890D.97989923.设有定义: char *c; 以下选项中能够使 c 正确指向一个字符串的是_。(分数:2.00)A.char str=“string“;c=str;B.scanf(“%s“,c);C.c=getchar();D.*c=*string“;24.设有定义语句: int(*f)(int); 则以下叙述正确的是_。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数

15、的指针变量,该函数具有一个 int 类型的形参C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址25.有以下程序: #include stdio.h int add(int a,int b)return(a+b); main( ) int k,(*f)(), a=5,b=10; f=add; 则以下函数调用语句错误的是_。(分数:2.00)A.k=f(a,b);B.k=add(a,b);C.k=(*f)(a,b);D.k=*f(a,b);26.有以下程序: #include stdio.h #include stdlib.h main(

16、 ) int *a, *b, *c; a=b=c=(int *)malloc(sizeof(int); *a=1; *b=2, *c=3; a=b; printf(“%d,%d,%d/n“,*a,*b,*c); 程序运行后的输出结果是_。(分数:2.00)A.1,1,3B.2,2,3C.1,2,3D.3,3,327.以下语句中存在语法错误的是_。(分数:2.00)A.char ss620; ss1=“right?“;B.char ss()20=“right?“;C.char *ss6; ss1=“right?“;D.char *ss()=“right?“;28.若有以下程序: #include

17、 stdio.h int k=7; void f(int * * s) int * t= * s=t; printf(“%d,%d,%d,“,k,* t,* * s); main( ) int i=3,*p= f(r); printf(“%d,%d,%d/n“,i,*p,* *r); 则程序的输出结果是_。(分数:2.00)A.3,3,3,7,7,7B.3,7,7,7,7,7C.7,7,7,3,3,3D.7,7,7,3,7,729.若有以下程序: #include stdio.h int k=7,m=5; void f(int * * s) int *t= s= *s= printf(“%d,

18、%d,%d,“,k,*t,* *s); main( ) int i=3,*p= f(r); printf(“%d,%d,%d/n“,i,*p,* * r); 则程序的输出结果是_。(分数:2.00)A.7,5,7,3,5,7,B.7,5,7,3,3,3,C.7,5,5,3,3,3,D.7,7,5,3,3,3,30.以下叙述中正确的是_。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#include stdio.h必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能31.以下关于宏的叙述中正确的是_。(分数

19、:2.00)A.宏替换没有数据类型限制B.宏定义必须位于源程序中所有语句之前C.宏名必须用大写字母表示D.宏调用比函数调用耗费时间32.有以下程序: #include stdio.h #define PT 3.5; #define S(x) PT* x * x; main( ) int a=1, b=2; printf(“%4.1f/n“,S(a+b); 程序运行后的输出结果是_。(分数:2.00)A.7.5B.31.5C.程序有错无输出结果D.14.033.若程序中有宏定义行: #define N 100 则以下叙述中正确的是_。(分数:2.00)A.宏定义行中定义了标识符 N 的值为整数

20、100B.在编译程序对 C 源程序进行预处理时用 100 替换标识符 NC.上述宏定义行实现将 100 赋给标识符 ND.在运行时用 100 替换标识符 N34.有以下程序: #include stdio.h #define S(x) 4* (x)* x+1 main( ) int k=5,j=2; printf(“%d/n“,S(k+j); 程序运行后的输出结果是_。(分数:2.00)A.33B.197C.143D.2835.有以下程序: #include stdio.h #define SUB(a) (a)-(a) main( ) int a=2,b=3,c=5,d; d=SUB(a+b)

21、*c; printf(“%d/n“,d); 程序运行后的输出结果是_。(分数:2.00)A.0B.-12C.-20D.1036.有以下程序: #include stdio.h #define f(x) x*x*x main( ) int a=3,s,t; s=f(a+1); t=f(a+1); printf(“%d,%d/n“,s,t); 程序运行后的输出结果是_。(分数:2.00)A.10,64B.10,10C.64,10D.64,6437.有以下程序: #include stdio.h #define N 5 #define M N+1 #define f(x) (x*M) main( )

22、 int i1,i2; i1=f(2); i2=f(1+1); printf(“%d%d/n“,i1,i2); 程序的运行结果是_。(分数:2.00)A.12 7B.12 12C.11 11D.11 738.若有以下程序: #include stdio.h #define S(x) x*x #define T(x) S(x)*S(x) main( ) int k=5,j=2; printf(“%d,%d/n“,S(k+j),T(k+j); 则程序的输出结果是_。(分数:2.00)A.17,289B.49,2401C.17,37D.49,28939.若有以下程序: #include stdio.

23、h #define S(x) (x)*(x) #define T(x) S(x)/S(x)+1 main( ) int k=3,j=2; printf(“%d,%d/n“, S(k+j),T(k+j); 则程序的输出结果是_。(分数:2.00)A.11,2B.25,2C.11,12D.25,2640.有以下程序: #include stdio.h #define N 2 #define M N+1 #define NUM (M+1) * M/2 main( ) printf(“%d/n“,NuM); 程序运行后的输出结果是_。(分数:5.00)A.4B.8C.9D.641.有以下程序: #in

24、clude stdio.h #define SUB(X,Y) (X+1)*Y main( ) int a=3,b=4; printf(“%d/n“,SUB(a+ +,b+ +); 程序运行后的输出结果是_。(分数:5.00)A.25B.20C.12D.1642.以下叙述中错误的是_。(分数:2.00)A.C 程序对预处理命令行的处理是在程序执行过程中进行的B.预处理命令行的最后不能以分号表示结束C.#define MAX 是合法的宏定义命令行D.在程序中凡是以“#”开始的语句行都是预处理命令行43.下面选项中关于编译预处理的叙述正确的是_。(分数:2.00)A.预处理命令行必须使用分号结尾B.

25、凡是以#号开头的行,都被称为编译预处理命令行C.预处理命令行不能出现在程序的最后一行D.预处理命令行的作用域是到最近的函数结束处44.有以下程序段: int *p; p=_malloc(sizeof-(int); 若要求使 p 指向一个 int 型的动态存储单元,在横线处应填入的是_。(分数:2.00)A.(int *)B.intC.int *D.(*int)二级 C 语言-113 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:44,分数:100.00)1.有以下程序: #include stdio.h void f(int *p,int *q); main( ) i

26、nt m=1,n=2,*r= f(r, printf(“%d,%d“,m,n); void f(int *p,int *q) p=p+1; *q=*q+1; 程序运行后的输出结果是_。(分数:5.00)A.2,3B.1,3 C.1,4D.1,2解析:解析 在 f(int*p,int *q)函数中,执行 p=p+1 是将 p 所对应的地址加 1,而*q=*q+1 是将 q 所指向的(n 的地址所对应的)值加 1,所以 m 所对应的值没有变,而 n 的值则为 3。因此 B 选项正确。2.设已有定义:float x;,则以下对指针变量 p 进行定义且赋初值的语句中正确的是_。(分数:2.00)A.i

27、nt *p=(float)x;B.float *p= C.float p=D.float *p=1024;解析:解析 指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址即 以下叙述中错误的是_。(分数:2.00)A.定义语句中的*号是一个间址运算符 B.定义语句中的*号是一个说明符C.定义语句中的 P 只能存放 double 类型变量的地址D.定义语句中,*P=中,*号是一个指针运算符,而非间址运算符,所以 A 错误。4.有以下程序: #include stdio.h main( ) int a=1,b=3,c=5; int *p1= *p=*p1*(*p2)

28、; printf(“%d/n“,c); 执行后的输出结果是_。(分数:5.00)A.1B.2C.3 D.4解析:解析 该程序中 int * p1=定义了三个指针变量,并赋值,即使 p1 指向 a;p2指向 b;p 指向 c。*p=* p1*(*p2);该语句是给 p 所指的存储单元 c 赋值,就是 p1 所指的存储单元的值,即 a 的值,与 p2 所指的存储单元(b)的值相乘,也就是 c=a*b,等价于 c=1*3=3;因此 C 选项正确。5.以下叙述中正确的是_。(分数:2.00)A.int * p1; int * * p2; int *p3;都是合法的定义指针变量的语句 B.指针变量只能通

29、过求地址运算符(与 p=/0;是等价的语句D.语句 p=NULL;执行后,指针 p 指向地址为 0 的存储单元解析:解析 B 选项描述不正确,指针变量可以通过求地址运算符(等价;D 选项中,语句 p=NULL;执行后,指针 p 并不是指向地址为 0 的存储单元,而是具有一个确定的值-“空”。因此 A选项正确。6.以下叙述中正确的是_。(分数:2.00)A.即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同B.如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息 C.设变量 p 是一个指针变量,则语句 p=0;是非法的,应该使用 p=NULL;D.指针变量之间不能

30、用关系运算符进行比较解析:解析 A 选项描述不正确,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误;C 选项中,p=NULL;和 p=0;是等价的;D 选项中,指向同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系。因此 B 选项正确。7.有以下程序: #include stdio.h main( ) int n, *p=NULL; *p= printf(“Input n:“); scanf(“%d“, printf(“output n:“); printf(“%d/n“,p); 该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,以下语句正

31、确的是_。(分数:2.00)A.int n,*p=NULL; B.*p=C.scanf(“%d“,解析:解析 选项 B 的正确写法应为 p=选项 C 的正确写法应为 scanf(“%d“,p);选项 D 的正确写法应为 printf(“%d/n“,*p)。8.若有定义语句:double x,y,*px,*py;执行了 px= py=之后,正确的输入语句是_。(分数:2.00)A.scanf(“%if%le“,px,py); B.scanf(“%f%f“ C.scanf(“%f%f“,x,y);D.scanf(“%1f%1f“,x,y);解析:解析 因为 x,y 都是 double 型数据,所以

32、输入的格式字符应为%1f,所以 B 与 C 错误。D 选项中scanf(“%1f%1f“,x,y);应为 scanf(“%1f%1f“, scanf(“%d“,B.int *p; scanf(“%d“,p);C.int k,*p= scanf(“%d“,p); D.int k, *p; *p= scanf(“%d“,p);解析:解析 A 选项中错在没有对指针进行初始化,是无效指针,并且在 scantf(“%d“,的左端*p 是指针所指内存空间的值, 则以下语句中正确的是_。(分数:2.00)A.p=a;B.p0=a;C.p0= D.p1=解析:解析 A 选项错误,因为 p 是指向一个指针数组,

33、作为数组名,不能指向别的地方。B 选项错误,因为 p0是一个 int 指针,也就是 int*;而 a 是一个指向指针的指针 int* *。C 选项正确,因为 p0是一个 int*,a12是 int, if(*s*t) k=s; s=t; t=k; return s; main( ) int i=3,j=5, *p= r=f(p,q); printf(“%d,%d,%d,%d,%d/n“,i,j,*p,*q,*r); 则程序的输出结果是_。(分数:2.00)A.3,5,5,3,5B.3,5,3,5,5 C.5,3,5,3,5D.5,3,3,5,5解析:解析 在主函数中分别给整型变量 i、j 和指

34、针型变量 p、q 赋初值,并声明指针变量 r;调用 f函数,并将实参变量 p 和 q 的值传递给形参变量 s 和 t,而且 f 函数是指针型函数,即函数的返回值是一个地址。在 f 函数中,如果条件成立,则将指针变量 s 和 t 互换,并且将指针 s 的地址返回主函数。最后输出 i,j,*p,*q,*r 的值,即 3,5,3,5,5。因此 B 选项正确。12.有以下程序: #include stdio.h #include stdlib.h int fun(int n) int *p; p=(int*)malloc(aizeof(int); *p=n; return *p; main( ) in

35、t a; a=fun(10); printf(“%d/n“,a+fun(10); 程序的运行结果是_。(分数:2.00)A.0B.10C.20 D.出错解析:解析 malloc(sizeof(int)的作用是开辟一个长度为 sizeof(int)的存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给一个整型的指针变量 p,然后执行语句*p=n,使得*p 的值为 10,并通过 return 返回此值,即 a 的值为 10。最后在主函数中通过 printf()函数输出 a+fun(10)=10+10=20。13.有以下程序: #include stdio.h void fun(int a

36、, int n) int i,t; for(i=0;in/2;i+ +) t=ai; ai=an-1-i; an-1-i=t; main( ) int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2; i8; i+ +) printf(“%d“,ki); printf(“/n“); 程序的运行结果是_。(分数:2.00)A.321678 B.876543C.1098765D.345678解析:解析 本题中的函数 fun()的功能是将数组 k 中前 5 个元素倒序,因此返回后数组 k 中的元素排列是 5,4,3,2,1,6,7,8,9,10。最后打印输

37、出 k2到 k7元素的值,即 321678,故选择 A 选项。14.有以下程序: #include stdio.h #define N 4 void fun(int aN, int b) int i; for(i=0; iN; i+ +) bi=aii-aiN-1-i; main( ) int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN; i+ +) printf(“%d,“,yi); printf(“/n“); 程序运行后的输出结果是_。(分数:2.00)A.-3,-1,1,3, B.-12,-3

38、,0,0,C.0,1,2,3,D.-3,-3,-3,-3,解析:解析 本题中由 fun 函数可知,b0=a00-a03=1-4=-3,b1=a11-a12=6-7=-1,b2=a22-a21=11-10=1,b3=a33-a31=16-13=3。因此主函数中打印 y 数组元素的值为 A 选项。15.有以下程序: #include stdio.h #include stdlib.h void fun(int *p1, int *p2, int *s) s=(int * )malloc(sizeof(int); *s=*p1+*(p2+); main( ) int a2=1,2,b2=10,20,

39、*s=a; fun(a,b,s); printf(“%d/n“, *s); 程序运行后的输出结果是_。(分数:2.00)A.11B.10C.1 D.2解析:解析 本题考查数组名作为函数参数。执行 fun 函数后,s 的值并没有发生变化,仍然是指向 a,所以输出结果为 1,故选项 C 正确。16.有以下程序: #include stdio.h #include string.h main( ) char str20=“One * World“,“One * Dream!“,*p=str1; printf(“%d,“,strlen(P); printf(“%s/n“,p); 程序运行后的输出结果是

40、_。(分数:2.00)A.10, One * Dream! B.9, One * Dream!C.9,One * WorldD.10,One * World解析:解析 p 是指向二维字符数组第二行“One*Dream!”的数组指针,所以长度是 10,打印输出的也是该字符串。17.若有定义: int w35; 则以下不能正确表示该数组元素的表达式是_。(分数:2.00)A.*(B 选项中的“*(*w+3)”表示 w03;C 选项中的“*(*(w+1)”表示 w01;而 D 选项中的“*(w+1)4”的正确写法是“(*w+1)4”,表示 w14,因此选择 D 选项。18.有以下程序: #inclu

41、de stdio.h void fun(char* *p) +p; printf(“%s/n“,*p); main( ) char * a=“Morning“, “Mtemoon“, “Evening“, “Night“; fun(a); 程序的运行结果是_。(分数:2.00)A.Afternoon B.fternoonC.MorningD.oming解析:解析 本题主函数中定义了一个指针数组 a,可以将它看成一个以字符指针为元素的一维数组。和一般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名 a 可以用做函数 fun()的实参。在 fun()函数

42、中,+p 操作使形参 p 向后移动一个字符指针的位置,即指针 a1的位置。故最后通过 printf()函数输出的字符串为“Afternoon”。因此 A 选项正确。19.有以下程序,程序中库函数 islower(ch)用以判断 ch 中的字母是否为小写字母: #include stdio.h #include void fun(char *p)int i=0;while(pi)if(pi=“i+ +;main( )char s1100=“ab cd EFG!“;fun(s1);printf(“%s/n“,s1);程序运行后的输出结果是_。 A.ab cd EFg! B.Ab Cd EFg! C

43、.ab cd EFG! D.aB cD EFG!A B C D D解析 调用 fun 函数后,实参数组名 s1 传给形参指针 p,p 也指向数组 sl。fun 函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母,就把前一个字符转换为大写。程序中语句 pi-1=pi-1-“a“+“A“;即 pi-1=pi-1=32,意思是将 pi-1中的字符转换为大写。因此 D选项正确。(分数:2.00)A.ab cd EFg!B.Ab Cd EFg!C.ab cd EFG!D.aB cD EFG! 解析:解析 调用 fun 函数后,实参数组名 s1 传给形参指针 p,p 也指向

44、数组 sl。fun 函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母,就把前一个字符转换为大写。程序中语句 pi-1=pi-1-“a“+“A“;即 pi-1=pi-1=32,意思是将 pi-1中的字符转换为大写。因此 D 选项正确。20.有以下程序: #include stdio.h void fun(char * * p) int i; for(i=0; i4; i+ + ) printf(“%s“,pi); main( ) char *s6=“ABCD“,“EFGH“,“LIKL“,“MNOP“,“QRST“,“UVWX“; fun(s); printf(

45、“/n“ ); 程序运行后的输出结果是_。(分数:2.00)A.ABCDEFGHIJKLB.ABCDC.AEIMD.ABCDEFGHUKLMNOP 解析:解析 本题考查字符串数组。s 表示指向字符数组的指针,s 指向了第一个字符串,s+指向了第二个字符串,所以最后输出结果为 D 选项。21.下列语句组中,正确的是_。(分数:2.00)A.char *s;s=*Olympic“; B.char s 7;s=“Olympic“;C.char *s;s=“Olympic“;D.char s7; s=“Olympic“;解析:解析 字符型指针变量可以用选项 A 的赋值方法赋值:char*s;s=“Ol

46、ympic“,选项 C 的写法:char* s,s=“Olympic“;是错误的。字符数组可以在定义的时候初始化:chat s=“Olympic“;或者char s=“Olympic“;都是正确的,但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地址),所以选项 B 和选项 D 都是错误的。对于本例,选项 B、D 中的字符数组 s 的大小至少为 8,才能存放下字符串(字符串的末尾都有结束标志“/0”)。22.有以下程序(注:字符 a 的 ASCII 码值为 97): #include stdio.h main( ) char *s=“abc“; do printf(“%d“, *s%10); +s; while(*s); 程序运行后的输出结果是_。(分数:2.00)A.789 B.abcC.7890D.979899解析:解析 因为小写字符 a、b、c 的 ASCII 的值分别为 97、98、99,而

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