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

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

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

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

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

    1、二级 C 语言-443 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:54,分数:100.00)1.有以下程序: #includestdio.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; 程序的运行结果是_。(分数:1.50)A.2,3B.1,3C.1,4D.1,22.设已有定义 float x;,则下列对指针变量 p 进行定义且赋初值的语句中正确的是_。(分数:1.50)A.int*p=(floa

    2、t)x;B.float*p=C.float p=D.float*p=1024;3.若有定义语句 double a,*p=,下列叙述中错误的是_。(分数:1.50)A.定义语句中的*号是一个间址运算符B.定义语句中的*号是一个说明符C.定义语句中的 p 只能存放 double 类型变量的地址D.定义语句中,*p= int*p1= *p=*p1*(*p2); printf(“%d/n“,c); 程序的运行结果是_。(分数:1.50)A.1B.2C.3D.45.有以下程序: #includestdio.h main() int n,*p=NULL; *p= printf(“Input n:“); s

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

    4、1.50)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);8.若有定义语句 int a23,*p 3;,则以下语句中正确的是_。(分数:1.50)A.p=a;B.p0=a;C.p0=D.p1=9.设有以下函数:void fun(int n,char*s).,则下列对函数指针的定义和赋值均正确的是_。(分数:1.50)A.void(*pf)(int,char);pf=B.void*pf();pf=fun;C.void*pf();*pf=fun;D.void(

    5、*pf)(int,char*);pf=fun;10.下列函数的功能是_。 void fun(char*a,char*b) while(*b=*a)!=“/0“)a+;b+; (分数:1.50)A.将 a 所指字符串赋给 b 所指空间B.使指针 b 指向 a 所指字符串C.将 a 所指字符串和 b 所指字符串进行比较D.检查 a 和 b 所指字符串中是否有“/0“11.有以下程序: #includestdio.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

    6、,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“); 程序的运行结果是_。(分数:1.50)A.-3,-1,1,3,B.-12,-3,0,0,C.0,1,2,3,D.-3,-3,-3,-3,12.有以下程序: #ineludestdio.h #includestring.h main() char str20=“One*World“,“One*Dream!“,*p=str1; printf(“%d,“,strlen(p); printf(“%s/n“,p)

    7、; 程序的运行结果是_。(分数:1.50)A.10,One*Dream!B.9,One*Dream!C.9,One*WorldD.10,One*World13.若有定义 int w35;,则以下不能正确表示该数组元素的表达式是_。(分数:1.50)A.*(s=“Olympic“;B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;15.有以下程序(注:字符 a 的 ASCII 码值为 97): #includestdio.h main() char*s=“abc“; do printf(“%d“,*s%10); +s

    8、; while(*s); 程序的运行结果是_。(分数:1.50)A.789B.abcC.7890D.97989916.设有定义“char*c;”,以下选项中能够使 c 正确指向一个字符串的是_。(分数:1.50)A.char str=“string“;c=str;B.scanf(“%s“,c);C.c=getchar();D.%c=“string“;17.有以下函数: int fun(char*x,char*y) int n=0; while(*x=*y) y+; n+; return n; 函数的功能是_。(分数:2.00)A.将 y 所指字符串赋给 x 所指存储空间B.查找 x 和 y 所

    9、指字符串中是否有“/0“C.统计 x 和 y 所指字符串中最前面连续相同的字符个数D.统计 x 和 y 所指字符串中相同的字符个数18.下列语句组中正确的是_。(分数:2.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“;C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;19.设有定义语句“int(*f)(int);”则下列叙述中正确的是_。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数的指针变量,该函数具有一个 int 类型的形参C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返

    10、回值是基类型为 int 类型的地址20.有以下程序: #includestdio.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,h);C.k=(*f)(a,b);D.k=*f(a,b);21.下列语句中存在语法错误的是_。(分数:2.00)A.char ss620;ss1=“right?“;B.char ss20=“right?“;C.char*ss6;ss1=“right?“;D.char*ss=“r

    11、ight?“;22.下列叙述中正确的是_。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C 源程序的起始位置C.#includestdio.h必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能23.下列关于宏的叙述中正确的是_。(分数:2.00)A.宏替换没有数据类型限制B.宏定义必须位于源程序中所有语句之前C.宏名必须用大写字母表示D.宏调用比函数调用耗费时间24.有以下程序: #includestdio.h #define PT 3.5; #define S(X)PT*x*x; main() int a=1,b=2; pr

    12、intf(“%4.1f/n“,S(a+b); 程序的运行结果是_。(分数:2.00)A.7.5B.31.5C.程序有错无输出结果D.14.025.若程序中有宏定义行:#define N 100,则下列叙述中正确的是_。(分数:2.00)A.宏定义行中定义了标识符 N 的值为整数 100B.在编译程序对 C 源程序进行预处理时用 100 替换标识符 NC.上述宏定义行实现将 100 赋给标识符 ND.在运行时用 100 替换标识符 N26.有以下程序: #includestdio.h #define S(x)4*(x)*x+1 main() int k=5,j=2; printf(“%d/n“,

    13、S(k+j); 程序的运行结果是_。(分数:2.00)A.33B.197C.143D.2827.有以下程序: #includestdio.h #define SUB(a)(a)-(a)main() int a=2,b=3,c=5,d; d=SUB(a+b)*c; printf(“%d/n“,d); 程序的运行结果是_。(分数:2.00)A.0B.-12C.-20D.1028.下列叙述中错误的是_。(分数:2.00)A.C 程序对预处理命令行的处理是在程序执行过程中进行的B.预处理命令行的最后不能以分号表示结束C.#define MAX 是合法的宏定义命令行D.在程序中,凡是以“#”开始的语句行

    14、都是预处理命令行29.若有语句 typedef struct Sint g;char h;T;,则下列叙述中正确的是_。(分数:2.00)A.可用 S 定义结构体变量B.可用 T 定义结构体变量C.S 是 struct 类型的变量D.T 是 struct S 类型的变量30.设有语句 typedef struct TTchar c;int a4;CIN;,则下列叙述中正确的是_。(分数:2.00)A.CIN 是 struct TT 类型的变量B.TT 是 struct 类型的变量C.可以用 TT 定义结构体变量D.可以用 CIN 定义结构体变量31.下列叙述中错误的是_。(分数:2.00)A.

    15、可以用 typedef 将已存在的类型用一个新的名字来代表B.可以通过 typedef 增加新的类型C.用 typedef 定义新的类型名后,原有类型名仍有效D.用 typedef 可以为各种类型起别名,但不能为变量起别名32.有以下程序: #includestdio.h main() struct STU char name9; char sex; double score2; ; struct STU a=“Zhao“,“m“,85.0,90.0,b=“Qian“,“f“,95.0,92.0; b=a; printf(“%s,%c,%2.0f,%2.0f/n“,b.name,b.sex,b

    16、.score0,b.score1); 程序的运行结果是_。(分数:2.00)A.Qian,m,85,90B.Zhao,m,85,90C.Zhao,f,95,92D.Qian,f,95,9233.下列结构体类型说明和变量定义中正确的是_。(分数:2.00)A.struct REC;int n;char c;REC t1,t2;B.typedef structint n;char c;REC;REC t1,t2;C.typedef struct REC;int n=0;char c=“A“;t1,t2;D.structint n;char c;REC;REC t1,t2;34.下列结构体的定义语句

    17、中错误的是_。(分数:2.00)A.struct ordint x;int y;int z;struct ord a;B.struct ordint x;int y;int z;struct ord a;C.struct ordint x;int y;int z;a;D.structint x;int y;int z;a;35.设有定义: struct complex int real,unreal; data1=1,8,data2; 则下列赋值语句中错误的是_。(分数:2.00)A.data2=(2,6);B.data2=data1;C.data2.real=data1.real;D.dat

    18、a2.real=data1.unreal;36.有以下程序: struct stint x;int*y;*pt; int a=1,2,b=3,4; struct st c2=10,a,20,b; pt=c; 以下选项中表达式值为 11 的是_。(分数:2.00)A.+pt-xB.pt-xC.*pt-yD.(pt+)-x37.有以下定义和语句: struct workers int num; char name20;char c; struct int day; int month; int year; s; ; struct workers w,*pw; pw= 能给 w 中 year 成员赋

    19、 1980 的语句是_。(分数:2.00)A.pw-year=1980;B.year=1980;C.s.year=1980;D.*pw.year=1980;38.有以下程序: #includestdio.h struct ttint x;struct tt*y;*p; struct tt a4=20,a+1,15,a+2,30,a+3,17,a; main() int i; p=a; for(i=1;i=2;i+) printf(“%d,“,p-x); p=p-y; 程序的运行结果是_。(分数:2.00)A.20,30,B.30,17C.15,30,D.20,15,39.设有定义:struct

    20、char mark12;int num1;double num2;t1,t2;,若变量均已正确赋初值,则下列语句中错误的是_。(分数:2.00)A.t1=t2;B.t2.num1=t1.num1;C.t2.mark=t1.mark;D.t2.num2=t1.num2;40.有以下程序: #includestdio.h struct s int a,b; data2=10,100,20,200; main() struct S p=data1; printf(“%d/n“,+(p.a); 程序的运行结果是_。(分数:2.00)A.10B.11C.20D.2141.有以下结构体说明、变量定义和赋值

    21、语句: struct STDchar name10;int age;char sex;s5,*ps;ps= 则下列 scanf 函数调用语句有错误的是_。(分数:2.00)A.scanf(“%s“,s0.name);B.scanf(“%d“,C.scanf(“%c“,D.scanf(“%d“,ps-age);42.有以下程序: #includestdio.h typedef structint b,p;A; void f(A c)/*注意:c 是结构变量名*/ int j; c.b+=1; c.p+=2; main() int i; A a=1,2; f(a); printf(“%d,%d/n

    22、“,a.b,a.p); 程序的运行结果是_。(分数:2.00)A.2,4B.1,2C.1,4D.2,343.有以下程序: #includestdio.h struct S int n;int a20; void f(struct S*p) int i,j,t; for(i=0;ip-n-1;i+) for(j=i+1;jp-n;j+) if(p-aip-aj) t=p-ai; p-ai=p-aj; p-aj=t; main() int i; struct S s=10,2,3,1,6,8,7,5,4,10,9; f( for(i=0;is.n;i+) printf(“%d,“,s.ai); 程

    23、序的运行结果是_。(分数:2.00)A.2,3,1,6,8,7,5,4,10,9,B.10,9,8,7,6,5,4,3,2,1,C.1,2,3,4,5,6,7,8,9,10,D.10,9,8,7,6,1,2,3,4,5,44.程序中已构成如下不带头节点的单向链表结构,指针变量 s、p、q 均已正确定义,并用于指向链表节点,指针变量 s 总是作为指针指向链表的第一个节点。 (分数:2.00)A.删除尾节点B.尾节点成为首节点C.删除首节点D.首节点成为尾节点45.假定已建立以下链表结构,且指针 p 和 q 已指向如图所示的节点。 (分数:2.00)A.p-next=q-next;free(q);

    24、B.p=q-next;free(q);C.p=q;free(q);D.(*p).next=(*q).next;free(p);46.下列关于 C 语言文件的叙述中正确的是_。(分数:2.00)A.文件由一系列数据依次排列组成,只能构成二进制文件B.文件由结构序列组成,可以构成二进制文件或文本文件C.文件由数据序列组成,可以构成二进制文件或文本文件D.文件由字符序列组成,其类型只能是文本文件47.下列叙述中正确的是_。(分数:2.00)A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失B.打开一个已存在的文件并进行写操作后,原有文件中的全部数据必定被覆盖C.在一个程序中对文件

    25、进行写操作后,必须先关闭该文件然后再打开才能读到第一个数据D.C 语言中的文件是流式文件,因此只能顺序存取数据48.有以下程序: #includestdio.h main() FILE*fp;int a10=1,2,3,i,n; fp=fopen(“d1.dat“,“w“); for(i=0;i3;i+) fprintf(fp,“%d“,ai); fprintf(fp,“/n“); fclose(fp); fp=fopen(“d1.dat“,“r“); fscanf(fp,“%d“, fclose(fp); printf(“%d/n“,n); 程序的运行结果是_。(分数:2.00)A.321B

    26、.12300C.1D.12349.设文件指针 fp 已定义,执行语句 fp=fopen(“file“,“w“);后,下列针对文本文件 file 操作叙述的选项中正确的是_。(分数:2.00)A.只能写不能读B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写50.有以下程序: #includestdio.h main() FILE*f; f=fopen(“filea.txt“,“w“); fprintf(f,“abc“); fclose(f); 若文本文件 filea.txt 中原有内容为 hello,则运行以上程序后,文件 filea.txt 中的内容为_。(分数:2.

    27、00)A.abcloB.abcC.helloabcD.abchello51.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中 buffer 代表的是_。(分数:2.00)A.一个内存块的字节数B.一个整型变量,代表待读取的数据的字节数C.一个文件指针,指向待读取的文件D.一个内存块的首地址,代表读入数据存放的地址52.有以下程序: #includestdio.h main() FILE*pf; char*s1=“China“,*s2=“Beijing“; pf=fopen(“abc.dat“,“wb+“); fwrite(s2,7,1,pf); r

    28、ewind(pf);/*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf); 程序执行后,abc.dat 文件的内容是_。(分数:2.00)A.ChinaB.ChinangC.ChinaBeijingD.BeijingChina53.有以下程序: #includestdio.h main() FILE*fp;char str10; fp=fopen(“myfile.dat“,“w“); fputs(“abc“,fp); fclose(fp); fp=fopen(“myfile.dat“,“a+“); fprintf(fp,“%d“,28); rewind(

    29、fp); fscanf(fp,“%s“,str); puts(str); fclose(fp); 程序的运行结果是_。(分数:2.00)A.abcB.28cC.abc28D.因类型不一致而出错54.设 fp 为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为_。(分数:2.00)A.0B.“/0“C.非 0 值D.NULL二级 C 语言-443 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:54,分数:100.00)1.有以下程序: #includestdio.h void f(int*p,int*q); main() int m=1,n

    30、=2,*r= f(r, printf(“%d,%d“,m,n); void f(int*p,int*q) p=p+1; *q=*q+1; 程序的运行结果是_。(分数:1.50)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 进行定义且赋初值的语句中正确的是_。(分数:1.50)A.int*p=(float)

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

    32、; 程序的运行结果是_。(分数:1.50)A.1B.2C.3 D.4解析:解析 该程序中 int*p1=指定义 3 个指针变量,并赋值,即使 p1 指向 a;p2 指向 b;p 指向 c。*p=*p1*(*p2);语句是给 p 所指的存储单元 c 赋值,就是 p1 所指的存储单元的值,即 a的值,与 p2 所指的存储单元 b 的值相乘,也就是 c=a*b,等价于 c=1*3=3,因此 C 选项正确。5.有以下程序: #includestdio.h main() int n,*p=NULL; *p= printf(“Input n:“); scanf(“%d“, printf(“output n

    33、:“); printf(“%d/n“,p); 该程序试图通过指针 p 为变量 n 读入数据并输出,但程序有多处错误,下列语句中正确的是_。(分数:1.50)A.int n,*p=NULL; B.*p=C.scanf(“%d“,解析:解析 B 选项的正确写法应为 p=,执行了 px=py=之后,正确的输入语句是_。(分数:1.50)A.scanf(“%lf%le“,px,py); B.scanf(“%f%f“C.scanf(“%f%f“,x,y);D.scanf(“%lf%lf:,x,y);解析:解析 因为 x 和 y 都是 double 型数据,所以输入时的格式字符应为%lf,所以 B、C 选

    34、项错误。D选项中的 scanf(“%lf%lf“,x,y);应为 scanf(“%lf%lf“,。7.下列程序段中完全正确的是_。(分数:1.50)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);解析:解析 A 选项中错在没有对指针进行初始化,无效指针,并且在 scanf(“%d“,,则以下语句中正确的是_。(分数:1.50)A.p=a;B.p0=a;C.p0= D.p1=解析:解析 A 选项错误,因为 p 是指向一个指针数组,作为数组名,不能指向别的地

    35、方。B 选项错误,因为 p0是一个 int 指针,也就是 int *;而 a 是一个指向指针的指针 int*。C 选项正确,因为 p0是一个 int*,a12是 int,pf=B.void*pf();pf=fun;C.void*pf();*pf=fun;D.void(*pf)(int,char*);pf=fun; 解析:解析 函数的参数可以是指针类型,它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的入口地址,指向函数的指针应该定义为 void(*pf)()。如果定义为 void*pf(),则表示函数 pf的返回值是一个基类型为 void 的指针,因此 D 选项正确。10.下列函数

    36、的功能是_。 void fun(char*a,char*b) while(*b=*a)!=“/0“)a+;b+; (分数:1.50)A.将 a 所指字符串赋给 b 所指空间 B.使指针 b 指向 a 所指字符串C.将 a 所指字符串和 b 所指字符串进行比较D.检查 a 和 b 所指字符串中是否有“/0“解析:解析 while 循环条件为:(*b=*a)!=“/0“,执行时先把指针 a 所指向的字符赋给指针 b 所在的内存单元,如果该字符不是结束标识“/0”,执行循环体“a+;b+;”,指针 a、b 分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针 a 所指向的字符赋给指针 b 所

    37、在的内存单元,直到遇到结束标识为止,因此 A 选项正确。11.有以下程序: #includestdio.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“); 程序的运行结果是_。(分数:1.50)A.-3,-1,1,3, B.-12,-3,0,0,C.0,1,2,3,D.

    38、-3,-3,-3,-3,解析:解析 本题由 fun 函数可知,b0=a00-a03=1-4=-3,b1=a11-12=6-7=-1,b2=a22-21=11-10=1,b3=a33-31=16-13=3,所以主函数中打印 y 数组元素的值为 A 选项。12.有以下程序: #ineludestdio.h #includestring.h main() char str20=“One*World“,“One*Dream!“,*p=str1; printf(“%d,“,strlen(p); printf(“%s/n“,p); 程序的运行结果是_。(分数:1.50)A.10,One*Dream! B.

    39、9,One*Dream!C.9,One*WorldD.10,One*World解析:解析 p 是指向二维字符数组第二行 One*Dream!的数组指针,所以长度是 10,打印输出的也是该字符串。13.若有定义 int w35;,则以下不能正确表示该数组元素的表达式是_。(分数:1.50)A.*(s=“Olympic“; B.char s7;s=“Olympic“;C.char*s;s=“Olympic“;D.char s7;s=“Olympic“;解析:解析 字符型指针变量可以用 A 选项的赋值方法:char*s;s=“Olympic“。C 选项的写法:char*s,s=“Olympic“;是

    40、错误的。字符数组可以在定义的时候初始化:char s=“Olympic“;或者char s=“Olympic“,但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地址),所以 B 选项和 D 选项都是错误的。对于本例,B、D 选项中字符数组 s 的大小至少为 8,才能存放下字符串(字符串的末尾都有结束标志“/0“),同时此时 s 为字符数组的地址,是常量,不能为其赋值。15.有以下程序(注:字符 a 的 ASCII 码值为 97): #includestdio.h main() char*s=“abc“; do printf(“%d“,*s%10); +s; while(*s);

    41、 程序的运行结果是_。(分数:1.50)A.789 B.abcC.7890D.979899解析:解析 因为小写字符 a、b、c 的 ASCII 码值分别为 97、98、99,而在 do while 循环语句中,每次对字符的 ASCII 码值取余数并输出,所以分别输出 7、8、9。16.设有定义“char*c;”,以下选项中能够使 c 正确指向一个字符串的是_。(分数:1.50)A.char str=“string“;c=str; B.scanf(“%s“,c);C.c=getchar();D.%c=“string“;解析:解析 选项 A 为正确用法,先将字符串存于字符数组中,然后将数组名赋给字

    42、符指针(数组名代表数组首地址,定义数组时为其分配确定的地址)。C 选项错误,getchar()函数输入一个字符给字符型变量,而不是字符指针。B 选项和 D 选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在 B 选项和 D 选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。17.有以下函数: int fun(char*x,char*y) int n=0; while(*x=*y) y+; n+; return n; 函数的功能是_。(分数:2.00)A.将 y

    43、所指字符串赋给 x 所指存储空间B.查找 x 和 y 所指字符串中是否有“/0“C.统计 x 和 y 所指字符串中最前面连续相同的字符个数 D.统计 x 和 y 所指字符串中相同的字符个数解析:解析 本题中由循环条件可知,遇到“/0“或 x 与 y 所指的字符的值不等中的一个条件时就结束,所以功能是统计 x 和 y 所指字符串中最前面连续相同的字符个数。18.下列语句组中正确的是_。(分数:2.00)A.char*s;s=“BOOK!“;B.char*s;s=“BOOK!“; C.char s10;s=“BOOK!“;D.char s;s=“BOOK!“;解析:解析 A 选项去掉大括号就正确了

    44、;C 选项和 D 选项应在定义时赋初值。B 选项正确。19.设有定义语句“int(*f)(int);”则下列叙述中正确的是_。(分数:2.00)A.f 是基类型为 int 的指针变量B.f 是指向函数的指针变量,该函数具有一个 int 类型的形参 C.f 是指向 int 类型一维数组的指针变量D.f 是函数名,该函数的返回值是基类型为 int 类型的地址解析:解析 int(*f)(int);为指向函数的指针变量的定义方法,其中 f 为指向函数的指针变量,第一个int 为函数返回值类型,第二个 int 为函数的形参类型,因此 B 选项正确。20.有以下程序: #includestdio.h in

    45、t 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,h);C.k=(*f)(a,b);D.k=*f(a,b); 解析:解析 D 选项中,*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量 k。21.下列语句中存在语法错误的是_。(分数:2.00)A.char ss620;ss1=“right?“; B.char ss20=“right?“;C.char*ss

    46、6;ss1=“right?“;D.char*ss=“right?“;解析:解析 数组定义后,不可以对数组整体赋值,s 是二维数组,因 ss1是一维字符数组,即字符串,字符串赋值可以使用“strcpy(ss1,“right“);”这样的形式,而 A 选项中对二维数组中的第“1”维(相当于一个一维数组)赋值是不可以的。B 选项和 D 选项是定义时对数组初始化,这是可以的。在 C 选项中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。22.下列叙述中正确的是_。(分数:2.00)A.在 C 语言中,预处理命令行都以“#”开头 B.预处理命令行必须位于 C 源程序的起始位置C.#includestdio.h必须放在 C 程序的开头D.C 语言的预处理不能实现宏定义和条件编译的功能解析:解析 预处理命令是以“#”号开头的命令,它们不是 C 语言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以 B、C 选项错误。C 语言的预处理能够实现宏定义


    注意事项

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




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

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

    收起
    展开