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.元素按值有序B.构采用顺序存储结C.元素按值有序且采用顺序存储结构D.元素按值有序且采用链式存储结构

2.树最适合用来表示()。

A.有序数据元素B.无序数据元素C.元素之间具有分层次关系的数据D.元素间无联系的数据

3.数字字符“2”的ASCII码为十进制数50,数字字符“5”的ASCII码为十进制数()

A.52B.55C.54D.53

4.有以下程序:#include<stdio.h>main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf(“%d\n”,c);}程序的运行结果是()。

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

5.

6.若k是int类型变量,且有以下for语句:for(k=-1;k<O;k++)printf("****\n");下面关于语句执行情况的叙述中正确的是()。、A.循环体执行一次B.循环体执行两次C.循环体一次也不执行D.构成无限循环

7.在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。

A.详细设计B.需求分析C.总体设计D.编程调试

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

A.getehar函数用于从磁盘文件读入字符

B.gets匿数用于从终端读入字符串

C.取ns函数用于把字符串输出到文件

D.fwrite函数用于以二进制形式输出数据到文件

9.若x,i,j和k都是int型变量,则执行下面表达式后x的值为()。x=(i=4,j=16,k=32)

A.4B.16C.32D.52

10.以下程序中,while循环的循环次数是main(){inti=0;while(i<10){if(i<1)continue;if(i==5)break;i++;}}

A.1B.10C.6D.死循环,不能确定次数

11.有以下程序#include<stdio.h>main(){charcl,c2;c1=A+8-4c2=A+8-5;printf("%C,%d\n",cl,c2);}已知字母A的ASCIl码为65,程序运行后的输出结果是()。A.E,69B.D,69C.E,DD.输出无定值

12.每次从无序表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做()排序。

A.插入B.堆C.快速D.归并排序

13.下述程序执行的输出结果是()。#includemain{chara[2][4];strcpy(a,"are");strcpy(a[1],"you");a[0][3]='&';printf("%s\n",a);}A.A.are&youB.youC.areD.&

14.若某链表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用()存储方式最节省运算时间。

A.单链表B.双链表C.单循环链表D.带头结点的双循环链表

15.

16.

下列程序的输出结果是()。

#include<stdio.h>

main

{inta=0,i;

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

{switch(i)

{case0:

case3:a+=1;

case1;

case2:a+=2;

default:a+=3;

}

}

printf("%d",a);

}

A.19B.1C.6D.8

17.对n个元素的数组进行(),其平均时间复杂度和最坏情况下都为O(nlogn)。

A.希尔排序B.快速排序C.堆排序D.选择排序

18.若有如下形式的函数:intfun(inta[],int*p,intn){…}调用函数之前需要对函数进行声明,则以下选项中错误的是()。

A.intfun(int,int,int);

B.intfun(inta[],int*p,intn);

C.intfun(inta[],int*,int);

D.intfun(int[],int*,int);

19.判断字符串s1是否大于字符串s2,应该使用()。

A.if(strcmp(s1,s2)<0)

B.if(s1>s2)

C.if(strcmp(s2,s1)<0)

D.if(strcmp(s1,s2))

