I am a teacher!

导航

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

第91套

1.程序填空题

给定程序中,函数fun的功能是:将形参n中各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。

例如,若n=27638496,得到的新数为:64862。

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:用选择法对数组中的N个元素按从小到大的顺序进行排序。

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

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

#include <stdio.h>
#define  N  20
void  fun(int a[], int n)
{ 
    int i, j, t, p;
    for (j = 0 ;j < n-1 ;j++) 
    {
    /************found************/
       p = j
       for (i = j;i < n; i++)
          if(a[i] < a[p])
    /************found************/
             p = j;
       t = a[p] ; a[p] = a[j] ; a[j] = t;
    }
}
int main()
{
    int a[N]={9,6,8,3,-1},i, m = 5;
    printf("排序前的数据:") ;
    for(i = 0;i < m;i++) printf("%d ",a[i]); 
    printf("\n");
    fun(a,m);
    printf("排序后的数据:") ;
    for(i = 0;i < m;i++) printf("%d ",a[i]); 
    printf("\n");
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。

例如,若m=50,则程序输出:7  11 14 21 22 28 33  42 44 49。

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

#include <stdio.h>
#define M 100
void  fun (int m, int *a , int *n)
{

}
int main()
{
    int aa[M], n, k;
    fun ( 50, aa, &n );
    for ( k = 0; k < n; k++ )
      if((k+1)%20==0) printf("\n");
      else printf( "%4d", aa[k] );
    printf("\n") ;
    NONO( );
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf ;
    int i, n, j, k, aa[M], sum ;
    fp = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(fp, "%d,", &j) ;
       fun(j, aa, &n) ;
       sum = 0 ;
       for(k = 0 ; k < n ; k++) sum+=aa[k] ;
       fprintf(wf, "%d\n", sum) ;
    }
    fclose(fp) ;
    fclose(wf) ;
}
1.(102)x*103)n/10
2. p = j;
    p = i;
3void  fun (int m, int *a , int *n)
    {
        int i,k=0;
        for (i=1;i<=m;i++)
            if (i%7==0 || i%11==0)
               a[k++]=i;
        *n=k;
    }
第91套参考答案

第92套

1.程序填空题

给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。

例如,s所指字符串为:asd123fgh5###43df

处理后新字符串为:123543asdfgh###df。

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

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

#include  <stdio.h>
#include  <string.h>
#include  <stdlib.h>
#include  <ctype.h>
char *fun(char  *s)
{ 
    int  i, j, k, n;    
    char  *p, *t;
    n=strlen(s)+1;
    t=(char*)malloc(n*sizeof(char));
    p=(char*)malloc(n*sizeof(char));
    j=0; k=0;
    for(i=0; i<n; i++)
    {  
        if(isdigit(s[i])) 
        {
    /**********found**********/
            p[__1__]=s[i]; j++;
        }
        else
        {  t[k]=s[i]; k++; }
    }
    /**********found**********/
    for(i=0; i<__2__; i++) p[j+i]= t[i];
    p[j+k]=0;
    /**********found**********/
    return __3__;
}
int main()
{ 
    char  s[80];
    printf("Please input: ");  
    scanf("%s",s);
    printf("\nThe result is: %s\n",fun(s));
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。

例如,若输入“Ab,cD”,则输出“AB,CD”。

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

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

#include <stdio.h>
#include <string.h>
char* fun( char tt[] )
{
   int i;
   for( i = 0; tt[i]; i++ )
   /**********found***********/
     if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) )
   /**********found***********/
        tt[i] += 32;
   return( tt );
}
int main( )
{
   char tt[81];
   printf( "\nPlease enter a string: " );
   gets( tt );
   printf( "\nThe result string is:\n%s", fun( tt ) );
   return 0;
}

3.程序设计题

编写函数fun,它的功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,若输入:17,则应输出:9和4 6 8 9 10 12 14 15 16。

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

#include <stdio.h>
void NONO(void);
void fun( int m, int *k, int xx[] )
{

}
int main()
{
   int m, n, zz[100];
   printf("\nPlease enter an integer number between 10 and 100:");
   scanf("%d", &n );
   fun(n, &m, zz );
   printf( "\n\nThere are %d non-prime numbers less than %d:", m, n );
   for( n = 0; n < m; n++ )
      printf( "\n  %4d", zz[n] );
   NONO();
   return 0;
}
void NONO(void)
{
/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,
   输出数据,关闭文件。 */
   int m, n, zz[100];
   FILE *rf, *wf ;
   rf = fopen("in.dat","r") ;
   wf = fopen("out.dat","w") ;
   fscanf( rf, "%d", &n );
   fun( n, &m, zz );
   fprintf(wf, "%d\n%d\n", m, n );
   for( n = 0; n < m; n++ )
      fprintf(wf, "%d\n", zz[n] );
   fclose(rf) ;
   fclose(wf) ;
}
1.(1)j   (2)k   (3)p
2if(('a'<=tt[i])&&(tt[i]<= 'z'))
    tt[i] -= 32;
3void fun( int m, int *k, int xx[] )
    {
         int i,j=0,t;
         for (i=4;i<m;i++)
         {
             for (t=2;t<=i/2;t++)
                 if (i%t==0) break;
             if (t<=i/2) xx[j++]=i;
         }
         *k=j;
    }
第92套参考答案

第93套

1.程序填空题

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

  

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

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

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

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

2.程序修改题

给定程序中,函数fun的功能是:求出以下分数序列的前n项之和。

2/1, 3/2, 5/3, 8/5, 13/8,  21/13, ……

例如,若n=5,则应输出:8.391667。

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

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

