2021-2022年宁夏回族自治区吴忠市全国计算机等级考试C语言程序设计测试卷一(含答案)_第1页
2021-2022年宁夏回族自治区吴忠市全国计算机等级考试C语言程序设计测试卷一(含答案)_第2页
2021-2022年宁夏回族自治区吴忠市全国计算机等级考试C语言程序设计测试卷一(含答案)_第3页
2021-2022年宁夏回族自治区吴忠市全国计算机等级考试C语言程序设计测试卷一(含答案)_第4页
2021-2022年宁夏回族自治区吴忠市全国计算机等级考试C语言程序设计测试卷一(含答案)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

2021-2022年宁夏回族自治区吴忠市全国计算机等级考试C语言程序设计测试卷一(含答案)学校:________班级:________姓名:________考号:________

一、单选题(20题)1.若二维数组a有m列,则在a[i][j]前的元素个数为()。

A.i*m+j-1B.i*m+jC.J*m+iD.i*m+j+1

2.若串S1="ABCDEFG",S2="9898",S3="###",S4="012345",执行其结果为()。A.ABC###G0123B.ABCD###2345C.ABC###G1234D.ABCD###1234

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

A.continue语句的作用是使程序的执行流程跳出包含它的所有循环

B.break语句只能用在循环体内和switch语句体内

C.在循环体内使用break语句和continue语句的作用相同

D.break语句只能用于switch语句体中

4.若有以下定义;chara;intb;floatc;doubled;则表达式“a*b+d-c”值的类型为()

A.floatB.intC.charD.double

5.有下列函数定义:fun(floath){printf("%f,%f\n",h,h*h);)该函数的类型是()。A.int类型B.float类型C.void类型D.函数无类型说明,定义有错

6.下列算法中,()算法用来求图中某顶点到其他顶点所有顶点之间的最短路径。

A.DijkstraB.FloyedC.PrimD.Kruskal

7.串的长度是指()。

A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数

8.

9.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。

A.DB包含DBS和DBMSB.DBMS包含DB和DBSC.DBS包含DB和DBMSD.没有任何关系

10.下列程序执行输出的结果是()。#include<stdio.h>f(inta){intb=0;staticc=3;a=c++;b++;return(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=f(a++);printf("%d\n",k);}

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

11.下列排序算法中,时间复杂度不受数据初始化状态影响,恒为0(log2n)的是()。A.堆排序B.冒泡排序C.直接选择排序D.快速排序

12.数据库设计包括两个方面的设计内容,它们是()。

A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计

13.依次插入序列(50,72,43,85,75,20,34,45,65,30)后建立的二叉搜索树中,查找元素30要进行()次元素间的比较。

A.4B.5C.7D.10

14.有以下程序:#include<stdio.h>voidfunc(intn){inti;for(i=0;i<=n;i++)printf("*"):printf("#");}main(){func(3);printf("????");func(4);printf("n\");程序运行后的输出结果()。A.****#????***#

B.***#????****#

C.**#????****#

D.****#????*****#

15.以下程序段运行后x的值为()。inti,j,x=0;for(i=3;i>=1;i--)for(j=1;j<=i;j++)x=x+2A.8B.14C.10D.12

16.有以下程序:

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

A.1,3

B.2,3

C.1,4

D.1,2

17.判断char型变量c1是否为小写字母的正确表达式为()。

A.'a'<=c1<='Z'

B.(c1>=A)‖c1<=z)

