I am a teacher!

导航

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

第61套

1.程序填空题

给定程序中,函数fun的功能是:找出100~x(x<=999)之间所有整数中各位上数字之和为15的整数,然后输出;符合条件的整数个数作为函数值返回。

例如,若x=500时,100~500之间各位上数字之和为15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有26个。

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

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

#include <stdio.h>
fun(int  x)
{ 
    int  n, s1, s2, s3, t;
    /**********found**********/
    n=__1__;
    t=100;
    /**********found**********/
    while (t<=__2__)
    { 
        s1=t%10;  s2=(t/10)%10;  s3=t/100;
        if(s1+s2+s3==15)
        {  
            printf("%d ",t);
            n++;
        }
    /**********found**********/
        __3__;
    }
    return n;
}
int main()
{ 
    int  x=-1;
    while(x>999||x<0)
    {  
       printf("Please input(0<x<=999): ");  
       scanf("%d",&x);  
    }
    printf("\nThe result is: %d\n",fun(x));
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。

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

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

#include <stdio.h>
#include <string.h>
#define  N   5
#define  M   81
/**********found**********/
fun(char  (*sq)[M])
{  
    int  i;     
    char  *sp;
    sp=sq[0];
    for(i=0;i<N;i++)
      if(strlen( sp)<strlen(sq[i]))
         sp=sq[i] ;
    /**********found**********/
    return  sq;
}
int main()
{  
    char   str[N][M], *longest;    
    int   i;
    printf("Enter %d lines :\n",N);
    for(i=0; i<N; i++) gets(str[i]);
    printf("\nThe N string  :\n",N);
    for(i=0; i<N; i++) puts(str[i]);
    longest=fun(str);
    printf("\nThe longest string :\n"); 
    puts(longest);
    return 0;
}

3.程序设计题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

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

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

}
int main()
{
    STREC  s[N]={{"GA005",85},{"GA003",76},
        {"GA002",69},{"GA004",85},{"GA001",91},
        {"GA007",72},{"GA008",64},{"GA006",87},
        {"GA015",85},{"GA013",91},{"GA012",64},
        {"GA014",91},{"GA011",66},{"GA017",64},
        {"GA018",64},{"GA016",72}};
    int  i;
    FILE *out ;
    fun(s);
    printf("The data after sorted :\n");
    for(i=0;i<N; i++)
    {
        if( (i)%4==0 )printf("\n");
        printf("%s  %4d  ",s[i].num,s[i].s);
    }
    printf("\n");
    out = fopen("out.dat","w") ;
    for(i=0;i<N; i++)
    {
        if( (i)%4==0 && i) fprintf(out, "\n");
        fprintf(out, "%4d  ",s[i].s);
    }
    fprintf(out,"\n");
    fclose(out) ;
    return 0;
}
1.(102)x   (3)t++
2char * fun(char  (*sq)[M])
    return  sp;
3void fun(STREC  a[])
    {
        int i,j,k;
        STREC t;
        for (i=0;i<N-1;i++)
        {
            k=i;
            for (j=i+1;j<N;j++)
                if (a[k].s<a[j].s) k=j;
            t=a[i]; a[i]=a[k]; a[k]=t;
        }
    }
第61套参考答案

第62套

1.程序填空题

给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩下的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。

例如,输入一个数:27638496,新的数为:739。

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

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

