国家二级C语言机试(操作题)模拟试卷668
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。
例如,有下列矩阵:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
若k为2,程序执行结果为
3 4 5 1 2
3 4 5 1 2
3 4 5 1 2
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define M3
#define N5
void fun(int(*a)[N],int k)
{int i,j,p,temp;
/*********found*********/
for(p=1;p<=【1】;p++)
for(i=0;i<M;i++)
{temp=a[i][0];
/*********found*********/
for(j=0;j<【2】;j++)
a[i][j]=a[i][j+1];
/*********found*********/
a[i][N-1]=【3】;
}
}
main()
{int x[M][N]={{1,2,3,4,5},
{1,2,3,4,5},{1,2,3,4,5}},i,j;
printf(\\
(1)k
(2)N-1
(3)temp
解析:填空1:外循环p的值为数组移动的次数,试题要求第k列左移,则需要移动的次数为k,所以应填k。
填空2:矩阵共N列,所以应填N-1。
填空3:临时变量temp中存放的值为数组最左边元素的值,需要把temp放到数组的末尾,即放到a[i][N-1]中,所以应填temp。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.C。在此程序中,函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<conio.h>
/*********found*********/
void fun(int m, int k);
{int aa[20],i;
for(i=0;m;i++)
{
/*********found*********/
aa[i]=m/k;
m/=k;
}
for(;i;i–)
/*********found*********/
printf(\\
(1)void fun(int m,int k)
(2)aa[i]=m%k;
(3)printf(\\
解析:(1)函数定义的格式错误,不应带有”;”。
(2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制的数的方法是一样的。从整数n译出它的各位k进制数值,需采用除k取余的方法,即求n除k的余数,得到它的k进制的个位数,接着将n除以k。在n不等于0的状况下循环,能顺序求出n的k进制的各个位上的数。
(3)在进行for(i=0;m;i++)循环结束时,i已经多加了一个1,所以这里要减去1。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数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
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdio.h>
#define N80
int fun(int a[],int n)
{
}
void main()
{
int aIN]=={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10),i,n=20;
printf(\\
int fun(int a[],int n)
{
int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i])
/*若该数屿前一个教不相同,则要保留*/
a[j++]=a[i]j
return j;/*返回不相同数的个数卑*/
}
解析:该程序的流程是:定义变量i和j,其中j用于控制删除后剩下的数在数组中的下标,i用于搜索原数组中的元素。j始终是新数组中最后一个元素的下一个元素的下标,所以if语句中的条件是a[j-1]!=a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要保留到新数组中。注意本题中i和j的初值都要从1开始,该算法只能用于数组已排序的题目中。
本文档预览:3600字符,共3081字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载