I am a teacher!

导航

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

第26套

1.程序填空题

给定程序中,函数fun的功能是:计算

 

例如,若x=2.5,n=15时,函数值为:1.917915。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:根据下列公式求π值。

例如,给定精度eps为0.0005时,应当输出pi=3.140578。

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

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

#include <stdio.h>
double fun(double  eps)
{
    double  s,t;
    int  n=1;
    s=0.0;
    /************found************/
    t=0;
    while( t>eps)
    {
        s+=t;
        t=t * n/(2*n+1);
        n++;
    }
    /************found************/
    return (s);
}
int main()
{
    double  x;
    printf("\nPlease enter a precision: ");
    scanf("%lf",&x);
    printf("\neps=%f, Pi=%f\n",x,fun(x));
    return 0;
}

3.程序设计题

假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:使字符串的最前面连续的*号不得多于n个;若多于n个,则删除多于的*;若少于或等于n个,则什么也不做,中间和尾部的*号不删除。

例如,字符串中的内容为:*****A*BC*DEF*G***,若n的值为4,删除后,字符串的内容应当为:****A*BC*DEF*G***;若n的值为8,则字符串的内容仍为:*****A*BC*DEF*G***。

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

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

}
int main()
{
    char  s[81];  int  n;
    printf("Enter a string:\n");
    gets(s);
    printf("Enter n :  ");
    scanf("%d",&n);
    fun(s,n);
    printf("The string after deleted:\n");
    puts(s);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *in, *out ;
    int i, n ; char s[81] ;
    in = fopen("in.dat","r") ;
    out = fopen("out.dat","w") ;
    for (i = 0 ; i < 10 ; i++)
    {
       fscanf(in, "%s", s) ;
       fscanf(in, "%d", &n) ;
       fun(s,n) ;
       fprintf(out, "%s\n", s) ;
    }
    fclose(in) ;
    fclose(out) ;
}
1.(11.02)-1.03)t
2. t=1.0;
  return (2*s);
3void  fun( char *a, int  n )
    {
         int i,j;
         for (i=0;a[i]=='*';i++) ;
         if (i<=n) return;
         j=n;
         while (a[i]!='\0')
         {
              a[j++]=a[i++];
         }
         a[j]='\0';
     }
第26套参考答案

第27套

1.程序填空题

给定程序中,函数fun的功能是:把形参a所指数组中的所有偶数从数组中删除,剩下的奇数个数通过函数值返回。

例如,若a所指数组中的数据为:9、1、4、2、3、6、5、8、7,删除偶数后,数组中的数据为:9、1、3、5、7,函数返回值为5。

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

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

#include <stdio.h>
#define  N  9
int fun(int  a[], int  n)
{  
    int  i,j;
    j = 0;
    for (i=0; i<n; i++)
    /**********found**********/
      if (a[i]%2==___1___)
      {
    /**********found**********/
        a[j] = a[i]; ___2___;
      }
    /**********found**********/
    return ___3___;
}
int main()
{  
    int  b[N]={9,1,4,2,3,6,5,8,7}, i, n;
    printf("\nThe original data  :\n");
    for (i=0; i<N; i++)  printf("%4d ", b[i]);
    printf("\n");
    n = fun(b, N);
    printf("\nThe number of odd  : %d \n", n);
    printf("\nThe odd number  :\n");
    for (i=0; i<n; i++)  printf("%4d ", b[i]);
    printf("\n");
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:交换柱函数中两个变量的值。

例如,若a=8,b=3,程序运行后,a=3,b=8。

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

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

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

3.程序设计题

编写函数fun,它的功能是:求出小于或等于lim的所有素数并存放到数组aa中,函数返回求出素数的个数。

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

#include <stdio.h>
#define MAX 100
void NONO(void);
int fun(int lim, int aa[MAX])
{

}
int main()
{
    int limit, i, sum;
    int aa[MAX];
    printf("输入一个整数");
    scanf("%d", &limit);
    sum=fun(limit, aa);
    for(i=0 ; i < sum ; i++)
    {
       if(i % 10 == 0 && i != 0) printf("\n") ;
       printf("%5d", aa[i]) ;
    }
    NONO();
    return 0;
}
void NONO(void)
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
   输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int limit, i, sum, aa[MAX] ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    fscanf(rf, "%d", &limit);
    sum=fun(limit, aa);
    for(i=0 ; i < sum ; i++) fprintf(wf,"%d\n", aa[i]) ;
    fclose(rf) ;
    fclose(wf) ;
}
1.(112)j++   (3)j
2void fun(int *x,int *y)
   t=*x;*x=*y;*y=t;
3int fun(int lim, int aa[MAX])
     {
          int i,k,n;
          if (lim<2) return 0;
          aa[0]=2;
          n=1;
          for (i=3;i<=lim;i++)
          {
              for (k=0;k<n;k++)
                  if (i%aa[k]==0) break;
              if (k>=n) aa[n++]=i;
          }
          return n;
      }
第27套参考答案

第28套

1.程序填空题

给定程序中,函数fun的功能是:以N*N矩阵的主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。

例如,N=3,有下列矩阵

1 2 3