C.('a'=>c1‖("z"<=c1)

D.(c1>='a')&&(c1<='z')

18.下列关于栈的描述中错误的是()。

A.栈是先进先出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入删除操作中,不需要改变栈底指针

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

A.测试工作必须由程序编制者自己完成

B.测试用例和调试用例必须一致

C.一个程序经调试改正错误后,一般不必再进行测试

D.上述三种说法都不对

20.下列选项中与“if(a==1)a=b;elsea++;”语句功能不同的switch语句是()。

A.switch(a==1){ case0:a=b;break; case1:a++;}

B.switch(a){ case1:a=b;break; default:a++;}

C.switch(a){ default:a++;break; case1:a=b;}

D.switch(a==1){ case1:a=b;break; case0:a++;}

二、2.填空题(20题)21.设有以下定义和语句,则*(*(p+2)+1)的值为【】。

inta[3][2]={10,20,30,40,50,60},(*p)[2];

p=a;

22.有一个已排好序的数组,今输入一个数,要求按原来的顺序规律将它插入到数组中。算法是:假设排序顺序是从小到大,对输入的数,检查它在数组中哪个数之后,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。请在程序中的空白处填上一条语句或一个表达式。

#defineN100

main()

{floata[N+1],x;

inti,p;

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

scanf("%f"&a[i]);

scanf("%f",&x);

for(i=0,p=N;i<N;i++)

if(x<a[i])

{【】;

break;}

for(i=N-1;【】;i-)

a[i+1]=a[i];

a[p]=x;

for(i=0;【】;i++)

{printf("%8.2f",a[i]);

if(i%5=0)

printf("\n");

}

}

23.以下程序的输出结果是______。

#include<stdio.h>

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{inti=3,j=5,*p=&i,*q=&j;

swap(p,q);printf("%d%d\n",*p,*q);

}

24.下面程序的功能是将字符串s中所有的字符c删除,补足所缺语句。

#include<stdio.h>

main()

{chars[80];

inti,j;

gets(s);

for(i=j=0;s[i]!='\0';i++)

if(s[i]!='c')【】;

s[j]='\0';

puts(s);

}

25.\13'在内存中占1个字节,"\12"在内存中占______个字节。

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

structNODE

{

intnum;

stmctNODE*next;

};

main()

{structNODEs[3]={{1,'\0'),{2,'\0'),{3,'\0'}),*p,*q,*r;

intsum=0;

s[0].next=s+1;

s[1].next=s+2;

s[2].next=s;

p=s

q=p->next;

r=q->next;

sum+=q->next->num;

sum+=r->next->next->num;

printf("%d\n",sum);

}

27.设有下列的程序段;

charstr[]="Hello";

char*ptr;

ptr=str;

执行上面的程序段后,*(ptr+5)的值为______。

28.测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。

29.以下函数fun用于求两个整数a和b的最大公约数。

fun(a,B)

inta,b;

{inti,j,m,n;

if(a>B)

{m=a;a=b;【】;}

i=a;j=b;

while((n=【】)!=0)

{j=i;i=【】;}

return(i);

}

30.表示“整数x的绝对值大于5”时值为“假”的C语言表达式是______。

31.以下函数的功能是删除字符串s中的所有数字字符。请填空。

voiddele(char*s)

{

intn=0,i;

for(i=0,s[i];i++)

if(【】)

s[n++]=s[i];

s[n]=【】;

}

32.数据库管理系统是位于用户与______之间的软件系统。

33.以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abcl23edf456gh,执行程序后输出:123456。请填空。

#include<stdioo.h>

#include<ctype.h>

main()

{chars[80],d[80];inti,j;

gets(s);

for(i=j=0;s[i]!='\0';i++)

if(【】){d[j]=s[i];j++;}

d[j]='\0';

puts(d);

34.有以下定义和语句,则sizeof(a)的值是【】,而sizeof(a.share)的值是【】。

structdate

{intday;

intmouth;

intyear;

union{intshare1;

floatshare2;

}share;

}a;

35.下面程序把从终端读入的文本(用@作为文本结束标志)输出到一个名为bi.dat的新文件中,请填空。

#include"stdio.h"

FILE*fp;

main()

{charch;

if((fp=fopen(【】))==NULL)exit(0);

while((ch=getchar())!='@')fputc(ch,fp);

fclose(fp);

}

36.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、【】和选择排序等。

37.当运行以下程序时,输入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);

}

38.以下程序输出的最后一个值是【】。

intff(intn)

{staticintf=1;

f=f*n;

retumf;

}

main()

{inti;

for(i=1;i<=5;i++)printf("%d\n",ff(i))i

}

39.下列程序的输出结果是【】。

main()

{

inta[]={2,4,6},*ptr=&a[0],x=8,y,z;

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

z=(*(ptr+y)<x)?*(ptr+y):x;

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

}

40.设有以下结构体类型:

structst

