I am a teacher!

导航

计算机等级考试二级C语言上机题集(第11~15套)

第11套

1.程序填空题

给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。

例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
#include  <stdlib.h>
#include  <string.h>
char *fun(char  *s)
{ 
    int  i, j, k, n;    char  *p, *t;
    n=strlen(s)+1;
    t=(char*)malloc(n*sizeof(char));
    p=(char*)malloc(n*sizeof(char));
    j=0; k=0;
    for(i=0; i<n; i++)
    {  
        if(((s[i]>='a')&&(s[i]<='z'))||
((s[i]>='A')&&(s[i]<='Z'))) 
        {
        /**********found**********/
            t[j]=__1__; j++;
        }
        else
        {  
            p[k]=s[i]; k++; 
        }
    }
    /**********found**********/
    for(i=0; i<__2__; i++)  t[j+i]=p[i];
    /**********found**********/
    t[j+k]= __3__;
    return  t;
}
int main()
{ 
    char  s[80];
    printf("Please input: ");  
    scanf("%s",s);
    printf("\nThe result is: %s\n",fun(s));
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:求出以下分数序列的前n项之和。

2/1,3/2,5/3,8/5,13/8,21/13,……

例如,若n=5,则应输出:8.391667。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>
/**************found**************/
fun( n )
{
    int  a = 2, b = 1, c, k ;
    double  s=0.0 ;
    for ( k = 1; k <= n; k++ )
    {
        s = s + 1.0 * a / b ;
    /**************found**************/
        c = a;  a += b; b += c;
    }
    return(s) ;
}
int main( )
{
    int  n = 5 ;
    printf("\nThe value of  function is: %f\n", fun(n));
    return 0;
}

3.程序设计题

编写函数fun,其功能是:求Fibonacci数列中大于s的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:

F(0)=0    F(1)=1

F(n)=F(n-1)+F(n-2)

例如,当s=1000时,函数值为1597。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
void NONO(void);
int fun(int s)
{

}
int main()
{
    int n;
    n=1000;
    printf("n=%d,f=%d\n",n,fun(n));
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf ;
    int i, n, s ;
    fp = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for (i = 0 ; i < 10 ; i++)
    {
       fscanf(fp, "%d", &n) ;
       s = fun(n) ;
       fprintf(wf, "%d\n", s) ;
    }
    fclose(fp) ;
    fclose(wf) ;
}
1.(1)s[i]   (2)k   (3'\0'
2double fun(int n)
      c = a+b;  b=a; a=c;
3int fun(int s)
     {
         if (s<0) return 0;
         int a=0,b=1,c;
         c=a+b;
         while (c<=s)
         {
              a=b;
              b=c;
              c=a+b;
          }
          return c;
      }
第11套参考答案

第12套

1.程序填空题

函数fun的功能是:计算

的前n项。

例如,若x=2.5,n=12,函数值为:12.182340。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
double fun(double  x, int  n)
{  
    double  f, t;      
    int  i;
    f = 1.0;
    /**********found**********/
    t = ___1___;
    /**********found**********/
    for (i=___2___; i<n; i++)
    {
    /**********found**********/
       t *= x/___3___;
       f += t;
    }
    return  f;
}
int main()
{  
    double  x, y;
    x=2.5;
    y = fun(x, 12);
    printf("\nThe result is :\n");
    printf("x=%-12.6f   y=%-12.6f\n", x, y);
    return 0;
}

2.程序修改题

假定整数数列中的数不重复,并存放在数组中。给定程序中函数fun的功能是:删除数列中值为x的元素。N中存放的是数列中元素的个数。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>
#define N 20
int fun(int *a,int n,int x)
{   
    int   p=0,i;
    a[n]=x;
    while(x!=a[p])
      p=p+1;
    /************found************/
    if (p=n)  return -1;
    else
    { 
        for(i=p;i<n;i++)
    /************found************/
           a[i+1]=a[i];
        return n-1;
    }
}
int main()
{   
    int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;
    n=10;
    printf("The original data :\n");
    for (i=0;i<n;i++) printf("%5d",w[i]);
    printf("\nInput x (to delete):");
    scanf("%d",&x);
    printf("Delete  :  %d\n",x);
    n=fun(w,n,x);
    if (n==-1) 
        printf("***Not be found!***\n\n");
    else
    {  
        printf("The data after deleted:\n");
        for(i=0;i<n;i++) printf("%5d",w[i]);
        printf("\n");
    }
    return 0;
}

3.程序设计题

编写函数fun,其功能是:计算下列多项式的值。

 

 

例如,若n=50,函数值为:1.718282。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
void NONO( );
double fun(int  n)
{

}
int main()
{
    int  n;
    double  s;
    printf("\nInput n:  ");
    scanf("%d",&n);
    s=fun(n);
    printf("\n\ns=%f\n\n",s);
    NONO();
    return 0;
}
void NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf, *wf ; int n, i ;
    double s ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%d", &n) ;
       s = fun(n) ;
       fprintf(wf, "%lf\n", s) ;
    }
    fclose(rf) ; fclose(wf) ;
}
1.(11.0213)i
2if (p==n)  return -1;
      a[i]=a[i+1];
