2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第1页
2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第2页
2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第3页
2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第4页
2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.以下程序的主函数中调用了在其面前定义的fun函数#include<stdio.h>...main(){doublea[15],k;k=fun(a);...}则以下选项中错误的fun函数首部是()。、A.doublefun(doublea[l5])

B.doublefun(double*a)

C.doublefun(doublea[])

D.doublefun(doublea)

2.有以下程序:#include<stdio.h>main(){chars[]="012xy\O8s34f4w2‘;inti;n=0;,for(i=0;s[i]!=0;i++)if(s[i]>=0s[i]<=9)n++;printf("%d\n",n);}程序运行后的输出结果是()。A.0B.3C.7D.8

3.设一棵二叉树共有50个叶子结点(终端结点),则共有___个度为2的结点。

A.25B.49C.50D.51

4.一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为()。

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

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

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

6.以下定义语句中正确的是()。

A.inta=b=0;

B.charA=65+1,b=‘b’;

C.floata=1,*b=&a,*c=&b;

D.doublea=0.0;b=1.1;

7.有以下程序:main(){intX,i;for(i=1;i<=50;i++){x=i;if(X%2=O)if(x%3=O)if(X%7=0)printf("%d,i)";}}输出结果是()。A.28B.27C.42D.41

8.在堆栈中存取数据的原则是。A.先进先出B.后进先出C.先进后出D.随意进出

9.对一个算法的评价,不包括()方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度

10.在数据结构中,与所使用的计算机无关的是数据的()结构。

A.逻辑B.存储C.逻辑和存储D.物理

11.以下叙述中正确的是()。A.A.break语句只能用在循环体内和switch’语句体内

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

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

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

12.

二、2.填空题(12题)13.以下程序的功能是从键盘输入若干学生的成绩,并输出最高成绩和最低成绩,当输入负数时结束。请填空。

#include<stdio.h>

main()

{floatx,amax,amin;

scanf("%f",&x);

amax=x;amin=x;

while(【】)

{if(x>amax)amax=x;

else

if(【】)amin=x;

scanf("%f",&x);

}

printf("\namax=%f\namin=%f\n",amax,amin);

}

14.函数mycmp(char*s,char*t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t时返回正值,当s<t时返回负值。请填空。

mycmp(char*s,char*t)

{while(*s==*t)

{if(*s=='\0')return0;

++s;++t;

}

return(【】);

}

15.若运行输入:3<回车>,则以下程序的输出结果是()。main(){inta,b;scanf("%d",&A);b=(a>=0)?a:-a;printf("b=%d",B);}

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

17.下面程序的运行结果是:【】。

voidswap(int*a,int*b)

{int*t;

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

}

main()

{intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

printf(“%d%d\n”,*p,*q);

}

18.面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个______。

19.在一个容量为25的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有上【】个元素。

20.语句“int(*ptr)();”的含义是______是指向函数的指针,该函数返回一个血型数据。

21.若从键盘输入24,则以下程序输出的结果是()。

#include<stdio.h>

main()

{inta;

scanf("%d",&A);

if(a>20)printf("%d",A);

if(a>10)printf("%d",A);

if(a>5)printf("%d",A);

}

22.若先后输入county、side,以下程序的运行结果为【】。

main()

{chars1[40],s2[20];inti=0,j=0;

scanf("%s",s1);

scanf("%s",s2);

while(s1[i]!='\0')i++;

while(s2[j]!='\0')s1[i++]=s2[j++];

s1[i]='\0';

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

}

23.以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当给a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。

main()

{floata,b,c;

scanf("%f%f%f",&a,&b,&C);

if(())printf("YES\n");/*a、b、c能构成三角形*/

elseprintf("NO\n");/*a、b、c不能构成三角形*/

}

24.若用0至9之间不同的三个数构成一个三位数,下面程序将统计出共有多少种方法。请填空。

#include<stdio.h>

main()

{inti,j,k,count=0;

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

for(j=0;i<=9;j++)

if(【】)continue;

elsefor(k=0;k<=9;k++)

if(【】)count++;

printf("%d",count);}

三、3.程序设计题(10题)25.请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):

程序运行后,如果输入精度0.0005,则程序输出为3.140578。

注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

26.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

S=1-x+x2(上标)/2!-x3(上标)/3!+…+(-1*x)n(上标)/n!

例如,当n=15,x=0.5时,函数值为0.606531。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0.5,15));

}

