国家二级C语言机试(程序设计题)模拟试卷2(题后含答案及解析)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

国家二级C语言机试(程序设计题)模拟试卷2(题后含答案及解析) 题型有:1.
1.使用VC++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。

例如,若8所指字符串中的内容为“ABCDEFG12345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。

最后t所指的数组中的内容应是“BDF12345”。

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

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

试题程序:#include<stdio.h>#include<string.h>void fun(char*s,char t[]){}main( ){char s[100],t[100];void NONO( );printf(“\nPlease enter string S:”);Scanf(“%s”,s);fun(s,t);printf(“\nThe result is:%s\n”,t);NONO( );}void NONO( ){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/chars[100],t[100];FTLE*rf,*wf;int i;rf=fopen(“in.dat”,”r”);wf=fopen(“out.dat”,”w”);for(i=0;i<10;i++){fscanf(rf,”%s”,s);fun(s,t);fprintf(wf,”%s\n”,t);}fclose(rf);fclose(wf);}
正确答案:void fun(char*s,char t[]){int i,j=0;for(i=0;i<strlen(s);i++)if(!((i%2)==0&&(s[i]%2)))t[j++]=s[i];t[j]=0;}
解析:本题是从一个字符串按要求生成另一个新的字符串。

我们使用for循环语句来解决这个问题。

在赋值新的字符串之前,先对数组元素的下标和ASCII 码的值进行判断,将满足要求的元素赋给新的字符串。

2.使用VC++2010打开考生文件夹下prog1中的解决方案。

此解决方案的项目中包含一个源程序文件prog1.c。

在此程序中,请编写函数fun,该函数的功能是:统计各年龄段的人数。

N个年龄通过调用随机函数获得,并放入主函数的age数组中。

要求函数把0~9岁年龄段的人数放在d[0]中,把10~19岁年龄段的人数放在d[1]中,把20~29岁年龄段的人数放在d[2]中,依此类推,把100岁(含100岁)以上年龄的人数都放在d[10]中。

结果在主函数中输出。

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

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

试题程序:#include<stdio.h>#define N50#define M11void fun(int*a,int*b){}double rnd( ){static t=29,c=217,m=1024,r=0;r=(r*t+c)%m;return((double)r/m);}void main( ){FILE*wf;int age[N],i,d[M];int b[N]={32,45,15,12,86,49,97,3,44,52,17,95,63};for(i=0;i<N;i++)age[i]=(int)(115*rnd( ));/*产生一个随机的年龄数组*/printf(“The original data:\n”);for(i=0;i<N;i++)printf((i+1)%10==0?”%4d\n”:”%4d”,age[i]);/*每行出10个数*/printf(“\n\n”);fun(age,d);for(i=0:;i<10;i++)printf(“%4d﹣﹣﹣%4d:%4d\n”,i*10,i*10+9,d[i]);
printf(“Over100:%4d\n”,d[10]);/*********found*********/wf=fopen(“out.dat”,”w”);fun(b,d);for(i=0;i<10;i++)fprintf(wf,”%4d—%4d:%4d\n”,i*10,i*10+9,d[i]);fprintf(wf,”Over100:%4d”,d[10]);fclose(wf);/*********found*********/}
正确答案:void fun(int*a,int*b){int i,j;for(j=0;j<M;j++)b[j]=0;/*数组b初始化为0*/for(i=0;i<N;i++)if(a[i]>=100)b[10]++;/*如果年龄大于等于100,b[10]自增1*/elseb[a[i]/10]++;/*如果年龄小于100,则将其分别统计到b[a[i]/10]中*/}
解析:本题是一个分段函数的问题,用两个循环来完成。

第1个循环的作用是使b中的所有元素值都为0。

这个循环不能省略,因为若未对b中的元素赋初值,则它们的值是不可预测的。

第2个循环的作用是分别统计a中各年龄段的人数。

当a[i]≥100时,按题意要将其统计到b[10]中。

else的作用是如果年龄小于100,则将其分别统计到b[a[i]/10]中。

由运算优先级可知先进行a[i]/10的运算,所得结果作为b的下标。

若a[i]为0~9时,a[i]/10的值为0,且0~9岁的人数正好要存入b[0]中。

若a[i]为10~19时,a[i]/10的值为1,且10~19岁的人数正好要存入b[1]中,依此类推。

3.编写函数fun,其功能是:根据以下公式计算S,并将计算结果作为函数值返回,n通过形参传入。

例如,若n的值为11时,函数的值为1.833333。

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

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

试题程序:#include <stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>float fun(int n){}void main( ){ int n;float s;system(“CLS”);printf(“\nPlease enter N:”);scanf(“%d”,&n);s=fun(n);printf f”The result is:%f\n”,s);}
正确答案:float fun(int n){int i,s1=0;float s=0.0;for。

(i=1;i<=n;i++){s1=s1+i;/*求每一项的分母*}s=s+1.0/s1;/*求多项式的值*/}return s;}
解析:此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。