{charname[8];

intnum;

floats[4];

}student[50];

并且结构体数组student中的元素都已有值。若要将这些元素写到硬盘文件fp中,请将以下fwrite语句补充完整:

fwrite(student,【】,1,fp);

三、1.选择题(20题)41.有以下程序:#include<stdio.h>#defineN20fun(inta[],intn,intm){inti,j;for(i=m;i>:n;i--)a[i+1]=a[i];}main(){inti,a[N.]=11,2.3,4,5,6,7,8,9,10[;fun(a,2,9)for(i=0;i<5;i++)printf("%d",a[i]);程序运行后的输出结果是()。

A.10234B.12344C.12334D.12234

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

A.C程序由函数组成

B.C程序由主函数构成

C.C程序由函数和过程构成

D.在C程序中无论是整数还是实数,都可以正确无误的表示出来

43.sizeof(float)是()。

A.一种函数调用B.一种函数定义C.一个浮点表达式D.一个整型表达式

44.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。

A.auto和register

B.extern和register

C.auto和static

D.static和register

45.若要用函数fopen打开一个新的二进制文件,该文件要既能读也能写,则应以哪种方式打开文件()。

A.wbB.wb+C.rb+D.rb

46.下面程序段的输出结果是()。chara[]="lanuage",*p;p=a;while(*P!='u'){printf("%c",*p-32);P++;}

A.LANGUAGEB.languageC.LAND.langUAGE

47.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定。这属于算法的A.正当性B.可行性C.确定性D.有穷性

48.下列不属于算法特性的是

A.确定性B.可行性C.有输出D.无穷性

49.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。

A.chars[10]=="abcdefg";

B.chart[]="abcdefg",*s=t;

C.chars[10];s="abcdefg";

D.chars[10];strcpy(s,"abcdefg");

50.下列程序的输出结果是______。#defineA100main(){inti=0,sun=0;do{if(i==(i/2)*2)continue;sum+i;}while(++i<A);printf("%d\n",sun);}

A.2500B.2050C.4D.0

51.下列程序的运行结果是()。#include<stdio.h>voidsub(int*s,int*y){staticintm=4;*y=s[0];m++;}voidmain(){inta[]={1,2,3,4,5},k;intx;printf("\n");for(k=0;k<=4;k++){sub(a,&x);printf("%d,",x);}}

A.1,1,1,1,1,B.1,2,3,4,5,C.0,0,0,0,0,D.4,4,4,4,4,

52.下述函数功能是______。intfun(char*x){char*y=x;while(*y++);retumy-x-1;}

A.求字符串的长度B.求字符串存放的位置C.比较两个字符串的大小D.将字符串x连接到字符串y后面

53.有以下程序:#include<stdio.h>#include<strine.h>structSTU{charname[10];inthum;};voidf(char*name,ihtnum){structSTUs[2]={{"SunDan",20044},{"Penghua",20045}};num=s[0].nnm;strepy(name,s[0],name);}main(){structSTUs[2]={{"YangSan",20041},{"LiSiGao",20042}},*P;p=&s[1];f(p->name,p->hum);printf("%s%d\n",p->name,p->num);}程序运行后的输出结果是()。

A.SunDan20042B.SunDan20044C.LiSiGuo20042D.YangSan20041

54.以下程序的输出结果是main(){inta=0,i;for(i=1;i<5;i++){switch(i){case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}}printf(“%d\n”,A);}

A.31B.13C.10D.20

55.设有以下宏定义:#defineN3#defineY(n)((N+1)*n)则执行以下语句后,z的值为______。z=2*(N+Y(5+1));A.出错B.42C.48D.54

56.有下列函数定义:intfun(doublea,doubleb){returna*b;}若下列选项中所用变量都己正确定义并赋值,错误的函数调用是()。

A.if(fun(x,y)){……}

B.z=fun(fun(x,y),fun(x,y));

C.z=fun(fun(x,y)x,y);

D.fun(x,y);

57.有以下程序(提示:程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节)#include<stdio.h>main(){FILE*fp;inti,a[4]={1,2,3,4},b;fp=fopen("data.dat","wb");for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);fclose(fp);fp=fopen("data.dat","rb");fseek(fp,-2L*sizeof(int),SEEK_END);fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中*/felose(fp);printf("%d\n",b);}执行后输出结果是

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

