国家二级(C语言)机试模拟试卷907
程序填空题
1.给定程序BLANK1.C中函数fun的功能是将整数m转换成n(二~十六)进制数的字符串,并通过函数值返回字符串首地址。
例如,若输入:
125 16
则输出:
7d
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include
#include
char c[32];
char*fun(int m,int n)
{
int i=0,j=0,a[32];
char b[16]={’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’a’,’b’,’c’,’d’,’e’,’f’},*p;
do
{
a[i]=m%n;
/*********found*********/
m=【1】;
i++;
/*********found*********/
}while(【2】);
for(–i;i>=0;–i)
{
n=a[i];
/*********found*********/
c[j++]=【3】;
}
c[j]=0;
p=c;
return p;
}
void main( )
{
int m,n;
char s[32];
scanf(\\
(1)m/n(2)m!=0(3)b[n]
解析:整数转换为其他进制,使用辗转相除法,取余。
(1)数组a存放取余的余数,m存放整除后的结果,故此空应填写m/n。(2)当辗转相除后的结果等于0时,循环退出,故此空应填写m!=0。(3)需要将数组a中存放的数字转换为对应的字符,此处和b数组对应。如果n的值为0,对应数组b第0个元素’0’;如果n的值为5,则b数组的下标5为字符5。故此处应填写b[n]。
程序修改题
2.给定程序MODl1.C中函数fun的功能是求一维数组a中非素数之和sum,其结果sum通过函数返回。
例如,22,3,65,37,18,19,10,11,12,23,15,17,则输出结果:sum=142。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun(int a[],int n)
{
int i,j,k,sum;
sum=0;
for(i=0,i<n;i++)
{
k=a[i]/2;
/*********found*********/
for(j=2;j<k;j++)
{
if(a[i]%j==0)
/*********found*********/
continue;
}
/*********found*********/
if(j>=k)
sum+=a[i];
}
return sum;
}
int main( )
{
int a[12]={22,3,65,37,18,3.9,10,11,12,23,15,17};
printf(\\
(1)for(j=2;j<=k;j++)(2)break(3)if(j<=k)或if(k>=j)或if(j<k+1)或if(j<(k+1))
解析:(1)如果一个数可以被除1和其自身以外的数整除,则该数为非素数。此处k=a[i]/2,所以判断条件应该包括是否能被k整除。故for循环中应将j<j修改为j<=k。(2)a[i]的值求余j,如果能整除,表示不是素数,即可结束循环,故这里应将continue修改为break。(3)如果能被除1和其自身以外的数整除,且除数小于k(k=a[i]/2),则该数为非素数,进行求和操作。故这里应填写if(j<=k)。
程序设计题
3.请编写函数fun,其功能是从一个整数数组中,统计出有重复数字数的个数存于m中,m值由函数值返回。
例如:
2430,3001,1798,199,498,277,229,851,369,1146
其中3001中有重复的数字0,则输出:
Total Nam=5
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
void NONO( );
int fun(int a[],int n)
{
}
void main( )
{
int a[10]={2430,3001,1798,199,498,277,229,851,369,1146};
int m:
m=fun(a,10);
printf(\\
int fun(int a[],int n)
{
int j,k,s,m,b[10],i=0,sum=0,flag=0;
for(;i<n;i++)
{
j=0;
while(a[i])
{
b[j++]=a[i]%10;
a[i]=a[i]/10;
}
for(k=0; k<j; k++)
{
s=b[k];
for(m=k+1;m<j,m++)
if(s==b[m])
flag=1;
}
if(flag==1)
{
sum++;
flag=0;
}
}
return sum;
}
解析:先通过while循环将数组元素的各个位上的数字存放到数组b中。再通过循环,将有重复数字的标志flag设置为1。如果flag值为1,表示有重复数字,则将变量sum++。最后将sum值作为函数值返回。
本文档预览:3600字符,共3514字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载