2021年山西省朔州市全国计算机等级考试C语言程序设计重点汇总测试卷(含答案)_第1页
2021年山西省朔州市全国计算机等级考试C语言程序设计重点汇总测试卷(含答案)_第2页
2021年山西省朔州市全国计算机等级考试C语言程序设计重点汇总测试卷(含答案)_第3页
2021年山西省朔州市全国计算机等级考试C语言程序设计重点汇总测试卷(含答案)_第4页
2021年山西省朔州市全国计算机等级考试C语言程序设计重点汇总测试卷(含答案)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

2021年山西省朔州市全国计算机等级考试C语言程序设计重点汇总测试卷(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.第

2

现有如下程序段

#include"stdio.h"

main()

{intk[30]={12,324,45,6,768,98,21,34,453,456};

intcount=0,i=0;

while(k[i])

{if(k[i]%2==0‖k[i]%5==0)count++;

i++;}

printf("%d,%d\n",count,i);}

则程序段的输出结果为

A.7,8B.8,8C.7,10D.8,10

2.在如下结构定义中,不正确的是()。A.

B.

C.

D.

3.

4.

5.以下有关宏替换的叙述不正确的是()。

A.双引号中出现的宏名不替换B.使用宏定义可以嵌套C.宏定义仪仪是符号替换D.宏名必须用大写字母表示

6.若有语句“typedefstructS{intg;charh;}T;”,则下列叙述中正确的是()。

A.可用S定义结构体变量B.可用T定义结构体变量C.S是struct类型的变量D.T是structS类型的变量

7.视图设计一般有3种设计次序,下列不属于视图设计次序的是()。

A.自顶而下B.由内向外C.由外向内D.自底向上

8.

9.下面不属于需求分析阶段任务的是()。

A.确定软件系统的功能需求B.确定软件系统的性能需求C.制定软件集成测试计划D.需求规格说明书评审

10.有定义语句:“int*p[4];”,以下选项中与此语句等价的是()。

A.intp[4];B.int**P;C.int*(p[4]);D.int(*p)[4];

11.下面哪个序列不是此图的一个拓扑排序()A.ebfgadchB.aebdgfchC.adchebfgD.Aedbfgch

12.以下关于顺序存储结构的叙述中,()是不正确的。

A.存储密度大

B.逻辑上相邻的结点物理上不必邻接

C.可以通过计算机直接确定第i个结点的存储地址

D.插入、删除运算操作不方便

13.有以下程序:#include<stdio.h>main(){FILE*fp;charstr[10];fp=fopen("myfile,dat","");{puts("abe",ip);fclose(fp);fp=fopen("myfile.dat","a*");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%S",str);puts(str);fclose(fp);}程序运行后的输出结果是()。A.abcB.28cC.abc28D.内类型不一致而出错

14.以下数据结构中,()是线性结构。

A.有向图B.栈C.线索二叉树D.B树

15.有定义语句:inta=1,b=2,c=3,x;,则以下选项中各程序段执行后,x的值不为3的是A.if(c<a)x=1;elseif(b<a)x=2;elsex=3;

B.if(a<3)x=3;elseif(b<a)x=2;elsex=1;

C.if(a<3)x=3;if(a<2)x=2;if(a<1)x=1;

D.if(a<b)x=b;if(b<c)x=c;if(c<a)x=a;

16.以下选项中叙述错误的是()。

A.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值

B.在同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内

C.C程序函数中定义的自动变量,系统不自动赋确定的初值

D.C程序函数的性能不可以说明为static型变量

17.以下选项中关于C语言算术表达式的叙述中错误的是()。

A.可以通过使用圆括号来改变算术表达式中某些算术运算符的计算优先级

B.C语言采用的是人们熟悉的四则运算规则,即先乘除后加减

C.算术表达式中,运算符两侧类型不同时,将进行类型之间的转换

D.C语言仅提供了“+”“-”“*”“/”这4个基本算术运算符

18.设有以下定义则下面语句中错误的是()。A.a++;B.b++C.c++;D.d++;

19.有以下程序

#include<stdio.h>

main()

{charch[3][5]={“AAAA”,”BBB”,”CC”};

printf(“%s\n”,ch[1];)

}

程序运行后的输出结果是()A.A.AAAA

B.CC

C.BBBCC

D.BBB

20.有以下程序:#include<stdio.h>main(){charb[]=“happynewyear”,k;for(k=0;b[k];k++) printf(“%c”,b[k]-‘a’+‘A’);}程序运行后的输出结果是()。

A.hAppynewyeArB.HappynewyearC.HAPPYNEWYEARD.HaPPYNEWYEaR

二、2.填空题(20题)21.若输入tear、test、arj,则下列程序的运行结果为【】。

main()

{char*strl[20],*str2[20],*str3[20];

charswap();

scanf("%s",str1);

scanf("%s",str2);

scanf("%s",str3);

if(strcmp(str1,str2)>0)swap(str1,str2);

if(strcmp(str1,str3)>0)swap(str1,str3);

if(strcmp(str2,str3)>0)swap(str2,str3);

printf("%s%s%s\n",str1,str2,str3);

}

charswap(p1,p2)

char*p1,*p2;

{char*p[20];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);

}