27.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写一个函数fun(),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。例如,若数组a中的值为

01279

1112155

2216111

979102

54141

则返回主程序后s的值应为310。

[注意]部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1);

inti,j;

ints;

clrscr()

printf("*****Thearray*****\n");

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

{

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

{

printf("%4d",a[i][j]);

}

printf("\n");

}

s=fun(a);

printf("*****THERESULT*****\n");

printf("Thesumis:%d\n",s);

}

28.编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

注意:部分源程序给出如下.

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("输入若干个字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作为结束输入的标志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

29.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

例如,分别输入下面两个字符串:

FirstString--

SecondString

程序输出:

FirtString--SecondStdng

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

30.编写函数fun(),它的功能是:计算和输出下列级数的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,当n=10时,函数值为0.909091。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

printf("%f\n",fun(10));

}

31.请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

注意:部分源程序存在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

32.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为

a=456

179

326,

则返回主程序后a数组中的值应为

000

100

320

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

printf(“%4d”,a[i][j]);

}

printf(“\n”);

}

fun(a);

printf(“THERESULT\n”);

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

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

printf(“%4d”,a[i][j]);

printf(“\n”);

}

}

33.请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为siegAHdied,则在t所指数组中的内容应是seAde。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*S,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%S",S);

fun(S,t);

printf("\nTheresultis:%s\n",t);

}

34.请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:87667589610l30l401980431451777则输出结果为:6,980

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

四、单选题(0题)35.下列排序算法中,其时间复杂度和记录的初始排列无关的是()

A.插入排序B.堆排序C.快速排序D.冒泡排序

五、单选题(0题)36.有以下程序,其中函数f的功能是将多个字符串按字典顺序排序:#include<string.h>voidf(char*p[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)ifstrcmp(p[i],p[j])>0{t=p[i]p[i]=p[j];p[j]=t;}}main(){char*p[5]=("abc","aabdfg","abbd","dcdbe","cd"};f(p,5);printf("%d\n",strlen(p[1]));}程序运行后的输出结果是______。A.2B.3C.6D.4

六、单选题(0题)37.

参考答案

1.A由题可知fun的参数为变量,而a[15]为常量,所以答案为A。

2.B考查简单的C程序数组和循环。for循环是指i=0,如果s/[3]!=0,则i自动加1。if循环指的是s[i]中的元素大于等于0且小于等于9,则n加l,所以答案为B。

3.B难易程度:易

4.A

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

6.BA选项中的变量b没有定义,不能直接给变量a赋值。C选项中,*b、*c表示的是一个实型变量的地址,不能将指针型变量b的地址赋值给指针型变量c。D选项中,“a=0.0”后面应该为逗号,不能是分号。故本题答案为B选项。

7.C只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择c选巩。

8.C

9.B

10.A

11.A本题主要考查的知识点是:break和IContinue语句。break语句可以用于swhitCh或循环体内,作用是跳/出switCh或循环体。Continue语句只能用于循环体内,作用是结束当前循环,进入下次循环。故本题中只有选项A)是正确的。

12.D

13.x>=0x<aminx>=0x<amin解析:本题先从键盘接受数值,并分别赋给amax(用于保存最高成绩)和amin(用于保存最低成绩),然后通过while循环控制是否结束输入,并且通过if语句来给amax和amin赋值。

