1、下列给定程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]…中,把奇数从数组中删除,偶数的个数通过函数值返回。
例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除奇数后a所指数组中的数据为:4,2,6,8,返回值为4。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

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

2、下列给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。
例如,若s所指字符串为"baacda",c中的字符为a,执行后s所指字符串为"baaaacdaa"。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
void fun(char  *s, char  c)
{  int  i, j, n;
/**********found**********/
  for(i=0; s[i]!=___1___ ; i++)
     if(s[i]==c)
     {
/**********found**********/
        n=___2___ ;
        while(s[i+1+n]!='\0')  n++;
        for(j=i+n+1; j>i; j--)  s[j+1]=s[j];
/**********found**********/
        s[j+1]=___3___ ;
        i=i+1;
     }
}
int main()
{  char  s[80]="baacda", c;
   printf("\nThe string:  %s\n",s);
   printf("\nInput a character:  ");  scanf("%c",&c);
   fun(s,c);
   printf("\nThe result is:  %s\n",s);
   return 0;
}

3、下列给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,若N=3,有下列矩阵:
1  2  3
4  5  6
7  8  9
计算后结果为
1  0  0
6  5  0
10  14  9
请在程序的下划线处填入正确的内容并把下划线删除。使程序得出正确的结果。
注意:不得增行或删行,也不得改程序的结构!

#include  <stdio.h>
#define  N  4
/**********found**********/
void fun(int  (*t)___1___ )
{  int  i, j;
   for(i=1; i<N; i++)
   {  for(j=0; j<i; j++)
      {
/**********found**********/
         ___2___ =t[i][j]+t[j][i];
/**********found**********/
         ___3___ =0;
      }
   }
}
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;
}

4、下列给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。
例如,形参s所指字符串为"abcdefgh",执行结果为"ahcbedgf"。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

#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;
}

5、给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
#include  <string.h>
#define  N  80
void fun(char  *s, int  n, char  *t)
{ int len,i,j=0;
  len=strlen(s);
/**********found**********/
  if(n>=len) strcpy(__1__);
  else {
/**********found**********/
     for(i=len-n; i<=len-1; i++)  t[j++]= __2__ ;
/**********found**********/
     t[j]= __3__ ;
  }
}
int main()
{ 
  char  s[N],t[N]; int  n;
  printf("Enter a string:  ");gets(s);
  printf( "Enter n:");  scanf("%d",&n);
  fun(s,n,t);
  printf("The string t :  ");  puts(t);
  return 0;
}

6、给定程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,若形参s所指的字符串为"abcdef35adgh3kjsdf7",则输出结果为4。
请在下划线处填入正确内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

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

7、函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数 isleap用来判别某一年是否为闰年。
例如,若输入:2008
5 1,则程序输出:2008年5月1日是该年的第122天。
请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的
结果。
注意:不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
int  isleap(int  year)
{ int  leap;
  leap= (year%4==0 && year%100!=0 || year%400==0);
/**********found**********/
  return  __1__;
}
int fun(int  year, int  month, int  day)
{  int  table[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   int  days=0 , i;
   for(i=1; i<month; i++)
      days=days + table[i];
/**********found**********/
   days=days+__2__ ;
   if( isleap(year) && month>2 )
 /**********found**********/
     days=days+__3__;
   return  days;
}
int main()
{  int  year, month, day, days ;
   printf("请输入年、月、日:");
   scanf("%d%d%d",&year, &month, &day);
   days = fun(year, month, day); 
   printf("%d年%d月%d日是该年的第%d天\n",year, month, day, days);
   return 0;
}

8、给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

#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\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;
}

9、下列给定程序中,函数fun的功能是:将N×N矩阵主对角线元素的值与反向对角线对应位置上元素的值进行交换。
例如,若N=3,有下列矩阵:
1  2  3
4  5  6
7  8  9
交换后为:
3  2  1
4  5  6
9  8  7
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!

#include  <stdio.h>
#define  N  4
/**********found**********/
void fun(int  ___1___ , int  n)
{  int  i,s;
/**********found**********/
   for(___2___; i++)
   {  s=t[i][i];
      t[i][i]=t[i][n-i-1];
/**********found**********/
      t[i][n-1-i]=___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("%d  ",t[i][j]);
      printf("\n");
   }
   fun(t,N);
   printf("\nThe result is:\n");
   for(i=0; i<N; i++)
   {  for(j=0; j<N; j++)  printf("%d  ",t[i][j]);
      printf("\n");
   }
   return 0;
}

10、下列给定程序中,函数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;
}
计算机等级考试二级C语言程序设计专项训练题——程序填空题(一)计算机等级考试二级C语言程序设计专项训练题——程序填空题(一)

1、(1)a[i]%22)a[j]      (3)j
2、(1'\0'203)c
3、(1)[N]       (2)t[i][j]   (3)t[j][i]
4、(112)s[k]      (3)c
5、(1)t,s       (2)s[i]      (3'\0'
6、(1)s[i]      (2'9'3)*t=n
7、(1)leap      (2)day       (31
8、(1) i        (2)ps[j]     (3)tp
9、(1)(*t)[N]   (2)i=0;i<n   (3)s
10、(1)M        (2)i         (3)-1

参考答案

发表回复