4 5 6

7 8 9

计算结果为

1 0 0

6 5 0

10 14 0

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

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

#include <stdio.h>
#define  N  4
/**********found**********/
void fun(int  (*t)___1___ )
{  
    int  i, j;
    for(i=1; i<N; i++)
    {  
        for(j=0; j<i; j++)
        {
    /**********found**********/
           ___2___ =t[i][j]+t[j][i];
    /**********found**********/
           ___3___ =0;
        }
    }
}
int main()
{  
    int  t[][N]={21,12,13,24,25,16,47,38,29,
                 11,32,54,42,21,33,10}, i, j;
    printf("\nThe original array:\n");
    for(i=0; i<N; i++)
    {  
       for(j=0;j<N;j++) printf("%2d  ",t[i][j]);
       printf("\n");
    }
    fun(t);
    printf("\nThe result is:\n");
    for(i=0; i<N; i++)
    {  
       for(j=0;j<N;j++) printf("%2d  ",t[i][j]);
       printf("\n");
    }
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:根据整型形参m,计算如下公式的值。

例如,若m=2000,则应输出:0.000160。

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

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

#include <stdio.h>
/************found************/
fun(int  m)
{  
    double y = 0, d ;
    int    i ;
    /************found************/
    for( i = 100, i <= m, i += 100 )
    {  
        d = (double)i * (double)i ;
        y += 1.0 / d ;
    }
    return( y ) ;
}
int main()
{  
    int  n = 2000 ;
    printf( "\nThe result is %f\n", fun(n));
    return 0;
}

3.程序设计题

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。编写函数fun,它的功能是:找出成绩最低的学生记录,并通过形参返回主函数(规定只有一个最低分)。

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

#include <stdio.h>
#include <string.h>
#define  N  10
void NONO(void);
typedef  struct  ss
{
    char  num[10];
    int  s;
} STU;
void fun(STU a[], STU  *s)
{

}
int main()
{
    STU  a[N]={{"A01",81},{"A02",89},
          {"A03",66},{"A04",87},{"A05",77},
          {"A06",90},{"A07",79},{"A08",61},
          {"A09",80},{"A10",71} }, m  ;
    int   i;
    printf("***** The original data *****\n");
    for ( i=0; i< N; i++ )
        printf("No=%s  Mark=%d\n", a[i].num,a[i].s);
    fun ( a, &m );
    printf ("***** THE  RESULT *****\n");
    printf ("The lowest  :  %s , %d\n",m.num, m.s);
    NONO( );
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    STU a[N], m ;
    int i ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10; i++)
        fscanf(rf, "%s %d", a[i].num, &a[i].s) ;
    fun(a, &m) ;
    fprintf (wf, "The lowest : %s, %d\n", m.num, m.s) ;
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)[N]   (2)t[i][j]   (3)t[j][i]
2double fun(int  m)
    for (i=100;i<=m;i+=100)
3void fun(STU a[], STU  *s)
     {
          STU min;
          int i;
          min=a[0];
          for (i=1;i<N;i++)
                if (min.s>a[i].s) min=a[i];
          *s=min;
      }
第28套参考答案

第29套

1.程序填空题

给定程序中已建立一个带头结点的单向链表,链表中各结点按结点数据域中的数据从小到大顺序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排列。

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

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

