I am a teacher!

导航

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

第71套

1.程序填空题

给定程序中,函数fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。

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

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

#include  <stdio.h>
#include  <stdlib.h>
void fun(char *s, int a, double f)
{
    /**********found**********/
    __1__ fp;
    char  str[100], str1[100], str2[100];
    int  a1;     
    double  f1;
    fp = fopen("file1.txt", "w");
    fprintf(fp, "%s  %d  %f\n", s, a, f);
    /**********found**********/
    __2__ ;
    fp = fopen("file1.txt", "r");
    /**********found**********/
    fscanf(__3__,"%s%s%s", str, str1, str2);
    fclose(fp);
    a1 = atoi(str1);
    f1 = atof(str2);
    printf("\nThe result :\n%s %d %f\n",str,a1,f1);
}
int main()
{ 
    char  a[10]="Hello!";    
    int  b=12345;
    double  c= 98.76;
    fun(a,b,c);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其它字符不变。

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

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

#include <stdio.h>
void  fun (char  *s)
{
    /**********found***********/
    while(*s!='@')
    {  
        if(*s>='A' & *s<='Z' || *s>='a' && *s<='z')
        {  
            if(*s=='Z')  *s='A';
            else if(*s=='z')  *s='a';
            else              *s += 1;
        }
    /**********found***********/
        (*s)++;
    }
}
int main()
{  
    char  s[80];
    printf("\nEnter a string with length < 80. :\n"); 
    gets(s);
    printf("\n  The  string :  \n\n  ");  
    puts(s);
    fun ( s );
    printf ("\n\n  The  Cords :\n\n  ");  
    puts(s);
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。

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

#include <stdio.h>
#define  N  80
void NONO(void);
void fun(int *w,int p,int n)
{

}
int main()
{
    int  a[N]={1,2,3,4,5,6,7,8,9,
               10,11,12,13,14,15};
    int  i,p,n=15;
    printf("The original data:\n");
    for(i=0; i<n; i++) printf("%3d",a[i]);
    printf("\n\nEnter  p:  ");
    scanf("%d",&p);
    fun(a,p,n);
    printf("\nThe data after moving:\n");
    for(i=0; i<n; i++) printf("%3d",a[i]);
    printf("\n");
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf,*wf ;
    int a[N], i, j, p, n ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 5 ; i++)
    {
       fscanf(rf, "%d %d", &n, &p) ;
       for(j = 0 ; j < n ; j++)
           fscanf(rf, "%d", &a[j]) ;
       fun(a, p, n) ;
       for(j = 0 ; j < n ; j++)
           fprintf(wf, "%3d", a[j]) ;
       fprintf(wf, "\n") ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)FILE *    (2)fclose(fp)    (3)fp
2while(*s!='\0')
    s++;
3void fun(int *w,int p,int n)
    {
         int i,j,t;
         for (i=0;i<=p;i++)
         {
             t=w[0];
             for (j=0;j<n-1;j++)
                 w[j]=w[j+1];
             w[n-1]=t;
         }
    }
第71套参考答案

第72套

1.程序填空题

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含义形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长<M。

程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。

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

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

#include  <stdio.h>
#include  <string.h>
#define   N   5
#define   M   15
void fun(char  (*ss)[M], char  *substr)
{ 
    int  i,find=0;
    /**********found**********/
    for(i=0; i< __1__ ; i++)
    /**********found**********/
       if (strstr(ss[i], __2__)!=NULL)
       {  find=1;  puts(ss[i]);  printf("\n"); }
    /**********found**********/
    if (find==__3__) printf("\nDon't found!\n");
}
int main()
{ 
    char  x[N][M]={"BASIC","C langwage","Java",
           "QBASIC","Access"},str[M];
    int  i;
    printf("\nThe original string\n\n");
    for(i=0;i<N;i++)puts(x[i]);  printf("\n");
    printf("\nEnter a string for search :  ");  
    gets(str);
    fun(x,str);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:统计字符串中各元音字母(即A、E、I、O、U)的个数。注意:字母不分大、小写。

例如,若输入:This is a boot,则输出应为:1 0 2 2 0。

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

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

#include <stdio.h>
void fun(char  *s,int num[5])
{  
    int  k, i=5;
    for ( k = 0; k<i; k++ )
    /**********found**********/
       num[i]=0;
    for (; *s; s++)
    { 
        i = -1;
    /**********found**********/
        switch ( s )
        { 
         case 'a': case 'A': {i=0; break;}
         case 'e': case 'E': {i=1; break;}
         case 'i': case 'I': {i=2; break;}
         case 'o': case 'O': {i=3; break;}
         case 'u': case 'U': {i=4; break;}
        }
        if (i >= 0)
          num[i]++;
    }
}
int main()
{  
    char  s1[81];    
    int  num1[5], i;
    printf( "\nPlease enter a string: " );  
    gets( s1 );
    fun ( s1, num1 );
    for ( i=0; i < 5; i++  ) 
        printf ("%d ",num1[i]); 
    printf ("\n");
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:求出二维数组周边元素之和,作为函数值返回。

例如,二维数组中的值为

1 3 5 7 9

2 9 9 9 4

6 9 9 9 8

1 3 5 7 0

则函数值为61。

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

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

}
int main( )
{
    int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}};
    int  i, j, y;
    printf ( "The original data is : \n" );
    for ( i=0; i<M; i++ )
    {
        for ( j =0; j<N; j++ )
            printf( "%6d", aa[i][j] );
        printf ("\n");
    }
    y = fun ( aa );
    printf( "\nThe  sum:  %d\n" , y );
    printf("\n");
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    int i, j, y, k, aa[M][N] ;
    FILE *rf, *wf ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(k = 0 ; k < 10 ; k++)
    {
       for(i = 0 ; i < M ; i++)
          for(j = 0 ; j < N ; j++)
             fscanf(rf, "%d", &aa[i][j]) ;
       y = fun ( aa );
       fprintf(wf, "%d\n", y) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)N   (2)substr   (30
2. num[k]=0;
    switch ( *s )
3int  fun ( int a[M][N])
    {
         int s=0,i;
         for (i=0;i<N;i++)
             s+=a[0][i]+a[M-1][i];
         for (i=1;i<M-1;i++)
             s+=a[i][0]+a[i][N-1];
         return s;
    }
第72套参考答案

第73套

1.程序填空题

给定程序中,函数fun的功能是:将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在屏幕上。

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

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

#include  <stdio.h>
void fun(char *s, int a, double f)
{
    /**********found**********/
    __1__ fp;
    char  ch;
    fp = fopen("file1.txt", "w");
    fprintf(fp, "%s %d %f\n", s, a, f);
    fclose(fp);
    fp = fopen("file1.txt", "r");
    printf("\nThe result :\n\n");
    ch = fgetc(fp);
    /**********found**********/
    while (!feof(__2__)) 
    {
    /**********found**********/
       putchar(__3__); ch = fgetc(fp);  
    }
    putchar('\n');
    fclose(fp);
}
int main()
{ 
    char  a[10]="Hello!";    
    int  b=12345;
    double  c= 98.76;
    fun(a,b,c);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。

例如,若输入:edcba,则应输出:abcde。

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

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

#include <stdio.h>
#include <string.h> 
#define M 20
void fun(char t[])
{
   char c;
   int i,j;
   /************found************/
   for(i=strlen(t);i;i--)
     for(j=0;j<i;j++)
   /************found************/
       if(t[j]<t[j+1])
       {
         c=t[j];
         t[j]=t[j+1];
         t[j+1]=c;
       }
}
int main()
{
   char s[81];
   printf("\nPlease enter a character string:");
   gets(s);
   printf("\n\nBefore sorting:\n  \"%s\"",s);
   fun(s);
   printf("\nAfter sorting decendingly:\n  \"%s\"",s);
   return 0;
}

3.程序设计题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:把指定分数范围内的学生数据放在h所指的数组中,分数范围内的学生人数由函数值返回。

例如,输入的分数为60 69,则应当把分数在60到69的学生数据输出(包含60分和69分的学生数据)。

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

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

}
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];FILE *out;
    int i,n,low,heigh,t;
    printf("Enter 2 interger number low & heigh:");
    scanf("%d%d",&low,&heigh);
    if (heigh<low) {t=heigh;heigh=low;low=t;}
    n=fun(s,h,low,heigh);
    printf("The student's data between %d--%d:\n",low,heigh);
    for(i=0;i<n;i++)
       printf("%s  %4d\n",h[i].num,h[i].s);
    printf("\n");
    out=fopen("out.dat","w");
    n=fun(s,h,80,98);
    fprintf(out,"%d\n",n);
    for(i=0;i<n;i++)
       fprintf(out,"%s  %4d\n",h[i].num,h[i].s);
    fclose(out);
    return 0;
}
1.(1)FILE *   (2)fp   (3)ch
2for(i=strlen(t)-1;i;i--)
    if(t[j]>t[j+1])
3int fun(STREC *a,STREC *b,int l,int h)
    {
         int i,j=0;
         for (i=0;i<N;i++)
             if (a[i].s>=l && a[i].s<=h)
                 b[j++]=a[i];
         return j;
    }
第73套参考答案

第74套

1.程序填空题

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

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

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

#include  <stdio.h>
#include  <stdlib.h>
#define  N  6
typedef struct node 
{
    int  data;
    struct node  *next;
} NODE;
void fun(NODE  *h)
{ 
    NODE  *p, *q;    
    int  t;
    /**********found**********/
    p = __1__ ;
    while (p) 
    {
    /**********found**********/
      q = __2__ ;
      while (q) 
      {
    /**********found**********/
         if (p->data __3__ q->data)
         { t=p->data; p->data=q->data; q->data=t;}
         q = q->next;
      }
      p = p->next;
    }
}
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]= {0, 10, 4, 2, 8, 6 };
    head=creatlist(a);
    printf("\nThe original list:\n");
    outlist(head);
    fun(head);
    printf("\nThe list after sorting :\n");
    outlist(head);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:求三个数的最小公倍数。