#include  <stdio.h>
void fun(unsigned long  *n)
{ 
    unsigned long  x=0, i;    
    int  t;
    i=1;
    while(*n)
    /**********found**********/
    { 
        t=*n % __1__;
    /**********found**********/
        if(t%2!= __2__)
        { x=x+t*i;  i=i*10;  }
        *n =*n /10;
    }
    /**********found**********/
    *n=__3__;
}
int main()
{ 
    unsigned long  n=-1;
    while(n>99999999||n<0)
    { 
        printf("Please input(0<n<100000000): "); 
        scanf("%ld",&n); 
    }
    fun(&n);
    printf("\nThe result is: %ld\n",n);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。

例如,当字符串中的内容为:abcdabfabcdx,t中的内容为ab时,输出的结果应为:abcdx。

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

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

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

3.程序设计题

编写函数fun,它的功能是:将s所指字符串中除了下标为偶数,同时ASCII码值也为偶数的字符外,其余的字符全部删除;串中剩余字符所形成的一个新串放在t所指的数组中。

例如,若s所指字符串中的内容为:ABCDEFG123456,则t所指数组中的内容应为:246。

注意:请勿改动主函数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.(110203)x
2. a = NULL;
    if ( *r == *p )
3void fun(char *s, char t[])
    {
        int i,k;
        for (i=k=0; s[i]!='\0';i++)
            if (i%2==0 && s[i]%2==0)
                t[k++]=s[i];
        t[k]='\0';
    }
第62套参考答案

第63套

1.程序填空题

给定程序中,通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是:重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。

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

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

#include  <stdio.h>
#define  N  5
typedef struct  student 
{
    long  sno;
    char  name[10];
    float  score[3];
} STU;
void fun(char  *filename, STU  n)
{ 
    FILE  *fp;
    /**********found**********/
    fp = fopen(__1__, "rb+");
    /**********found**********/
    fseek(fp, -1L*sizeof(STU), __2__);
    /**********found**********/
    fwrite(__3__, sizeof(STU), 1, fp);
    fclose(fp);
}
int main()
{ 
    STU  t[N]={ {10001,"MaChao", 91, 92, 77}, 
              {10002,"CaoKai", 75, 60, 88},
              {10003,"LiSi", 85, 70, 78},    
              {10004,"FangFang", 90, 82, 87},
              {10005,"ZhangSan", 95, 80, 88}};
    STU  n={10006,"ZhaoSi", 55, 70, 68}, ss[N];
    int  i,j;      
    FILE  *fp;
    fp = fopen("student.dat", "wb");
    fwrite(t, sizeof(STU), N, fp);
    fclose(fp);
    fp = fopen("student.dat", "rb");
    fread(ss, sizeof(STU), N, fp);
    fclose(fp);
    printf("\nThe original data :\n\n");
    for (j=0; j<N; j++)
    {  
      printf("\nNo:%ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
      for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
      printf("\n");
    }
    fun("student.dat", n);
    printf("\nThe data after modifing :\n\n");
    fp = fopen("student.dat", "rb");
    fread(ss, sizeof(STU), N, fp);
    fclose(fp);
    for (j=0; j<N; j++)
    {  
      printf("\nNo: %ld Name: %-8s Scores: ",ss[j].sno, ss[j].name);
      for (i=0; i<3; i++)  printf("%6.2f ", ss[j].score[i]);
      printf("\n");
    }
    return 0;
}

2.程序修改题

给定程序中,函数Craetlink的功能是:创建带头结点的单向链表,并为各结点数据域赋0~m-1的值。

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

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

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{  
    int  data;
    struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{  
    NODE  *h=NULL, *p, *s;
    int  i;
    /**********found***********/
    p=(NODE )malloc(sizeof(NODE));
    h=p;
    p->next=NULL;
    for(i=1; i<=n; i++)
    {  
        s=(NODE *)malloc(sizeof(NODE));
        s->data=rand()%m;      
        s->next=p->next;
        p->next=s; 
        p=p->next;
    }
    /**********found***********/
    return  p;
}
void outlink(NODE *h)
{  
    NODE  *p;
    p=h->next;
    printf("\n\nTHE  LIST :\n\n  HEAD ");
    while(p)
    {  
        printf("->%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
int main()
{  
    NODE  *head;
    head=Creatlink(8,22);
    outlink(head);
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

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

#include <stdio.h>
#include <string.h>
#define  N  80
void NONO(void);
int  fun( char  *s)
{
    int  flag=0,n=0;
    for ( ; *s; s++)
    {
      if (flag)
      {
          if (*s==' ') flag=0;
      }
      else  if (*s!=' ')
      {
          flag = 1;
          n++;
      }
    }
    return n;
}
int main()
{
    char  line[N];
    int  num=0;
    printf("Enter a string :\n");
    gets(line);
    num=fun( line );
    printf("The number of word is : %d\n",num);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf, *wf ; int i, num ; char line[N], *p ;
    rf = fopen("in.dat", "r") ;
    wf = fopen("out.dat", "w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fgets(line, N, rf) ;
       p = strchr(line, '\n') ;
       if (p != NULL) *p = 0 ;
       num = fun(line) ;
       fprintf(wf, "%d\n", num) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)filename    (2)SEEK_END   (3)&n
2. p=(NODE *)malloc(sizeof(NODE));
    return  h;
3int  fun( char  *s)
    {
        int  flag=0,n=0;
        for ( ; *s; s++)
        {
           if (flag)
           {
               if (*s==' ') flag=0;
           }
           else  if (*s!=' ')
           {
                flag = 1;
                n++;
           }
        }
        return n;
    }
第63套参考答案

第64套

1.程序填空题

给定程序中,函数fun的功能是:将形参所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。

例如,形参s所指的字符串为:Abc@1x56,程序执行后t所指字符数组中的字符串应为:A@156。

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

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

#include <stdio.h>
int fun(char  *s, char  *t)
{ 
    int  n=0;
    while(*s)
    { 
        if(*s < 97) 
        {
    /**********found**********/
            *(t+n)= __1__ ;  n++;  
        }
    /**********found**********/
        __2__ ;
    }
    *(t+n)=0;
    /**********found**********/
    return  __3__ ;
}
int main()
{ 
    char  s[81],t[81];    
    int  n;
    printf("\nEnter a string:\n");  gets(s);
    n=fun(s,t);
    printf("\nThere are %d letter which ASCII code is less than 97: %s\n",n,t);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。

例如,n=8时,输入:193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763,所得平均值为:195.838745,在平均值以上的实数个数应为:5。

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

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

#include <stdio.h>
int fun(float x[], int n)
{
    /************found************/
    int j, c=0, float xa=0.0;
    for (j=0; j<n; j++ )
       xa += x[j]/n;
    printf("ave =%f\n",xa);
    for (j=0; j<n; j++ )
    /************found************/
       if (x[j] => xa)
          c++;
    return c;
}
int main()
{  
    float x[100]={193.199,195.673,195.757,196.051,
               196.092, 196.596, 196.579, 196.763};
    printf("%d\n", fun (x, 8));
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。

P=m!/(n!(m-n)!)

例如:m=12,n=8时,运行结果为495.000000。

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

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

}
int main()
{
   printf("P=%f\n", fun (12,8));
   NONO();
   return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
   FILE *fp, *wf ;
   int i, m, n ;
   float s;
   fp = fopen("in.dat","r") ;
   wf = fopen("out.dat","w") ;
   for(i = 0 ; i < 10 ; i++)
   {
      fscanf(fp, "%d,%d", &m, &n) ;
      s = fun(m, n) ;
      fprintf(wf, "%f\n", s) ;
   }
   fclose(fp) ;
   fclose(wf) ;
}
1.(1)*s   (2)s++    (3)n
2int j, c=0; float xa=0.0;
    if (x[j] >= xa)
3float  fun(int m, int n)
    {
        float a1=1,a2=1,a3=1;
        int i;
        for (i=1;i<=m;i++) a1*=i;
        for (i=1;i<=n;i++) a2*=i;
        for (i=1;i<=m-n;i++) a3*=i;
        return a1/a2/a3;
    }
第64套参考答案

第65套

1.程序填空题

给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。

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

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

#include <stdio.h>
#include <stdlib.h>
#define  N  20
void  fun( int  *a)
{ 
    int  i, x, n=0;
    x=rand()%20;
    /**********found**********/
    while (n<__1__)
    {  
        for(i=0; i<n; i++ )
    /**********found**********/
           if( x==a[i] ) __2__;
    /**********found**********/
        if( i==__3__) { a[n]=x; n++; }
        x=rand()%20;
    }
}
int main()
{ 
    int  x[N]={0} ,i;
    fun( x );
    printf("The result :  \n");
    for( i=0; i<N; i++ )
    { 
        printf("%4d",x[i]);
        if((i+1)%5==0)printf("\n");
    }
    printf("\n");
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001

例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000

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

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

#include <stdio.h>
#include <math.h>
double funx(double  x)
{   return(2*x*x*x-4*x*x+3*x-6);  }
double fun( double  m, double  n)
{
    /************found************/
    int  r;
    r=(m+n)/2;
    /************found************/
    while(fabs(n-m)<0.001)
    {   
        if(funx(r)*funx(n)<0)  m=r;
        else  n=r;
        r=(m+n)/2;
    }
    return  r;
}
int main( )
{  
    double  m,n, root;
    printf("Enter  m  n :  \n"); 
    scanf("%lf%lf",&m,&n);
    root=fun( m,n );
    printf("root = %6.3f\n",root);
    return 0;
}

3.程序设计题

假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。

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

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

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

}
int main()
{
    char s[81],*t,*f;
    printf("Enter a string:\n");
    gets(s);
    t=f=s;
    while(*t) t++;
    t--;
    while (*t=='*') t--;
    while (*f=='*') f++;
    fun(s,f,t);
    printf("The string after deleted:\n");puts(s);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
    输出数据,关闭文件。 */
    char s[81],*t,*f;
    int i;
    FILE  *rf,*wf;
    rf = fopen("in.dat","r");
    wf = fopen("out.dat", "w") ;
    for (i=0;i<4;i++)
    {
        fscanf(rf,"%s",s);
        t=f=s;
        while(*t) t++;
        t--;
        while (*t=='*') t--;
        while (*f=='*') f++;
        fun(s,f,t);
        fprintf(wf,"%s\n",s);
    }
    fclose(rf);
    fclose(wf) ;
 }
1.(1)N  或 202break3)n
2double  r;
    while(fabs(n-m)>=0.001)
3void fun(char *a,char *h,char *p)
    {
         char *t1,*t2;
         for (t1=t2=h;*t1!='\0';t1++)
             if ((t1<=p && *t1!='*') || t1>p)
             {
                 *t2=*t1;
                  t2++;
             }
        *t2='\0';
    }
第65套参考答案

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