I am a teacher!

导航

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

第31套

1.程序填空题

给定程序中,函数fun的功能是:有N*N矩阵,将矩阵中的外围元素顺时针旋转。操作顺序是:首先将第1行元素值存入临时数组r,然后使第1列成为第1行,最后1行成为第1列,最后1列成为最后1行,临时数组中的元素成为最后1列。

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

1 2 3

4 5 6

7 8 9

旋转结果为

7 4 1

8 5 2

9 6 3

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

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

#include <stdio.h>
#define N  4
void fun(int  (*t)[N])
{  
    int  j ,r[N];
    for(j=0; j<N; j++)  r[j]=t[0][j];
    for(j=0; j<N; j++)
    /**********found**********/
       t[0][N-j-1]=t[j][___1___ ];
    for(j=0; j<N; j++)
       t[j][0]=t[N-1][j];
    /**********found**********/
    for(j=N-1; j>=0;___2___ )
       t[N-1][N-1-j]=t[j][N-1];
    for(j=N-1; j>=0; j--)
    /**********found**********/
       t[j][N-1]=r[___3___];
}
int main()
{  
    int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
    printf("\nThe original array:\n");
    for(i=0; i<N; i++)
    {  
       for(j=0; j<N; j++) printf("%2d ",t[i][j]);
       printf("\n");
    }
    fun(t);
    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的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,设t1和t2所指字符串的长度相同。

例如,当s所指字符串为:abcdabfab,t1所指字符串为:ab,t2所指字符串为:99,运行后w所指数组中的内容为:abcdabf99。

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

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

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

3.程序设计题

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

例如,当s所指字符串中的内容为:ABCDEFG12345,在t所指数组中的内容应为:BDF24。

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

第32套

1.程序填空题

给定程序中,函数fun的功能是:将N*N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。

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

1 2 3

4 5 6

7 8 9

移动结果为

3 1 2

6 4 5

9 7 8

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

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

#include <stdio.h>
#define  N  4
void fun(int  (*t)[N])
{  
    int  i, j, x;
    /**********found**********/
    for(i=0; i<___1___; i++)
    {
    /**********found**********/
        x=t[i][___2___] ;
        for(j=N-1; j>0; j--)
           t[i][j]=t[i][j-1];
    /**********found**********/
        t[i][___3___]=x;
    }
}
int main()
{  
    int  t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j;
    printf("The original array:\n");
    for(i=0; i<N; i++)
    {  
       for(j=0; j<N; j++) printf("%2d  ",t[i][j]);
       printf("\n");
    }
    fun(t);
    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的功能是:将长整数s中每一位上为偶数的数依次取出,构成一个新数放在t中,高位仍在高位,低位仍在低位。

例如,s=87653142时,t=8642。

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

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

#include <stdio.h>
void fun(long s, long *t)
{ 
    int   d;
    long  sl=1;
    *t = 0;
    while ( s > 0)
    {  
        d = s%10;
    /************found************/
        if (d%2=0)
        {  
            *t=d* sl+ *t;
            sl *= 10;
        }
    /************found************/
        s \= 10;
    }
}
int main()
{  
    long   s, t;
    printf("\nPlease enter s:"); 
    scanf("%ld", &s);
    fun(s, &t);
    printf("The result is: %ld\n", t);
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。

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

#include <stdio.h>
#include <string.h>
void fun(char(*a)[81],int num,char **max)
{

}
int main()
{
    char ss[10][81],*ps;
    int n,i=0;
    printf("输入若干个字符串:");
    gets(ss[i]);
    puts(ss[i]);
    while(!strcmp(ss[i],"****")==0)
    {
       i++;
       gets(ss[i]);
       puts(ss[i]);
    }
    n=i;
    fun(ss,n,&ps);
    printf("\nmax=%s\n",ps);
    return 0;
}
1.(1)N   (2)N-130
2if (d%2==0)
     s /= 10;
3void fun(char(*a)[81],int num,char **max)
      {
          int i;
          *max=a[0];
          for (i=1;i<num;i++)
              if (strlen(*max)<strlen(a[i]))
           *max=a[i];
      }
第32套参考答案

第33套

1.程序填空题

给定程序中,函数fun的功能是:将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。

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

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

#include  <stdio.h>
#include  <stdlib.h>
int fun(char *source, char *target)
{  
    FILE  *fs,*ft;      
    char  ch;
    /**********found**********/
    if((fs=fopen(source, ___1___))==NULL)
      return 0;
    if((ft=fopen(target, "w"))==NULL)
      return 0;
    printf("\nThe data in file :\n");
    ch=fgetc(fs);
    /**********found**********/
    while(!feof(___2___))
    {  
        putchar( ch );
    /**********found**********/
        fputc(ch,___3___);
        ch=fgetc(fs);
    }
    fclose(fs);  
    fclose(ft);
    printf("\n\n");
    return  1;
}
int main()
{  
    char  sfname[20] ="myfile1",tfname[20]="myfile2";
    FILE  *myf;      
    int  i;      
    char  c;
    myf=fopen(sfname,"w");
    printf("\nThe original data :\n");
    for(i=1; i<30; i++)
    { 
        c='A'+rand()%25;
        fprintf(myf,"%c",c); 
        printf("%c",c); 
    }
    fclose(myf);
    printf("\n\n");
    if (fun(sfname, tfname))  printf("Succeed!");
    else  printf("Fail!");
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:删除p所指字符串中的所有空白字符(包括tab字符、回车符及换行符)。输入字符串时用“#”结束输入。

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

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

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void fun(char *p)
{  
    int i,t;  char c[80];
    /************found************/
    For (i = 0,t = 0; p[i] ; i++)
      if(!isspace(*(p+i))) c[t++]=p[i];
    /************found************/
    c[t]="\0";
    strcpy(p,c);
}
int main( )
{  
    char c,s[80];
    int i=0;
    printf("Input a string:");
    c=getchar();
    while(c!='#')
    {  s[i]=c;i++;c=getchar(); }
    s[i]='\0';
    fun(s);
    puts(s);
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写字母(若该位置上不是字母,则不转换)。

例如,若输入abc4Efg,则应输出aBc4EFg。

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

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

}
int main( )
{
    char tt[81] ;
    printf("\nPlease enter an string:\n" );
    gets(tt);
    printf("\nAfter changing, the string\n\"%s\"", tt);
    fun(tt);
    printf( "\nbecomes\n  \"%s\"\n",  tt  );
    NONO();
    return 0;
}
void NONO(void)
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
    FILE *fp, *wf ;
    char tt[81] ;
    int i ;
    fp = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(fp, "%s", tt) ;
       fun( tt ) ;
       fprintf(wf, "%s\n", tt) ;
    }
    fclose(fp) ;
    fclose(wf) ;
}
1.(1"r"2)fs   (3)ft
2for (i=0,t=0; p[i]; i++)
     c[t]='\0';
3void fun(char *ss)
      {
          int i;
          for (i=0;ss[i]!='\0';i++)
               if (i%2==1)
               {
                    if (ss[i]>='a' && ss[i]<='z')
                        ss[i]-=32;
               }
      }
第33套参考答案

第34套

1.程序填空题

给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指的字符数组中,形成一个新串。

例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指数组中的字符串应为:aachjlsw。

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

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

#include <stdio.h>
void fun(char  *s, char  *p)
{  
    int  i, j, n, x, t;
    n=0;
    for(i=0; s[i]!='\0'; i++)  n++;
    for(i=1; i<n-2; i=i+2) 
    {
    /**********found**********/
        ___1___;
    /**********found**********/
        for(j=___2___+2 ; j<n; j=j+2)
            if(s[t]>s[j]) t=j;
        if(t!=i)
        {  x=s[i]; s[i]=s[t]; s[t]=x; }
    }
    for(i=1,j=0; i<n; i=i+2, j++)  p[j]=s[i];
    /**********found**********/
    p[j]=___3___;
}
int main()
{  
    char  s[80]="baawrskjghzlicda", p[50];
    printf("\nThe original string is :  %s\n",s);
    fun(s,p);
    printf("\nThe result is :  %s\n",p);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:从低位开始取出长整数变量s中偶数位上的数,依次构成一个新数放在t中,高位仍在高位,低位仍在低位。

例如,s=7654321时,t=642。

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

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

#include <stdio.h>
/************found************/
void fun (long  s, long t)
{   
    long  sl=10;
    s /= 10;
    *t = s % 10;
    /************found************/
    while ( s < 0)
    {  
        s = s/100;
        *t = s%10*sl + *t;
        sl = sl * 10;
    }
}
int main()
{  
    long   s, t;
    printf("\nPlease enter s:"); 
    scanf("%ld", &s);
    fun(s, &t);
    printf("The result is: %ld\n", t);
    return 0;
}

3.程序设计题

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

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

注意:请勿改动主函数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: %ld\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)t=i   (2)i    (3'\0'
2void fun(long  s, long *t)
     while ( s > 0)
3void fun(int a, int b, long *c)
     {
          *c=(a/10)*100+(a%10)+(b/10)*10+(b%10)*1000;
      }
第34套参考答案

第35套

1.程序填空题

给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第1个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。

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

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

#include  <stdio.h>
void fun(char *s)
{  
    int  i, n, k;    
    char c;
    n=0;
    for(i=0; s[i]!='\0'; i++)  n++;
    /**********found**********/
    if(n%2==0) k=n-___1___ ;
    else       k=n-2;
    /**********found**********/
    c=___2___ ;
    for(i=k-2; i>=1; i=i-2)  s[i+2]=s[i];
    /**********found**********/
    s[1]=___3___ ;
}
int main()
{  
    char  s[80]="abcdefgh";
    printf("\nThe original string is :  %s\n",s);
    fun(s);
    printf("\nThe result is :  %s\n",s);
    return 0;
}

2.程序修改题

给定程序中,函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。

例如,若形参是字母A,则转换为字母f;若形参是字母W,则转换为字母b。

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

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

#include <stdio.h>
#include <ctype.h>
char  fun(char  c)
{   
    if( c>='A' && c<='Z')
    /**************found**************/
         c=c-32;
    if(c>='a' && c<='u')
    /**************found**************/
        c=c-5;
    else if(c>='v'&&c<='z')
       c=c-21;
    return  c;
}
int main()
{  
    char  c1,c2;
    printf("\nEnter a letter(A-Z):  "); 
    c1=getchar();
    if (isupper(c1))
    {  
        c2=fun(c1);
        printf("\nThe letter \'%c\' change to \'%c\'\n", c1,c2);
    }
    else  printf("\nEnter (A-Z)!\n");
    return 0;
}

3.程序设计题

编写函数fun,它的功能是:计算

例如,n=20时,S=534.188884。

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

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

}
int main()
{
    int  n;
    double  s;
    printf("\n\nInput n: ");
    scanf("%d",&n);
    s=fun(n);
    printf("\ns=%f\n",s);
    NONO();
    return 0;
}
void NONO(void)
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */
    FILE *rf, *wf ;
    int n, i ;
    double s ;
    rf = fopen("in.dat","r") ;
    wf = fopen("out.dat","w") ;
    for(i = 0 ; i < 10 ; i++)
    {
       fscanf(rf, "%d", &n) ;
       s = fun(n) ;
       fprintf(wf, "%f\n", s) ;
    }
    fclose(rf) ;
    fclose(wf) ;
}
1.(112)s[k]   (3)c
2. c=c+32;
     c=c+5;
3double fun(int  n)
     {
         double s=0.0,t=0.0;
         int i;
         for (i=1;i<=n;i++)
         {
             t=t+sqrt(i);
             s+=t;
         }
         return s;
     }
第35套参考答案

posted on 2022-11-06 05:24  aTeacher  阅读(231)  评论(0编辑  收藏  举报