14.*s-*t*s-*t解析:本题考查比较字符串的大小。函数的两个形参是两个字符指针变量,指针变量的值是字符串的首地址,*s和*t表示s和t指向的第一个字符,在while循环中,通过s和t指针的移动,不断改变所指字符,通过返回s和t的第一个不同字符的ASCII码的差值*s-*t得到结果。

15.b=3b=3解析:条件表达式的基本格式为:“表达式1?表达式2:表达式3”;其功能是:表达式1的值若非0,则计算表达式2的值,且为最终结果;若表达式1的值为0,则计算表达式3的值,且为最终结果。因为a=3,则a>=0成立,所以b=a=3。

16.指针P指向数组a的首地址,执行语句p++;后p指向数组a的第2个元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

17.3535解析:在主函数中通过定义和赋初值使p和q分别指向了x和y,执行函数调用“swap(p,q)”,把p和q中的地址值传给了形参指针变量a和b,a和b分别指向了实参x和y。在函数swap()中交换了指针变量a和b的值,并没有交换a和b指向的实参的值,所以函数调用返回后x和y依然是原来的值。

18.实体实体

19.1818解析:设循环队列的容量为n。若rear>front,则循环队列中的元素个数为rear-front;若rear<front,则循环队列中的元素个数为n+(rear-from)。题中,front=16,rear=9,即rear>front,所以,循环队列中的元素个数为m+(rear-front)=25+(9-16)=18。

20.ptrptr解析:本题考查函数指针的概念。函数指针的定义格式是:类型标识符(叶旨针变量名)()。注:“类型标识符”为函数返回值的类型。

21.242424

22.countryside

23.(a+b>C)&&(a+c>B)&&(b+c>A)(a+b>C)&&(a+c>B)&&(b+c>A)解析:本题主要考查运算符逻辑与“&&”的用法。

24.i==jk!i&&k!ji==j\r\nk!i&&k!j解析:本题用双重for循环写了一段0~9之间不同的3个数构成一个三位数的程序,因为要求三位数各个位数的数不能相同,所以第一个空if语句的条件应为i==j,即当两个位数上的数相同的时候,不再执行下面的操作,转去执行for循环的下一次循环。第二个空,需要判断第三位上的数不能与其他两位的数相同。

25.

解析:进入fun函数,根据前面的分析:(1)根据题意,需要把每一项累加起来;若每一累加项的值放在t中,后一项等于前一项累加项的值乘以n/(2*n+1)来求得。

(2)根据公式将求到的π/2的值放到变量pi中,每累加一次,n的值就增加1,以便求下一个累加项,不断重复,直到满足题目中的精度要求。