22.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。

main()

{intt=0,s=0,i;

for(i=1;i<=5;i++)

{t=i+______;s=s+t;}

printf("s=%d\n",s);

}

23.以下函数用来求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。请填空。

#include<conio.h>

#include<stdio.h>

intfun(int*s,intt,int*k)

{inti;

*k=0;

[8]

if(s[*k]<s[i])*k=i;

return[9];}

main()

{inta[10]:{876,675,896,101,301,401,980,431,451,777},k;

fun(a,10,&k);

pfintf("%d,%d\n"

24.在面向对象方法中,类之间共享属性和方法的机制称为______。

25.阅读下面程序,则执行后的输出结果是【】。

#include"stdio.h"

main()

{intx,y,z;

x=1;y=2;z=3;

if(x>y)if(x>z)printf("%d",x);

elseprintf("%d",y);

printf("%d\n",z);}

26.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。

27.如果一个工人可管理多个设施,而一个设施只可被一个工人管理,则实体“工人”与实体“设备”之间存在【】联系。

28.当运行以下程序时,输入abcd,程序的输出结果是:()。

insert(charstr[])

{inti;

i=strlen(str);

while(i>0)

{str[2*i]=str[i];str[2*i-1]='*';i--;}

printf("%s\n",str);

}

main()

{charstr[40];

scanf("%s",str);insert(str);

}

29.下列程序的输出结果是______。

main()

{inta[]={31,27,20,12,6,1),*p=a;

p++;

printf("%d\n",*(p+2));

}

30.设i,j,k均为int型变量,则执行完下面的for语句后,k的值为【】。

for(i=0,j=10;i<=j;i++,j--)k=i+j;

31.下列语句能循环______次。

ints=12;

while(s);

--s;

32.若输入tc,则程序的运行结果为【】。

#include<stdio.h>

main()

{charstr[40];

fscanf(stdin,"%s",str);

fprintf(stdout,"%s\n",str);

}

33.若有定义:inta=10,b=8,c=4;然后顺序执行下列语句后,变量a中的值是()。c=(b-=(a-4));a=(c%2)+(b-1);

34.以下程序运行后的输出结果是______。

#include<string.h>

main()

{charch[]="abc",x[3][4];inti;

for(i=0;i<3;i++)strcpy(x[i],ch);

for(i=0;i<3;i++)printf("%s",&x[i][i]);

printf("\n");

}

35.有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是【】。

structnode

{chardata;

structnode*next;}a,b

36.若fp已正确定义为—‘个文件指针,d1.dd为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen(______);。

37.下面程序的运行结果是()。#include<stdio.h>main(){chara[80],*p="AbabCDcd";inti=0,j=0;while(*(p++)!='\0'){if(*p>='a'&&*p<='z'){a[i]=*p;i++;}}a[i]='\0';puts(A);}

38.一名学生只能住一间宿舍,一间宿舍可住多名学生,则实体“宿舍”与实体“学生”的联系属于()的联系。

39.以下程序运行后的输出结果是【】。

main()

{inti,m=0,n=0,k=0;

for(i=9;i<=11;i++)

switch(i/10)

{case0:m++;n++;break;

case1:n++;break;

default:k++;n++;

}

printf("%d%d%d\n",m,n,k);

}

40.已知字符A的ASCII代码值为65,以下程序运行时若从键盘输入:B33<回车>。则输出结果是______。

#include<stdio,h>

main()

{

chara,b;

a=geCchar();scanf("%d“,&b);

a=a-'A'+‘0';b=b*2;

printf('%c%c\n",a,b);

}

三、1.选择题(20题)41.fgetc函数的作用是从指定文件读入—个字符,该文件的打开方式必须是______。

A.只读B.追加C.读或读写D.以上均正确

42.以下程序的输出结果是______。main(){intnum=0;while(num<=2){num++;printf("%d\n",num);}}

D.1111222334

43.以下不合法的数值常量是()。

A.11B.lelC.8.0E0.5D.0xabcd

44.下列说法正确的是()。

A.在C语言中,可以使用动态内存分配技术,定义元素个数可变的数组

B.在C语言中,数组元素的个数可以不确定,允许随机变动

C.在C语言中,数组元素的数据类型可以不一致

D.在C语言中,定义了一个数组后,就确定了它所容纳的元素的个数

45.若有定义语句:inta[2][3],*p[3],则以下语句中正确的是A.p=a;B.p[0]=a;C.p[0]=&a[1][2];D.p[1]=&a;

46.有以下程序

main()

{inta[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

for(i=0;i<4;i++)printf("%d,",a[i][i]);

}

程序运行后的输出结果是

A.1,6,5,7,B.8,7,3,1,C.4,7,5,2,D.1,6,2,1,

47.可以在C语言程序中用做用户标识符的一组标识符是()。

A.voidB.aa123_abcBBNcasC.as+b3D.6f-123DoIfSIG

48.现有如下程序段#include"stdio.h"main(){intk[30]={12,324,45,6,768,98,21,34,453,456};intcount=0,i=0;while(L[i]){if(k[i]%2==0||k[i]%5==0)count++;i++;}printf("%d,%d\n",count,i);}则程序段的输出结果为

A.7,8B.8,8C.7,10D.8,10

49.以下程序的结果是()

main()

{unsignedinta=3,b=10;

printf("%d\n",a<<2|b>>1);

}

A.1B.5C.12D.13

50.若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋予10.0,b赋予22.0,c赋予33.0,不正确的输入形式是()。

A.10<回车>

B.10.0,22.0,33.0<回车>22<回车>33<回车>

C.10.0<回车>

D.1022<回车>22.033.0<回车>33<回车>

51.下面能正确进行字符串赋值操作的是()。

A.chars[5]={"ABCDE"};

B.chars[5]={'A','B','C','D','E'};

C.char*s;s="ABCDE";

D.char*s;scanf("%s",&s);

52.在int(*prt)[3];定义中,标识符prt()。

A.定义不合法

B.是一个指针数组名,每个元素都是一个指向整型变量的指针

C.是一个指针,它指向一个具有三个元素的一维数组

D.是一个指向整型变量的指针

53.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是

A.ABCEDB.DCBEAC.DBCEAD.CDABE

54.现有定义inta;doubleb;floatc;chark;,则表达式a/b+c-k值的类型为:

A.intB.doubleC.floatD.char

55.已知i、j、k为int型变量,若要从键盘输入2、3、4<CR>,使i、j、k的值分别为2、3、4,下列正确的输入语句是()。

A.scanf("%3d,%3d,%3d",&i,&j,&k);

B.scanf("%d,%d,%d",&i,&j,&k);

C.scanf("%d%d%d",&i,&j,&k);

D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);

56.下述程序文件输出的结果是______。#inelude<stdio.h>voidmain(){FILE*fp=fopen("TEST","wb");fprintf(fp,"%d5.of%c%d",58,76273.0,'-',2278);fclose(fp);}

A.5876273-2278

B.5876273.000000-2278

C.5876273-2278

D.因文件为二进制文件而不可读

57.若有下列说明和语句,已知int型数据占2个字节,则下列语句的输出结果是()。structst{chara[15];intb;doublec;};printf("%d",sizeof(structst));

A.15B.8C.25D.2

58.有以下程序:main(){intk=5,n=0;while(k>0);{switch(k){default;break;case1:n+=k;case2;case3:n+=k;}k--;}printf("%d\n",n);}程序运行后的输出结果是______。

A.0B.4C.6D.7

59.在下列叙述中,错误的一条是()

A.scanf()函数可以用来输入任何类型的多个数据

B.数组名作函数参数时,也采用“值传递”方式

C.如果形参发生改变,不会改变主调函数的实参值

D.函数的实参与形参的类型应一致

60.下述程序的输出结果是#include<stdio.h>voidmain(){inta[5]={2,4,6,8,10};int*p=a,**q=&p;printf("%d,",*(p++));pfintf("%d",**q);}

A.4,4B.2,2C.4,5D.2,4

四、选择题(20题)61.有以下程序程序的运行结果是()。

A.123B.12300C.1D.321

62.设有如下函数定义:

若执行调用语句“ll=fm(3);”,则函数tim总共被调用的次数是()。

A.2B.3C.4D.5

63.

64.

65.有以下程序程序运行后的输出结果是()。

A.143B.197C.33D.28

66.若变量X、y已正确定义并赋值,以下符合c语言语法的表达式是()。

A.++x,y=x-一B.x+l=yC.x=x+10--x+yD.double(x)/lO

67.

68.以下叙述中错误的是()。

A.改变函数形参的值,不会改变对应实参的值

B.函数可以返回地址值

C.可以给指针变量赋一个整数作为地址值

D.当在程序的开头包含文件stdi0.h时,可以给指针变量赋NULL

69.

70.在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送()。A.调用语句B.命令C.口令D.消息

71.(46)面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是()

A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考

72.

73.设有如下程序段:

则以下叙述中正确的是()。

A.输出值为2004

B.输出值为2008

C.运行时产生出错信息

D.输出语句中格式说明符的个数少于输出项的个数,不能正确输出

74.以下叙述中正确的是

A.C语言比其他语言高级

B.C语言可以不用编译就能被计算机识别执行

C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式

D.C语言出现得最晚,具有其他语言的一切优点

75.下列叙述中不正确的是()。

A.在C语言中调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参

B.在C的函数中,最好使用全局变量

C.外部变量可以在函数之间传递数据

D.自动变量实质上是一个函数内部的局部变量

76.有以下程序程序的运行结果是()。

A.20B.10C.0D.出错

77.下列叙述中正确的是()。A.循环队列有队头和队尾两个指针,因此,循环队列是非线性结构

B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D.循环队列中元素的个数是由队头指针和队尾指针共同决定

78.

79.有以下程序:

#include<stdio.h>

structSTU{charname[9];charsex;intscore[2];};

voidf(structSTUa[])

{structSTUb={"Zhao",m,85,90);

a[1]=b;

}

main()

{structSTUc[2]={{"Qian",f,95,92},{"Sun",m98,99}};

f(c);

printf(”%s,%c,%d,%d,¨,c[o].name,c[o].sex,c[o].score[o],c[o].score[1]);

printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[o],c[1].score

[1]);

}

程序运行后的输出结果是()。

A.Zhao,m,85,90,Sun,m,98,99

B.Zhao,m,85,90,Qian,f,95,92

C.Qian,f,95,92,Sun,m,98,99

D.Qian,f,95,92,Zhao,m,85,90

80.有以下程序(strcat函数用以连接两个字符串)

五、程序改错题(1题)81.下列给定程序中,函数proc()的功能是:从字符串str中,删除所有小写字母c。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、程序设计题(1题)82.请编写函数proc,其功能是将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。例如,当a=25,b=43,实际输入时个数之间以Enter键分隔,调用该函数后,c=3452。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.D

2.B

3.D

4.A

5.D解析:本题考查宏替换的规则。宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意以下几点:①定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。

6.BT为结构体类型名,可以用来定义结构体变量。故本题答案为B选项。

7.C视图设计的设计次序分3种:自顶向下、自底向上和由内向外。它们为视图设计提供了具体的操作方法,设计者可根据实际情况灵活掌握。

8.C

9.C【答案】:C

【知识点】:需求分析阶段的任务

【解析】:需求分析阶段的任务是深入描述软件的功能和性能,确定软件设计的约束和软件同其他系统元素的接口细节,定义软件的其他有效性需求,借助于当前系统的逻辑模型导出目标系统逻辑模型,解决目标系统“做什么”的问题。可分为需求提出、需求描述及需求评审三个阶段。从此可以看出需求分析的任务不包括制定软件集成测试计划,故选C。

10.D本题int*p[4]的作用是声明一个指针数组,每个元素都是int*型指针。

11.C

12.B

13.C本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打开“myfile.data"文件,输入28,在键盘上接收字符,输出并关闭文件。本题结果为abc28。

14.B

15.C解析:选项A),B)考查了多分支结构的用法,选项A)中的程序段执行时,c<a,b<a条件均不成立,故执行else后的语句,x值为3;选项B)中a<3条件成立,执行x=3;而选项C),D)是单分支结构的用法,选项C)中程序段执行时,a<3条件成立,x=3,但条件a<2也成立,此时执行x=2,下一个条件不成立,不再执行其后的语句。

