2004年秋计算机等级考试上机练习系统部分程序调试题答案

 

1、该程序功能:输入1个字符串,输出其中所出现过的大写英文字母。如运行时输入字符串"FONTNAME and FILENAME",应输出"F O N T A M E I L"

#include <stdio.h>

void main()

{  char x[80],y[26]; int i,j,ny=0;

   gets(x);

   for(i=0;x[i]!='\0';i++)

      if(x[i]>='A'&&x[i]<='Z') {

         for(j=0;j<ny;j++)

            /***** 1 *****/

           if(y[i]==x[j]) continue;          if(y[j]==x[i]) break;

         if(j==ny) { y[ny]=x[i]; ny++; }

       }

    /***** 2 *****/

     for(i=0;i<26;i++)                    for(i=0;i<ny;i++)

       printf("%c ",y[i]);

    printf("\n");

  }

 

2、该程序功能:输入x和正数eps,计算多项式1-x+x*x/2!-x*x*x/3!+...的和直到末项的绝对值小于eps为止。

#include <stdio.h>

#include <math.h>

void main()

{ float x,eps,s=1,t=1,i=1;

  scanf("%f%f",&x,&eps);

  do {

    /***** 1 *****/

    t=-t*x/++i;                           t=-t*x/i++;

    s+=t;

    /***** 2 *****/

  } while(fabs(t)>=eps)                    while(fabs(t)>=eps);

  printf("%f\n",s);

}

 

3、该程序功能:运行时若输入an分别为36,则输出下列表达式的值: 3+33+333+3333+33333+333333

#include <stdio.h>

void main()

{   int i,a,n; long t=0;

    /********* 1 *******/

    s=0;                                long s=0;

    scanf("%d%d",&a,&n);

    for(i=1;i<=n;i++) {

    /******* 2 ******/

     t=t*10+i;                           t=t*10+1;

     s=s+t;

    }

    s=s*a;

    printf("%ld\n",s);

}

 

4、该程序功能:输出61000之间的完数(1个数的因子和等于其自身的数:6=1+2+3 28=1+2+4+7+14,则628都是完数)。

#include <stdio.h>

void main()

{   int i,j,s;

    for(i=6;i<=1000;i++) {

        _____1_____                                 s=1;

        for(j=2;____2_____;j++) if(i%j==0) s+=j;          j<=i/2

        if(s==i) printf("%d\n",s);

    }

}

 

5 该程序功能:数列的第12项均为1,此后各项值均为该项前二项之和。计算数列第30项的值。

#include <stdio.h>

_______1______                                   long f(int n)

void main()

{

    printf("%ld\n",f(30));

}

long f(int n)

{

    if( ______2______ )                             n==1 || n==2

        return 1;

    else

        return f(n-1)+f(n-2);

}

 

6、该程序功能:输入三个整数,按由小到大的顺序输出这三个数。

#include <stdio.h>

void swap(______1______)                           int *pa,int *pb

{ /*交换两个数的位置*/

    int temp;

    temp = *pa;

    *pa = *pb;

    *pb = temp;

}

void main()

{

    int a,b,c,temp;

    scanf("%d%d%d",&a,&b,&c);

    if(a>b)

        swap(&a,&b);

    if(b>c)

        swap(&b,&c);

    if(______2______)                               a>b

        swap(&a,&b);

    printf("%d,%d,%d",a,b,c);

}

 

7、该程序功能:将输入的十进制正整数n通过函数Dec2Bin转换为二进制数,并将转换结果输出。

#include <stdio.h>

void Dec2Bin(int m)

{

    int bin[32],j;

    for(j=0;m!=0;j++)

    {

        bin[j]= ______1______;                      m%2

        m=m/2;

    }

    for(;j!=0;j--)

        printf("%d", ______2______ );                 bin[j-1]

}

void main()

{

    int n;

    scanf("%d",&n);

    Dec2Bin(n);

}

 

8、该程序功能:对x=1,2,...,10,求f(x)=x*x-5*x+sin(x)的最大值。

#include <stdio.h>

#include <math.h>

#define f(x) x*x-5*x+sin(x)

void main()

{   int x; float max;

    ______1______                                 max=f(1);

    for(x=2;x<=10;x++)

    ______2______                                 if((f(x))>max) max=f(x) ;

    printf("%f\n",max);

}

 

9、该程序功能:分别统计字符串中所有英文字母中的各元音字母个数。

#include <stdio.h>

#include <ctype.h>

void main()