26.doublefun(doublexintn){intij=1;doubles=1.0s1=1.0;for(i=1;i<=n;i++){j=-1*j;s1=s1*i/*各项中的阶乘*/s=s+j*pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti,j=1;\r\ndoubles=1.0,s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{\r\nj=-1*j;\r\ns1=s1*i/*各项中的阶乘*/\r\ns=s+j*pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j=-1*j来实现。

27.intfun(intw[][N]){intijk=0;ints=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1){s=s+w[i][j]*w[i][j];}returns;}intfun(intw[][N])\r\n{\r\ninti,j,k=0;\r\nints=0;\r\nfor(i=0;i<N;i++)\r\nfor(j=0;j<N;j++)\r\nif(i==0||i==N-1||j==0||j==N-1)\r\n{\r\ns=s+w[i][j]*w[i][j];\r\n}\r\nreturns;\r\n}

28.fun(char(*a)[81]intnumchar*max){inti=0;max=a[0];for(i=0;i<num;i++)/*找出最长的一个字符串*/if(strlen(max)<strlen(a[i]))max=a[i];returnmax;/*传回最长字符串地址*/}fun(char(*a)[81],intnum,char*max)\r\n{\r\ninti=0;\r\nmax=a[0];\r\nfor(i=0;i<num;i++)/*找出最长的一个字符串*/\r\nif(strlen(max)<strlen(a[i]))\r\nmax=a[i];\r\nreturnmax;/*传回最长字符串地址*/\r\n}解析:做本题之前,我们先应该明白ss是一个指向一维数组的指针变量,max是指向指针变量的指针变量。所以引用时要注意加上*。我们不可能只用max,因为ss[0]是一个数组地址而不是一个指针的地址。

29.

解析:该程序功能是实现两个字符串的连接。本题要把串2连接到串1之后,则需要把串2的第一个字符放到串1的尾符的位置上,把串2的后面的字符放到串1的后面的位置。

30.doublefun(intn){inti;doubles=0.0;for(i=l;i<=n;i++)s=s+l.0/(i*(i+l));/*求级数的和*/returns;}doublefun(intn)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=l;i<=n;i++)\r\ns=s+l.0/(i*(i+l));/*求级数的和*/\r\nreturns;\r\n}解析:解决数学序列的问题,我们的思路依然是“数学先行”,即先看清楚题目的数学逻辑,然后再根据C语言来“翻译”出来。本题中,每一项的值都是n*(n+1)的倒数。当输入n时,从1开始循环,注意,此处for(i=1;i

31.

解析:该程序功能是寻找二维数组中最大元素的值。其中,求最大元素的方法:用最大值变量maX标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记当前最大值及其所在位置,从而找出最大值。

32.intfun(inta[][N)){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=0;/*将数组右上半三角元素中的值全部置成0*/}intfun(inta[][N))\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=0;/*将数组右上半三角元素中的值全部置成0*/\r\n}解析:本题旨在考查控制数组中右上半三角元素的算法,也就是两个千篇一律的循环语句,希望学习者能够掌握消化。

33.voidfun(char*Schart[]){intij=0k=strlen(s);/*k为字符串的长度*/for(i=0;i<k;i=i+2)/*将s所指字符串中下标为偶数的字符存入t所指字符串中*/t[j++]=s[i];t[j]='\0';/*在字符串最后加上结束标志*/}voidfun(char*S,chart[])\r\n{\r\ninti,j=0,k=strlen(s);/*k为字符串的长度*/\r\nfor(i=0;i<k;i=i+2)/*将s所指字符串中下标为偶数的字符存入t所指字符串中*/\r\nt[j++]=s[i];\r\nt[j]='\\0';/*在字符串最后加上结束标志*/\r\n}解析:本题使用了一种i永远是偶数的循环方法,即for(i=0;i<k;i=i+2),因为开始时i的值为0,当i+2循环时,此值永远是偶数。

34.

解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k);”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。

35.B

36.D解析:字符串比较函数“strcmp(char*s1,char*s2)”的比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到到"\\0"为止。如果全部相同,则认为相等:若出现不相同的字符,则以第一个不相同的字符的比较结果为准。当s1<s2,返回值<0;当s1=s2时,返回值二0:当s1>s2时,返回值>0。故本题经过排序后,得到第二个字符串是“abbd”,所以输出结果是4。

37.D

2021年四川省攀枝花市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、单选题(12题)1.以下程序的主函数中调用了在其面前定义的fun函数#include<stdio.h>...main(){doublea[15],k;k=fun(a);...}则以下选项中错误的fun函数首部是()。、A.doublefun(doublea[l5])

B.doublefun(double*a)

C.doublefun(doublea[])

D.doublefun(doublea)

2.有以下程序:#include<stdio.h>main(){chars[]="012xy\O8s34f4w2‘;inti;n=0;,for(i=0;s[i]!=0;i++)if(s[i]>=0s[i]<=9)n++;printf("%d\n",n);}程序运行后的输出结果是()。A.0B.3C.7D.8

3.设一棵二叉树共有50个叶子结点(终端结点),则共有___个度为2的结点。

A.25B.49C.50D.51

4.一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为()。

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

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

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

6.以下定义语句中正确的是()。

A.inta=b=0;

B.charA=65+1,b=‘b’;

C.floata=1,*b=&a,*c=&b;

