I am a teacher!

导航

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

第76套

1.程序填空题

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

例如,若x=5时,100~999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、230、302、311、320、401、410、500。共有15个。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:从整数10至55之间,选出能被3整除且有一个位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1存放个位数,a2存放十位数。

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

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

#include <stdio.h>
int fun (int *b)
{   
    int k,a1,a2,i=0;
    for (k=10;k<=55;k++)
    {
    /************found************/
        a2=k%10;
        a1=k-a2*10;
        if((k%3==0 && a2==5)||(k%3==0 && a1==5))
        {  b[i]=k; i++; }
    }
    /************found************/
    return k;
}
int main()
{   
    int a[100],k,m;
    m=fun(a);
    printf("The result is:\n");
    for (k=0;k<m;k++) printf("%4d",a[k]); 
    printf("\n");
    return 0;
}

3.程序设计题

假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。

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

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

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

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

第77套

1.程序填空题

给定程序中,函数fun的功能是:计算

  

直到||<=10-3,并把计算结果作为函数值返回。

例如,若形参e的值为1e-3,函数的返回值为2.985678。

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

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

#include  <stdio.h>
double fun(double  e)
{ 
    int  i;    
    double  s, x;
    /**********found**********/
    s=0;  i=__1__;
    x=1.0;
    while(x>e)
    {
    /**********found**********/
        __2__;
    /**********found**********/
        x=(2.0*i-1)/((__3__)*(2.0*i));
        s=s+x;
    }
    return  s;
}
int main()
{ 
    double  e=1e-3;
    printf("\nThe result is: %f\n",fun(e));
}

2.程序修改题

给定程序中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。

例如,当s所指字符串为“ABCD”时,则t所指字符串中的内容应为“ABCDDCBA”。

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

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

#include <stdio.h>
#include <string.h>
/************found************/
void fun (char  s, char  t)
{
   int   i, d;
   d = strlen(s);
   for (i = 0; i<d; i++)  t[i] = s[i];
   for (i = 0; i<d; i++)  t[d+i] = s[d-1-i];
   /************found************/
   t[2*d-1] = '\0';
}
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);
   return 0;
}

3.程序设计题

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

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

注意:请勿改动主函数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.(102)i++   (32.0*i
2void fun (char  *s, char  *t)
    t[2*d] = '\0';
3void fun(char *s, char t[])
    {
         int i,j=0;
         for (i=0;s[i]!='\0';i++)
             if (i%2==1 && s[i]%2==1)
                  t[j++]=s[i];
         t[j]='\0';
    }
第77套参考答案

第78套

1.程序填空题

给定程序中,函数fun的功能是:逆置数组元素中的值。

例如,若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:计算num的各位上的数字之积。

例如,若输入252,则输出应为20;若输入202,则输出应为0。

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

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

#include <stdio.h>
long fun(long num)
{ 
   /************found************/ 
   long k;
   do 
   {  
       k*=num%10;
   /************found************/
       num\=10;
   } while(num);
   return (k);
}
int main()
{  
   long n;
   printf("Please enter a number:");
   scanf("%ld",&n);
   printf("\n%ld\n",fun(n));
   return 0;
}

3.程序设计题

编写函数fun,它的功能是:找出一维数组元素中最大的值和它所在的下标,最大的值和它所在的下标分别通过形参max和index传回。

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

#include <stdio.h>
#include <stdlib.h>
void NONO(void);
void fun(int a[], int n, int *max, int *d)
{

}
int main()
{
    int i,  x[20],  max , index, n = 10;
    for (i=0;i < n;i++)
    {
        x[i] = rand()%50;
        printf("%4d", x[i]) ;
    }
    printf("\n");
    fun( x, n , &max, &index);
    printf("Max =%5d ,  Index =%4d\n",max, index );
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf ;
    int i, x[20], max,index,n=10,j;
    fp = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       for(j = 0 ; j < n ; j++)
          fscanf(fp, "%d,", &x[j]) ;
       fun( x, n , &max, &index);
       fprintf(wf, "Max=%d,Index=%d\n",max,index);
    }
    fclose(fp) ;
    fclose(wf) ;
}
1.(1)n/22)i   (3)a[n-1-i]
2long k=1;
    num/=10;
3void fun(int a[], int n, int *max, int *d)
    {
         int i;
         *d=0;
         *max=a[0];
         for (i=1;i<n;i++)
             if (*max<a[i])
             {
                  *max=a[i];  *d=i;
             }
    }
第78套参考答案

第79套

1.程序填空题

给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。