16.A静态变量不是每调用一次就赋一次初值,而是将需要定义许多相同的具有相同属性的值时,使用静态变量来节省空间,所以A选项错误。

17.DC语言的算术运算符是有优先级的。圆括号可以改变算术表达式中某些算术运算符的优先级,选项A正确;算术运算符中,乘除运算符的优先级比加减运算符的优先级高,C语言采用的是四则运算规则,选项B正确;算术表达式中,运算符两侧运算对象的数据类型不同时,将进行隐式类型转换,选项C正确;C语言中基本的算术运算符除了“+”“-”“*”“/”之外,还有“%”,即求余运算符,选项D错误。故本题答案为D选项。

18.D

19.Dch[1]即输出的为第二个字符串,即BBB。

20.C程序定义一个字符数组b,并使用字符串“happynewyeai”进行初始化。然后通过for循环,遍历字符数组b中的每个字符,再将b中的字符元素修改为大写字母。程序输出:HAPPYNEWYEAR。故本题答案为C选项。

21.arjteartest

22.t*10或10*tt*10或10*t解析:本题要求累加一系列有规律的数,从输出结果来看,s保存的是最终结果,而s在循环体中,每次累加一个t,则说明t在5次循环中分别等于1.12、123、1234、12345;而t每次循环等于“填空内容”加上循环变量i,又因为i在5次循环中分别等于1、2、3、4,5,所以t每次循环要加的“填空内容”应分别为0、10、120,1230,12340,这一系列值正好是前一次t的值的10倍.所以“填空内容”应是t*10。