D.doublea=0.0;b=1.1;

7.有以下程序:main(){intX,i;for(i=1;i<=50;i++){x=i;if(X%2=O)if(x%3=O)if(X%7=0)printf("%d,i)";}}输出结果是()。A.28B.27C.42D.41

8.在堆栈中存取数据的原则是。A.先进先出B.后进先出C.先进后出D.随意进出

9.对一个算法的评价,不包括()方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度

10.在数据结构中,与所使用的计算机无关的是数据的()结构。

A.逻辑B.存储C.逻辑和存储D.物理

11.以下叙述中正确的是()。A.A.break语句只能用在循环体内和switch’语句体内

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

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

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

12.

二、2.填空题(12题)13.以下程序的功能是从键盘输入若干学生的成绩,并输出最高成绩和最低成绩,当输入负数时结束。请填空。

#include<stdio.h>

main()

{floatx,amax,amin;

scanf("%f",&x);

amax=x;amin=x;

while(【】)

{if(x>amax)amax=x;

else

if(【】)amin=x;

scanf("%f",&x);

}

printf("\namax=%f\namin=%f\n",amax,amin);

}

14.函数mycmp(char*s,char*t)的功能是比较字符串s和t的大小,当s等于t时返回0,当s>t时返回正值,当s<t时返回负值。请填空。

mycmp(char*s,char*t)

{while(*s==*t)

{if(*s=='\0')return0;

++s;++t;

}

return(【】);

}

15.若运行输入:3<回车>,则以下程序的输出结果是()。main(){inta,b;scanf("%d",&A);b=(a>=0)?a:-a;printf("b=%d",B);}

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

#include<stdio.h>

main()

{inta[5]={2,4,6,8,10},*p;

p=a;p++;

printf("%d",*p);

}

17.下面程序的运行结果是:【】。

voidswap(int*a,int*b)

{int*t;

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

}

main()

{intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

printf(“%d%d\n”,*p,*q);

}

18.面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个______。

19.在一个容量为25的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有上【】个元素。

20.语句“int(*ptr)();”的含义是______是指向函数的指针,该函数返回一个血型数据。

21.若从键盘输入24,则以下程序输出的结果是()。

#include<stdio.h>

main()

{inta;

scanf("%d",&A);

if(a>20)printf("%d",A);

if(a>10)printf("%d",A);

if(a>5)printf("%d",A);

}

22.若先后输入county、side,以下程序的运行结果为【】。

main()

{chars1[40],s2[20];inti=0,j=0;

scanf("%s",s1);

scanf("%s",s2);

while(s1[i]!='\0')i++;

while(s2[j]!='\0')s1[i++]=s2[j++];

s1[i]='\0';

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

}

23.以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当给a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三个条件:a+b>c,a+c>b,b+c>a。请填空。

main()

{floata,b,c;

scanf("%f%f%f",&a,&b,&C);

if(())printf("YES\n");/*a、b、c能构成三角形*/

elseprintf("NO\n");/*a、b、c不能构成三角形*/

}

24.若用0至9之间不同的三个数构成一个三位数,下面程序将统计出共有多少种方法。请填空。

#include<stdio.h>

main()

{inti,j,k,count=0;

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

for(j=0;i<=9;j++)

if(【】)continue;

elsefor(k=0;k<=9;k++)

if(【】)count++;

printf("%d",count);}

三、3.程序设计题(10题)25.请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):

程序运行后,如果输入精度0.0005,则程序输出为3.140578。

注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

26.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。

S=1-x+x2(上标)/2!-x3(上标)/3!+…+(-1*x)n(上标)/n!

例如,当n=15,x=0.5时,函数值为0.606531。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<math.h>

doublefun(doublex,intn)

{

}

main()

{

clrscr();

printf("%f",fun(0.5,15));

}

27.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写一个函数fun(),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。例如,若数组a中的值为

01279

1112155

2216111

979102

54141