本题中表达式的规律是1+2+…+n的倒数之和,那么可以通过for循环语句来实现第1项到第n项的变化。

其实就是累加算法,方法是先根据题目要求定义变量,注意该变量的数据类型,然后对其进行初始化操作,因为该变量的作用是累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。

本题中s1用来表示每一项的分母,每一项的分母都是由前一项分母加项数。

注意,由于s1定义成一个整型,所以在s=s+1.0/s1语句中不能把1.0写成1。

4.请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。

数组中的数己按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。

删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。

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

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

1 #include<stdio.h>2 #define.N 803 int fun(int a[],int n)4 {56 }7 main( )8 {int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;void NONO( );9 printf(‘‘The original data:\n’’);10 for(i=0;i<n;i++)printf(‘‘%3d’’,a[i]);
11 n=fun(a,n);12 printf(‘‘\n\nThe data after deleted:\n’’);13 for(i=0;i<n;i++)printf(‘‘%3d’’,a[i]);printf(‘‘\n\n’’);14 NONO( );15 }16 void NONO( )17 {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。

*/18 FILE *rf,*wf;int a[N],n,i,j;19 rf=fopen(‘‘in.dat’’,’’r’’);20 wf=fopen(‘‘out.dat’’,’’w’’);21 for(i=0;i<5;i++) {22 fscanf(rf,’’%d’’,&n);23 for(j=0 ;j<n;j++)fscanf(rf,’’%d’’,&a[j]);24 n=fun(a,n);25 for(j=0;j<n;j++) fprintf(wf,’’%4d’’,a[j]);26 fprintf(wf,’’\n’’);27 }28 fclose(rf);fclose(wf);29 }
正确答案:1 int i,t,j=0,‘p=a;2 t=p[0];//设置临时变量t初值指向第一数组值3 for(i=0;i<=n; i++)4 if(t==p[i]) //当临时变量与数组中的某个值相同则跳出,比较下一个元素5 ;6 else //如果临时变量与数组中值不同,则对临时变量重新赋值7 { a[j]=t;8 t=p[i];9 j++;}10 if(i>=n) a[j]=t;11 return j;
解析:该程序功能是删去一维数组中所有相同的数,使之只剩一个。

解题思路是,首先在函数中定义临时变量指向每一个元素,然后在循环过程中将临时值和其他元素进行比较,如果相同,那么跳过相同字符。

(1)首先,设置一个临时变量,初值设置为一维数组的第一个元素。

(2)然后,依次将数组的元素与临时变量比较,如果相同,则继续取数组下一个元素与临时变量比较:如果不同,则将临时变量的值赋值到数组的第一个元素,同时将此与临时变量不同的数组元素赋值给临时变量。

(3)循环执行,直到所有的数据处理完毕。

5.请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

例如,二维数组中的数据为:33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是:33 33 33 33 44 44 44 44 55 55 55 55。

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

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

1 #include<stdio.h>2 void fun(int(*s)[10],int *b,int *n,int mm,int nn)3 {45 }6 main( )7 {int w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;8 int a[100]={0),n=0;void NONO( );
9 printf(‘‘The matrix:\n’’);10 for(i=0;i<3;i++)11 { for(j=0;j<4;j++)printf(‘‘%3d’’,w[i][j]);12 printf(‘‘\n’’);13 }14 fun(w,a,&n,3,4);15 printf(‘‘The A array:\n’’);16 for(i=0;i<n;i++)printf(‘‘%3d’’,a[i]);printf(‘‘\n\n’’);17 NONO( );18 }19 void NONO( )20 {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。

*/21 FILE *rf,*wf;int i,j,k;22 int w[10][10],a[100],n=0,mm,nn;23 rf=fopen(‘‘in.dat’’,’’r’’);24 wf=fopen(‘‘out.dat’’,’’w’’);25 for(k=0;k<5;K++) {26 fscanf(rf,’’%d%d’’,&mm,&nn);27 for(i=0;i<mm;i++)28 for(j=0;j<m;j++)fscanf(rf,’’%d’’,&w[i][j]);29 fun(w,a,&n,mm,
nn);30 for(i=0;i<n;i++)fprintf(wf,’’%3d’’,a[i]);fprintf (wf,’’\n’’);
31 }}
正确答案:1 int i,j;2 for(i=0;i<mm;i++)3 for(j=0;j<nn;j++)4 { b[*n]=*(*(s+i)+j);5 *n=*n+1;}
解析:该程序功能是将M行、N列的二维数组中的数据,按行的顺序依次放到一维数组中。

本题中首先要清楚数组元素在通常情况下是按行存放的,而如果要实现按行存放,其对应关系应为:s[0][0],s[0][1],s[0][2],…,s[0][M-1],s[1][0],s[1][1],…,s[N-1][M-1]。

相关文档
最新文档