23.本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应使*k的值为数组中的某一下标值,即*k=0。

24.继承继承解析:在面向对象的程序设计方法中,某些属性和方法是可以共享的,由于类从父类中继承而来,这样提高了软件的可重用性。

25.33解析:C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf('%d\\n',z);语句。

26.数据存储数据存储

27.一对多或1:N实体之间的对应关系称为联系,它反映现实世界事物之间的相互关联。两个实体间的联系可以归结为三种类型:一对一联系表现为某一实体与另一实体一一对应相关联;一对多联系表现为某一实体与相关多个实体相关联;多对多联系表现为多个实体与相关多个实体相关联。

28.a*b*c*d*a*b*c*d*解析:字符处理函数strlen()测试字符串常量的长度,不包括‘\\0’在内。因此,函数insert()实现了将字符数组中每个非‘\\0’的字符后插入字符‘*’的功能。故输出结果是a*b*c*d*。

29.1212解析:本题考查如何用指针引用数组元素。分析程序,首先定义了一个指向数组a的指针p,p指向数组的首地址,通过p++,将p指向a[1],p+2是将指针后移2位指向a[3],*(p+2)即是取a[3]的值12。

30.1010解析:该for语句以i为0,j为10作为初始值,循环条件是i<=j,每次循环后i增1、j减1,循环体是将i与j的和赋给k,这样变量k将保存的是最后一次赋给它的值。一次循环后i为1、j为9,二次循环后i为2、j为8,……,五次循环后i为5、j为5,第六次循环,将i与j的和10赋给k后,i为6、j为4,循环结束,k值为10。