例如,给变量x1、x2、x3分别输入15  11 2,则输出结果应当是:330。

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

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

#include <stdio.h>
int fun(int x,int y,int z)
{ 
    int j,t,n,m;
    /************found************/
    j=0;
    t=j%x;
    /************found************/
    m=t%y;
    n=j%z;
    while(t!=0||m!=0||n!=0)
    {
        j=j+1;
        t=j%x;
    /************found************/
        m=t%y;
        n=j%z;
    }
    return j;
}
int main()
{ 
    int x1,x2,x3,j;
    printf("Input x1 x2 x3: ");
    scanf("%d%d%d",&x1,&x2,&x3);
    printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);
    j=fun(x1,x2,x3);
    printf("The minimal common multiple is :%d\n",j);
    return 0;
}

3.程序设计题

假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。

例如,字符串中的内容为:*****A*BC*DEF*G***,删除后,字符串的内容应当为:A*BC*DEF*G。

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

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

}
int main()
{
    char  s[81],*t,*f;
    int m=0, tn=0, fn=0;
    printf("Enter a string:\n");
    gets(s);
    t=f=s;
    while(*t) { t++;m++;}
    t--;
    while(*t=='*') { t--;tn++;}
    while(*f=='*') { f++;fn++;}
    fun( s , m,fn,tn );
    printf("The string after deleted:\n");
    puts(s);
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *in, *out ;
    int i ;
    char s[81], *t, *f ;
    int m=0, tn=0, fn=0;
    in = fopen("in.dat","r") ;
    out = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(in, "%s", s) ;
       t=f=s;
       m=0; tn=0; fn=0;
       while(*t){t++;m++;}
       t--;
       while(*t=='*'){t--;tn++;}
       while(*f=='*'){f++;fn++;}
       fun(s, m, fn, tn);
       fprintf(out, "%s\n", s) ;
    }
    fclose(in) ;
    fclose(out) ;
}
1.(1)h->next   (2)p->next   (3)>
2. j=x;
    m=j%y;
    m=j%y;