则返回主程序后s的值应为310。

[注意]部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

[试题源程序]

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#defineN5

intfun(intw[][N])

{

}

main()

{

inta[N][N]=(0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1);

inti,j;

ints;

clrscr()

printf("*****Thearray*****\n");

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

{

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

{

printf("%4d",a[i][j]);

}

printf("\n");

}

s=fun(a);

printf("*****THERESULT*****\n");

printf("Thesumis:%d\n",s);

}

28.编写一个函数,从传入的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标志)。

注意:部分源程序给出如下.

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

fun(char(*a)[81],intnum,char*max)

{

}

main()

{

charss[l0][81],*ps;

intn,i=0;

clrscr();

prlntf("输入若干个字符串");

gets(ss[i]);

puts(ss[i]);

while(!strcmp(ss[i],"****")==0)

/*用****作为结束输入的标志*/

{

i++;

gets(ss[i]);

puts(ss[i]);

}

n=i;

ps=fun(ss,n,&ps);

print~("\nmax=%s\n",ps);

}

29.编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

例如,分别输入下面两个字符串:

FirstString--

SecondString

程序输出:

FirtString--SecondStdng

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

30.编写函数fun(),它的功能是:计算和输出下列级数的和。

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))

例如,当n=10时,函数值为0.909091。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序;

#include<conio.h>

#include<stdio.h>

doublefun(intn)

{

}

main()

{

clrscr();

printf("%f\n",fun(10));

}

31.请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。

注意:部分源程序存在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

32.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为

a=456

179

326,

则返回主程序后a数组中的值应为

000

100

320

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#defineN5

intfun(inta[][N])

{

}

main()

{

inta[N][N],i,j;

clrscr();

printf("*****Thearray*****\n");

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

/*产生—个随机的5*5矩阵*/

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

{a[i][j]=rand()%10;

printf(“%4d”,a[i][j]);

}

printf(“\n”);

}

fun(a);

printf(“THERESULT\n”);

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

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

printf(“%4d”,a[i][j]);

printf(“\n”);

}

}

33.请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为siegAHdied,则在t所指数组中的内容应是seAde。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include<conio.h>

#include<stdio.h>

#include<string.h>

voidfun(char*S,chart[])

{

}

main()

{

chars[100],t[100];

clrscr();

printf("\nPleaseenterstrings:");

scanf("%S",S);

fun(S,t);

printf("\nTheresultis:%s\n",t);

}

34.请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:87667589610l30l401980431451777则输出结果为:6,980

注意:部分源程序在文件PROGl.C文件中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

四、单选题(0题)35.下列排序算法中,其时间复杂度和记录的初始排列无关的是()

A.插入排序B.堆排序C.快速排序D.冒泡排序

五、单选题(0题)36.有以下程序,其中函数f的功能是将多个字符串按字典顺序排序:#include<string.h>voidf(char*p[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)ifstrcmp(p[i],p[j])>0{t=p[i]p[i]=p[j];p[j]=t;}}main(){char*p[5]=("abc","aabdfg","abbd","dcdbe","cd"};f(p,5);printf("%d\n",strlen(p[1]));}程序运行后的输出结果是______。A.2B.3C.6D.4

六、单选题(0题)37.

参考答案

1.A由题可知fun的参数为变量,而a[15]为常量,所以答案为A。

2.B考查简单的C程序数组和循环。for循环是指i=0,如果s/[3]!=0,则i自动加1。if循环指的是s[i]中的元素大于等于0且小于等于9,则n加l,所以答案为B。

3.B难易程度:易

4.A

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

6.BA选项中的变量b没有定义,不能直接给变量a赋值。C选项中,*b、*c表示的是一个实型变量的地址,不能将指针型变量b的地址赋值给指针型变量c。D选项中,“a=0.0”后面应该为逗号,不能是分号。故本题答案为B选项。