31.无限无限解析:分析程序“while(s)”语句后面有一个“;”不能执行后面的语句,只是执行空语句,所以s=12保持不变,因此,没有条件限制的能循环无限次(即死循环)。

32.tc

33.22解析:本题考查的是基本赋值运算符和赋值表达式。表达式c=(b-=a-4)等价于c=(b=b-a+4)等价于c=b=2;表达式a(c%2+(b-1))等价于a=1+2-1=2;因此最后a的值为2。

34.abcbcc

35.a.next=aba.next=ab解析:选项A)中,指针变量q保存的就是变量b的地址,选项B)中的p是指针变量,应该是p->next=&b;在选项D)中,用*运算符取出结构体变量,并且保存的就是b的地址。

36.d1.dat""rb"或"d1.dat""r+b”或"d1.dat""rb+"d1.dat','rb'或'd1.dat','r+b”或'd1.dat','rb+'解析:本题考查的知识点是二进制文件的打开方式。打开文件的函数为fopen('文件名''mode'),其中'mode'表示文件的打开方式.如果打开的是二进制文件,其mode字符串可以是:'rb''wb'、'ab'、'rb+'、'wb+'、'ab+'。'r'表示以只读方式打开。'w'表示以写方式打开,如果已有在该文件名的文件,文件中的内容将被清空。若文件名不存在,则将创建该文件.'a'为追加方式打开。若文件存在时,将打开这个文件并且在文件的末尾进行追加.当文件不存在,将创建新文件。'r='打开一个已有在文件用于更新(可读可写)。'w+'创建一个新文件用于更新,如果文件存在,文件被重写(可读可写)。'a+'打开用于追加,当文件不存在时,创建新文件,并在文件末尾进行追加(可读可写)。根据题意,应该填'd1.dat','rb'或其他等价的表达法。

