2016-2018年中央财经大学C语言程序设计考研真题及答案解析(5)本站小编 免费考研网/2020-03-02
8、程序的功能是求两个整数的最大公约数,请填空。
main()
{ int a=12,b=8,t;
while( )
{ t=a%b;
a=b;
b=t;
}
printf("%3d",a);
}
9、下面程序用指针p输出p所指向的数组元素的其后所有元素。
main()
{ int a[10]={6,-1,3,2,5,7,6,12,-1,-3};
int i,j,*p;
p=a+4;
for(i=0;j<=5;i++)
printf("%d", );
}
10、以下程序把一个名为f1.dat的文件拷贝到一个名为f2.dat的文件中。
#include
main()
{ char c;
FILE *fp1,*fp2
Fp1=fopen("f1.Doc","r");
Fp2=fopen("f2.doc","w");
c=fgetc(fp1);
while(c!=EOF)
{ fputc(c,fp2);
c=fgetc(fp1);
}
fclose(fp1);
;
}
三、程序设计题(每题15分,共75分)
1、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。
2、对数组A中的N(0<N<100=个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A=(5,3,4,7,3,5,6) 则输出为: (3,1,2,5,1,3,4)
3、求这样一个三位数,该三位数等于其每位数字的阶乘之和。
即:abc = a! + b! + c!
4、编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。
5、编写函数,采用递归方法实现将输入的字符串按反序输出。
答案及解析
一、选择题
1. D 2. C 3. C 4. C 5. B
6. D 7. C 8. A 9. C 10.A
11. D 12. D 13. B 14. C 15. B
二、填空题
1、18
2、6
3、str[i]>str[i+1]
4、 a[j-1]=t
5、2,2
6、 ((i%7==0)||(i%11==0))&&(!((i%7==0)&&(i%11==0)))
7、2.000000
8、b>1
9、*p++
10、fclose(fp2) ;
三、程序设计题
1、编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。
参考答案:
void main()
{
int i,n,k=16,a[16]={0};
printf("Please enter a digit:");
scanf("%d",&n);
while(n>0) /* 将十进制数转变为二进制数 */
{
a[--k]=n%2;
n=n/2;
}
for(i=0;i<16;i++)
printf("%2d",a[i]);
}
2、对数组A中的N(0<N<100=个整数从小到大进行连续编号,输出各个元素的编号。要求不能改变数组A中元素的顺序,且相同的整数要具有相同的编号。例如数组是:A=(5,3,4,7,3,5,6) 则输出为: (3,1,2,5,1,3,4)
参考答案:
void main()
{
int i,j,k,n,m=1,r=1,a[2][100]={0}; printf("Please enter n:");
scanf("%d",&n);
for(i=0;i
{
printf("a[%d]= ",i);
scanf("%d",&a[0][i]);
}
while(m<=n) /* m记录已经登记过的数的个数 */
{
for(i=0;i
{
if(a[1][i]!=0) /* 已登记过的数空过 */
continue;
k=i;
for(j=i;j
if(a[1][j]==0 && a[0][j]
k=j;
a[1][k]=r++; /* 记录名次,r为名次 */
m++; /* 登记过的数增1 */
for(j=0;j
if(a[1][j]==0 && a[0][j]==a[0][k])
{
a[1][j]=a[1][k];
m++;
}
break;
}
}
for(i=0;i
printf("a[%d]=%d, %d\n",i,a[0][i],a[1][i]);
}
3、求这样一个三位数,该三位数等于其每位数字的阶乘之和。
即:abc = a! + b! + c!
参考答案:
f(int m)
{
int i=0,t=1;
while(++i<=m)
t*=i;
return(t);
}
void main()
{
int a[5],i,t,k;
for (i=100;i<1000;i++)
{
for(t=0,k=1000;k>=10;t++)
{
a[t]=(i%k)/(k/10);
k/=10;
}
if(f(a[0])+f(a[1])+f(a[2])==i)
printf("%d ",i);
}
}
4、编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。
参考答案:
#include "string.h"
strcmbn(a,b,c) /* 数组合并函数:将数组a、b合并到 */
char a[],b[],c[];
void main()
{
char tmp;
int i,j,k,m,n;
m=strlen(a);
n=strlen(b);
for(i=0;i
{
for(j=i+1,k=i;j
if(a[j]