I am a teacher!

导航

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

第51套

1.程序填空题

给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。

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

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

#include  <stdio.h>
#include  <stdlib.h>
#define N  5
typedef struct node 
{
    int  data;
    struct node  *next;
} NODE;
/**********found**********/
__1__ fun(NODE *h)
{ 
    NODE  *p, *q, *r;
    p = h;
    if (p == NULL)
      return NULL;
    q = p->next;
    p->next = NULL;
    /**********found**********/
    while (__2__)
    {  
       r = q->next;
       q->next = p;
       p = q;
    /**********found**********/
       q = __3__ ;
    }
    return  p;
}
NODE *creatlist(int  a[])
{  
    NODE  *h,*p,*q;        
    int  i;
    h=NULL;
    for(i=0; i<N; i++)
    {  
        q=(NODE *)malloc(sizeof(NODE));
        q->data=a[i];
        q->next = NULL;
        if (h == NULL)  h = p = q;
        else    {  p->next = q;  p = q;   }
    }
    return  h;
}
void outlist(NODE  *h)
{  
    NODE  *p;
    p=h;
    if (p==NULL)  printf("The list is NULL!\n");
    else
    {  
        printf("\nHead  ");
        do
        {  
            printf("->%d", p->data); 
            p=p->next;  
        } while(p!=NULL);
        printf("->End\n");
    }
}
int main()
{  
    NODE  *head;
    int  a[N]={2,4,6,8,10};
    head=creatlist(a);
    printf("\nThe original list:\n");
    outlist(head);
    head=fun(head);
    printf("\nThe list after inverting :\n");
    outlist(head);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是将字符串s中位于奇数位置的字符或ASCII码为偶数的字符放入字符串t中(规定第1个字符放在第0位中)。

例如,字符串中的数据为:AABBCCDDEEFF,则输出应为:ABBCDDEFF。

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

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

#include <stdio.h>
#include <string.h>
#define  N  80
void fun(char *s, char t[])
{  
    int  i, j=0;
    for(i=0; i<strlen(s); i++)
    /***********found**********/
      if(i%2 && s[i]%2==0)
        t[j++]=s[i];
    /***********found**********/
    t[i]='\0';
}
int main()
{  
    char  s[N], t[N];
    printf("\nPlease enter string s : "); gets(s);
    fun(s, t);
    printf("\nThe result is : %s\n",t);
    return 0;
}

3.程序设计题

编写函数fun,其功能是将M行N列的二维数组中的按列的顺序依次存放到一维数组中。

例如,二维数组中的数据为

33 33 33 33

44 44 44 44

55 55 55 55

则一维数组中的内容应为:

33 44 55 33 44 55 33 44 55 33 44 55。

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

#include <stdio.h>
void NONO(void);
void  fun(int  (*s)[10], int *b, int *n, int mm, int nn)
{

}
int main()
{
    int  w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;
    int  a[100]={0}, n=0;
    printf("The matrix:\n");
    for(i=0; i<3; i++)
    {
        for(j=0;j<4; j++) printf("%3d",w[i][j]);
        printf("\n");
    }
    fun(w,a,&n,3,4);
    printf("The A array:\n");
    for(i=0;i<n;i++) printf("%3d",a[i]);
    printf("\n\n");
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int i, j, k ;
    int w[10][10], a[100], n = 0, mm, nn ;
    rf = fopen("in.dat", "r") ;
    wf = fopen("out.dat", "w") ;
    for(k = 0 ; k < 5 ; k++)
    {
       fscanf(rf, "%d %d", &mm, &nn) ;
       for(i = 0 ; i < mm ; i++)
          for(j = 0 ; j < nn ; j++)
             fscanf(rf, "%d", &w[i][j]) ;
       fun(w, a, &n, mm, nn) ;
       for(i = 0 ; i < n ; i++) fprintf(wf, "%3d", a[i]);
       fprintf(wf, "\n") ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)NODE *   (2)q!=NULL   (3)r
2if(i%2 || s[i]%2==0)
    t[j]='\0';
3void  fun(int  (*s)[10], int *b, int *n, int mm, int nn)
     {
          int i,j,k=0;
          for (j=0;j<nn;j++)
              for (i=0;i<mm;i++)
                   b[k++]=s[i][j];
          *n=k;
      }
第51套参考答案

第52套

1.程序填空题

给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为非负数),将所指数组中大于平均值的数据移至数组的前部,小于等于平均值的数据移至数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。

例如,有10个非负数:41 17 34 0 19 24 28 8 12 14,平均值为:19.700000

移动后的输出为:41 34 24 28 17 0 19 8 12 14。

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

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

#include  <stdlib.h>
#include  <stdio.h>
#define   N   10
double fun(double *x)
{ 
    int  i, j;    
    double  s, av, y[N];
    s=0;
    for (i=0; i<N; i++)  s=s+x[i];
    /**********found**********/
    av=__1__;
    for(i=j=0; i<N; i++)
       if( x[i]>av )
       {
    /**********found**********/
          y[__2__]=x[i]; x[i]=-1;
       }
    for(i=0; i<N; i++)
    /**********found**********/
        if( x[i]!= __3__) y[j++]=x[i];
    for(i=0; i<N; i++)x[i] = y[i];
    return  av;
}
int main()
{ 
    int  i;     
    double  x[N];
    for(i=0; i<N; i++)
    { 
        x[i]=rand()%50; 
        printf("%4.0f ",x[i]);
    }
    printf("\n");
    printf("\nThe average is: %f\n",fun(x));
    printf("\nThe result :\n",fun(x));
    for(i=0; i<N; i++)  printf("%5.0f ",x[i]);
    printf("\n");
    return 0;
}

2.程序修改题

在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。给定程序中,函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。

例如,数组中元素值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。

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

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

#include <stdio.h>
double fun ( int x[])
{
    /************found************/
    int sum = 0.0;
    int c=0, i=0;
    while (x[i] != 0)
    { 
        if (x[i] > 0) 
        { sum += x[i]; c++; }
        i++;
    }
    /************found************/
    sum \= c;
    return sum;
}
int main( )
{  
    int x[1000];  int i=0;
    printf( "\nPlease enter some data (end with 0): " );
    do
    {  
        scanf("%d", &x[i]);  
    }
    while (x[i++] != 0);
    printf("%f\n", fun(x));
    return 0;
}

3.程序设计题

编写函数fun,其功能是:根据以下公式计算S,计算结果作为函数值返回,n通过形参传入。

 

例如,若n=11,函数返回值为1.833333。

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

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

}
int main()
{  
    int n; 
    float s;
    printf("\nPlease enter N:"); 
    scanf("%d", &n);
    s = fun(n);
    printf("the result is: %f\n", s);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf ;
    int i, n ;
    float 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, "%f\n", s) ;
    }
    fclose(fp) ;
    fclose(wf) ;
}
1.(1)s/N   (2)j++   (3)-1
2double sum = 0.0;
    sum /= c;