{  char a[80]; int n[5]={0},i; gets(a);

   for(i=0; a[i]!='\0'; i++)

     /***** 1 *****/

     switch(toupper(a[i])) {                         switch(tolower(a[i]))

       case 'a': n[0]++; break;

       case 'e': n[1]++; break;

       case 'i': n[2]++; break;

       case 'o': n[3]++; break;

       /***** 2 *****/

       case 'U': n[4]++;                            case 'u': n[4]++;

     }

   for(i=0;i<5;i++) printf("%d\n",n[i]);

 }

 

10、该程序功能:调用函数f计算代数多项式 1.1+2.2*x+3.3*x*x+4.4*x*x*x+5.5*x*x*x*xx=1.7时的值。

#include <stdio.h>

float f(float,float*,int);

void main()

{  float b[5]={1.1,2.2,3.3,4.4,5.5};

   printf("%f\n",f(1.7,b,5));

}

float f( _______1________ )                        float f( float x,float *a,int n )

{  float y=a[0],t=1; int i;

   for(i=1;i<n;i++) {  t=t*x; y=y+a[i]*t; }

   _____2_____                                 return y;

}

 

11、该程序功能:将一个char型数的高4位和低4位分离,分别输出,如22(二进制:00010110)输出为16

#include <stdio.h>

void main()

{

    char a,b1,b2,c;

    scanf("%d",&a);

    /****** 1 ******/

    b1=a<<4;          /*b1存放高4*/          b1=a>>4;

    c=~(~0<<4);

    /****** 2 ******/

    b2=a|c;          /*b2存放低4*/            b2=a&c; 

    printf("%d,%d",b1,b2);

}

 

12、程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void main()

{  int n,i;

   /***** 1 *****/

   char str;                                          char  *str;

   scanf("%d\n",&n);  str=(char*)malloc(n); gets(str);

   /***** 2 *****/

   for(i=1;i<strlen(str);i++)                             for(i=0;i<strlen(str);i++)

     if(str[i]>='a'&& str[i]<='z') str[i]=str[i]-('a'-'A');

   puts(str);

}

 

13、该程序功能:输入n,再输入n个点的平面坐标,然后输出那些距离坐标原点不超过5的点的坐标值。

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

void main()

{

   int i,n;

   /***** 1 *****/

   struct axy { float x,y; } a;                       struct axy { float x,y; } *a;

   scanf("%d",&n);

   a=(float*) malloc(n*2*sizeof(float));

   for(i=0;i<n;i++)

     /***** 2 *****/

     scanf("%f%f",a[i].x,a[i].y);                    scanf("%f%f",&a[i].x, &a[i].y);

   for(i=0;i<n;i++)

     if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)

       printf("%f,%f\n",a[i].x,a[i].y);

}

 

14、该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6

  #include <stdio.h>

  #include <math.h>

  void main()

 {

   int n,s=0;

   scanf("%d",&n);

   ______ 1 ______                                 n=fabs(n);

   while(n!=0) {

______ 2 ______                               s=s+n%10;

 n=n/10;

   }

   printf("%d\n",s);

 }

 

15、该程序功能:输入1个整数后,输出该数的位数(若输入3214则输出4,输入-23156则输出5)。

#include <stdio.h>

void main()

{   int n,k=0;

    scanf("%d",&n);

    while( _____1_____ ){                   n

        k++;

        _____2_____;                      n=n/10

    }

    printf("%d\n",k);

}

 

16、程序功能:运行时输入n,输出n的所有质数因子(如n=13860,则输出22335711)。

#include <stdio.h>

void main()

{   int n,i;

    scanf("%d",&n);

    /****** 1 ******/

    i=1;                                     i=2;

    while(n>1)

    if(n%i==0) {

        printf("%d\t",i);

        n/=i;        

    }

    else

        /******** 2 *******/

        n--;                                 i++;

}

 

17、该程序功能:输入的一个小写字母,将字母循环后移5个位置后输出, 如’a’变成’f, w’变成’b’。

#include <stdio.h>

void main()

{

    char c;

    c=getchar();

    if(______1______)                            if(c>='a'&&c<='u')

        c=c+5;

    else

        if (c>='v' && c<='z')

            ______2______                       c=c+5-26;

    putchar(c);

}

 

18、该程序功能:调用函数f,从字符串中删除所有的数字字符。

#include <stdio.h>

#include <string.h>

#include <ctype.h>

void f(char *s)

{ int i=0;

  while(s[i]!='\0')

    if(isdigit(s[i])) ____1____(s+i,s+i+1);              strcpy

    ___2___  i++;                                else

}

void main()

{ char str[80];

  gets(str); f(str); puts(str);

}