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<stdio.h>
              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<n;i++)
 {
   printf("a[%d]= ",i);
  scanf("%d",&a[0][i]);
 }
 while(m<=n) /* m记录已经登记过的数的个数 */
 { 
  for(i=0;i<n;i++) /* 记录未登记过的数的大小 */
  {
    if(a[1][i]!=0) /* 已登记过的数空过 */
    continue;
   k=i;
   for(j=i;j<n;j++) /* 在未登记过数中找最小数 */
    if(a[1][j]==0 && a[0][j]<a[0][k])
      k=j;
   a[1][k]=r++; /* 记录名次,r为名次 */
     m++; /* 登记过的数增1 */
   for(j=0;j<n;j++) /* 记录同名次 */
    if(a[1][j]==0 && a[0][j]==a[0][k])
    {
      a[1][j]=a[1][k];
     m++;
    }
   break;
  }
 }
 for(i=0;i<n;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<m-1;i++) /* 对数组a排序 */
 {
   for(j=i+1,k=i;j<m;j++)
   if(a[j]<a[k])
     k=j;
  tmp=a[i]; 
  a[i]=a[k]; 
  a[k]=tmp;
 }
 for(i=0;i<n-1;i++) /* 对数组b排序 */
 { 
  for(j=i+1,k=i;j<n;j++)
   if(b[j]<b[k]) 
    k=j;
  tmp=b[i]; 
  b[i]=b[k]; 
  b[k]=tmp;
 }
 i=0;j=0;k=0;
 while(i<m&&j<n) /* 合并 */
  if(a[i]>b[j])
   c[k++]=b[j++]; /* 将a[i]、b[j]中的小者存入c[k] */
  else
  { 
   c[k++]=a[i++]; 
   if(a[i-1]==b[j]) j++; /* 如果a、b当前元素相等,删掉一个
  }
 while(i<m) 
  c[k++]=a[i++]; /* 将a或b中剩余的数存入c */
 while(j<n)

相关话题/中央财经大学 语言 程序 设计