3float fun(int  n)
     {
         int  i;
         float s=0,t=0;
         for (i=1;i<=n;i++)
         {
              t=t+i;
              s=s+1/t;
          }
          return s;
      }
第52套参考答案

第53套

1.程序填空题

给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。

例如,形参s所指字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。

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

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

#include  <stdio.h>
#include  <string.h>
#define   N   80
void fun(char  *s, int  n, char  *t)
{ 
    int len,i,j=0;
    len=strlen(s);
    /**********found**********/
    if(n>=len) strcpy(__1__);
    else 
    {
    /**********found**********/
        for(i=len-n; i<=len-1; i++)  t[j++]= __2__ ;
    /**********found**********/
        t[j]= __3__ ;
    }
}
int main()
{ 
    char  s[N],t[N];    
    int  n;
    printf("Enter a string:  ");
    gets(s);
    printf( "Enter n:");  
    scanf("%d",&n);
    fun(s,n,t);
    printf("The string t :  ");  
    puts(t);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数,并把该整数中各位上最大的数字值作为函数值返回。

例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。

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

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

#include <stdio.h>
int fun(unsigned n, int *zero)
{  
    int  count=0,max=0,t;
    do
    {  t=n%10;
    /**************found**************/
      if(t=0)
        count++;
      if(max<t)  max=t;
      n=n/10;
    }while(n);
    /**************found**************/
    zero=count;
    return  max;
}
int main()
{  
    unsigned  n;    
    int  zero,max;
    printf("\nInput n(unsigned):  ");  
    scanf("%d",&n);
    max = fun( n,&zero );
    printf("\nThe result:  max=%d zero=%d\n",max,zero);
    return 0;
}

3.程序设计题

编写函数fun,其功能是:判断字符串是否为回文。若是,函数返回1,否则返回0。回文是指顺读和倒读都一样的字符串。

例如,字符串LEVEL是回文,则字符串12312就不是回文。

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

#include <stdio.h>
#define  N  80
void NONO(void);
int fun(char *str)
{

}
int main()
{
    char  s[N] ;
    printf("Enter a string: ") ;
    gets(s) ;
    printf("\n\n") ;
    puts(s) ;
    if(fun(s)) printf("  YES\n") ;
    else       printf("  NO\n") ;
    NONO() ;
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int i ; char s[N] ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%s", s) ;
       if(fun(s)) fprintf(wf, "%s  YES\n", s) ;
       else       fprintf(wf, "%s  NO\n", s) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)t,s   (2)s[i]   (3'\0'
2if(t==0)
    *zero=count;
3int fun(char *str)
     {
          int i,j;
          for (j=0;str[j]!='\0';j++);
          j--;
          for (i=0;i<=j;i++,j--)
              if (str[i]!=str[j])  return 0;
          return 1;
      }
第53套参考答案

第54套

1.程序填空题

给定程序中,函数fun的功能是:计算下列多项式的值

 

例如,当n=10时,输出结果为:-0.204491。

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

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

#include  <stdio.h>
double fun(int  n)
{ 
    int  i, k;    
    double  s, t;
    s=0;
    /**********found**********/
    k=__1__;
    for(i=1; i<=n; i++) 
    {
    /**********found**********/
       t=__2__;
       s=s+k*(2*i-1)*(2*i+1)/(t*t);
    /**********found**********/
       k=k*__3__;
    }
    return  s;
}
int main()
{ 
    int  n=-1;
    while(n<0)
    { 
        printf("Please input(n>0): ");  
        scanf("%d",&n);  
    }
    printf("\nThe result is: %f\n",fun(n));
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:根据形参m的值(2<=m<=9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。

例如,若输入2,则输出

1 2

2 4

若输入4,则输出

1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

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

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

#include <stdio.h>
#define M 10 
int a[M][M] = {0} ; 
/**************found**************/ 
fun(int **a, int m) 
{ 
    int j, k ; 
    for (j = 0 ; j < m ; j++ ) 
    for (k = 0 ; k < m ; k++ ) 
    /**************found**************/ 
       a[j][k] = k * j ; 
} 
int main ( ) 
{ 
    int i, j, n ; 
    printf ( " Enter n : " ) ; 
    scanf ("%d", &n ) ; 
    fun ( a, n ) ; 
    for ( i = 0 ; i < n ; i++) 
    { 
        for (j = 0 ; j < n ; j++) 
           printf ("%4d", a[i][j]) ; 
        printf ( "\n" ) ; 
    } 
    return 0;
}

3.程序设计题

程序定义了N*N的二维数组,并在主函数中自动赋值。编写函数fun,其功能是:使数组左下三角元素中的值乘以n。

例如,若n的值为3,a数组中的值为

1 9 7

2 3 8

4 5 6

则返回主函数后a数组中的值应为

3 9 7

6 9 8

12 15 18

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

#include <stdio.h>
#include <stdlib.h>
#define  N  5
void NONO(void);
void  fun ( int a[][N], int n)
{

}
int main ( )
{
    int  a[N][N], n, i, j;
    printf("***** The array *****\n");
    for ( i =0;  i<N; i++ )
    {
        for ( j =0; j<N; j++ )
        {
            a[i][j] = rand()%10;
            printf( "%4d", a[i][j] );
        }
        printf("\n");
    }
    do n = rand()%10 ; while ( n >=3 );
    printf("n = %4d\n",n);
    fun ( a, n );
    printf ("***** THE  RESULT *****\n");
    for ( i =0;  i<N; i++ )
    {
        for ( j =0; j<N; j++ ) printf("%4d", a[i][j]);
        printf("\n");
    }
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int i, j, n, a[5][5] ;
    rf = fopen("in.dat", "r") ;
    wf = fopen("out.dat", "w") ;
    for(i = 0 ; i < 5 ; i++)
      for(j = 0 ; j < 5 ; j++)
       fscanf(rf, "%d ", &a[i][j]) ;
    fscanf(rf, "%d", &n) ;
    fun(a, n) ;
    for ( i = 0;  i < 5; i++ )
    {
       for ( j = 0; j < 5; j++ ) fprintf(wf, "%4d", a[i][j]);
       fprintf(wf, "\n");
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1122*i   (3)(-1)
2void fun(int a[][M], int m)
    a[j][k] = (k+1) * (j+1) ;
3void  fun ( int a[][N], int n)
     {
          int i,j;
          for (i=0;i<N;i++)
              for (j=0;j<=i;j++)
                 a[i][j]=a[i][j]*n;
      }
第54套参考答案

第55套

1.程序填空题

给定程序中,函数fun的功能是:将a所指3*5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。

例如,有下列矩阵

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

若k为2,程序执行结果为

3 4 5 1 2

3 4 5 1 2

3 4 5 1 2

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

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

#include  <stdio.h>
#define   M   3
#define   N   5
void fun(int  (*a)[N],int  k)
{ 
    int  i,j,p,temp;
    /**********found**********/
    for(p=1; p<= __1__; p++)
      for(i=0; i<M; i++)
      {  
          temp=a[i][0];
    /**********found**********/
          for(j=0; j< __2__ ; j++) 
              a[i][j]=a[i][j+1];
    /**********found**********/
          a[i][N-1]= __3__;
      }
}
int main( )
{ 
    int  x[M][N]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}},i,j;
    printf("The array before moving:\n\n");
    for(i=0; i<M; i++)
    {  
        for(j=0; j<N; j++)  printf("%3d",x[i][j]);
        printf("\n");
    }
    fun(x,2);
    printf("The array after moving:\n\n");
    for(i=0; i<M; i++)
    {  
        for(j=0; j<N; j++)  printf("%3d",x[i][j]);
        printf("\n");
    }
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:从s所指字符串中,找出t所指子串的个数作为函数值返回。

例如,当s所指字符串中的内容为:abcdabfab,t所指字符串的内容为:ab,则函数返回值为3。

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

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

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

3.程序设计题

编写函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。

例如,分别输入两个字符串:FirstString- 和 SecondString,程序输出:FirstString-SecondString。

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

#include <stdio.h>
void NONO(void);
void fun(char p1[], char p2[])
{

}
int main()
{
    char s1[80], s2[40] ;
    printf("Enter s1 and s2:\n") ;
    scanf("%s%s", s1, s2) ;
    printf("s1=%s\n", s1) ;
    printf("s2=%s\n", s2) ;
    printf("Invoke fun(s1,s2):\n") ;
    fun(s1, s2) ;
    printf("After invoking:\n") ;
    printf("%s\n", s1) ;
    NONO() ;
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
    int i ;
    FILE *rf, *wf ;
    char s1[80], s2[40] ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%s", s1) ;
       fscanf(rf, "%s", s2) ;
       fun(s1, s2) ;
       fprintf(wf, "%s\n", s1) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)k   (2)N   (3)temp
2if(*r==*p)  {r++;p++;}
    if(*r=='\0')
3void fun(char p1[], char p2[])
     {
         int i,j;
         for (i=0;p1[i]!='\0';i++);
         for (j=0;p2[j]!='\0';j++)
             p1[i++]=p2[j];
         p1[i]='\0';
     }
第55套参考答案

posted on 2022-11-07 05:29  aTeacher  阅读(259)  评论(0编辑  收藏  举报