3double fun(int  n)
     {
          double s=0.0,t=1.0;
          int i;
          for (i=1;i<=n;i++)
          {
               t=t/i;
               s+=t;
          }
          return s;
      }
第12套参考答案

第13套

1.程序填空题

给定程序中,函数fun的功能是:求出形参ss所指字符串中最长字符串的长度,将其余字符串右边用字符“*”补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长<N。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
#include  <string.h>
#define  M   5
#define  N   20
void fun(char  (*ss)[N])
{  
    int  i, j, n, len=0;
    for(i=0; i<M; i++)
    {  
        len=strlen(ss[i]);
        if(i==0) n=len;
        if(len>n)n=len;
}
len=n;
    for(i=0; i<M; i++) 
    {
    /**********found**********/
       n=strlen(___1___);
       for(j=0; j<len-n; j++)
    /**********found**********/
          ss[i][ ___2___]='*';
    /**********found**********/
       ss[i][  ___3___]='\0';
    }
}
int main()
{   
    char  ss[M][N]={"shanghai","guangzhou",
             "beijing","tianjing","cchongqing"};
    int  i;
    printf("The original strings are :\n");
    for(i=0; i<M; i++)  printf("%s\n",ss[i]);
    printf("\n");
    fun(ss);
    printf("The result is :\n");
    for(i=0; i<M; i++)  printf("%s\n",ss[i]);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。

例如,输入:55 12 34,输出结果为:a=55.0,b=34.0,c=12.0。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>
void  fun(float *p,float *q,float *s)
{
   /**********found**********/
   float  *k;
   if( *p<*q )
   {   k=*p; *p=*q; *q=k; }
   /**********found**********/
   if( *p>*s )
   {   k=*s; *s=*p; *p=k; }
   if( *q<*s )
   {   k=*q; *q=*s; *s=k; }
}
int main()
{  
   float   a,b,c;
   printf("Input  a  b  c:  ");  
   scanf("%f%f%f",&a,&b,&c);
   printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
   fun(&a,&b,&c);
   printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
   return 0;
}

3.程序设计题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
#define N 16
typedef struct
{
    char num[10];
    int s;
}STREC;
int fun(STREC *a,STREC *b)
{

}
int main()
{
    STREC s[N]={{"GA05",85},{"GA03",76},
         {"GA02",69},{"GA04",85},{"GA01",91},
         {"GA07",72},{"GA08",64},{"GA06",87},
        {"GA015",85},{"GA013",91},{"GA012",64},
        {"GA014",91},{"GA011",91},{"GA017",64},
        {"GA018",64},{"GA016",72}};
    STREC h[N];
    int i,n;FILE *out;
    n=fun(s,h);
    printf("The %d highest score:\n",n);
    for(i=0;i<n;i++)
      printf("%s %4d\n",h[i].num,h[i].s);
    printf("\n");
    out=fopen("out.dat","w");
    fprintf(out,"%d\n",n);
    for (i=0;i<n;i++)
      fprintf(out,"%s %4d\n",h[i].num,h[i].s);
    fclose(out);
}
1.(1)ss[i]   (2)n+j   (3)n+j
2float  k;
      if( *p<*s )
3int fun(STREC *a,STREC *b)
      {
          int i,n=0,max;
          max=a[0].s;
          for (i=1;i<N;i++)
               if (max<a[i].s) max=a[i].s;
          for (i=0;i<N;i++)
               if (max==a[i].s) b[n++]=a[i];
          return n;
      }
第13套参考答案

第14套

1.程序填空题

用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删除(把数表中相应位置的值置为0);接着从数表中找到下一个非0数,并从数表中删除该数的所有倍数,以此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,…。

函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include   <stdio.h>
int fun(int  n)
{  
    int  a[10000], i,j, count=0;
    for (i=2; i<=n; i++)  a[i] = i;
    i = 2;
    while (i<n) 
    {
    /**********found**********/
       for (j=a[i]*2; j<=n; j+=___1___)
          a[j] = 0;
       i++;
    /**********found**********/
       while (___2___==0)
         i++;
    }
    printf("\nThe prime number between 2 to %d\n", n);
    for (i=2; i<=n; i++)
    /**********found**********/
       if (a[i]!=___3___)
       {  
           count++;    
           printf( count%15?"%5d":"\n%5d",a[i]);  
        }
    return  count;
}
int main()
{  
    int  n=20, r;
    r = fun(n);
    printf("\nThe number of prime is  :  %d\n", r);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:比较两个字符串,将长的字符串的首地址作为函数值返回。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>
/**********found**********/
char fun(char *s,  char *t)
{  
    int  sl=0,tl=0;    
    char  *ss, *tt;
    ss=s;  tt=t;
    while(*ss)
    {  
        sl++;
    /**********found**********/
        (*ss)++;
    }
    while(*tt)
    {  
        tl++;
    /**********found**********/
        (*tt)++;
    }
    if(tl>sl)  return  t;
    else       return  s;
}
int main()
{  
    char  a[80],b[80];    
    int  i;
    printf("\nEnter a string :  "); 
    gets(a);
    printf("\nEnter a string again :  "); 
    gets(b);
    printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b));
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,并作为函数值返回。

例如,n=1000时,函数值应为:s=153.909064。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
#include <math.h>
double fun(int n)
{

}
int main()
{
    printf("s=%f\n",fun(1000));
    void NONO(void);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
    输出数据,关闭文件。 */
    FILE  *wf;
    wf = fopen("a28.out", "w") ;
    fprintf(wf,"s=%f\n",fun(1000));
    fclose(wf) ;
}
1.(1)a[i]   (2)a[i]   (30
2char *fun(char *s,  char *t)
      ss++;
      tt++;
3double fun(int n)
     {
         double s=0;
         int i;
         for (i=1;i<n;i++)
             if (i%3==0 && i%7==0)
                  s+=i;
         s=sqrt(s);
         return s;
     }
第14套参考答案

第15套

1.程序填空题

人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。

请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。

注意:不得增行或删行,也不得更改程序的结构!

#include    <stdio.h>
#define    N    8
typedef  struct
{  
    int  num;
    int  year,month,day ;
}STU;
int fun(STU  *std, STU  *k, int  year)
{  
    int  i,n=0;
    for (i=0; i<N; i++)
    /**********found**********/
      if(  ___1___==year)
    /**********found**********/
          k[n++]= ___2___;
    /**********found**********/
    return (___3___);
}
int main()
{  
    STU  std[N]={ {1,1984,2,15},{2,1983,9,21},
                  {3,1984,9,1},{4,1983,7,15},
                  {5,1985,9,28},{6,1982,11,15},
                  {7,1982,6,22},{8,1984,8,19}};
    STU  k[N];         
    int  i,n,year;
    printf("Enter a year :  ");  
    scanf("%d",&year);
    n=fun(std,k,year);
    if(n==0)
        printf("\nNo person was born in %d \n",year);
    else
    {   
        printf("\nThese persons were born in %d \n",year);
        for(i=0; i<n; i++)
         printf("%d %d-%d-%d\n",k[i].num,k[i].year,
                k[i].month,k[i].day);
    }
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:通过某种方式实现两个变量值得交换,规定不允许增加语句和表达式。例如,a=3,b=8,程序运行后a=8,b=3。

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

#include <stdio.h>
int fun(int *x,int y)
{
   int t ;
   /**************found**************/
   t = x ; x = y ;
   /**************found**************/
   return(y) ;
}
int main()
{
   int a = 3, b = 8 ;
   printf("%d  %d\n", a, b) ;
   b = fun(&a, b) ;
   printf("%d  %d\n", a, b) ;
   return 0;
}

3.程序设计题

编写函数fun,它的功能是:求出1~1000之内能被7或11整除,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
void NONO(void);
void  fun (int *a, int *n)
{

}
int main()
{
    int aa[1000], n, k ;
    fun(aa, &n);
    for ( k = 0 ; k < n ; k++ )
      if ((k+1)%10==0) printf("\n") ;
      else printf("%5d", aa[k]) ;
    NONO( );
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
    int aa[1000], n, k ;
    FILE *fp ;
    fp = fopen("out.dat","w") ;
    fun ( aa, &n ) ;
    for ( k = 0 ; k < n ; k++ )
      if ((k+1)%10==0) fprintf(fp, "\n") ;
      else fprintf(fp, "%5d", aa[k]) ;
    fclose(fp) ;
}
1.(1)std[i].year   (2)std[i]   (3)n
2. t = *x ; *x = y ;
      return (t) ;
3void  fun (int *a, int *n)
      {
          int i,j;
          j=0;
          for (i=1;i<=1000;i++)
               if ((i%7==0 || i%11==0)&& (i%77!=0))
                    a[j++]=i;
          *n=j;
     }
第15套参考答案

posted on 2022-11-04 10:30  aTeacher  阅读(289)  评论(0编辑  收藏  举报