例如,有10个正数:40 30 32 40 6 17 45 15 48 26,平均值为:35.500000,主函数中输出m=30.0。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:求s=aa..aa-…aaa-aa-a(此处aa..aa表示n个a,a和n的值在1至9之间)。

例如,a=3,n=6,则以上表达式为:s=333333-33333-3333-333-33-3,其值是:296298。

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

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

#include <stdio.h>
long fun (int a, int n)
{  
    int  j ;
    /**************found**************/
    long  s = 0,  t = 1 ;
    for ( j = 0 ; j < n ; j++)
      t = t * 10 + a ;
    s = t ;
    for ( j = 1 ; j < n ; j++) 
    {
    /**************found**************/
       t = t % 10 ;
       s = s - t ;
    }
    return(s) ;
}
int main( )
{  
    int  a, n ;
    printf( "\nPlease enter a and n:") ;
    scanf(  "%d%d", &a, &n ) ;
    printf( "The value of function is: %ld\n", fun(a, n));
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:统计tt字符串中’a’到’z’26个小写字母各自出现的次数,并依此放在pp所指数组中。

例如,输入字符串:abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0。

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

#include <stdio.h>
#include <string.h>
void NONO(void);
void fun(char *tt, int pp[])
{

}
int main()
{
    char aa[1000] ;
    int  bb[26], k;
    printf( "\nPlease enter  a char string:" );
    scanf("%s", aa) ;
    fun(aa, bb ) ;
    for ( k = 0 ; k < 26 ; k++ )
        printf ("%d ", bb[k]) ;
    printf( "\n" ) ;
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
    char aa[1000] ;
    int bb[26], k, i ;
    FILE *rf, *wf ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%s", aa) ;
       fun(aa, bb) ;
       for ( k = 0 ; k < 26 ; k++ )
          fprintf (wf, "%d ", bb[k]) ;
       fprintf(wf, "\n" ) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(1)*av   (2)i   (3)x[j]
2long  s = 0,  t = 0 ;
    t = t / 10 ;
3void fun(char *tt, int pp[])
    {
         int i;
         for (i=0;i<26;i++) pp[i]=0;
         for (i=0;tt[i]!='\0';i++)
               if (tt[i]>='a' && tt[i]<='z')
                   pp[tt[i]-'a']++;
    }
第79套参考答案

第80套

1.程序填空题

给定程序中,通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是:从指定文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖该学生原来的数据,其他学生的数据不变;若找不到,则什么都不做。

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

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

#include  <stdio.h>
#define    N  5
typedef struct  student 
{
    long  sno;
    char  name[10];
    float  score[3];
} STU;
void fun(char *filename, long  sno)
{ 
    FILE  *fp;
    STU  n;      
    int  i;
    fp = fopen(filename,"rb+");
    /**********found**********/
    while (!__1__)
    {  
        fread(&n, sizeof(STU), 1, fp);
    /**********found**********/
        if (n.sno__2__)  break;
    }
    if (!feof(fp))
    {  
        for (i=0; i<3; i++)  n.score[i] += 3;
    /**********found**********/
        fseek(fp, -1L*__3__, SEEK_CUR);
        fwrite(&n, 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}}, ss[N];
    int  i,j;      
    FILE  *fp;
    fp = fopen("student.dat", "wb");
    fwrite(t, sizeof(STU), N, fp);
    fclose(fp);
    printf("\nThe original data :\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");
    }
    fun("student.dat", 10003);
    fp = fopen("student.dat", "rb");
    fread(ss, sizeof(STU), N, fp);
    fclose(fp);
    printf("\nThe data after modifing :\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");
    }
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:求S的值。

例如,当k=10时,函数值应为:1.533852。

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

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

#include <stdio.h>
/************found************/
void fun(int k)
{  
    int n; 
    float s,  w, p, q;
    n = 1;
    s = 1.0;
    while ( n <= k )
    { 
        w = 2.0 * n;
        p = w - 1.0;
        q = w + 1.0;
        s = s * w *w/p/q;
        n++;
    }
    /************found************/
    return  s
}
int main()
{
   printf("%f\n", fun (10));
   return 0;
}

3.程序设计题

编写函数fun,它的功能是:计算下列级数和

 

例如,当n=10时,函数值为 0.909091。

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

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

}
int main()
{
   printf("%f\n", fun(10));
   NONO();
   return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
   FILE *fp, *wf ;
   int i, n ;
   double 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)feof(fp)   (2)==sno   (3sizeof(STU)
2float fun(int k)
    return  s;
3double  fun(int  n)
    {
         double s=0;
         int i;
         for (i=1;i<=n;i++)
             s+=1.0/(i*(i+1));
        return s;
    }
第80套参考答案

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