I am a teacher!

导航

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

第6套

1.程序填空题

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是:将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。

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

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

#include <stdio.h>
#include <string.h>
struct student {
    long  sno;
    char  name[10];
    float  score[3];
};
/**********found**********/
__1__ fun(struct  student  a)
{
    int  i;
    a.sno = 10002;
    /**********found**********/
    strcpy(__2__, "LiSi");
    /**********found**********/
    for (i=0; i<3; i++) __3__+= 1;
    return  a;
}
int main()
{
    struct student  s={10001,"ZhangSan", 95, 80, 88}, t;
    int  i;
    printf("\n\nThe original data :\n");
    printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
    for (i=0; i<3; i++)  printf("%6.2f ", s.score[i]);
    printf("\n");
    t = fun(s);
    printf("\nThe data after modified :\n");
    printf("\nNo: %ld Name: %s\nScores: ",t.sno, t.name);
    for (i=0; i<3; i++)  printf("%6.2f ", t.score[i]);
    printf("\n");
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据。

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

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

#include <stdio.h>
#include <stdlib.h>
#define   N  20
int  fun( int *b )
{
    /**********found**********/
    int  t[N] ,i, num
    for (i=0; i<N; i++)
      if(b[i]>=10)
    /**********found**********/
         t[++num]=b[i];
    /**********found**********/
    for(i=0; i<nun; i++)
      b[i]=t[i];
    return num;
}
int main()
{
    int  a[N],i,num;
    printf("a数组中的数据 :\n");
    for (i=0;i<N ;i++)
    { a[i]=rand()%21; printf("%4d",a[i]); }
    printf("\n");
    num=fun(a);
    for (i=0;i<num ;i++) printf("%4d",a[i]);
    printf("\n");
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:将两个两位正整数a、b合并形成一个整数存放在c中,合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,将b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,b=12时,调用该函数后,c=5142。

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

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

}
int main()
{
    int a,b; long c;
    printf("Input a b:");
    scanf("%d%d", &a, &b);
    fun(a, b, &c);
    printf("The result is: %d\n", c);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int i, a,b ;
    long c ;
    rf = fopen("in.dat", "r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%d,%d", &a, &b) ;
       fun(a, b, &c) ;
       fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1struct  student   (2)a.name   (3)a.score[i]
2int  t[N] ,i, num=0;
      t[num++]=b[i];
      for (i=0; i<num; i++)
3void fun(int a, int b, long *c)
     {
          *c=1000*(a%10)+100*(b/10)+10*(a/10)+b%10;
     }
第6套参考答案

第7套

1.程序填空题

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

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

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

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

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

#include  <stdio.h>
#include  <stdlib.h>
#define   N   10
double fun(double *x)
{
   int  i, j;    
   double  av, y[N];
    av=0;
    /**********found**********/
    for(i=0; i<N; i++)   av +=__1__;
    av/=N;
    for(i=j=0; i<N; i++)
        if( x[i]<av )
        {
            /**********found**********/
            y[j]=x[i]; x[i]=-1; __2__;
        }
    i=0;
    while(i<N)
    {  
        if (x[i]!=-1) y[j++]=x[i];
        /**********found**********/
        __3__;
    }
    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");
    for(i=0; i<N; i++)  printf("%5.0f ",x[i]);
    printf("\n");
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:计算并输出下列级数的前N项之和SN,直到SN+1大于q为止,q的值通过形参传入。

SN= 2/1+3/2+4/3+……+(N+1)/N

例如,若q的值为50.0,则函数值为49.394948。

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

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

#include <stdio.h>
double fun(double q)
{
    int n;
    double s,t;
    n=2;
    s=2.0;
    while (s<=q)
    {
       t=s;
    /************found************/
       s=s+(n+1)/n;
       n++;
    }
    printf("n=%d\n",n);
    /************found************/
    return s;
}
int main()
{
    printf("%f\n",fun(50));
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:将两个两位正整数a、b合并形成一个整数存放在c中,合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,将b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,b=12时,调用该函数后,c=4152。

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

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

}
int main()
{
    int a,b; long c;
    printf("Input a b:");
    scanf("%d%d", &a, &b);
    fun(a, b, &c);
    printf("The result is: %d\n", c);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int i, a,b ;
    long c ;
    rf = fopen("in.dat", "r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%d,%d", &a, &b) ;
       fun(a, b, &c) ;
       fprintf(wf, "a=%d,b=%d,c=%ld\n", a, b, c) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)x[i]   (2)j++   (3)i++
2. s=s+1.0*(n+1)/n;
      return t;
3void fun(int a, int b, long *c)
      {
           *c=1000*(a/10)+100*(b/10)+10*(a%10)+b%10;
       }
第7套参考答案

第8套

1.程序填空题

给定程序中,函数fun的功能是:有N*N矩阵,根据给定的m(m<=N)值,将每行元素中得值均右移m个位置,左边置为0。

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

1 2 3

4 5 6

7 8 9

程序执行结果为

0 0 1

0 0 4

0 0 7

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

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

 #include  <stdio.h>
#define    N    4
void fun(int  (*t)[N], int  m)
{  
    int  i, j;
    /**********found**********/
    for(i=0; i<N; ___1___ )
    {  
        for (j=N-1-m; j>=0; j--)
    /**********found**********/
           t[i][j+___2___ ]=t[i][j];
    /**********found**********/
        for (j=0; j<___3___; j++)
           t[i][j]=0;
    }
}
int main()
{  
    int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j, m;
    printf("\nThe original array:\n");
    for(i=0; i<N; i++)
    {  
        for(j=0; j<N; j++)
          printf("%2d  ",t[i][j]);
        printf("\n");
    }
    printf("Input m (m<=%d):  ",N);
    scanf("%d",&m);
    fun(t,m);
    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的功能是:在字符串的最前端加入n个*号,形成新串,并且覆盖原串。

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

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

#include <stdio.h>
#include <string.h>
void  fun(char  s[], int n)
{
   char  a[80] , *p;
   int  i;
   /**********found***********/
   s=p;
   for(i=0; i<n; i++)  a[i]='*';
   do
   {  
       a[i]=*p;
       i++;
   /**********found***********/
   } while(*p);
   a[i]=0;
   strcpy(s,a);
}
int main()
{  
   int  n;        
   char  s[80];
   printf("\nEnter a string  :  "); 
   gets(s);
   printf("\nThe string \"%s\"\n",s);
   printf("\nEnter n ( number of * )  :  ");  
   scanf("%d",&n);
   fun(s,n);
   printf("\nThe string after inster : \"%s\" \n" ,s);
   return 0;
}

3.程序设计题

编写函数fun,其功能是:统计各年龄段的人数。N个年龄通过随机函数获得,并放在主函数的age数组中;要求函数把0~9岁年龄段的人数放在d[0]中,把10~19岁年龄段的人数放在d[1]中,把20~29岁年龄段的人数放在d[2]中,……,把100岁(含100)以上的人数都放在d[10]中。结果在主函数中输出。

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

#include <stdio.h>
#define   N   50
#define   M   11
void  fun( int  *a,  int  *b)
{

}
double  rnd()
{
    static  t=29,c=217,m=1024,r=0;
    r=(r*t+c)%m;  return((double)r/m);
}
int main()
{
    int  age[N], i, d[M];
    for(i=0; i<N;i++)age[i]=(int)(115*rnd());
    printf("The original data :\n");
    for(i=0;i<N;i++) 
          printf((i+1)%10==0?"%4d\n":"%4d",age[i]);
    printf("\n\n");
    fun(age, d);
    for(i=0;i<10;i++)
          printf("%4d---%4d  :  %4d\n",i*10,i*10+9,d[i]);
    printf("  Over  100  :  %4d\n",d[10]);
    NONO(d);
    return 0;
}
void NONO(int d[M])
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *wf ; int i ;
    wf = fopen("bc.out", "w") ;
    for(i = 0 ; i < 10 ; i++) fprintf(wf, "%4d---%4d  :  %4d\n", i*10, i*10+9, d[i]) ;
    fprintf(wf, "  Over  100  :  %4d\n", d[10]) ;
    fclose(wf) ;
}
1.(1)i++   (2)m   (3)m
2. p=s;
      *p++
3void  fun( int  *a,  int  *b)
      {
             int i;
             for (i=0;i<M;i++)  b[i]=0;
             for (i=0;i<N;i++)
                   if (a[i]>=0 && a[i]<100) b[a[i]/10]++;
                   else if (a[i]>=100) b[10]++;
       }
第8套参考答案

第9套

1.程序填空题

给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根保存到名为myfile1.txt的文本文件中,然后再顺序读出显示在屏幕上。

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

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

#include    <stdio.h>
#include    <math.h>
int fun(char  *fname )
{  
    FILE  *fp;      
    int  i,n;      
    float  x;
    if((fp=fopen(fname,"w"))==NULL) return 0;
    for(i=1;i<=10;i++)
    /**********found**********/
      fprintf(___1___,"%d %f\n",i,sqrt((double)i));
    printf("\nSucceed!!\n");
    /**********found**********/
    ___2___;
    printf("\nThe data in file :\n");
    /**********found**********/
    if((fp=fopen(___3___,"r"))==NULL)
      return  0;
   fscanf(fp,"%d%f",&n,&x);
   while(!feof(fp))
   {  
       printf("%d %f\n",n,x);   
       fscanf(fp,"%d%f",&n,&x);  
    }
   fclose(fp);
   return  1;
}
int main()
{  
    char  fname[]="myfile1.txt";
    fun(fname);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:将字符串中得字符按逆序输出,但不改变字符串的内容。

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

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

#include <stdio.h>
/************found************/
fun (char a)
{  
    if (*a)
    {  
        fun(a+1) ;
/************found************/
        printf("%c" *a) ;
    }
}
int main()
{  
    char s[10]="abcd";
    printf("处理前字符串=%s\n处理后字符串=", s);
    fun(s); 
    printf("\n") ;
    return 0;
}

3.程序设计题

编写函数fun,其功能是:比较两个字符串的长度(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。

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

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

}
int main()
{
    char a[20],b[20],*p,*q;
    printf("Input 1th string:") ;
    gets(a);
    printf("Input 2th string:") ;
    gets(b);
    printf("%s\n",fun(a,b));
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf ;
    int i ;
    char a[20], b[20] ;
    fp = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(fp, "%s %s", a, b) ;
       fprintf(wf, "%s\n", fun(a, b)) ;
    }
    fclose(fp) ;
    fclose(wf) ;
}
1.(1)fp   (2)fclose(fp)   (3)fname
2void fun (char *a)
      printf("%c",*a);
3char  *fun(char *s,char *t)
     {
          int i,j;
          for (i=0;s[i]!='\0';i++) ;
          for (j=0;t[j]!='\0';j++) ;
              if (i>=j) return s;
              else  return t;
      }
第9套参考答案

第10套

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;
void fun(NODE  *h)
{ 
   NODE  *p, *q, *r;
   /**********found**********/
   p = h->__1__;
   /**********found**********/
   if (p==__2__)  return;
   q = p->next;
   p->next = NULL;
   while (q)
   {  
       r = q->next;    q->next = p;
   /**********found**********/
       p = q;     q = __3__;
   }
   h->next = p;
}
NODE *creatlist(int  a[])
{  
   NODE  *h,*p,*q;        
   int  i;
   h = (NODE *)malloc(sizeof(NODE));
   h->next = NULL;
   for(i=0; i<N; i++)
   {  
      q=(NODE *)malloc(sizeof(NODE));
      q->data=a[i];
      q->next = NULL;
      if (h->next == NULL)  h->next = p = q;
      else    {  p->next = q;  p = q;   }
   }
   return  h;
}
void outlist(NODE  *h)
{ 
   NODE  *p;
   p = h->next;
   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);
   fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
   return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:判断一个整数m是否是素数,若是返回1,否则返回0。

在主函数中,若fun返回1输出YES,若fun返回0输出NO!。

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

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

#include <stdio.h>
int  fun ( int m )
{  
    int k = 2;
    while (k<=m && (m%k))
    /************found************/
      k++
    /************found************/
    if (m = k )
       return 1;
    else   
       return  0;
}
int main( )
{  
    int  n;
    printf( "\nPlease enter n: " );   
    scanf(  "%d", &n );
    if (  fun (  n ) )  printf( "YES\n" );
    else printf( "NO!\n" );
    return 0;
}

3.程序设计题

编写函数fun,其功能是:把a所指的结构体数组中分数最低的学生数据放在h所指的数组中(注意:分数最低的学生可能不止1个),函数返回分数最低的学生的人数。

注意:请勿改动主函数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 lowest 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)next   (2)NULL   (3)r
2. k++;
      if (m <= k )  或 if (m == k )
3int fun(STREC *a,STREC *b)
     {
          int i,n=0,min;
          min=a[0].s;
          for (i=1;i<N;i++)
              if (min>a[i].s) min=a[i].s;
          for (i=0;i<N;i++)
              if (min==a[i].s) b[n++]=a[i];
          return n;
      }
第10套参考答案

posted on 2022-11-04 09:45  aTeacher  阅读(259)  评论(0编辑  收藏  举报