37.babcdbabcd解析:C语言中“\\0”表示字符串的结束。程序将p指针指向字符串“AbabCDcd”的首地址,循环开始后若指针不是指向当前字符串的结束标志位,则进入循环体。循环中每次检验字符串中字母是否在'a'与'z'之间,若满足则将当前值赋值给数组a,最后给数组添加字符结束标志。此程序可以筛选出字符串中的小写字母。

38.一对多一对多解析:在现实世界中事物间的关联称为联系。在概念世界中联系反映了实体集间的一定关系。两个实体集间的联系实际上是实体集间的函数关系,这种函数关系可以有3种,分别是一对一,一对多和多对多,依据题意,一名学生只能住一间宿舍,一间宿舍可住多名学生,所以实体“宿舍”与实体“学生”的联系属于一对多的联系。

39.130130解析:本题主函数中用了一个for循环,循环了3次:当i=9时,i/10=0,执行switch语句中case0分支,m和n的值各增1,变为1和1,然后遇到break语句,退出switch语句;当i=10和11时,i/10都等于1,执行switch语句中的case1分支,两次使n增1,变为3,退出switch语句。故该空格处应该填130。

40.1B1B解析:在C语古中,字符型变量可以看作整型变量来对待,与整型所不同的是字符型变量在内存中只占1个字节,而整型是2个字节.字符型变量中所有的数值是它所表示字符的ASCII码值.ASCII码中的一些相关字符是顺序排列的,如'0',的ASCII码值为48,'1'为49以此类推一直到'9';'A'的ASCII码值为65,'B'为66以此类推一直到'Z'。本题程序首先定义了两个字符型变量a和b,然后分别使用getchar()和scanf()函数读取输入的字符'B'和十进制整数33到a和b中,因为a-'A'+'0'等于,'B'-'A'+'0'='1'+'0'='1',而b*2等于33*2=66'A'+1='B'。所以最终输出的结果是:1B。

41.D解析:fgetc函数是指从指定的文件读入—个字符,该文件必须是以读或读写方式打开的。fgetc函数的调用形式为:ch=fgetc(fp);。

42.2解析:while的执行过程是:先计算条件表达式的值,若成立则执行循环体,重复上述过程,直到条件表达式的值为“假”(值为零)时,退出循环,并转下一语句去执行。本题在输出num的值为3之后,再判断while的循环条件3<=2,不成立,所以不再输出num的值,故本题的答案选B。

43.C解析:指数形式规定字母e(或E)之前必须有数字(可以是一个十进制的整数或小数),之后必须是一个整数。选项C的字母E之后是一个小数,故应该选择C。