58.以下选项中,非法的字符常量是______。

A.'\t'B.'\17'C.\nD.'\xaa'

59.下列对于软件测试的描述中正确的是()。

A.软件测试的目的是证明程序是否正确

B.软件测试的目的是使程序运行结果正确

C.软件测试的目的是尽可能多地发现程序中的错误

D.软件测试的目的是使程序符合结构化原则

60.执行以下的程序段后,m的值是______。inta[2][3]={{1,2,3},{4,5,6}};intm,*p;p=&a[0][0];m=p[4];

A.4B.5C.3D.不确定

四、选择题(20题)61.

如果进栈序列为el、e2、e3、e4,则可能的出栈序列是()。

A.e3、el、e4、e2B.e2、e4、e3、elC.e3、e4、e2D.任意顺序

62.有如下程序:

main

{inta=2,b=-1.c=2;

if(a<b)if(b<0)c=0;

elsec++;

printf("%d\n",c);

}

该程序的输出结果是()。A.A.0B.1C.2D.3

63.(2)以下数据结构中不属于线性数据结构的是()

A.队列

B.线性表

C.二叉树

D.栈

64.

65.下列程序的输出结果是()。#include<stdio.h>main{inta=3,b=2,c=1;if(a<b)if(b<0)c=0;elsec++:printf("%d\n",c);}A.2B.0C.1D.不确定的值

66.

67.

68.

69.for(i=1;i<=10;i=i+3)for(j=2;j<6;j++){··…·}的循环次数是()。

A.16B.18C.14D.12

70.有以下程序:

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

A.1,2,3,4,5,6,7,8,9,10,

B.1,2,7,6,3,4,5,8,9,10,

C.1,2,7,6,5,4,3,8,9,10,

D.1,2,9,8,7,6,5,4,3,l0,

71.

72.有以下程序:main{inta=1,b=3,C=5,*P;int*p1=&a,*p2=&b,*p3=&c;*p=*p1*(*p2);}执行后的输出结果是()。A.1B.2C.3D.4

73.

74.有以下程序:

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

A.x=4B.X=8C.x=6D.x=12

75.有以下函数:

函数的功能是()。

A.将Y所指字符串赋给x所指存储空间

B.查找x和y所指字符串中是否有

C.统计x和y所指字符串中最前面连续相同的字符个数

D.统计x和Y所指字符串中相同的字符个数

76.有以下定义语句,编译时会出现编译错误的是()。

A.chara=a;B.chara=\nC.chara=aa;D.chara=\x2d;

77.假定int类型变量占用两个字节,其有定义intx[10]={0,2,4};,则数组x在内存中所占字节数是

A.3B.6C.10D.20

78.

79.对线性表进行二分法检索,其前提条件是()。

A.线性表以顺序方式存储,并按关键码值排好序

B.线性表以顺序方式存储,并按关键码的检索频率排好序

C.线性表以链式方式存储,并按关键码值排好序

D.线性表以链式方式存储,并按关键码的检索频率排好序

80.

五、程序改错题(1题)81.下列给定程序中,函数proc的功能是计算正整数m

各位上数字的平方和。例如,输入498,则输出应该是161。请修改程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>longproc(10ngm){//****found****longsum=1;do{sum+=(m%10)*(m%10);m/=l0;//****found****}while(m)return(sum);}voidmain{longn;system("CLS");printf("Pleaseenteranumber:");scanf("%1d",&n);printf("\n%ld\n",proc(n));}

六、程序设计题(1题)82.请编写函数proc(),它的功能是计算:s=(1n(1)4-1n(2)+In(3)4-…+1n(m))0.5在C语言中可调用log(n)函数求1n(n)。例如,若n1的值为30,则proc()函数值为8.640500。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.B解析:二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是j,说明它前面还有j列,有j个元素,所以共有i*m+j个元素。

2.D

3.Bcontinue语句的作用是跳过循环体中剩余的语句而进行下一次循环,所以A选项错误。break语句的作用是终止正在执行的switch语句体,跳出switch语句体或者强制终止当前循环,从当前执行的循环中跳出,所以C、D选项错误。故本题答案为B选项。

4.D解析:参加运算的数据类型不同,要转换为统一的数据类型,double在数据类型转换中的级别最高,其他数据类型都要转化为double,因此表达式值的类型为double。

5.A本题考查函数值的类型,在函数定义时,由于函数没有说明其类型,系统默认一律自动按整型(int)处理。

6.A

7.B解析::串的长度定义为串中字符的数目。所以B)为正确答案。C)答案不正确,因为串中可以含有相同的字符;A)答案不正确,因为串中可能含有相同的字母,而且也可能含有数字等其他非字母字符;D)答案不正确,因为空格也是一种字符,在计算长度时理应将其计算在内。

