第三部分  C程序设计上机模拟题

 

(一)  上机改题

1. 在考生目录下,有Modify.c程序,该程序中”/******N******/”的下一行中

    有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)

       该程序功能:输入mn(要求输入数均大于0),输出它们的最小公倍数

            /*find the lease common multiple of m and n*/

           #include <stdio.h>

           void main()

           {    int m,n,k;

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

               while(scanf("%d%d",&m,&n),m<0&&n<0);      //   m<0|| n<0 

              for(k=m;k%n!=0;)

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

                 k=k+m%n;             //  k=k+m  

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

           }

2.       在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中有错误,

请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:运行时若输入an分别为36,则输出下列表达式的值:

3+33+333+3333+33333+333333

#include <stdio.h>

void main()

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

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

s=0;                       // int 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("%d\n",s);

}

3.       在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中有错误,

请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:运行时输入n,输出n各位数字之和(如n=1308则输出12n=-3204

则输出9)。

#include <stdio.h>

   #include <math.h>

   void main()

   {           int n,s=0;

       scanf("%d",&n);

n=fabs(n);

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

          while(n>1) {              // n

s=s+n%10;

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

                   n=n%10;        // n=n/10;

          }

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

     }

4.       在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中有错误,

请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:输入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++)            // i<ny

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

               printf("\n");

      }

5.       在考生目录下,有Modify.c程序,该程序中"/***** N ****/"的下一行

中有错误, 请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:输入xeps,计算多项式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)   //   ;

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

 }

6. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下

一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

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

#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(tolower(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]++; break;    //  ‘u’

     }

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

     }

7. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下

一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)

该程序功能:输入n0<n<10)后,输出1个数字金字塔。如输入n4

则输出:

 1

                222

               33333

              4444444

#include <stdio.h>

void main()

{    int i,j,n;

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

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

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

for(j=1;j<=n+1-i;j++)

putchar(' ');

              for(j=1;j<=2*i-1;j++)

                    putchar((char)(i+48));

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

           putchar(\n);             //  ‘\n’

      }

}

8. 在考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中

    有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

    该程序功能:运行时输入10个数,然后分别输出其中的最大值、最小值。

       #include <stdio.h>

       void main()

      {   float x,max,min;

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

          for(int i=1;i<=10;i++)  {   // C中不能这样用, 改为:int i; for( i=1; i<=10; i++)

                  scanf("%f",&x);

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

                 if(i =1) { max=x;min=x;}      //   i==1

                 if(x>max) max=x;

                 if(x<min) min=x;

          }

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

      }

9. 考生目录下,有Modify.c程序,该程序中"/***** N *****/"的下一行中有错误,

请改正(注意:不得加行、减行、加句、减句,否则后果自负)。

  该程序功能:运行时输入n,输出n的所有质数因子(如n=13860,则输出2233

57、11)。

       #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++;

        }

10. 在考生目录下,有Modify.c程序,该程序中/***** N *****/”的下一行中有错误,

请改正(注意:不得加行、减//行、加句、减句,否则后果自负)。

      该程序功能:输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++)         //   i=0

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

        puts(str);

     }

 

(二)  上机填充题

1. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要

充部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。

    该程序功能:输入m、n(要求输入数均大于0),输出它们的最大公约数。

           #include <stdio.h>

           void main()

          {   int m,n,k;

              while(scanf("%d%d",&m,&n); ____1___ ) ;      //   m<0|| n<0 

              for( ____2____;  n%k!=0||m%k!=0;  k--);      //   k=m<n?m:n

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

           }

    2. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:函数f1个整数首尾倒置,程序输出结果应为"54321    -76543"

          #include <stdio.h>

      #include <math.h>

          int f(int n)

{    int m,y=0;  m=fabs(n);

               while(m!=0) {

                 y=y*10+m%10;

                      1      ;        // m=m/10

               }

               if(n>=0) return y;

               else     2    ;           //  return ( -y);

      }

      void main()

{     printf("%d\t",f(12345));  printf("%d\n",f(-34567));  }

3.       在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:输入1个整数后,输出该数的位数若输入3214则输出4,输入-23156

则输出5)。

#include <stdio.h>

void main()

{     int n,k=0;

    scanf("%d",&n);

      while(   1    ) {       //  n%10

        k++;

          2    ;        // n=n/10

     }

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

}

4. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充

部分,请完成程序填充(注意:不得加行、减行、加句、减句,否则后果自负)。

该程序功能:运行时输出下列结果。

        abcdefg

     abcde

      abc

       a

#include <stdio.h>

void main()

{     int i,j; char k;

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

for(j=1;j<i;j++)  putchar(' ');

               1    ;             //  k=’a’

            for(j=9-2*i;j>0;j--)  {

              k=(char)k++;

                  printf(“%c”,    2    );   //  k-1

            }

            putchar('\n');

}

}

5. 在考生目录下,有Modify.c程序,该程序中"____ N ____"是根据程序功能需要填充