44.D解析:本题考查数组的两个知识点:①在C语言中,数组元素的个数是确定的,不允许随机变动,数组定义好之后,它所能容纳的元素的个数也就确定了;②同一个数组中所有元素的类型是一样的。

45.C解析:选项A中,p为数组名,其值是不能被改变的,故非法;选项B中,p[0]的类型是int*,而a是二维数组名(类型为int[][3]),两者无法赋值,故非法:选项C中,p[0]为int型指针,&a[1][2]是int型变量的地址,可以合法赋值;选项D中,p[1]是int型指针,而&a是二维数组的地址(类型为int(*)[2][3]),两者无法赋值,故非法。所以本题应该选择C。

46.A解析:本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。

47.B解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或者下划线。

48.D解析:在C语言中,定义一维数组的语句一般形式如下:

类型名数组名[常量表达式];

一维数组的引用形式为:数组名[下标表达式]。count表示能被2整除或被5整除的个数,i则计算有多少个数组元素。

49.D

50.B解析:本题scanf()函数中输入格式串为“%f%f%f”,要求输入变量a、b和c时用空格隔开,也可以用<回车>分隔。选项A中从键盘输入3个变量的值时用<回车>符隔开,满足输入格式串的要求,故选项A的输入方式能达到题意的要求。选项B中从键盘输入3个变量的值时中间用了“,”隔开,而在输入格式串中没有要求用“,”隔开,故选项B的输入方式不能达到题意的要求;选项C和D中分别都用了<回车>和空格宋分隔,满足输入格式串的要求,故选项C和D的输入方式也能达到题意的要求。所以,4个选项中选项B符合题意。

51.C解析:如果一个字符数组用来存储字符串,那么在定义该字符数组时,数组的大小应该比它将要实际存放的字符串长度大1,所以选项A)和B)错;选项D)中s本身就是一个字符指针,不需再取地址。

52.C解析:此题的关键是要分清指针数组与指向一维数组指针之间的不同,题中的说明语句定义了一个指针变量prt,它指向包含三个整数元素的一维数组。要注意:*prt两侧的圆括号不能缺少,如果写成*ptr[3],则ptr与[3]先结合,是数组,然后再与前面的。号结合,则*ptr[3]将是一个指针数组。

53.B解析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、C、D,则表明这4个元素中D是最后进栈,B、C处于中间,A最早进栈。所以出栈时一定是先出D,再出C,最后出A。

54.B解析:双目运算中两边运算量类型转换规律:

运算数1运算数2转换结果类型

短整型长整型短整型->长整型

整型长整型整型->长整型

字符型整型字符型->整型

有符号整型无符号整型有符号整型->无符号整型

整型浮点型整型->浮点型

在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double←float。

55.B解析:函数scanf()的调用形式是:scanf(格式字符串,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符:“输入项地址表”是要输入的变量的地址。若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。

56.C解析:fprintf函数工作时,多个数据间不会自动加分隔符,选项A错误;浮点数的搞出格式是“%5.0f”表明其小数部分输出0位,即没有输出,所以选项B也是错误的。

57.C解析:本题主要考查结构体的内存使用:对结构体而言,结构中不同的成员分别使用不同的内存空间,一个结构所占内存空间的大小是结构中每个成员所占内存空间大小的总和,结构中每个成员相互独立。题中intb占2个字节,chara[15]占15个字节,doublec占8个字节,所以共25个字节。

58.D解析:在switch语句中,若case语句后没有break语句,则执行完本层case后会继续执行后面case中的操作。k的初值为5,while条件成立,进入switch(5),执行default语句,退出switch,执行k--后得4,再进入while循环,执行switch(4),退出switch,再执行k--后得3,继续while循环,执行switch(3),n=n+k=3,再执行k--后得2,进入while循环,执行case2,再执行n=n+k=5,然后执行k--后得1,最后一次进入while循环,执行case1,n=n+k=6,然后继续执行case2和case3后的语句,n=n+k=7,且执行k--后得0,此时while条件不满足,退出循环,输出n的值为7。

59.B

60.D

61.A程序首先将数组a[10]中的元

温馨提示

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

评论

0/150

提交评论