版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年安徽省巢湖市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.
2.
3.判断有向图是否存在回路,利用()方法最佳。
A.求关键路径B.求最短路径C.拓扑排序D.广度优先遍历
4.
5.设顺序表的长度为n,则顺序查找的平均比较次数为()
A.nB.n/2C.(n+1)/2D.(n-1)/2
6.下述函数功能是______。intfun(char*x){char*y=x;while(*y++);returny-x-1;}
A.求字符串的长度B.求字符串存放的位置C.比较两个字符串的大小D.将字符串x连接到字符串y后面
7.若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入3个整数分别赋给变量a、b、c的语句是______。
A.scanf("%d%d%d",&a,&b,d);
B.scanf("%d%d%d",&a,&b,&d);
C.scanf("%d%d%d",a,b,d);
D.scanf("%d%d%d",a,b,*d);
8.下述关于C语言文件的操作的结论中,正确的是______。
A.对文件操作必须先关闭文件
B.对文件操作必须先打开文件
C.对文件操作顺序无要求
D.对文件操作前必须先测文件是否存在,然后再打开文件
9.有以下程序:#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen(“data,dat”,“w+”);for(i=0;i<6;i++)fprintf(fp,“%d\n”,a[5-i]);rewind(fp);for(i=0;i<6;i++){fscanf(fp,“%d”,&k);printf(“%d,”,k);}fclose(fp);}程序运行后的输出结果是()。
A.6,5,4,3,2,1,B.1,2,3,4,5,6,C.1,1,1,1,1,1,D.6,6,6,6,6,6,
10.下列叙述中正确的是()。
A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
B.打开一个已存在的文件并进行写操作后,原有文件中的全部数据必定被覆盖
C.在一个程序中对文件进行写操作后,必须先关闭该文件然后再打开才能读到第1个数据
D.C语言中的文件是流式文件,因此只能顺序存取数据
11.有以下程序:#include<stdio.h>voidfunl(char*p){char*q;q=p;while(*q!='\0')}(*q)++;q++;}mains(){chara[]={"Program"},*p;p=&a[3];fun1(p);printf("%s\n",a);}程序执行后的输出结果是()。
A.ProhsbnB.PrphsbnC.ProgsbnD.Program
12.有以下程序:
程序运行后的输出结果是()。A.34B.55C.10D.18
二、2.填空题(12题)13.以下程序运行后的输出结果是【】
#include<stdio.h>
main()
{chara[]="123456789",*p;
inti=0;
p=a;
while(*p)
{if(i%2==0)*p='*';
p++;i++;
}
puts(a);
}
14.以下程序输出矩阵中值为。的元素的行下标和列下标。行下标和列下标分别放在同一下标的r和c数组元素中。程序通过调用随机函数给矩阵赋值。
#defineN5
#include<stdlib.h>
main()
{inta[N][N],i,j,c[N*N],r[N*N],n;
for(i=0,i<N;i++)
for(j=0;j<N;j++)a[i][j]=rand()%5;
n=gindex(【】);
printf("\n\nTheresult:\nn=%d\n",n);
for(i=0;i<n;i++)printf("%4d%4d\n",r[i],c[i]);
}
intgindex(int(*p)[N],int*c,int*r)
{inti,j,k;
【】;
for(i=0;i<N,i++)
for(j=0;j<N;j++)
if(【】==0)
{r[k]=i;c[k]=j;【】;}
return【】;
}
15.软件工程研究的内容主要包括:软件开发技术和【】。
16.在面向对象方法中,类之间共享属性和方法的机制称为______。
17.表示“整数x的绝对值大于5”时值为“假”的C语言表达式是______。
18.有以下程序:
voidf(intv,intw)
{intt;
t=v;v=w;w=t;
}
main()
{intx=1,y=3,z=2
if(x>y)f(x,y);
elseif(y>z)f(y,z);
elsef(x,z);
printf("%d,%d,%d\n",x,y,z);
}
执行后的输出结果是【】。
19.注释一般分为序言性注释和______注释。
20.有以下程序段:
inta[l0]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是【】。
21.以下程序的输出结果是【】。
voidreverse(inta[],intn)
{inti,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
printf("%d\n",s);
}
22.有下列程序;
#include<stdio.h>
main()
{charc;
while((c=getchar())!=',')putchar(++C);
}
程序运行时,如果从键盘输入:A,B,<CR>,则输出结果为______。
23.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。
24.下列程序的运行结果为【】。
main()
{
intx,y,z;
X=12;
y=012;
z=0l2;
printf("%d,%d,%d\n",x,y,z);
}
三、3.程序设计题(10题)25.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是将大于整数m且紧靠m的k个非素数存入所指的数组中。
例如,若输入15,5,则应输出16,18,20,21,22。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{
intm,n,zz[1000];
clrscr();
printf("\nPleaseentertwointegers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
26.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。
例如,当a=45,b=12。调用该函数后,c=4251。
注意:部分源程序存在文件PROGl.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
27.请编写函数fun(),它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include<stdiO.h>
#defineN80
voidfun(int*w,intp,intn)
{
}
main()
{in[a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
printf("Theodginaldata:\n");
for(i=0;i<n;i++)printf("%3d",a[i]);
printf("\nEnterp:");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:\n");
for(i=0;i<n;i++)printf("%3d”,a[i]);
}
28.请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn-Sn-2
|<0.000001为止。
例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
29.程序定义了NxN的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。
例如:a数组中的值为:
则返回主程序后s的值应为:3.375。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
30.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。
例如,若输入17,5,则应输出19,23,29,3l,37。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{
intm,n,zz[1000];
clrscr();
printf("\nPleaseentertwointegers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=O;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
31.编写程序,实现矩阵(3行3列)的转置(即行列互换)
例如,输入下面的矩阵:
100200300
400500600
700800900
程序输出:
100400700
200500800
300600900
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
32.请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
33.请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在即所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intx,intpp[],int*n)
{
}
main()
{
intx,aa[1000],n,i;
clrscr();
printf("\nPleaseenteraninteger
number:\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
printf("%d",aa[i]);
printf("\n");
}
34.请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。
例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将返回nanjing。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
char*fun(char*S,char*t)
{
}
main()
{
chara[20],b[10],*p,*q;
inti;
printf("Inputlthstring:");
gets(a);
printf("Input2thstring:");
gets(b);
printf(“%s”,fun(a,b));
}
四、单选题(0题)35.以下叙述中错误的是()。
A.C语言编写的函数源程序,其文件名后缀可以是C
B.C语言编写的函数都可以作为一个独立的源程序文件
C.C语言编写的每个函数都可以进行独立的编译并执行
D.一个C语言程序只能有一个主函数
五、单选题(0题)36.以下程序的输出结果是()。main{intx=0.5;charz=‘a’;printf(“d\n”,(x&1)&&(z<‘z’));}A.0B.1C.2D.3
六、单选题(0题)37.有以下程序voidf(int*x,int*y){intt;t=*x;*x=*y;*y=t;}main(){inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(p<q){f(p,q);p++;q--;}for(i=0;i<8;i++)printf("%d,",a[i]);}程序运行后的输出结果是
A.8,2,3,4,5,6,7,1,
B.5,6,7,8,1,2,3,4,
C.1,2,3,4,5,6,7,8,
D.8,7,6,5,4,3,2,1
参考答案
1.A
2.B
3.C
4.C
5.C
6.A解析:在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。
7.A解析:选项B中d已经为地址,不应在加上求地址符号“&”,故选项B不正确;选项C中,a和b都为变量不是地址,应该在a和b之前加上求地址符号“&”,故选项C不正确:选项D中指针d所指向的存储空间的位置为变量c的值,不为地址,故选项D不正确,所以,4个选项中A为所选。
8.B解析:在C中对文件操作必须先打开文件,待文件操作完毕后要关闭文件。对文件以读的方式进行打开操作时,同时会执行文件的检查文件是否存在,不存在将会返回空的文件指针,如果对文件以写的方式打开时,文件不存在,将会自动创建文件,因此在C中打开文件前不必对其检查文件是否存在,故答案为B。
9.A函数fopen(“data.dat”,“w+”)中的“w+”表示打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则建立该文件。“rewind(fp);”使文件fp的位置指针指向文件开始。函数“fprintf(fp,“%d\\n”,a[5-i]);”将a[i]输出到fp指向的文件中。函数“fscanf(fp,“%d”,&k);”将fp读入变量k中。第1个for循环将数组中元素倒着输入fp指向的文件中。rewind则指向文件开始,因此输出的是数组a的倒叙:6,5,4,3,2,1,。故本题答案为A选项。
10.AB选项中,打开一个已存在的文件并进行写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C选项中,在一个程序中对文件进行写操作后,不是先关闭该文件然后再打开才能读到第1个数据,用fseek函数进行重新定位即可。D选项中,C语言中的文件可以进行随机读写。故本题答案为A选项。
11.A解析:在main函数中,p=&a[3]说明指针p指向a数组的第4个字符(即字符\'g\');fun1中的q=p意味着指针q也指向了a数组的第4个字符。执行while语句,表达式(*q)++使\'g\'+1,使\'g\'变成了\'h\';表达式q++使q指向a[4]的起始地址。继续执行while语句,直到遇到\'\\0\'结束循环,返回形参。最终得到的结果是从字符串'Program\'的第4个字符开始,每个字符加1。
12.D题干中,函数fun的功能是通过递归,将数组a中下标为0~n-1位置的元素累加,作为函数返回值返回。main函数调用fun时,传入的a+2作为数组参数,传入n的值是4,所以函数返回值是元素a[2]、a[3]、a[4]、a[5]的和,程序输出18。本题答案为D选项。
13.*2*4*6*8**2*4*6*8*解析:程序中指针p指向数组a,while(*P)语句的循环条件是*p!=\'\\0\',在循环体中,当i=0,2,4,6,8时,i%2=0,执行*p=\'*\',即a[i]=\'*\',继续执行p++;i++;使i为奇数;当i=1,3,5,7时,i%2=1,继续执行p++;i++;使i为偶数。可见,程序在字符串'123456789',的下标为偶数的位置上赋值\'*\',代替原字符串中的1,3,5,7,9。所以,程序输出结果为*2*4*6*8*。
14.acrk=0p[i][j]k++k
15.软件工程管理软件工程管理解析:软件工程足指,采用工程的概念、原理、技术和方法指导软件的开发与维护:软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。即软件工程研究的内容主要包括:软件开发技术和软件工程管理。
16.继承继承解析:在面向对象的程序设计方法中,某些属性和方法是可以共享的,由于类从父类中继承而来,这样提高了软件的可重用性。
17.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本题考查基本逻辑表达,“整数x的绝对值大于5”时值为“假”,即整数x的绝对值小于等于5,也就是整数x要大于等于-5且要小于等于5。这里“且”用“与(&&)”表示,所以C语言表达式为:(x>-5)&&(x<5)。
18.1321,3,2解析:函数f的形参是简单变量,形参的改变不能影响实参,所以正确答案为1,3,2。
19.功能性功能性解析:注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么,
20.99解析:p是一个指针变量,指向数组a的元素a[3],所以b=p[5]=a[5+3]=a[8]=9。
21.2222解析:在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7]...b[9]的值相加,结果为22。
22.BB解析:因为c是字符类型变量,它只能接收一个字符,所以c=A,字符型变量在参与算术运算的时候是用其相应的ASCII码参与运算的,这样++c得到字母B的ASCII码,用putchar函数输出是输出其相应的字符,所以是B。
23.数据存储数据存储
24.12101812,10,18解析:本题定义了3个整型变量x、y、z,并分别用十进制数、八进制数、十六进制数为它们赋值。然后以十进制整型输出这3个变量。八进制数012的十进制表示为10,十六进制数0x12的十进制表示为18。此外输出函数格式控制中的“,”原样输出。
25.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的非素数循环k次即找出紧靠m的k个非素数*/for(j=2;j<i;j++)/*判断一个数是否为素数*/if(i%j==0){xx[n++]=i;/*如果不是素数放入数组xx中*/break;/*并跳出本层循环判断下一个数*/}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/\r\nfor(j=2;j<i;j++)/*判断一个数是否为素数*/\r\nif(i%j==0)\r\n{\r\nxx[n++]=i;/*如果不是素数,放入数组xx中*/\r\nbreak;/*并跳出本层循环,判断下一个数*/\r\n}\r\n}解析:本题只要掌握了判断非素数和素数的算法即不难完成了,其实程序缺少部分也正是这部分。
26.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。
27.voidfun(int*wintpintn){intiJ;inta[N];for(i=0;i<=p;i++)a[i]=w[i]for(i=p+1j=0;i<n;i++j++)w[j]=w[i];for(i=0;i<=p;i++)w[n-p-1+i]=a[i];}voidfun(int*w,intp,intn)\r\n{inti,J;\r\ninta[N];\r\nfor(i=0;i<=p;i++)a[i]=w[i]\r\nfor(i=p+1,j=0;i<n;i++,j++)w[j]=w[i];\r\nfor(i=0;i<=p;i++)w[n-p-1+i]=a[i];\r\n}解析:将数组后面的元素向前平移,肯定会将前面的元素覆盖。因此,可以定义一个数组用来暂时存放前面的元素。可以先将w[0]~w[p]依次赋给a[0]~a[p];然后将w[p]~w[n—1)
移到数组的前面:再将a[0]~a[p)依次赋给w[n-p-1+i]~w[n—1]。
28.
解析:该程序功能是计算并输出当x<0.97时题干中给出的多项式的值。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。
29.
解析:该程序功能是求出数组周边元素的平均值。其中周边元素是指第一行的元素的行下标为0,或者第n行的元素行下标为n-1,或者第一列元素的元素列下标为0,或者第n列的元素的列下标为n-1。
30.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的素数循环k次即找出紧靠m的k个素数*/{for(j=2;j<i;j++)/*判断一个数是否为素数如果不是跳出此循环判断下一个数*/if(i%j==O)break;if(j>=i)/*如果是素数放入数组xx中*/xx[n++]=i;}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的素数,循环k次,即找出紧靠m的k个素数*/\r\n{for(j=2;j<i;j++)/*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/\r\nif(i%j==O)break;\r\nif(j>=i)/*如果是素数,放入数组xx中*/\r\nxx[n++]=i;\r\n}\r\n}解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。
31.
解析:该程序功能是实现矩阵的转置。其中,矩阵的转置就是实现矩阵行列元素的互换。例如,array[1][2]和array[2][1]进行交换。
32.
解析:该程序功能是计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。在循环中,首先确定相邻元素之间的关系,然后对其进行平均值平方根之和的操作。
33.voidfun(intxintpp[]int*n){intij=0;for(i=1;i<x;i=i+2)/*i的初始值为1步长为2确保i为奇数*/if(x%i==0)/*将能整除x的数存入数组pp中*/pp[j++]=i;*n=j;/*传回满足条件的数的个数*/}voidfun(intx,intpp[],int*n)\r\n{\r\ninti,j=0;\r\nfor(i=1;i<x;i=i+2)/*i的初始值为1,步长为2,确保i为奇数*/\r\nif(x%i==0)/*将能整除x的数存入数组pp中*/\r\npp[j++]=i;\r\n*n=j;/*传回满足条件的数的个数*/\r\n}解析:本题题干信息是:能整除x且不是偶数的所有整数。循环语句中i从1开始且每次增2,所以i始终是奇数。
34.char*fun(char*Schar*t){intij;for(i=0s[i]!=‘\0’;i++);/*求字符串的长度*/for(j=0;t[j]!=‘\0’;j++);/*比较两个字符串的长度*/returns;/*函数返回较短的字符串若两个字符串长度相等则返回第1个字符串*/elsereturnt;}char*fun(char*S,char*t)\r\n{\r\ninti,j;\r\nfor(i=0,s[i]!=‘\\0’;i++);/*求字符串的长度*/\r\nfor(j=0;t[j]!=‘\\0’;j++);/*比较两个字符串的长度*/\r\nreturns;/*函数返回较短的字符串,若两个字符串长度相等,则返回第1个字符串*/\r\nelse\r\nreturnt;\r\n}解析:本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制—条语句,所以在每—个for循环条件后面必须要有—个分号。
本题也可用如下技巧:
#include<string.h>/*一定要注意在最前面加#include<string.h>*/
char*fun(char*s,char*t)
{
if(strlen(S)>=strten(t)
returns;
elsereturnt;
}
35.C函数是指预先定义功能块,其目的是提高程序的重用性。在C语言中函数的源程序,后缀名可以为C。C语言所编写的函数都可以是一个独立的源文件。一个C语言程序只能有一个主函数。C语言中编写的函数不是每个都可以独立地编译和执行的,因为C语言中程序的开始为主函数,如果程序中没有主函数则无法进行编译和执行。
36.B(x&1)&&(z<‘z’)=(0.5&1)&&(‘a’<‘z’)=1&&1=1,故选择B选项。
37.D解析:本题考查循环和指针做函数参数,程序的功能是将a[0]和a[7]对换,a[1]和a[6]对换,a[2]和a[5]对换,a[3]和a[4]对换,最后输出。2021年安徽省巢湖市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.
2.
3.判断有向图是否存在回路,利用()方法最佳。
A.求关键路径B.求最短路径C.拓扑排序D.广度优先遍历
4.
5.设顺序表的长度为n,则顺序查找的平均比较次数为()
A.nB.n/2C.(n+1)/2D.(n-1)/2
6.下述函数功能是______。intfun(char*x){char*y=x;while(*y++);returny-x-1;}
A.求字符串的长度B.求字符串存放的位置C.比较两个字符串的大小D.将字符串x连接到字符串y后面
7.若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入3个整数分别赋给变量a、b、c的语句是______。
A.scanf("%d%d%d",&a,&b,d);
B.scanf("%d%d%d",&a,&b,&d);
C.scanf("%d%d%d",a,b,d);
D.scanf("%d%d%d",a,b,*d);
8.下述关于C语言文件的操作的结论中,正确的是______。
A.对文件操作必须先关闭文件
B.对文件操作必须先打开文件
C.对文件操作顺序无要求
D.对文件操作前必须先测文件是否存在,然后再打开文件
9.有以下程序:#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen(“data,dat”,“w+”);for(i=0;i<6;i++)fprintf(fp,“%d\n”,a[5-i]);rewind(fp);for(i=0;i<6;i++){fscanf(fp,“%d”,&k);printf(“%d,”,k);}fclose(fp);}程序运行后的输出结果是()。
A.6,5,4,3,2,1,B.1,2,3,4,5,6,C.1,1,1,1,1,1,D.6,6,6,6,6,6,
10.下列叙述中正确的是()。
A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
B.打开一个已存在的文件并进行写操作后,原有文件中的全部数据必定被覆盖
C.在一个程序中对文件进行写操作后,必须先关闭该文件然后再打开才能读到第1个数据
D.C语言中的文件是流式文件,因此只能顺序存取数据
11.有以下程序:#include<stdio.h>voidfunl(char*p){char*q;q=p;while(*q!='\0')}(*q)++;q++;}mains(){chara[]={"Program"},*p;p=&a[3];fun1(p);printf("%s\n",a);}程序执行后的输出结果是()。
A.ProhsbnB.PrphsbnC.ProgsbnD.Program
12.有以下程序:
程序运行后的输出结果是()。A.34B.55C.10D.18
二、2.填空题(12题)13.以下程序运行后的输出结果是【】
#include<stdio.h>
main()
{chara[]="123456789",*p;
inti=0;
p=a;
while(*p)
{if(i%2==0)*p='*';
p++;i++;
}
puts(a);
}
14.以下程序输出矩阵中值为。的元素的行下标和列下标。行下标和列下标分别放在同一下标的r和c数组元素中。程序通过调用随机函数给矩阵赋值。
#defineN5
#include<stdlib.h>
main()
{inta[N][N],i,j,c[N*N],r[N*N],n;
for(i=0,i<N;i++)
for(j=0;j<N;j++)a[i][j]=rand()%5;
n=gindex(【】);
printf("\n\nTheresult:\nn=%d\n",n);
for(i=0;i<n;i++)printf("%4d%4d\n",r[i],c[i]);
}
intgindex(int(*p)[N],int*c,int*r)
{inti,j,k;
【】;
for(i=0;i<N,i++)
for(j=0;j<N;j++)
if(【】==0)
{r[k]=i;c[k]=j;【】;}
return【】;
}
15.软件工程研究的内容主要包括:软件开发技术和【】。
16.在面向对象方法中,类之间共享属性和方法的机制称为______。
17.表示“整数x的绝对值大于5”时值为“假”的C语言表达式是______。
18.有以下程序:
voidf(intv,intw)
{intt;
t=v;v=w;w=t;
}
main()
{intx=1,y=3,z=2
if(x>y)f(x,y);
elseif(y>z)f(y,z);
elsef(x,z);
printf("%d,%d,%d\n",x,y,z);
}
执行后的输出结果是【】。
19.注释一般分为序言性注释和______注释。
20.有以下程序段:
inta[l0]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
b中的值是【】。
21.以下程序的输出结果是【】。
voidreverse(inta[],intn)
{inti,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;
reverse(b,8);
for(i=6;i<10;i++)s+=b[i];
printf("%d\n",s);
}
22.有下列程序;
#include<stdio.h>
main()
{charc;
while((c=getchar())!=',')putchar(++C);
}
程序运行时,如果从键盘输入:A,B,<CR>,则输出结果为______。
23.数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。
24.下列程序的运行结果为【】。
main()
{
intx,y,z;
X=12;
y=012;
z=0l2;
printf("%d,%d,%d\n",x,y,z);
}
三、3.程序设计题(10题)25.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是将大于整数m且紧靠m的k个非素数存入所指的数组中。
例如,若输入15,5,则应输出16,18,20,21,22。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{
intm,n,zz[1000];
clrscr();
printf("\nPleaseentertwointegers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=0;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
26.函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。
例如,当a=45,b=12。调用该函数后,c=4251。
注意:部分源程序存在文件PROGl.C中。数据文件IN.DAT中的数据不得修改。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
27.请编写函数fun(),它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include<stdiO.h>
#defineN80
voidfun(int*w,intp,intn)
{
}
main()
{in[a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
inti,p,n=15;
printf("Theodginaldata:\n");
for(i=0;i<n;i++)printf("%3d",a[i]);
printf("\nEnterp:");
scanf("%d",&p);
fun(a,p,n);
printf("\nThedataaftermoving:\n");
for(i=0;i<n;i++)printf("%3d”,a[i]);
}
28.请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn-Sn-2
|<0.000001为止。
例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
29.程序定义了NxN的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。
例如:a数组中的值为:
则返回主程序后s的值应为:3.375。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
30.请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。
例如,若输入17,5,则应输出19,23,29,3l,37。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intm,intk,intxx[])
{
}
main()
{
intm,n,zz[1000];
clrscr();
printf("\nPleaseentertwointegers:");
scanf("%d%d",&m,&n);
fun(m,n,zz);
for(m=O;m<n;m++)
printf("%d",zz[m]);
printf("\n");
}
31.编写程序,实现矩阵(3行3列)的转置(即行列互换)
例如,输入下面的矩阵:
100200300
400500600
700800900
程序输出:
100400700
200500800
300600900
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
32.请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
33.请编写函数voidfun(intx,intpp[],int*n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在即所指的数组中,这些除数的个数通过形参n返回。
例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
voidfun(intx,intpp[],int*n)
{
}
main()
{
intx,aa[1000],n,i;
clrscr();
printf("\nPleaseenteraninteger
number:\n");
scanf("%d",&x);
fun(x,aa,&n);
for(i=0;i<n;i++)
printf("%d",aa[i]);
printf("\n");
}
34.请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。
例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将返回nanjing。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
char*fun(char*S,char*t)
{
}
main()
{
chara[20],b[10],*p,*q;
inti;
printf("Inputlthstring:");
gets(a);
printf("Input2thstring:");
gets(b);
printf(“%s”,fun(a,b));
}
四、单选题(0题)35.以下叙述中错误的是()。
A.C语言编写的函数源程序,其文件名后缀可以是C
B.C语言编写的函数都可以作为一个独立的源程序文件
C.C语言编写的每个函数都可以进行独立的编译并执行
D.一个C语言程序只能有一个主函数
五、单选题(0题)36.以下程序的输出结果是()。main{intx=0.5;charz=‘a’;printf(“d\n”,(x&1)&&(z<‘z’));}A.0B.1C.2D.3
六、单选题(0题)37.有以下程序voidf(int*x,int*y){intt;t=*x;*x=*y;*y=t;}main(){inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;p=a;q=&a[7];while(p<q){f(p,q);p++;q--;}for(i=0;i<8;i++)printf("%d,",a[i]);}程序运行后的输出结果是
A.8,2,3,4,5,6,7,1,
B.5,6,7,8,1,2,3,4,
C.1,2,3,4,5,6,7,8,
D.8,7,6,5,4,3,2,1
参考答案
1.A
2.B
3.C
4.C
5.C
6.A解析:在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。
7.A解析:选项B中d已经为地址,不应在加上求地址符号“&”,故选项B不正确;选项C中,a和b都为变量不是地址,应该在a和b之前加上求地址符号“&”,故选项C不正确:选项D中指针d所指向的存储空间的位置为变量c的值,不为地址,故选项D不正确,所以,4个选项中A为所选。
8.B解析:在C中对文件操作必须先打开文件,待文件操作完毕后要关闭文件。对文件以读的方式进行打开操作时,同时会执行文件的检查文件是否存在,不存在将会返回空的文件指针,如果对文件以写的方式打开时,文件不存在,将会自动创建文件,因此在C中打开文件前不必对其检查文件是否存在,故答案为B。
9.A函数fopen(“data.dat”,“w+”)中的“w+”表示打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则建立该文件。“rewind(fp);”使文件fp的位置指针指向文件开始。函数“fprintf(fp,“%d\\n”,a[5-i]);”将a[i]输出到fp指向的文件中。函数“fscanf(fp,“%d”,&k);”将fp读入变量k中。第1个for循环将数组中元素倒着输入fp指向的文件中。rewind则指向文件开始,因此输出的是数组a的倒叙:6,5,4,3,2,1,。故本题答案为A选项。
10.AB选项中,打开一个已存在的文件并进行写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C选项中,在一个程序中对文件进行写操作后,不是先关闭该文件然后再打开才能读到第1个数据,用fseek函数进行重新定位即可。D选项中,C语言中的文件可以进行随机读写。故本题答案为A选项。
11.A解析:在main函数中,p=&a[3]说明指针p指向a数组的第4个字符(即字符\'g\');fun1中的q=p意味着指针q也指向了a数组的第4个字符。执行while语句,表达式(*q)++使\'g\'+1,使\'g\'变成了\'h\';表达式q++使q指向a[4]的起始地址。继续执行while语句,直到遇到\'\\0\'结束循环,返回形参。最终得到的结果是从字符串'Program\'的第4个字符开始,每个字符加1。
12.D题干中,函数fun的功能是通过递归,将数组a中下标为0~n-1位置的元素累加,作为函数返回值返回。main函数调用fun时,传入的a+2作为数组参数,传入n的值是4,所以函数返回值是元素a[2]、a[3]、a[4]、a[5]的和,程序输出18。本题答案为D选项。
13.*2*4*6*8**2*4*6*8*解析:程序中指针p指向数组a,while(*P)语句的循环条件是*p!=\'\\0\',在循环体中,当i=0,2,4,6,8时,i%2=0,执行*p=\'*\',即a[i]=\'*\',继续执行p++;i++;使i为奇数;当i=1,3,5,7时,i%2=1,继续执行p++;i++;使i为偶数。可见,程序在字符串'123456789',的下标为偶数的位置上赋值\'*\',代替原字符串中的1,3,5,7,9。所以,程序输出结果为*2*4*6*8*。
14.acrk=0p[i][j]k++k
15.软件工程管理软件工程管理解析:软件工程足指,采用工程的概念、原理、技术和方法指导软件的开发与维护:软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。即软件工程研究的内容主要包括:软件开发技术和软件工程管理。
16.继承继承解析:在面向对象的程序设计方法中,某些属性和方法是可以共享的,由于类从父类中继承而来,这样提高了软件的可重用性。
17.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本题考查基本逻辑表达,“整数x的绝对值大于5”时值为“假”,即整数x的绝对值小于等于5,也就是整数x要大于等于-5且要小于等于5。这里“且”用“与(&&)”表示,所以C语言表达式为:(x>-5)&&(x<5)。
18.1321,3,2解析:函数f的形参是简单变量,形参的改变不能影响实参,所以正确答案为1,3,2。
19.功能性功能性解析:注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,给出程序的整体说明;功能性注释一般嵌在源程序体之中,主要描述其后的语句或程序做什么,
20.99解析:p是一个指针变量,指向数组a的元素a[3],所以b=p[5]=a[5+3]=a[8]=9。
21.2222解析:在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7]...b[9]的值相加,结果为22。
22.BB解析:因为c是字符类型变量,它只能接收一个字符,所以c=A,字符型变量在参与算术运算的时候是用其相应的ASCII码参与运算的,这样++c得到字母B的ASCII码,用putchar函数输出是输出其相应的字符,所以是B。
23.数据存储数据存储
24.12101812,10,18解析:本题定义了3个整型变量x、y、z,并分别用十进制数、八进制数、十六进制数为它们赋值。然后以十进制整型输出这3个变量。八进制数012的十进制表示为10,十六进制数0x12的十进制表示为18。此外输出函数格式控制中的“,”原样输出。
25.voidfun(intmintkintxx[]){intijn;for(i=m+1n=0;n<k;i++)/*找大于m的非素数循环k次即找出紧靠m的k个非素数*/for(j=2;j<i;j++)/*判断一个数是否为素数*/if(i%j==0){xx[n++]=i;/*如果不是素数放入数组xx中*/break;/*并跳出本层循环判断下一个数*/}}voidfun(intm,intk,intxx[])\r\n{\r\ninti,j,n;\r\nfor(i=m+1,n=0;n<k;i++)/*找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/\r\nfor(j=2;j<i;j++)/*判断一个数是否为素数*/\r\nif(i%j==0)\r\n{\r\nxx[n++]=i;/*如果不是素数,放入数组xx中*/\r\nbreak;/*并跳出本层循环,判断下一个数*/\r\n}\r\n}解析:本题只要掌握了判断非素数和素数的算法即不难完成了,其实程序缺少部分也正是这部分。
26.*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。
27.voidfun(int*wintpintn){intiJ;inta[N];for(i=0;i<=p;i++)a[i]=w[i]for(i=p+1j=0;i<n;i++j++)w[j]=w[i];for(i=0;i<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广西南宁市第二十八中学招聘代课教师3人考试备考试题及答案解析
- 2026甘肃中医药大学附属医院招聘护理人员12人考试备考题库及答案解析
- 2026年南昌县洪州学校春季学期临聘教师招聘9人考试备考题库及答案解析
- 2026年云南交通运输职业学院单招职业技能测试题库及答案详解(历年真题)
- 2026年仙桃职业学院单招职业技能考试题库带答案详解(能力提升)
- 2026年上海商学院单招综合素质考试题库含答案详解(a卷)
- 2026年伊春职业学院单招职业适应性考试题库带答案详解(培优a卷)
- 2026年三门峡社会管理职业学院单招职业倾向性测试题库附答案详解(能力提升)
- 2026年三门峡职业技术学院单招综合素质考试题库及答案详解一套
- 2026年仙桃职业学院单招职业技能测试题库附答案详解(培优)
- (2025年)焊工(初级)考试题库及答案
- 北京市丰台区2025-2026学年上学期八年级期末英语试卷(原卷+解析)
- 终末期患者恶心呕吐的护理干预策略优化研究
- 2026 年民政局制式离婚协议书正式范本
- 劳动争议调解仲裁法解析
- 田地种菜出租合同范本
- 2025-2030传统滋补品现代化转型与年轻化营销及投资价值研判
- 神经重症患者的气道管理策略
- 急性前壁再发心肌梗死的护理查房
- 装修避坑知识
- 《风景谈》(教学课件)-统编版高中语文选择性必修下册
评论
0/150
提交评论