#include <stdio.h>
/************found************/
fun (int  n)
{   
    int  a, b, c, k;  
    double  s;
    s = 0.0;  a = 2;  b = 1;
    for ( k = 1; k <= n; k++ ) 
    {
    /************found************/
       s = s + (Double)a / b;
       c = a;  a = a + b; b = c;
    }
    return s;
}
int main( )
{   
    int   n = 5;
    printf( "\nThe value of function is: %f\n", fun(n));
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:求出一个2*M二维数组中最大元素的值,并将此值返回调用函数。

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

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

}
int main()
{
    int arr[2][M]={5,8,3,45,76,-4,12,82} ;
    printf("max =%d\n", fun(arr)) ;
    NONO( ) ;
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *wf ;
    int arr[][M]={5,8,3,90,76,-4,12,82} ;
    wf = fopen("out.dat","w") ;
    fprintf(wf, "max=%d\n", fun(arr)) ;
    fclose(wf) ;
}
1.(13.02)>    (3)(t+1)
2double fun (int  n)
    s = s + (double)a / b;
3int fun (int a[][M])
    {
        int i,j,max;
        max=a[0][0];
        for (i=0;i<2;i++)
           for (j=0;j<M;j++)
               if (max<a[i][j]) max=a[i][j];
        return max;
    }
第93套参考答案

第94套

1.程序填空题

给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找与形参t所指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返回-1。ss所指字符串数组中共有N个字符串,且串长<M。

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

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

#include <stdio.h>
#include <string.h>
#define  N  5
#define  M  8
int fun(char  (*ss)[M],char  *t)
{  
    int  i;
    /**********found**********/
     for(i=0; i< __1__ ; i++)
    /**********found**********/
       if(strcmp(ss[i],t)==0 ) return  __2__ ;
    return -1;
}
int main()
{ 
    char  ch[N][M]={"if","while","switch",
                    "int","for"},t[M];
    int  n,i;
    printf("\nThe original string\n");
    for(i=0;i<N;i++) puts(ch[i]);  
    printf("\n");
    printf("\nEnter a string for search:  ");  
    gets(t);
    n=fun(ch,t);
    /**********found**********/
    if(n==__3__) printf("\nDon't found!\n");
    else  printf("\nThe position is  %d .\n",n);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。

例如,当a所指字符串中的内容为“abcdefg”,b所指在字符串中的内容为“1234”时,c所指数组中的内容应该为“a4b3c2d1efg”;而当a所指字符串中的内容为“1234”,b所指在字符串中的内容为“abcdefg”时,c所指数组中的内容应该为“1g2f3e4dcba”。

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

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

#include <stdio.h>
#include <string.h>
void fun(char *a,char *b,char *c)
{
    int   i , j;     
    char   ch;
    i = 0;    j = strlen(b)-1;
    /************found************/
    while ( i > j )
    {   
        ch = b[i]; b[i] = b[j]; b[j] = ch;
        i++;    j--;
    }
    while (*a || *b ) 
    {
    /************found************/
       If ( *a )
       { *c = *a;  c++; a++; }
       if ( *b )
       { *c = *b;  c++; b++; }
    }
    *c = 0;
}
int main()
{
    char   s1[100],s2[100],t[200];
    printf("\nEnter s1 string : ");
    scanf("%s",s1);
    printf("\nEnter s2 string : ");
    scanf("%s",s2);
    fun( s1, s2, t );
    printf("\nThe result is : %s\n", t );
    return 0;
}

3.程序设计题

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

例如,若s所指字符串中的内容为“ABCDEFG12345”,则t所指的字符数组中的内容应是“BDF12345”。

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

第95套

1.程序填空题

给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序。

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

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

#include <stdio.h>
#include <string.h>
#define  N   5
#define  M   8
void fun(char (*ss)[M])
{ 
    char  *ps[N],*tp;    
    int  i,j,k;
    for(i=0; i<N; i++) ps[i]=ss[i];
    for(i=0; i<N-1; i++) 
    {
    /**********found**********/
       k=  __1__ ;
       for(j=i+1; j<N; j++)
    /**********found**********/
          if(strlen(ps[k])<strlen(__2__)) k=j;
    /**********found**********/
       tp=ps[i];  ps[i]=ps[k]; ps[k]= __3__ ;
    }
    printf("\nThe string after sorting by length:\n");
    for(i=0; i<N; i++)  puts(ps[i]);
}
int main()
{   
    char ch[N][M]={"red","green","blue","yellow","black"};
    int  i;
    printf("\nThe original string\n\n");
    for(i=0;i<N;i++) puts(ch[i]);  
    printf("\n");
    fun(ch);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:实现两个整数的交换。

例如,给a和b分别输入:60和65,输出为:a=65,b=60。

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

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

#include <stdio.h>
/************found************/
void fun(int a,b)
{
    int t;
    /************found************/
    t=b;b=a;a=t;
}
int main()
{
    int a,b;
    printf("Enter a,b:");
    scanf("%d%d",&a,&b);
    fun(&a,&b);
    printf("a=%d  b=%d\n",a,b);
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。

例如,当s所指字符串为“ABCDE”时,则t所指的字符串应为“EDCBAABCDE”。

注意:请勿改动主函数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.(1)i   (2)ps[j]   (3)tp
2void fun(int *a,int *b)
    t=*b;*b=*a;*a=t;
3void fun (char  *s, char  *t)
    {
         int   i,sl;
         sl = strlen(s);
         for (i=0; i<sl; i++)
             t[i] = s[sl-1-i];
         for (i=0; i<sl; i++)
         t[sl+i] = s[i];
         t[2*sl] = '\0';
    }
第95套参考答案

posted on 2022-11-08 05:43  aTeacher  阅读(372)  评论(0编辑  收藏  举报