3void  fun(char *a, int n,int h,int e)
    {
          int i,j;
          for (j=0,i=h;i<n-e;i++)
               a[j++]=a[i];
          a[j]='\0';
    }
第74套参考答案

第75套

1.程序填空题

函数fun的功能是:把形参a所指数组中的最小值放在a[0]中,接着求出a所指数组中的最大值放在a[1]中;再把形参a所指数组中的次小值放在a[2]中,次大值放在a[3]中;其余以此类推。

例如,若a所指数组中数据最初排列为:9、1、4、2、3、6、5、8、7,则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。

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

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

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

3.程序设计题

编写函数fun,它的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并为一个新的字符串。

例如,字符串数组中的M个字符串为:

AAAA

BBBBBBB

CC

则合并后的字符串中的内容应为:AAAABBBBBBBCC。

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

#include <stdio.h>
#define  M  3
#define  N  20
void NONO(void);
void fun(char a[M][N], char *b)
{

}
int main()
{
   char w[M][N]={"AAAA","BBBBBBB","CC"},a[100];
   int i ;
   printf("The string:\n");
   for(i=0; i<M; i++) puts(w[i]);
   printf("\n");
   fun(w,a);
   printf("The A string:\n");
   printf("%s",a);printf("\n\n");
   NONO();
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
   FILE *rf, *wf ;
   char w[M][N], a[100] ;
   int i ;
   rf = fopen("in.dat","r") ;
   wf = fopen("out.dat","w") ;
   for(i = 0 ; i < 10 ; i++)
   {
     fscanf(rf, "%s %s %s", w[0], w[1], w[2]) ;
     fun(w, a) ;
     fprintf(wf, "%s\n", a) ;
   }
   fclose(rf) ;
   fclose(wf) ;
}
1.(1)a[i]   (2)a[j]   (3)a[j]
2. r=t;
    if(*r=='\0')
3void fun(char a[M][N], char *b)
    {
        int i,j,k=0;
        for (i=0;i<M;i++)
            for (j=0;a[i][j]!='\0';j++)
                 b[k++]=a[i][j];
        b[k]='\0';
    }
第75套参考答案

posted on 2022-11-07 06:44  aTeacher  阅读(135)  评论(0编辑  收藏  举报