I am a teacher!

导航

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

第36套

1.程序填空题

给定程序中,函数fun的功能是:统计长整数n的各位上出现数字1、2、3的次数,并通过全局变量c1、c2、c3返回主函数。

例如,当n=123114350时,结果为:c1=3  c2=1  c3=2。

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

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

#include  <stdio.h>
int  c1,c2,c3;
void fun(long  n)
{  
    c1 = c2 = c3 = 0;
    while (n) 
    {
    /**********found**********/
      switch(___1___)
      {
    /**********found**********/
       case 1:    c1++;___2___;
    /**********found**********/
       case 2:    c2++;___3___;
       case 3:    c3++;
      }
      n /= 10;
    }
}
int main()
{  
    long  n=123114350L;
    fun(n);
    printf("\nThe result :\n");
    printf("n=%ld  c1=%d  c2=%d  c3=%d\n",n,c1,c2,c3);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。

例如,当s所指字符串为:ABCDE时,则t中的字符串应为:ABCDEEDCBA。

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

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

#include <stdio.h>
#include <string.h>
void fun (char *s,char *t)
{   
    int i,sl;
    sl=strlen(s);
    /************found************/
    for (i=0;i<=sl;i++)
        t[i]=s[i];
    for(i=0;i<sl;i++)
    t[sl+i]=s[sl-i-1];
    /************found************/
    t[sl]='\0';
}
int main()
{   
    char s[100],t[100];
    printf("\nPlease enter string s:");
    scanf("%s",s);
    fun(s,t);
    printf("The result is:%s\n",t);
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:求出二维数组tt每列中的最小元素,并依此放入pp所指的一维数组中。

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

#include <stdio.h>
#define M 3
#define N 4
void NONO(void);
void fun(int tt[M][N],int pp[N])
{

}
int main()
{
    int t[M][N]={{22,45,56,30},{19,33,45,38},{20,22,66,40}};
    int p[N],i,j,k;
    printf("The original data is:\n");
    for (i=0;i<M;i++)
    {
       for (j=0;j<N;j++)
          printf("%6d",t[i][j]);
       printf("\n");
    }
    fun(t,p);
    printf("\nThe result is:\n");
    for(k=0;k<N;k++)  printf("%4d",p[k]);
    printf("\n");
    NONO( );
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    int i, j, k, m, t[M][N], p[N] ;
    FILE *rf, *wf ;
    rf = fopen("in.dat", "r") ;
    wf = fopen("out.dat", "w") ;
    for(m = 0 ; m < 10 ; m++)
    {
       for( i=0; i<M; i++ )
       {
          for( j=0; j<N; j++ )
              fscanf (rf, "%6d", &t[i][j]);
       }
       fun ( t, p ) ;
       for ( k = 0; k < N; k++ )
          fprintf (wf, " %4d ", p[ k ] ) ;
       fprintf(wf, "\n") ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)n%102break3break
2for (i=0;i<=sl-1;i++) 或 for (i=0;i<sl;i++)
    t[2*sl]='\0';
3void fun(int tt[M][N],int pp[N])
     {
          int i,j,min;
          for (j=0;j<N;j++)
          {
               min=tt[0][j];
               for (i=1;i<M;i++)
                   if (min>tt[i][j]) min=tt[i][j];
               pp[j]=min;
          }
      }
第36套参考答案

第37套

1.程序填空题

给定程序中,函数fun的功能是:在形参s所指字符串中每个数字字符之后插入一个*号。

例如,形参s所指的字符串为:def35adh3kjsdf7,执行结果为:def3*5*adh3*kjsdf7*。

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

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

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

2.程序修改题

某数列中,第1项值为3,后一项都比前一项的值增5。给定程序中,函数fun的功能是:计算前n(4<n<50)项的累加和,每累加一次把被4除后余2的当前累加值放入数组中,符合此条件的累计值的个数作为函数返回值。

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

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

#include <stdio.h>
#define N  20
int fun(int n,int *a)
{  
    int  i,j,k,sum;
    /**************found**************/
    sum=j==0;
    for(k=3,i=0;i<n;i++,k+=5)
    {  
        sum=sum+k;
    /**************found**************/
        if(sum%4=2)
           a[j++]=sum;
    }
    return  j;
}
int main()
{  
    int  a[N],d,n,i;
    printf("\nEnter  n (4<n<=50):  ");
    scanf("%d",&n);
    d=fun(n,a);
    printf("\n\nThe result :\n");
    for(i=0; i<d; i++) printf("%6d",a[i]);
    printf("\n");
    return 0;
}


3.程序设计题

编写函数fun,它的功能是:计算

例如,在主函数中从键盘输入8后,输出为:s=0.662872。

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

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

}
int main()
{
    int  n;
    double  s;
    printf("\nInput n: ");
    scanf("%d",&n);
    s=fun(n);
    printf("\ns=%f\n",s);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 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, "%f\n", s) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)&&   (2'\0'3)s[j]
2. sum=j=0;
     if(sum%4==2)
3double fun(int  n)
      {
           double s=0.0;
           int i,t=1;
           for (i=1;i<=2*n;i++)
           {
               s+=1.0*t/i;
               t=-t;
           }
           return s;
      }
第37套参考答案

第38套

1.程序填空题

给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。

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

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

#include  <stdio.h>
#include  <stdlib.h>
#define  N  8
typedef  struct list
{  
    int  data;
    struct list  *next;
} SLIST;
void  fun(SLIST *h)
{  
    SLIST  *p, *q;
    p=h->next;
    if (p!=NULL)
    {  
        q=p->next;
        while(q!=NULL)
        {  
            if (p->data==q->data)
            {  
                p->next=q->next;
    /**********found**********/
                free(___1___);
    /**********found**********/
                q=p->___2___;
            }
            else
            { 
                p=q;
    /**********found**********/
                q=q->___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  a[N]={1,2,2,3,4,4,4,5};
    head=creatlist(a);
    printf("\nThe list before deleting :\n");  
    outlist(head);
    fun(head);
    printf("\nThe list after deleting :\n");  
    outlist(head);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:将m(1<=m<=10)个字符串连接起来,组成一个新串,放入pt所指字符串中。

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

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

#include <stdio.h>
#include <string.h>
void  fun(char str[][10], int m, char *pt)
{
    /************found************/
    Int  k, q, i ;
    for ( k = 0; k < m; k++ )
    {  
        q = strlen ( str [k] );
        for (i=0; i<q; i++)
    /************found************/
           pt[i] = str[k,i] ;
        pt += q ;
        pt[0] = 0 ;
    }
}
int main()
{    
    int  n, h ;
    char s[10][10], p[120] ;
    printf( "\nPlease enter  n:" ) ;
    scanf("%d", &n) ;
    printf("\nPlease enter %d string:\n",n);
    for (h=0; h<n; h++) scanf("%s", s[h]);
    fun(s, n, p) ;
    printf( "\nThe result  is :  %s\n", p) ;
    return 0;
}

3.程序设计题

程序定义了一个N*N的二维数组,并在主函数中自动赋值。编写函数fun,它的功能是:使数组左下角元素中的值全部置成0。

例如,N=3时,a数组中的值为

1 9 7

2 3 8

4 5 6

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

0 9 7

0 0 8

0 0 0

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

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

}
int main()
{
    int  a[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");
    }
    fun(a);
    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, 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]) ;
    fun(a) ;
    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.(1)q   (2)next   (3)next
2int  k, q, i ;
    pt[i] = str[k][i] ;
3void fun(int a[][N])
     {
          int i,j;
          for (i=0;i<N;i++)
              for (j=0;j<=i;j++)
                 a[i][j]=0;
      }
第38套参考答案

第39套

1.程序填空题

给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile2.txt中,用-1(独立一行)作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。

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

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

#include  <stdio.h>
#include  <string.h>
#include  <stdlib.h>
void WriteText(FILE *);
void ReadText(FILE *);
int main()
{  
    FILE  *fp;
    if((fp=fopen("myfile2.txt","w"))==NULL)
    {  printf(" open fail!!\n"); exit(0);  }
    WriteText(fp);
    fclose(fp);
    if((fp=fopen("myfile2.txt","r"))==NULL)
    {  printf(" open fail!!\n"); exit(0);  }
    ReadText(fp);
    fclose(fp);
}
/**********found**********/
void WriteText(FILE  ___1___)
{  
    char  str[81];
    printf("\nEnter string with -1 to end :\n");
    gets(str);
    while(strcmp(str,"-1")!=0) 
    {
    /**********found**********/
      fputs(___2___,fw);  fputs("\n",fw);
      gets(str);
    }
}
void ReadText(FILE  *fr)
{  
    char  str[81];
    printf("\nRead file and output to screen :\n");
    fgets(str,81,fr);
    while( !feof(fr) ) 
    {
    /**********found**********/
      printf("%s",___3___);
      fgets(str,81,fr);
    }
}

2.程序修改题

给定程序中,函数fun的功能是:从3个红球,5个白球,6个黑球中任取8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

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

#include <stdio.h>
int fun()
{  
  int  i,j,k,sum=0;
  printf("\nThe result  :\n\n");
  /**************found**************/
  for(i=0; i<=3; i++)
  {  
    for(j=1; j<=5; j++)
    {  
      k=8-i-j;
  /**************found**************/
      if(K>=0 && K<=6)
      {  
        sum=sum+1;
        printf("red:%4d white:%4d black:%4d\n",i,j,k);
      }
    }
  }
  return  sum;
}
int main()
{  
    int  sum;
    sum=fun();
    printf("sum =%4d\n\n",sum);
    return 0;
}

3.程序设计题

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

S=1+1/1!+1/2!+…+1/n!

例如,n=15时,函数返回值为:2.718282。

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

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

}
int main()
{
    int  n;
    double  s;
    printf("Input n:  ");
    scanf("%d",&n);
    s=fun(n);
    printf("s=%f\n",s);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 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, "%f\n", s) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)*fw   (2)str   (3)str
2for(i=1; i<=3; i++)
    if(k>=0 && k<=6)
3double fun(int  n)
     {
         double s=1.0,t=1.0;
          int i;
         for (i=1;i<=n;i++)
         {
             t=t/i;
             s+=t;
         }
         return s;
     }
第39套参考答案

第40套

1.程序填空题

给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。Ss所指字符串数组中共有M个字符串,且串长<N。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制3个字符之后插入一个空格。

例如,调用fun函数之前a字符串为:ABCDEFGHIJK,调用函数后,字符数组b中的内容为:ABC DEF GHI JK。

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

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

#include <stdio.h>
void  fun(char *p, char *b)
{  
    int   i, k=0;
    while(*p)
    {  
        i=1;
        while( i<=3 && *p ) 
        {
    /**********found**********/
           b[k]=p;
           k++; p++; i++;
        }
        if(*p)
        {
    /**********found**********/
           b[k++]=" ";
        }
    }
    b[k]='\0';
}
int main()
{  
    char  a[80],b[80];
    printf("Enter a string:      ");  
    gets(a);
    printf("The original string: ");  
    puts(a);
    fun(a,b);
    printf("\nThe string after insert space:   ");  
    puts(b); 
    printf("\n\n");
    return 0;
}

3.程序设计题

N名学生的成绩已在主函数中放入一个带头结点的链表中,h指向链表的头结点。编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是:85,,7,69,85,91,72,64,87,则平均分为:78.625。

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

#include <stdio.h>
#include <stdlib.h>
#define   N   8
void NONO(void);
struct  slist
{
    double   s;
    struct slist  *next;
};
typedef  struct slist  STREC;
double  fun(STREC *h)
{

}
STREC * creat(double *s)
{
    STREC  *h,*p,*q;
    int  i=0;
    h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
    while(i<N)
    {
        q=(STREC*)malloc(sizeof(STREC));
        q->s=s[i]; i++;  p->next=q; p=q;
    }
    p->next=0;
    return  h;
}
void outlist(STREC *h)
{
    STREC  *p;
    p=h->next; printf("head");
    do
    {
        printf("->%4.1f",p->s);
        p=p->next;
    } while(p!=0);
    printf("\n\n");
}
int main()
{
    double  s[N]={85,76,69,85,91,72,64,87},ave;
    STREC  *h;
    h=creat( s );
    outlist(h);
    ave=fun( h );
    printf("ave= %6.3f\n",ave);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *in, *out ;
    int i,j ; double  s[N],ave;
    STREC *h ;
    in = fopen("in.dat","r") ;
    out = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       for(j=0 ; j<N; j++) fscanf(in,"%lf,",&s[j]);
       h=creat( s );
       ave=fun( h );
       fprintf(out, "%6.3lf\n", ave) ;
    }
    fclose(in) ;
    fclose(out) ;
}
1.(1)[N]   (2)len   (3)*n=len
2. b[k]=*p;
     b[k++]=' ';
3double  fun(STREC *h)
     {
          int n=0;
          double sum=0.0;
          STREC *p;
          p=h->next;
          while (p!=NULL)
          {
              sum+=p->s;
              n++;
              p=p->next;
          }
          return sum/n;
      }
第40套参考答案

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