7.C只有当3个if条件同时成立,即能够同时被2、3、7整除时,才输出i的值,而从0到50能够同时被2、3、7整除的数只有42,故选择c选巩。

8.C

9.B

10.A

11.A本题主要考查的知识点是:break和IContinue语句。break语句可以用于swhitCh或循环体内,作用是跳/出switCh或循环体。Continue语句只能用于循环体内,作用是结束当前循环,进入下次循环。故本题中只有选项A)是正确的。

12.D

13.x>=0x<aminx>=0x<amin解析:本题先从键盘接受数值,并分别赋给amax(用于保存最高成绩)和amin(用于保存最低成绩),然后通过while循环控制是否结束输入,并且通过if语句来给amax和amin赋值。

14.*s-*t*s-*t解析:本题考查比较字符串的大小。函数的两个形参是两个字符指针变量,指针变量的值是字符串的首地址,*s和*t表示s和t指向的第一个字符,在while循环中,通过s和t指针的移动,不断改变所指字符,通过返回s和t的第一个不同字符的ASCII码的差值*s-*t得到结果。

15.b=3b=3解析:条件表达式的基本格式为:“表达式1?表达式2:表达式3”;其功能是:表达式1的值若非0,则计算表达式2的值,且为最终结果;若表达式1的值为0,则计算表达式3的值,且为最终结果。因为a=3,则a>=0成立,所以b=a=3。

16.指针P指向数组a的首地址,执行语句p++;后p指向数组a的第2个元素的地址,即a[1]的地址,因此*p=a[1]=4。\r\n\r\n

17.3535解析:在主函数中通过定义和赋初值使p和q分别指向了x和y,执行函数调用“swap(p,q)”,把p和q中的地址值传给了形参指针变量a和b,a和b分别指向了实参x和y。在函数swap()中交换了指针变量a和b的值,并没有交换a和b指向的实参的值,所以函数调用返回后x和y依然是原来的值。

18.实体实体

19.1818解析:设循环队列的容量为n。若rear>front,则循环队列中的元素个数为rear-front;若rear<front,则循环队列中的元素个数为n+(rear-from)。题中,front=16,rear=9,即rear>front,所以,循环队列中的元素个数为m+(rear-front)=25+(9-16)=18。

20.ptrptr解析:本题考查函数指针的概念。函数指针的定义格式是:类型标识符(叶旨针变量名)()。注:“类型标识符”为函数返回值的类型。

21.242424

22.countryside

23.(a+b>C)&&(a+c>B)&&(b+c>A)(a+b>C)&&(a+c>B)&&(b+c>A)解析:本题主要考查运算符逻辑与“&&”的用法。

24.i==jk!i&&k!ji==j\r\nk!i&&k!j解析:本题用双重for循环写了一段0~9之间不同的3个数构成一个三位数的程序,因为要求三位数各个位数的数不能相同,所以第一个空if语句的条件应为i==j,即当两个位数上的数相同的时候,不再执行下面的操作,转去执行for循环的下一次循环。第二个空,需要判断第三位上的数不能与其他两位的数相同。

25.

解析:进入fun函数,根据前面的分析:(1)根据题意,需要把每一项累加起来;若每一累加项的值放在t中,后一项等于前一项累加项的值乘以n/(2*n+1)来求得。

(2)根据公式将求到的π/2的值放到变量pi中,每累加一次,n的值就增加1,以便求下一个累加项,不断重复,直到满足题目中的精度要求。

26.doublefun(doublexintn){intij=1;doubles=1.0s1=1.0;for(i=1;i<=n;i++){j=-1*j;s1=s1*i/*各项中的阶乘*/s=s+j*pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti,j=1;\r\ndoubles=1.0,s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{\r\nj=-1*j;\r\ns1=s1*i/*各项中的阶乘*/\r\ns=s+j*pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j=-1*j来实现。

27.intfun(intw[][N]){intijk=0;ints=0;for(i=0;i<N;i++)for(j

温馨提示

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

评论

0/150

提交评论