20.以下程序输出的结果为______。main(){char*alpha[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX");char**p;inti;p=alpha;for(i=0;i<4;i++)printf("%s",p[i]);}

A.ABCDEFGHIJKLB.ABCDC.ABCDEFGHIJKLMNOPD.AEIM

二、2.填空题(20题)21.若有以下程序:

main()

{intp,a=5;

if(p=a!=0)

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

else

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

执行后的输出结果是【】。

22.以下程序通过函数指针p调用函数fun,请在填空栏内写出定义变量p的语句。

voidfun(int*x,int*y)

{……}

main()

{inta=10,b=20;

【】:

p=fun;p(&a,&b);

……

}

23.在关系数据库中把数据表示成二维表,每一个二维表称为【】。

24.以下程序的定义语句中,x[1]的初值是(),程序运行后输出的内容是()。#include<stdio.h>main(){intx[]={1,2,3,4,5,6,7,8,9,10,1l,12,13,14,15,16},*p[4],i;for(i=0;i<4;i++){p[i]=&x[2*i+1],printf("q%d”,p[i][0]);}printf("\n");}

25.算法的基本特征是可行性、确定性、【】和拥有足够的情报。

26.与十进制数101等值的二进制数为【】。

27.下列程序将二维数组a的行和列元素互换后存放到另一个二维数组b中。请填空。

main()

{inta[2][3]={{1,2,3},{4,5}},b[3][2],i,j;

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

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

}

}

28.下面函数用来求两个单精度数之和,并通过形参将结果传回,请填空。

Voidsub(floatx,noaty,【】z)

{【】=x+y;}

29.以下程序调用函数swap_p将指针s和t所指单元(a和b)中的内容交换,请填空。

main()

{inta=10,b=20,*s,*t;

s=&a;t=&b;

swap_p(【】);

printf("%d%d,a,b");}

swap_p(int**ss,int**tt)

{intterm;

term=**ss;

**ss=**tt;

**tt=term;}

30.以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串“yes!”,否则函数返回字符串“no!”,并在主函数中输出。所谓回文即正向与反向的拼写都一样,例如:adsda。请填空。

#include<stdio,h>

#include<string,h>

char*huiwen(char*str)

{char*p1,*p2;inti,t=0;

p1=str;p2=【】;

for(i=0;i<=strlen(str)/2;i++)

if(*pl++!=*p2--){t=1;break

if(【】)return("yes!");

elsereturn("no!");

}

main(){charstr[50];

printf("Iaput:");scanf("%s",str);

printf("%s\n",【】);

31.以下程序将数组a的4个元素和数组b的6个元素写到名为lett.dat的二进制文件中,请填空。

#include<stdio.h>

#include<stdlib.h>

main()

{FILE*fp;

chara[5]="1234",b[7]="abcedf";

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

fwrite(a,sizeof(char),4,fp);

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

fclose(fp);

}

32.以下程序的运行结果为【】。

#defineN5

main()

{inta[N]={1,2,3,4,5},i,temp;

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

{temp=a[i];

a[i]=a[N-i-1];

a[N-i-1)=temp;

}

printf("\n");

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

}

33.在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关系,并且每一个______实际上对应一个处理模块。

34.以下程序的运行结果是【】。

#include<stdio.h>

#include<string.h>

typcdefstructstudent

{charname[10];

longsno;

floatscore;

}STU;

main()

{STUa={"Zhangsan",2001,95},b={"Shangxian",2002,90},

c={"Anhua",2003,95},d,*p=&d;

d=a;

if(strcmp(,)>0)d=b;

if(strcmp(,)>0)d=c;

printf("%1d%s\n",d.sno,p->name);

}

35.下面程序的输出是【】。

main()

{intarr[10],i,k=0;

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

arr[i]=i;

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

k+=arr[i]+i;

printf("%d\n"k);}

36.函数voidfun(float*sn,intn)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请补全程序。

S=1-1/3+1/5-1/7+…+1/(2n+1)

voidfun(float*sn,intn)

{floats=0.0,w,f=-1.0;

inti=0;

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

{f=【】*f;

w=f/(2*i+1);

s+=w;

}

【】=s;

}

37.实现算法所需的存储单元多少和算法的工作量大小分别称为为算法的【】。

38.以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,若一维数组中的数据是:

2223445666677899101010

删除后,数组中的内容应该是:

2345678910。

请填空。

#include<stdio.h>

#defineN80

intfun(inta[],intn)

{inti,j=1;

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

if(a[j-1]【】a[i])

a[j++]=a[i];

【】;

}

main()

{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19;

printf("Theoriginaldata:\n");

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

n=fun(a,n);

printf("\nThedataafterdeleted:\n");

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

}

39.以下程序运行后输入:3,abcde<回车>,则输出结果是【】。

#include<string.h>

move(char*str,intn)

{chartempinti;

temp=str[n-1);

for(i=n-1;i>0;i--)str[i]=str[i-1];

str[0]=temp

}

main()

{chars[50];ihtn,i,z;

scanf("%d,%s",&n,s);

z=strlen(s);

for(i=1;i<=n;i++)move(s,z);

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

}

40.以下说明语句中,【】是结构体类型名。

typedefstruct

{intn;

charch[8];

}PER;

三、1.选择题(20题)41.以下能正确定义一维数组的选项是

A.inta[5]={0,1,2,3,4,5}

B.chara[]={'0','1','2','3','4','5','\0'};

C.chara={'A','B','C'};

D.inta[5]="0123";

42.以下程序的输出结果是

#include<stdio.h>

intfun(intn,int*s)

{intf1,f2;

if(n==0||n==1)

*s=1;

else

{fun(n-1,&f1);

fun(n-2,&f2);

*s=f1+f2;

}}

voidmain()

{intx;

fun(6,&x);

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

A.7B.13C.9D.10

43.下列选项中,不是一个算法的基本特征的是()。

A.完整性B.可行性C.有穷性D.拥有足够的情报

44.有以下程序main(){chara[]="abcdefg",b[10]="abcdefg";printf("%d%d\n",sizeof(a),sizeof(b));}执行后输出结果是

A.77B.88C.810D.1010

45.设有如下定义:structsk{inta;floatb;}data;int*p;若要使p指向data中的a域,正确的赋值语句是()

A.p=&a;B.p=data.a;C.p=&data.a,D.*p=data.a;

46.在一棵二叉树上第5层的结点数最多是______。

A.8B.16C.32D.15

47.在设计程序时,应采纳的原则之一是______。

A.程序结构应有助于读者理解B.不限制goto语句的使用C.减少或取消注解行D.程序越短越好

48.以下正确的程序段是

A.charstr1[]="12345",str2[]="abcdef";

B.charstr[10],*st="abcde";strcat(str,st);

C.charstr[10]=""。*st="abcde";strcat(str,st);

D.char*st1="12345",*st2="abcde";strcat(st1,st2);

49.下列描述中正确的是()。

A.在C语言程序中预处理是指完成宏替换和文件包含指定的文件的调用

B.预处理指令只能位于C源程序文件的首部

C.预处理命令可以放在程序中的任何位置

D.预处理命令结尾需要加分号

50.有以下程序:voidfun(inta,intb,intc){a=456,b=567,c=678;}main(){intx=10,y=20,z=30;fun(x,y,z);printf("%d,%d,%d\n",x,y,z);}输出结果是

A.30,20,10B.10,20,30C.456,567,678D.678,567,456

51.Modem的数据传输速率可达到()

A.几十KbpsB.几十KBpsC.几十MbpsD.几十MBps

52.下列程序的运行结果是()。#include<stdio.h>main(){inta=0,b=4,c=0,d=10,x;if(a)d=d-10;elseif(!b)if(!c)x=15;elsex=25;printf("%d\n",d);}

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

53.有以下程序main(){inta[3][3],*p,i;p=&a[0][0];for(j=0;i<9;i++)p[i]=i;for(i=0;i<3;i++)printf("%d",a[1][i]);}程序运行后的输出结果是

A.12B.123C.234D.345

54.设有以下程序段intx=0,s=0;while(!x!=0)s+=++x;printf("%d",s);则

A.运行程序段后输出0B.运行程序段后输出1C.程序段中的控制表达式是非法的D.程序段执行无限次

55.排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的力法,称为______。

A.希尔排序B.冒泡排序C.插入排序D.选择排序

56.下列叙述中正确的是A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构

57.有以下程序

#include<stdlib.h>

structNODE

{intnum;structNODE*next;};

main()

{structNODE*p,*q,*r;

p=(structNODE*)malloc(sizeof(structNODE));

q=(structNODE*)malloc(sizeof(structNODE));

r=(structNODE*)malloc(sizeof(structNODE));

p->num=10;q->num=20;r->num=30;

p->next=q;q->next=r;

printf("%d\n",p->num+q->next->num);}

程序运行后的输出结果是

A.10B.20C.30D.40

58.软件文档不仅是软件开发各阶段的重要依据,而且也影响软件的______。

A.可维护性B.可移植性C.可扩展性D.可用性

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

A.指令由操作数和操作码两部分组成

B.常用参数xxMB表示计算机的速度

C.计算机的一个字长总是等于两个字节

D.计算机语言是完成某一任务的指令集

60.以下程序的输出结果是______。#defineM(x,y,z)x*y+zmain(){inta=1,b=2,c=3;printf("%d\n",M(a+b,b+c,c+a));}

A.19B.17C.15D.12

四、选择题(20题)61.

下列程序的运行结果是()。

#include<stdio.h>

voidmain

{ints=0,k;

for(k=7;k>1;k--)

{switch(k)

{case1:

case4:

case7:

s++:

break;

case2:

case3:

case6:break;

case0:

case5:

s+=2:

break;

}}

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

}

A.s=3B.s=4C.s=5D.无输出结果

62.(17)软件需求分析阶段的工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及()

A.阶段性报告

B.需求评审

C.总结

D.都不正确

63.有以下程序:

#include<stdio.h>

main()

{FILE*fp;inti,a[6]={1,2,3,4,5,6};

fp=fopen("d2.dat","w+");

for=(i=o;i<6;,i++)fpintf(fp,"%d\n",a[i]);

rewind(fp);

for(i=0;i%6;i++)fscanf(fp,"%d",&a[5-i]);

fclose(fp);

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

}

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

A.4,5,6,1,2,3,

B.1,2,3,3,2,1,

C.1,2,3,4,5,6,

D.6,5,4,3,2,1,

64.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是()。

A.数据库系统B.文件系统C.人工管理D.数据项管理

65.

66.下面描述中错误的是()。

A.系统总体结构图支持软件系统的详细设计

B.软件设计是将软件需求转换为软件表示的过程

C.数据结构与数据库设计是软件设计的任务之一

D.PAD图是软件详细设计的表示工具

67.有以下结构体说明、变量定义和赋值语句

68.有以下程序

main()

{intx,y;

scanf("%d",&x);

y=x>12?x+10:x-12;

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

}

若运行时给变量x输入12,则以下程序的运行结果是

A.0B.22

C.12D.10

69.以下程序的功能是

#include<stdio.h>

main()

{FILE*fp1;*fp2;

fp1=fopen("file1","r");

fp2=fopen("file2","w");

while(!feof(fp1))

fputc(fgetc(fp1),fp2);

fclose(fp1);

fclose(fp2);

}

A.将磁盘文件的内容显示在屏幕上

B.将两个磁盘文件合为一个

C.将一个磁盘文件复制到另一个磁盘文件中

D.将两个磁盘文件合并后送屏幕

70.

71.

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

A.10,l4B.8,11C.7,llD.9,l8

73.

74.软件需求分析一般应确定的是用户对软件的______。

A.功能需求B.非功能需求C.性能需求D.功能需求和非功能需求

75.

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

A.aut0和register

B.extem和register

C.auto和static

D.static和register

77.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图内容的是

A.控制流B.加工C.数据存储D.数据流

78.

79.若希望下列的程序运行后输出25,程序空白处的正确选项是()。

main

{inti,j=50,a[]=(7,4,10,5,8};

for()

j+=a[i];

printf("%d",j-40);

}

A.i=1;i<4;++i

B.i=l;i<3;++ic.i="4;i">2;i--

D.i=2;i<4;++i

80.设有intx=11;则表达式(x++*1/3)的值是()。

A.3B.4C.11D.12

五、程序改错题(1题)81.下列给定程序中,函数proc()的功能是:求出以下分数序列的前m项之和。2/1,3/2,5/3,8/5,13/8,21/13,…和值通过函数值返回main()函数。例如,若m=6,则应输出10.007051。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:

六、程序设计题(1题)82.N名学生的成绩已在主函数中放入一个带有头结点的链表结构中,h指向链表的头结点。请编写函数fun(),其功能是:找出学生的最高分,并由函数值返回。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:

参考答案

1.C

2.C

3.D

4.C该程序中“int*p1=&a,*p2=&b,*p=&c;”定义了3个指针变量,并赋值。指针变量p1指向a,p2指向b,p指向c。执行“*p=*p1*(*p2);”语句,给p所指的存储单元c赋值。p1所指的存储单元的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3。故本题答案为C选项。

5.D

6.A本题考查简单的for语句,程序中当k<0时循环才执行,所以答案选择A。

7.C解析:软件系统结构的总体设计包括:基于功能层次结构建立系统、按功能划分成模块的层次结构、确定每个模块的功能、建立与已确定的软件需求的对应关系、确定模块间的调用关系和模块间的接口、评估模块划分的质量等方面。详细设计的任务是:在使用程序设计语言编制程序以前,对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求,通常包括:功能需求、性能需求、环境需求、可靠性需求、安全保密要求、用户界面需求、资源使用需求、成本消耗需求、开发进度需求等。编程调试的任务是诊断和改正程序中潜在的错误。综上所述。软件功能分解只能发生在总体设计阶段。

8.A本题考查的是文件操作。题中“fopen(fn,”w”)”的作用是打开fn所指向的文件,使用文件方式为“写入”;

“每uts(str,fp)”的作用是将字符str的值输出到fb所指向的文件中去。在程序中,两次使用“写入”的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所以此次写入的数据覆盖了文件原有的数据,故本题中tl.dat的内容为end。故本题答案为A)。

9.C

10.D解析:break语句只能在循环体和switch语句体内使用,当break出现在switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,但不在switch语句体内时,则在执行break后,跳出本层循环体.而continue语句的作用是结束本次循环,即跳过本次循环中余下尚未执行的语句,接着再一次进行循环的条件判定。本程序中,变量i的初始值为0,判断while后面括号内表达式的值为真,执行循环体内的if语句,判断if后面括号内表达式的值为真,执行“continue;”语句.因continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断,所以i的值未发生变化,循环条件仍然为真,if语句也仍然成立,因此循环将无止境地进行下去。所以,4个选项中D为所选。

11.A本值输出两个值,%c为输出一个字母,0/4d输出一个数字。“A”的ASCIl码为65,再加4之后为69,也就是字母E,所以本题A正确。

12.B

13.Astrcpy实现的功能是复制,该操作把are复制到a中,a[0][3]='&',且strcpy(a[1],"you")把you复制到a[1]中,故输出a为“are&you”。

14.D

15.B

16.A

\n本题考查switch语句。当i一1时,执行case1,因为没有遇到break语句,所以依次往下运行,“a=a+2=2,a=a+3=5”;当i=2时,执行case2,因为没有遇到break语句,所以依次往下执行,“a=a+2=7,a=a+3=10”;当i=3时,执行case3,a=a+1=11,因为没有遇到break语句,所以依次往下运行,a—a+2—13,a—a+3一l6:当i=4时,执行default,a=a+3=19,结束循环。

17.C

18.AC语言中,函数声明的函数名、返回值类型和参数列表必须与函数定义相同。其中参数列表中可以省略参数名。题干中,fun函数返回整型,3个参数分别是:整型指针、整型指针、整型。选项A中,第1个参数应该是整型指针类型,第2个参数也应该是指针类型,错误;其他选项都正确。故本题答案为A选项。

19.C解析:本题考查字符串比较函数strcmp()。调用形式:strcmp(s1,s2),其中s1、s2分别是字符串存储区的首地址。函数功能:比较字符串str1和str2,当str1<str2时,返回值为负数;当str1=str2时,返回0;当str1>str2,返回值为正数(注意:不能使用关系运算符比较两个字符串的大小)。

20.C解析:alpha[0]指向“ABCD”的首地址;alpha[1]指向“EFGH”的首地址;alpha[2]指向“IJKL”的首地址,依此类推。当执行p=alpha后,p指向指针数组alpha的首地址。for循环中输出了4个字符串。

21.11解析:本题考查C语言中的if-else语句。if语句中的条件表达式p=a!=0是一个赋值语句,将关系表达式a!=0的结果赋值给变量p。因a=5,所以a!=0的结果为1,即p=1,条件为真,所以执行if后面的语句printf('%d\\n',p),输出结果为1。

22.void(*p)();void(*p)();解析:要定义p为指向函数的指针变量,需写成void(*p)();,注意*p两侧的括弧不可以省略,表示P先与*结合,是指针变量,再与后面的()结合,表示此指针变量指向函数,这个函数无返回值(同fun()函数)。

23.关系或一个关系关系或一个关系解析:在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系。

24.2246822468解析:p为指向数组的指针变量,数组x[1]为数组x[]的第二个元素,值为2;进入for循环i=0时,p[0]=&x[1]…直到循环完毕,指针分别指向数组x[]中的第2、4、6、8个元素,所以第二个空白处应填2468。

25.有穷性有穷性解析:算法有四个基本特征:可行性、确定性、有穷性和拥有足够的情报。

26.1100101

27.b[j][i]=a[i][j]b[j][i]=a[i][j]解析:本题考查二维数组的基本知识。它是要将一个二维数组,的行和列元素互换后存放到另一个二维数组b中,只要将数组a的行标和列标互换,然后赋给数组b即可。

28.float*z

29.&s&t&s,&t解析:指针做函数参数时,形参和实参指向同一个数据,所以函数中对形参所指向的数据的改变也能影响到实参。本题中函数swap_p的形参为指向指针的指针,即双重指针,原理跟普通的指针是一样的。注意:通过指针来引用一个存储单元。

30.p1+(stfien(str)-1)或str+(strlen(str)-1)t==0或!thuiwen(str)或(strlen(str)-1)+p1或(stden(str)-1)+strp1+(stfien(str)-1)或str+(strlen(str)-1)\r\nt==0或!t\r\nhuiwen(str)或(strlen(str)-1)+p1或(stden(str)-1)+str解析:回文字符串是指正向与反向拼写都一样。由huiwen函数可知,第三处应该填写调用函数huiwen(str)。在函数huiwen中,执行P1=str;使p1指向字符串str中第一个字符的地址,则第一处应该使p2指向字符串str中最后一个字符的地址,故填p1+(stden(str)-1)或str+(strlen(str)-1)。本题要求如果是回文,则返回'yes!',否则,返回'no!',故当t=0时,说明字符串str为回文,所以第二处应填t==0或!t。

31.lett.dat6*sizeof(char)lett.dat6*sizeof(char)解析:本题主要考查函数fwrite(char*pt,unsignedsize,unsignedn,FILE*fp),把pt所指向的n*size个字节输出到fp所指定的文件中。

32.54321

33.加工加工解析:数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中的每一个加工对应一个处理模块。

34.2002Shangxian2002Shangxian解析:strcmp函数用于比较两个字符串的大小,因为=Zhangsan,=Shangxian,所以strcmp(,)>0为真,执行d=b;因为=Anhua,=Shangxian,所以strcmp(,)>0不成立,不执行d=c;最后输出d.sno和的值分别为2002,Shangxian。

35.1212解析:本题通过第一个for循坪将数组arr[0]-arr[9]分别赋值为0-9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如下:

i=1:k=0+arr[1]+1即k=2;

i=2:k=2+arr[2]+2即k=6;

i=3:k=6+arr[3]+3即k=12;

36.-1或-1.0*sn-1或-1.0\r\n*sn解析:由于在对S求和时,相邻两项的符号刚好相反,而在函数fun中没有对数据进行取反的操作,故第—空的目的是对数据进行取反,以保证序列中相邻两项的符号不同。故第—个应填-1或-1.0。在执行完循环体后,要将求和结果通过指针参数的形式传递绐调用fun的函数,故第二空应填*sn。

37.空间复杂度和时间复杂度空间复杂度和时间复杂度解析:算法的复杂性是指对—个在有限步骤内终止算法和所需存储空间大小的估计。算法所需存储空间大小是算法的空间复杂性,算法的计算量是算法的时间复杂性。

38.!=returnj!=,returnj解析:本题程序的流程是:让i,j都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a[j-1]!=a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以a[i]要留到新数组中。注本题中i、j的初值都要从1开始,该算法只能用于数组已排序的题目中。

39.cdeabcdeab解析:本题中函数move的实参到形参是按地址传递,故形参的改变会影响实参。根据题目可知在main函数中,n=3、s[0]=\'a\'、s[1]=\'b\'、s[2]=\'c\'、s[3]=\'d\'、s[4]=\'e\',数组元素s[5]~s[49]全部为\'\\0\',故z=strlen(s)=5。

第1次调用函数move时,形参str='abcd'、n=5,执行完函数move后str[4]=str[3]=\'d\'、str[3]=str[2]=\'c\'、str[2]=str[1]=\'b\'、str[1]=str[0]=\'a\'、str[0]=str[4]=\'e\'。即s[0]=\'e\'、s[1]=\'a\'s[2]、s[2]=\'b\'、s[3]=\'c\'、s[4]=\'d\'。

第2次调用函数move时,形参str='eabcd、n=5,执行完函数move后str[4]=str[3]=\'c\'、str[3]=str[2]=\'b\'、str[2]=str[1]=\'a\'、str[1]=str[0]=\'e\'、str[0]=str[4]=\'d\'。即s[0]=\'d\'、s[1]c\'e\'、s[2]=\'a\'、s[3]=\'b\'、s[4]=\'c\'。

第3次调用函数move时,形参str='deabc'、n=5,执行完函数move后str[4]=str[3]=\'b\'、str[3]=str[2]=\'a\'、str[2]=str[1]=\'e\'、str[1]=str[0]=\'d\'、str[0]=str[4]=\'c\'。即s[0]=\'c\'、s[1]=\'d\'、s[2]=\'e\'、s[3]=\'a\'、s[4]=\'b\'。

所以printf函数的输出结果为:cdeab。

40.PERPER解析:本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。

41.B解析:选项A)中,定义的初值个数大于数组的长度;选项C)中,数组名后少了中括号;选项D)中,整型数组不能赋予字符串。

42.B解析:考查函数的递归调用。n=0或n=1是递归的终止条件,然后利用已知值逐步递推求出未知值。通过传送地址值,在被调用函数中直接改变调用函数中的变量的值。

43.A解析:作为一个算法,一般应该具有下列4个特征:(1)可行性,即考虑到实际的条件能够达到一个满意的结果;(2)确定性,算法中的每一个步骤都必须是有明确定义的,(3)有穷性,一个算法必须在有限的时间内做完;(4)拥有足够的情报。

44.C解析:本题考核的知识点是字符数组的定义、赋初值以及函数sizeof()的应用。本题中定义两个字符型数组,其中a省略了长度,定义了b的长度为10,并赋初值分别为“abcdefg”和“abcdfg”。所以a的长度为赋值给它的字符串的字符个数7加上一个结束转义字符,即a的长度为7+1为8.定义时b的长度定义为10,故b的长度为10,因此最后通过函数sizeof()求得的数组a和数组b的长度分别为8和10,所以,4个选项中选项C符合题意。

45.C解析:data是—结构体变量,a是它的成员,因此引用a域的正确方法是:data.a,取它的地址赋值给指针变量p的语句应该是:p=&data.a。选项A,将a的地址直接赋给了p,而忽略了a为结构体内部的一个成员,而不是一单独的变量,故选项A不正确;选项B在p=data.a表达式中右边为一个结构体变量的成员不是地址,而左边为一指针应该将一地址赋给它,故选项B不正确;选项D表达式*p=data.a是将结构体变量中的成员a的值赋给指针p所指向的变量值,而不是使指针p指向data中的a域,故选项D不正确:4个选项中只有C正确。

46.B[答案]B

[考点]数据结构与算法

[评析]依次从上到下,可得出:

第1层结点数为1;

第2层结点数为2*1=2;

第3层结点数为2*2=4;

第n层结点数为2的n-1次幂

47.A解析:程序设计的风格主要强调程序的简单、清晰和可理解性,以便读者理解。因此选项A是正确答案。程序滥用goto语句将使程序流程无规律,可读性差;添加的注解行有利于对程序的理解,不应减少或取消;程序的长短要依照实际需要而定,并不是越短越好。因此选项B、C、D都是错误的。

48.C解析:本题考查了一维字符数组的定义和初始化。选项C中str[10]初始化为空,可以不必进行类似''的空赋值,字符数组若没有进行初始化赋值,默认的字符为空,并且定义完str数组后,应该用“,”分隔而不是“。”,所以选项C错误。

49.C解析:本题考查预处理命令的特点,编译预处理命令的特点:①为了区别一般的语句,预处理命令行都必须以“#”号开始,结尾不加分号;②预处理命令可以放在程序中的任何位置;③在程序中凡是以“#”号开始的语句行都是预处理命令行。

50.B解析:本题考查函数中变量的作用范围,在主函数中给变量x,y,z赋值,然后将其作为实参传递给了函数fun(),虽然在函数fun()中改变了这3个变量的值,但只是同名的局部变量,不影响函数中变量的值,所以在调用函数fun()结束后,主函数3个变量的值未改变,即形参值的改变不能影响实参的值。注意:顺序程序结构的执行过程。

51.A

52.D解析:本题考查ifelse语句。第1个if语句,先判断条件,发现a=0条件不成立,则执行与其配对的else语句;第2个if语句,先判断条件,发现b=4,则!b条件不成立,又没有与其配对的else语句,所以执行printf语句,输出d。

53.D解析:本题考查二维数组和指针,首先使指针p指向二维数组的首地址,通过第一个for循环对一维数组p赋值,其实也就是给二维数组a赋值,a[0][0]~a[2][2]分别赋以0~8,所以a[1][0],a[1][1],a[1][2]分别为3,4,5。

54.B解析:本题考查while语句的使用。本题考查逻辑非运算符和不等于运算符的区别,逻辑非运算符'!'的优先级大于不等于运算符'!='的优先级。

55.A解析:希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。

56.A根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:1,有且只有一根节结点,2,每一个结点最多有一个前件,也最多有一个后件,则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

57.D解析:该题中考查的是简单的单链表,下图就是赋完值后的示意图:容易看到p->num=10,而q->next就是r,所以q->next->num=30,故答案为40。

58.A

59.A

60.D解析:C语言的宏定义包括不带参数的宏定义与带参数的宏定义。本题为带参数的宏定义,其形式为:

#define宏名(形参表)字符串

本题的M(a+b,b+c,c+a)被字符串a+b*b+c+c+a代替。

61.B

\n运行程序,当k=7时switch(7)执行case:7,s++后s=1,break跳出。k--,k=7继续循环switch(6),执行case6;直接跳出循环,k--变成5,继续循环switch(5),执行case5后面的语句s+=2,也相当于s=s+2,此时s为3,break跳出,k变为4,继续循环,执行case4为空,继续执行case7;s++为4跳出循环,k--变为3,继续循环,执行case3,空语句往下执行case6,跳出,k--为2,继续循环,执行case2;空语句往下执行case3,空语句再执行case7,跳出循环,k--为1不符合循环,退出,此时S=4。

\n

62.B

63.D\n这个是对文件的操作,把数组的数写到文件里,然后再从文件里倒序读出。所以输出结果为6,5,4,3,2,1。

\n

温馨提示

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

评论

0/150

提交评论