8.C

9.C(10)C)解析:DB即数据库(Database),是统一管理的相关数据的集合;DBMS即数据库管理系统(DatabaseManagementSystem),是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法;DBS即数据库系统(DatabaseSystem)由如下5部分组成,数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、系统平台之一——硬件平台(硬件)、系统平台之二——软件平台(软件)。

10.B解析:本题考查函数调用时的参数传递。在函数调用时,static变量在函数调用结束后所做的所有变化均保持(即上次调用结束时的值)。

在主函数中,第一次循环,i=0,调用k-f(a++)=f(2),调用完之后才将a加1,a变为3,在f(2)中,先将c=3赋值给a返回,然后将c加1,得到k=a=3,c=4。

第二次循环,i=1,调用k=f(a++)=f(3),调用完之后才将a加1,a变为4,在f(3)中,先将c=4赋值给a返回,然后将c加1,得到k=a=4,c=5。

11.D

12.A解析:模式设计和内模式设计是概念设计的两种方法。物理设计是根据特定的计算机系统,对数据的存储结构和存取方法进行设计,从而实现从逻辑结构到物理结构的转换。从系统开发的角度来看,结构特性设计和行为特性-设计是数据库应用系统所具有的两个特性。结构特性的设计,设计各级数据库模式(静态特性):行为特性的设计,改变实体及其特性,决定数据库系统的功能(动态特性)。

13.B

14.D本题考查简单的for循环,func(3)由于i是从0开始,所以会输出四个“*”和一个“#”,然后打印四个“?”func(4),会输出五个“*”和一个“#”,所以答案选择D。

15.D

16.Af函数功能使第二个指针指向的元素增1,第一个指针指向的元素不变,所以答案选择A)。

17.D解析:C语言规定,字符常量在程序中要用单引号括起来。判断c1是否为小写字母的充要条件c1>='a'和c1<='z',用逻辑与(&&)来表示。A选项的这种形式在C语言中没有,所以选项D)正确.

18.B

\n栈是线性表的一种,它的特点是先进后出,并且只能在表的一端进行插入和删除操作的线性表,入栈和出栈都是在栈顶进行,因此具有记忆作用,栈可以采用顺序存储,也可以采用链式存储。

\n

19.D解析:测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷,一般应当避免由开发者测试自己的程序,因此,选项A错误;测试是为了发现程序错误,不能证明程序的正确性,调试主要是推断错误的原因,从而进一步改正错误,调试用例与测试用例可以一致,也可以不一致,选项B错误;测试发现错误后,可进行调试并改正错误:经过调试后的程序还需进行回归测试,以检查调试的效果,同时也可防止在调试过程中引进新的错误,选项C错误。

20.A题干中,if语句的含义是:如果a的值为1,将b的值赋给a,否则将a的值自增1。选项A中,“switch(a==1)”中表达式“a==1”的结果如果为真,即1,则从case1开始执行“a++”;如果“a==1”的结果为假,即为0,则从case0开始执行“a=b”,所以与题干含义执行操作相反的是选项A中的语句。故本题答案为A选项。