#include  <stdio.h>
#include  <stdlib.h>
#define   N  8
typedef  struct list
{  
    int  data;
    struct list  *next;
} SLIST;
void fun(SLIST  *h, int  x)
{  
    SLIST  *p, *q, *s;
    s=(SLIST *)malloc(sizeof(SLIST));
    /**********found**********/
    s->data=___1___;
    q=h;
    p=h->next;
    while(p!=NULL && x>p->data) 
    {
    /**********found**********/
      q=___2___;
      p=p->next;
    }
    s->next=p;
    /**********found**********/
    q->next=___3___;
}
SLIST *creatlist(int *a)
{  
    SLIST  *h,*p,*q;      
    int  i;
    h=p=(SLIST *)malloc(sizeof(SLIST));
    for(i=0; i<N; i++)
    {  
        q=(SLIST *)malloc(sizeof(SLIST));
        q->data=a[i];  p->next=q;  p=q;
    }
    p->next=0;
    return  h;
}
void outlist(SLIST *h)
{  
    SLIST  *p;
    p=h->next;
    if (p==NULL)  printf("\nThe list is NULL!\n");
    else
    {   
        printf("\nHead");
        do { 
            printf("->%d",p->data);  
            p=p->next;  
        } while(p!=NULL);
        printf("->End\n");
    }
}
int main()
{  
    SLIST  *head;      
    int  x;
    int  a[N]={11,12,15,18,19,22,25,29};
    head=creatlist(a);
    printf("\nThe list before inserting:\n");  
    outlist(head);
    printf("\nEnter a number :  ");  
    scanf("%d",&x);
    fun(head,x);
    printf("\nThe list after inserting:\n");  
    outlist(head);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,设t1和t2所指字符串的长度相同。

例如,当s所指字符串为:abcdabfab,t1所指字符串为:ab,t2所指字符串为:99,运行后w所指数组中的内容为:99cd99f99。

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

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

#include  <stdio.h>
#include  <string.h>
void fun(char *s,char *t1,char *t2,char *w)
{
   char   *p , *r, *a;
   strcpy( w, s );
   while (*w)
   { 
       p = w;   r = t1;
   /************found************/
       while (r)
         if (*r == *p )  { r++;  p++; }
         else  break;
       if ( *r == '\0' )
       {   
           a = w;  r = t2;
           while ( *r )
           {
   /************found************/
              *a = *r; a++; r++
           }
           w += strlen(t2) ;
       }
       else w++;
   }
}
int main()
{
   char s[100],t1[100],t2[100], w[100];
   printf("\nPlease enter string S:"); 
   scanf("%s", s);
   printf("\nPlease enter substring t1:"); 
   scanf("%s", t1);
   printf("\nPlease enter substring t2:"); 
   scanf("%s", t2);
   if ( strlen(t1)==strlen(t2)) 
   {
     fun( s, t1, t2, w);
     printf("\nThe result is :  %s\n", w);
   }
   else  printf("Error : strlen(t1) != strlen(t2)\n");
   return 0;
}

3.程序设计题

编写函数fun,它的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符所形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为:ABCDEFGHIJK,在t所指数组中的内容应为:BDFHJ。

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

#include <stdio.h>
#include <string.h>
void NONO(void);
void fun(char *s, char t[])
{

}
int main()
{
    char   s[100], t[100];
    printf("\nPlease enter string S:");
    scanf("%s", s);
    fun(s, t);
    printf("\nThe result is: %s\n", t);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    char s[100], t[100] ;
    FILE *rf, *wf ;
    int i ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for (i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%s", s) ;
       fun(s, t) ;
       fprintf(wf, "%s\n", t) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)x   (2)p   (3)s
2while (*r)
     *a = *r; a++; r++;
3void fun(char *s, char t[])
      {
          int i,j;
          for (i=0,j=0;s[i]!='\0';i++)
               if (i%2!=0) t[j++]=s[i];
          t[j]='\0';
      }
第29套参考答案

第30套

1.程序填空题

给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后顺序。

例如,形参s所指的字符串为:def35adh3kjsdf7,执行结果为:defadhkjsdf3537。

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

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

#include <stdio.h>
void fun(char *s)
{  
    int  i, j=0, k=0;    
    char  t1[80], t2[80];
    for(i=0; s[i]!='\0'; i++)
      if(s[i]>='0' && s[i]<='9')
      {
    /**********found**********/
         t2[j]=s[i]; ___1___;
      }
      else  
        t1[k++]=s[i];
      t2[j]=0;  t1[k]=0;
    /**********found**********/
    for(i=0; i<k; i++)  ___2___;
    /**********found**********/
    for(i=0; i<___3___; i++)  
        s[k+i]=t2[i];
}
int main()
{  
    char  s[80]="ba3a54j7sd567sdffs";
    printf("\nThe original string is :  %s\n",s);
    fun(s);
    printf("\nThe result is :  %s\n",s);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。

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

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

#include <stdio.h>
#define  N 100
int  fun(int  *s, int  n)
{
    int  i,j,k,a,b,c;
    j=0;
    for(i=100; i<n; i++)
    {
    /**************found**************/
       k=n;
       a=k%10;  k/=10;
       b=k%10;  k/=10;
    /**************found**************/
       c=k%10
       if( a==b && a==c ) s[j++]=i;
    }
    return  j;
}
int main()
{
    int  a[N], n, num=0, i;
    do
    {
        printf("\nEnter n( <=1000 ) :  ");
        scanf("%d",&n);
    } while(n > 1000);
    num = fun( a,n );
    printf("\nThe result :\n");
    for(i=0; i<num; i++) printf("%5d",a[i]);
    printf("\n\n");
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:计算并输出给定10个数的方差。

例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。

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

#include <stdio.h>
#include <math.h>
void NONO(void);
double fun(double  x[10])
{

}
int main()
{
    double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};
    int  i;
    printf("\nThe original data is :\n");
    for(i=0;i<10;i++) printf("%6.1f",x[i]);
    printf("\n\n");
    s=fun(x);
    printf("s=%f\n",s);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int i, j ;
    double s, x[10] ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 5 ; i++)
    {
       for(j = 0 ; j < 10 ; j++) fscanf(rf, "%lf", &x[j]) ;
       s = fun(x) ;
       fprintf(wf, "%f\n", s) ;
    }
    fclose(rf) ; fclose(wf) ;
}
1.(1)j++   (2)s[i]=t1[i]   (3)j
2. k=i;
   c=k%10;
3double fun(double  x[10])
     {
          double s,avg;
          int i;
          s=0.0;
          for (i=0;i<10;i++)
               s+=x[i];
          avg=s/10;
          s=0.0;
          for (i=0;i<10;i++)
              s+=(x[i]-avg)*(x[i]-avg);
          s=sqrt(s/10);
          return s;
      }
第30套参考答案

posted on 2022-11-06 05:09  aTeacher  阅读(187)  评论(0编辑  收藏  举报