21.6060解析:程序中定义a是一个3行2列的二维数组,p是指向两个元素的一维数组指针,并让p指向二维数组a的首行。则代码*(*(p+2)+1)中的p+2指向二维数组a的第三行a[2],*(p+2)指向a[2[]0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60。

22.p=i;i>=pi<=Np=i;\r\ni>=p\r\ni<=N解析:本题主要考查了插入排序。由于程序中的数组在开始己经按从小到大顺序排序排好。在插入时,首先要查到第一个大于恃插入数的数组下标,即当待插入元素小于数组中当前元素时,记下数组的当前下标p,并结束循环,故第一空目的是为了记下数组下标,应填p=i;插入排序的第二部是将大于待插入元素的所有元素都向后移动—位,故在循环时,要从最后一个元素到第p个元素都要后移一位,因此第二空应填>i=p。最后一个循环是将N+1个元素都输出,故最后一空应为i<=N。(注:本题有多种答案,以上仅提供一种)

23.3535解析:函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。

24.s[j++]=s[i]

25.22解析:'\\13':表示八进制数13表示的ASCII字符,是一个字符,占一个字节;而”\\12”是个字符串,除了八进制数12表示的ASCII字符占一个字节外,还有在字符串的末尾加上串结束标志“'\\0'”,所以共有2个字节。

26.55解析:主函数首先声明了一个结点数组s[3],并分别初始化其成员num为1、2、3,而成员next全部被初始化为'\\0'也就是0。下面又用三条语句s[0].next=s+1;s[1].next=s+2;s[2].next=s;分别将三个结点指向其后面一个结点,而最后一个结点指向第1个结点,构造出一条单向循环链表。接下来用结点指针p=s即让其指向s[0],然后让q=p->next,即指向了s[1],r=q->next即让r指向s[2],然后让一个累计变量sum累加q->next->num和r->next->next->nm,因为q指向s[1]所以它的next指针指向的是s[2],故第1次累加的是s[2].num=3,而r指向的是s[2]所以它的next是s[0],s[0]的next指向s[1],故第2次累加的是s[1].num=2。所以程序最终输出结果为5。

27.'\0''\\0'解析:本题涉及字符数组和指针的两个知识点:①在C语言中,字符型数组在存放字符串时会自动在末尾加上字符串结束标识符'\\0'所以题中数组str有6个元素。②ptr指向数组str的首地址,ptr+5是指向str[5],*(ptr+5)是引用str[5]的值,即'\\0'。

28.调试调试

29.b=mj%i.nb=m\r\nj%i.\r\nn解析:函数中的变量i和j分别存放两个形参的最小数和最大数,在语句i=a和j=b执行之前,要将a和b分别变为最小数和最大数,当a>b时,程序使用中间变量将两者交换,所以题中第—个空中应当填写“b=m”;为求两个整数的最大公约数,程序的where循环条件必须为j整除i成立,所以题中第二个空中应当填写“j%i”;程序要通过i的值返回最大公约数,因此在循环中要将每次整除的公钓数赋给i,以保证最后返回的是两个,整数的最大公约数,所以第三个空中应当填写“n”。

30.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本题考查基本逻辑表达,“整数x的绝对值大于5”时值为“假”,即整数x的绝对值小于等于5,也就是整数x要大于等于-5且要小于等于5。这里“且”用“与(&&)”表示,所以C语言表达式为:(x>-5)&&(x<5)。

31.s[i]<'0'||s[i]>'9'或!(s[i]>='0'&&s[i]<='9')或!(isdigit(s[i]))或isdigit(s[i])==0或s[i]>'9'||s[i>'0'或!(s[i]<='9'&&s[i]>='0')或*(s+i)<'0'||*(s+i)>'9'或!(*(s+i)>='0'&&*(s+i)<=9或!(isdigit(*(s+i)))或*(s+i)>='9'&&*(s+i)<='0'或!(*(s+i)<='9'&&*(s+i)>='0'或isdigis[i]<'0'||s[i]>'9'或!(s[i]>='0'&&s[i]<='9')或!(isdigit(s[i]))或isdigit(s[i])==0或s[i]>'9'||s[i>'0'或!(s[i]<='9'&&s[i]>='0')或*(s+i)<'0'||*(s+i)>'9'或!(*(s+i)>='0'&&*(s+i)<=9或!(isdigit(*(s+i)))或*(s+i)>='9'&&*(s+i)<='0'或!(*(s+i)<='9'&&*(s+i)>='0'或isdigi解析:从一个字符串中删除某字符的力‘法是从字符串的第一个字符开始一一判断该字符是否是要被删除,若不是则把它放到结果字符串中,若是则不放入结果字符串中。本题的第一个空应判断s[i]是否为数字字符,只有在不是数字字符的情况下才存入结果字符串,所以应填入s[i]<'0'||s[i]>'9'。最后应在结果字符串的末尾填上字符串结束标志\\0。

32.操作系统操作系统解析:数据库管理系统是帮助用户创建和管理数据库的应用程序的集合。因此,数据库管理系统需要操作系统的支持,为用户提供服务。

33.s[i]>='0'&&s[i]<='9'或isdigit(s[i])s[i]>='0'&&s[i]<='9'或isdigit(s[i])解析:“chars[80],d[80];”定义了两个字符型数组,可以放入80个字符。gets函数是C语言提供的一个专门用于读字符串的函数,它读入全部字符(包括空格),直到遇到回车为止。本题中,读入字符串s后,开始比较s中的每个字符是否为数字字符,因为字符数据在内存中以相应的ASCII码存放,所以只需比较相应的字符是否在'0'到'9'之间,或使用库函数isdigit(),来判断是否为数字字符。如果是数字字符则将此字符存入d数组中,不是则继续进行下一字符的比较,直至s结束(即'0'的出现)。将'\\0'字符作为字符串d结束标志,最后调用puts函数输出d。所以空白处应填入比较语句s[i]>>='0'&&s[i]<='9'或isdigit(s[i])以及其他任何等价表达式。

34.10410\r\n4解析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int占2个字节,float占4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。

35.dat""w"或"bi.dat""w+"或"bi.dat""r+"dat','w'或'bi.dat','w+'或'bi.dat','r+'解析:本题的考点是fopen()函数,此函数的格式是fopen(文件名,使用文件方式),题目的要求是将从键盘读入的文本写到文件中,因此选择的打开方式应该是'w'(只写)。或者是读写“r+”或“w+”。

36.交换排序交换排序解析:常见的排序方法有插入排序(包括简单插入排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作用机制和区别。

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

38.120120解析:静态变量的类型说明符是static,静态局部变量属于静态存储方式,它具有以下特点:

①静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。

②对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。

③如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译对自动赋初值0(对数值型变量)或空字符(对字符变量)。(注意:C语言中的非静态变量在定义时,系统并不会自动给它赋初值)

④虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。

本题中函数的功能是:与for语句一起求一个整数的阶乘。

39.66解析:条件运算符的优先级高于赋值运算符,因此本题先计算关系表达式(*ptr+y)<x)?*(ptr+y):x的值,再赋给变量z。当y=0时,*(ptr+y)=2,而x=8,(*(ptr+y)<x)条件为真,则整个条件表达式的值为*(ptr+y)=2,所以z=2;当y-1时,*(ptr+y)=4,(*(ptr+y)<x)条件为真,则整个条件表达式的值为*(ptr+y)=4,所以z=4;当y=2时,*(ptr+y)=6,(*(ptr+y)<x)条件为真,则整个条件表达式的值为*(ptr+y)=6,所以z=6;循环结束。因此输出z的结果为6。

40.sizeof(structst)*50sizeof(structst)*50解析:fwrite函数的一般调用形式为:fwrite(buffer,size,count,fp);其中:buffer是一个指针变量,是要输出数据的起始地址;size是要写的字节数;count是要写多少个size字节的数据项;fp是文件指针。

41.C解析:本题函数fun的作用是将指定的数组元素(下标从n~m)向后移一位。调用函数fun(a,2,9)将a[2]到a[9]的各元素依次向后移一位,最后a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,程序输出数组的前5个元素:12334。

42.A解析:本题涉及C语言最基本的两个知识点:①C程序是由函数构成的,有且仅有一个主函数,也可以有其他的函数;②整数在允许的范围内可以准确无误的表示出来,但计算机的存储能力有限,不能表示无限精度的实数。

43.D解析:sizeof(float)是c语言内部规定的用于计算单精度型变量(float)在计算机的内存中所占用的字节数量的函数,返回一个整数值。

44.A解析:在C语言中,动态存储区域中存放的变量在使用时才分配内存空间,函数调用时返回的地址和自动类局部变量等存放在动态存储区域中。auto变量和register变量都属于自动类局部变量,因此选项A正确。static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。

45.B解析:本题考查文件使用方式标识符。方式“wb”为输出打开一个二进制文件;方式“wb+”为读写建立一个新的二进制文件;方式“rb+”为读写打开一个二进制文件:方式“rb”为输入打开一个二进制文件。

46.C解析:本段程序的作用是输出字符串'lanuage'中字母u之前的字符,并将其转化为大写字母。

47.C解析:本题考查一个算法应当具有5个特性,即有穷性、确定性、可行性、有零个或多个输入以及有一个或多个输出。算法的确定性是指:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的执行结果。

48.D解析:一个算法必须具有5个特性,即有穷性、确定性、可行性、有输入、有输出。其中有穷性是指算法必须总是在执行完有穷步之后结束,而且每步都在有穷时间内完成。

49.C解析:选项A中定义了一个字符型数组并使用字符串常量给它赋初值,故选项A正确。选项B定义了一个字符型数组t并初始化,然后定义了一个指针变量s并让它指向t,故选项B正确。选项C先定义了一个长度为10的字符型数组,然后再给它赋值,这时应该分别给数组中的每个元素赋值,故选项C不正确;选项D中先定义了一个长度为10的字符型数组s,然后通过字符串复制函数将字符串“abcdefg”赋值给它,选项D正确。所以,4个选项中选项C符合题意。

50.A解析:本题程序的功能是求1到99之间(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这一次循环,执行下—次循环,否则求和。最后输出的值是1到99之间(包括1和99)所有奇数之和(1+99)*50/2=2500。

51.A解析:本题中sub(int*s,int*y)函数的参数是两个指针型变量,在函数体内将数组s的第一个元素赋给y。主程序内,首先定义了一维数组并赋初值,然后通过for循环,5次调用sub(a,&x)函数,每一次调用都是将数组a的第一个元素1赋给x,并输出。

52.A解析:在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。

53.A解析:main函数中将定义的结构体类型指针变量p指向结构体类型数组s[1],通过调用函数f改变了指针变量p所指向的结构体中成员变量name的值,但并未改变其num的值。这是因为函数f中的形参name是一个字符型指针变量,它指向了main函数中指针变量p所指向的结构体的成员变量name,所以对函数f中的形参*name的改变也就对main函数中p->name的改变,而函数f中对形参num的改变不会影响main函数中p-?num的值,因为此时传递给num的是一个值,而不是地址。

54.A解析:switch语句的执行过程是:在switch后面的表达式的值和case后面常量表达式的值吻合时,就执行该case分支的语句。如果在该语句的后面没有break语句,则按顺序继续执行下一个case分支,直到遇到break语句或switch多分支语句结束,在switch语句中,break语句的作用是使流程跳出switch结构,终止switch语句的执行。在本题中,因为每个case语句后面都没有break语句,所以,第一轮循环(i==1)执行过后a的值为8,第2轮(i==2)执行过后a的值为16,第3轮(i==3)执行过后a的值为26,第4轮(i==4)执行过后a的值为31,然后执行“i++”语句,这时循环条件为假,循环结束。

55.D

56.C解析:本题考查函数调用时的参数传递。C项中第一个参数的表达式不正确,因此不能得到正确的结果。

57.D解析:函数fopen(eonstchar*filename,cortstchar*mode)的功能是以mode指定的模式打开filename指定的磁盘文件;fclose(FILE*fp)的功能是关闭文件指针fp指向的文件;函数fscanf(FILE*fp,constchar*format[address,--))的功能是根据for-mat中的格式从fp指向的文件中读取数据,并存入到相应的address指向的变量中。函数fprintf(FILE*fp,constchar*format[,argument,--])的功能是把argument列表中的表达式值写到fp所指向的文件中;函数fwrlte(void*ptr,intsize,intn,FILE*fP)的功能是把ptr指向的缓冲区中的size×n个字节写到文件指针fP指向的文件中。本题中首先

温馨提示

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

评论

0/150

提交评论