南方制药机械厂的待遇:2011年3月份全国计算机等级考试二级C语言上机题库

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 03:11:26
 
二级C语言上机考试复习资料,共有50套题目
一、程序填空题
    1、给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时, 程序输出:
    x1=5.000000,  x2=3.000000,  x1*x1+x1*x2=40.000000
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
double f1(double  x)
{  return x*x;  }
double f2(double  x, double  y)
{  return  x*y;  }
/**********found**********/
__1__ fun(int  i, double  x, double  y)
{ if (i==1)
/**********found**********/
    return __2__(x);
  else
/**********found**********/
    return  __3__(x, y);
}
main()
{ double  x1=5, x2=3, r;
  r = fun(1, x1, x2);
  r += fun(2, x1, x2);
  printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n\n",x1, x2, r);
}    2、给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。
    例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:
          letter  'a' : 3 times
          letter  's' : 3 times
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#include 
void fun(char  *s)
{ int  k[26]={0},n,i,max=0;    char  ch;
  while(*s)
  { if( isalpha(*s) ) {
/**********found**********/
      ch=tolower(__1__);
      n=ch-'a';
/**********found**********/
      k[n]+= __2__ ;
    }
    s++;
/**********found**********/
    if(max  }
  printf("\nAfter count :\n");
  for(i=0; i<26;i++)
     if (k[i]==max) printf("\nletter  \'%c\' :  %d times\n",i+'a',k[i]);
}
main()
{ char  s[81];
  printf("\nEnter a string:\n\n");  gets(s);
  fun(s);
}    3、给定程序中,函数fun的功能是:将N×N矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若N=3,有下列矩阵:
        1    2    3
        4    5    6
        7    8    9交换后为:
        3    2    1
        4    5    6
        9    8    7
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#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___;
   }
}
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   {  for(j=0; j      printf("\n");
   }
   fun(t,N);
   printf("\nThe result is:\n");
   for(i=0; i   {  for(j=0; j      printf("\n");
   }
}    4、给定程序中,函数fun的功能是:找出100至x(x≤999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。
    例如,当n值为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个。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
int 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;
}
main()
{ int  x=-1;
  while(x>999||x<0)
  {  printf("Please input(0  printf("\nThe result is: %d\n",fun(x));
}    5、函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把形参a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。
    注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大值的下标。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
# include   
#define    N    9
void fun(int  a[], int  n)
{  int  i,j, max, min, px, pn, t;
   for (i=0; i   {
/**********found**********/
      max = min = ___1___;
      px = pn = i;
      for (j=i+1; j/**********found**********/
         if (max<___2___)
         {   max = a[j]; px = j;  }
/**********found**********/
         if (min>___3___)
         {   min = a[j]; pn = j;  }
      }
      if (pn != i)
      {  t = a[i]; a[i] = min; a[pn] = t;
         if (px == i) px =pn;
      }
      if (px != i+1)
      {  t = a[i+1]; a[i+1] = max; a[px] = t; }
   }
}
main()
{  int  b[N]={9,1,4,2,3,6,5,8,7}, i;
   printf("\nThe original data  :\n");
   for (i=0; i   printf("\n");
   fun(b, N);
   printf("\nThe data after moving  :\n");
   for (i=0; i   printf("\n");
}    6、给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。
    例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
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/**********found**********/
      ___1___;
/**********found**********/
      for(j=___2___+2 ; j        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/**********found**********/
   p[j]=___3___;
}
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);
}    7、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。
    例如,从主函数输入一个整数:27638496,函数返回值为:26846。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
unsigned long fun(unsigned long  n)
{  unsigned long  x=0, s, i;   int  t;
   s=n;
/**********found**********/
   i=__1__;
/**********found**********/
   while(__2__)
   {  t=s%10;
      if(t%2==0){
/**********found**********/
         x=x+t*i;  i=__3__;
      }
       s=s/10;
   }
   return  x;
}
main()
{  unsigned long  n=-1;
   while(n>99999999||n<0)
  { printf("Please input(0  printf("\nThe result is: %ld\n",fun(n));
}    8、给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。
    例如,有下列矩阵:
    1    2    3    4    5
    1    2    3    4    5
    1    2    3    4    5
    若k为2,程序执行结果为
    3    4    5    1    2
    3    4    5    1    2
    3    4    5    1    2
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
#define   M   3
#define   N   5
void fun(int  (*a)[N],int  k)
{ int  i,j,p,temp;
/**********found**********/
  for(p=1; p<= __1__; p++)
     for(i=0; i     {  temp=a[i][0];
/**********found**********/
        for(j=0; j< __2__ ; j++) a[i][j]=a[i][j+1];
/**********found**********/
        a[i][N-1]= __3__;
     }
}
main( )
{ int  x[M][N]={ {1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5} },i,j;
  printf("The array before moving:\n\n");
  for(i=0; i  {  for(j=0; j     printf("\n");
  }
  fun(x,2);
  printf("The array after moving:\n\n");
  for(i=0; i  {  for(j=0; j     printf("\n");
  }
}    9、给定程序中,函数fun的功能是:判断形参s所指字符串是否是"回文"(Palindrome),若是,函数返回值为1;不是,函数返回值为0。"回文"是正读和反读都一样的字符串(不区分大小写字母)。21
    例如,LEVEL和Level是"回文",而LEVLEV不是"回文"。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#include 
int fun(char  *s)
{ char  *lp,*rp;
/**********found**********/
  lp= __1__ ;
  rp=s+strlen(s)-1;
  while((toupper(*lp)==toupper(*rp)) && (lp/**********found**********/
     lp++; rp __2__ ; }
/**********found**********/
  if(lp  else   return 1;
}
main()
{ char  s[81];
  printf("Enter a string:  ");  scanf("%s",s);
  if(fun(s)) printf("\n\"%s\" is a Palindrome.\n\n",s);
  else printf("\n\"%s\" isn't a Palindrome.\n\n",s);
}    10、给定程序中,函数fun的功能是:把形参s所指字符串中最右边的n个字符复制到形参t所指字符数组中,形成一个新串。若s所指字符串的长度小于n,则将整个字符串复制到形参t所指字符数组中。
    例如,形参s所指的字符串为:abcdefgh,n的值为5,程序执行后t所指字符数组中的字符串应为:defgh。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#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__ ;
  }
}
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);
}     11、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。
    例如,输入一个整数:27638496,函数返回值为:64862。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
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;
}
main()
{ unsigned long  n=-1;
  while(n>99999999||n<0)
  { printf("Please input(0  printf("\nThe result is: %ld\n",fun(n));
}    12、给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵:
        1    2    3
        4    5    6
        7    8    9计算结果为
        1    0    0
        6    5    0
        10   14   9
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include   
#define    N    4
/**********found**********/
void fun(int  (*t)___1___ )
{  int  i, j;
   for(i=1; i   {  for(j=0; j      {
/**********found**********/
         ___2___ =t[i][j]+t[j][i];
/**********found**********/
         ___3___ =0;
      }
   }
}
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   {  for(j=0; j      printf("\n");
   }
   fun(t);
   printf("\nThe result is:\n");
   for(i=0; i   {  for(j=0; j      printf("\n");
   }
}    13、给定程序中,函数fun的功能是: 将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
void fun(char  *s)
{  int  i, j=0, k=0;    char  t1[80], t2[80];
   for(i=0; s[i]!='\0'; i++)
     if(s[i]>='0' && s[i]<='9')
     {
/**********found**********/
       t2[j]=s[i]; ___1___;
     }
     else  t1[k++]=s[i];
  t2[j]=0;  t1[k]=0;
/**********found**********/
  for(i=0; i/**********found**********/
  for(i=0; i<___3___; i++)  s[k+i]=t2[i];
}
main()
{  char  s[80]="def35adh3kjsdf7";
   printf("\nThe original string is :  %s\n",s);
   fun(s);
   printf("\nThe result is :  %s\n",s);
}    14、给定程序中,函数fun的功能是计算下式
 
    例如:若形参e的值为1e-3,函数的返回值为0.551690。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
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;
}
main()
{ double  e=1e-3;
  printf("\nThe result is: %f\n",fun(e));
}    15、给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#define    N    6
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q;    int  t;
/**********found**********/
  p = __1__ ;
  while (p) {
/**********found**********/
     q = __2__ ;
     while (q) {
/**********found**********/
        if (p->data __3__ q->data)
        {  t = p->data;  p->data = q->data;  q->data = t;  }
        q = q->next;
    }
    p = p->next;
  }
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
  h = (NODE *)malloc(sizeof(NODE));
  h->next = NULL;
  for(i=0; i  {  q=(NODE *)malloc(sizeof(NODE));
     q->data=a[i];
     q->next = NULL;
     if (h->next == NULL)  h->next = p = q;
     else    {  p->next = q;  p = q;   }
  }
   return  h;
}
void outlist(NODE  *h)
{ NODE  *p;
  p = h->next;
  if (p==NULL)  printf("The list is NULL!\n");
  else
  {  printf("\nHead  ");
     do
     {  printf("->%d", p->data); p=p->next;  }
     while(p!=NULL);
     printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]= {0, 10, 4, 2, 8, 6 };
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   fun(head);
   printf("\nThe list after sorting :\n");
   outlist(head);
}    16、给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。
    例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
#include 
#include 
int fun(char  *s)
{ int  sum=0;
  while(*s) {
/**********found**********/
    if( isdigit(*s) )  sum+= *s- __1__ ;
/**********found**********/
    __2__;
  }
/**********found**********/
  return  __3__ ;
}
main()
{ char  s[81];    int  n;
  printf("\nEnter a string:\n\n");  gets(s);
  n=fun(s);
  printf("\nThe result is:  %d\n\n",n);
}    17、函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#define    N    9
int fun(int  a[], int  n)
{  int  i,j;
   j = 0;
   for (i=0; i/**********found**********/
      if (a[i]%2==___1___)
      {
/**********found**********/
        a[j] = a[i]; ___2___;
      }
/**********found**********/
   return ___3___;
}
main()
{  int  b[N]={9,1,4,2,3,6,5,8,7}, i, n;
   printf("\nThe original data  :\n");
   for (i=0; i   printf("\n");
   n = fun(b, N);
   printf("\nThe number of odd  : %d \n", n);
   printf("\nThe odd number  :\n");
   for (i=0; i   printf("\n");
}    18、给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。
 
    例如,当形参n的值为10时,函数返回:9.612558。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
double fun(int  n)
{ int  i;    double  s, t;
/**********found**********/
  s=__1__;
/**********found**********/
  for(i=1; i<=__2__; i++)
  { t=2.0*i;
/**********found**********/
    s=s+(2.0*i-1)*(2.0*i+1)/__3__;
  }
  return  s;
}
main()
{ int  n=-1;
  while(n<0)
  { printf("Please input(n>0): "); scanf("%d",&n);  }
  printf("\nThe result is: %f\n",fun(n));
}    19、给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。
    例如,有下列矩阵:
    1    2    3
    4    5    6
    7    8    9
    10   11   12
    若k为2,程序执行结果为:
    7    8    9
    4    5    6
    1    2    3
    10   11   12
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#define   N   3
#define   M   4
/**********found**********/
void fun(int (*a)[N], int __1__)
{ int i,temp ;
/**********found**********/
  for(i = 0 ; i < __2__ ; i++)
  { temp=a[0][i] ;
/**********found**********/
    a[0][i] = __3__ ;
    a[k][i] = temp ;
  }
}
main()
{ int x[M][N]={ {1,2,3},{4,5,6},{7,8,9},{10,11,12} },i,j;
  printf("The array before moving:\n\n");
  for(i=0; i  {  for(j=0; j     printf("\n\n");
  }
  fun(x,2);
  printf("The array after moving:\n\n");
  for(i=0; i  {  for(j=0; j     printf("\n\n");
  }
}    20、函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include   
#define    N    9
void fun(int  a[], int  n)
{  int  i, t, p;
/**********found**********/
   p = (n%2==0)?n/2:n/2+___1___;
   for (i=0; i   {
      t=a[i];
/**********found**********/
      a[i] = a[p+___2___];
/**********found**********/
      ___3___ = t;
   }
}
main()
{  int  b[N]={1,2,3,4,5,6,7,8,9}, i;
   printf("\nThe original data  :\n");
   for (i=0; i   printf("\n");
   fun(b, N);
   printf("\nThe data after moving  :\n");
   for (i=0; i   printf("\n");
}    21、给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。
    例如,输入一个数:27638496,新的数:为739。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
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__;
}
main()
{ unsigned long  n=-1;
  while(n>99999999||n<0)
  { printf("Please input(0  fun(&n);
  printf("\nThe result is: %ld\n",n);
}    22、给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#define   N   5
#define   M   8
void fun(char  (*ss)[M])
{ char  *ps[N],*tp;    int  i,j,k;
  for(i=0; i  for(i=0; i/**********found**********/
    k=  __1__ ;
    for(j=i+1; 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}
main()
{ char  ch[N][M]={"red","green","blue","yellow","black"};
  int  i;
  printf("\nThe original string\n\n");
  for(i=0;i  fun(ch);
}    23、给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。
    例如,形参s所指的字符串为:This is a  C  language  program.,函数的返回值为6。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
int fun(char  *s)
{ int  n=0, flag=0;
  while(*s!='\0')
  { if(*s!=' ' && flag==0) {
/**********found**********/
     __1__ ;  flag=1;}
/**********found**********/
    if (*s==' ')  flag= __2__ ;
/**********found**********/
    __3__ ;
  }
  return  n;
}
main()
{ char  str[81];    int  n;
  printf("\nEnter a line text:\n");  gets(str);
  n=fun(str);
  printf("\nThere are %d words in this text.\n\n",n);
}    24、函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include    
#define    N    9
int fun(int  a[], int  n)
{  int  i,j;
   j = 0;
   for (i=0; i/**********found**********/
      if (___1___== 0) {
/**********found**********/
        ___2___ = a[i]; j++;
      }
/**********found**********/
   return ___3___;
}
main()
{  int  b[N]={9,1,4,2,3,6,5,8,7}, i, n;
   printf("\nThe original data  :\n");
   for (i=0; i   printf("\n");
   n = fun(b, N);
   printf("\nThe number of even  :%d\n", n);
   printf("\nThe even  :\n");
   for (i=0; i   printf("\n");
}    25、给定程序中,函数fun的功能是:将N×N矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵
        1    2    3
        4    5    6
        7    8    9计算结果为
        3    1    2
        6    4    5
        9    7    8
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#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>=1; j--)
          t[i][j]=t[i][j-1];
/**********found**********/
        t[i][___3___]=x;
     }
}
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   {  for(j=0; j      printf("\n");
   }
   fun(t);
   printf("\nThe result is:\n");
   for(i=0; i   {  for(j=0; j      printf("\n");
   }
}    26、函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
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;
   }
}
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");
}    27、给定程序中, 函数fun的功能是用函数指针指向要调用的函数,并进行调用。规定在__2__处使f指向函数f1,在__3__处使f指向函数f2。当调用正确时,程序输出:
    x1=5.000000,  x2=3.000000,  x1*x1+x1*x2=40.000000
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
double f1(double  x)
{  return  x*x;  }
double f2(double x, double y)
{  return  x*y;  }
double fun(double  a, double  b)
{
/**********found**********/
  __1__ (*f)();
  double  r1, r2;
/**********found**********/
  f = __2__ ;   /* point fountion f1 */
  r1 = f(a);
/**********found**********/
  f = __3__ ;   /* point fountion f2 */
  r2 = (*f)(a, b);
  return  r1 + r2;
}
main()
{ double  x1=5, x2=3, r;
  r = fun(x1, x2);
  printf("\nx1=%f,  x2=%f,  x1*x1+x1*x2=%f\n",x1, x2, r);
}    28、给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。
    例如,有9个正整数:1  5  7  23  87  5  8  21  45
         按升序排列时的中间数为:8
    处理后主函数中输出的数列为:8  8  8  23  87  8  8  21  45
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
#define    N    9
int fun(int  x[])
{  int  i,j,k,t,mid,b[N];
   for(i=0;i   for(i=0;i<=N/2;i++)
   {  k=i;
      for(j=i+1;jb[j])  k=j;
      if(k != i )
      { 
/**********found**********/
        t=b[i]; b[i]=___1___; b[k]=t;
      }
   }
/**********found**********/
   mid=b[___2___];
   for(i=0; i/**********found**********/
     if(x[i] ___3___ mid) x[i]=mid;
   return  mid;
}
main()
{  int  i, x[N]={1,5,7,23,87,5,8,21,45};
   for(i=0; i   printf("\nThe mid data is: %d\n",fun(x));
   for(i=0; i   printf("\n");
}    29、给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做任何处理。
    例如,s所指字符串为:baacda,c中的字符为:a,
          执行后s所指字符串为:baaaacdaa。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
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;
     }
}
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);
}    30、给定程序的主函数中,已给出由结构体构成的链表结点a、b、c,各结点的数据域中均存入字符,函数fun()的作用是:将a、b、c三个结点链接成一个单向链表,并输出链表结点中的数据。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
typedef  struct  list
{  char  data;
   struct list  *next;
} Q;
void fun( Q *pa, Q *pb, Q *pc)
{  Q  *p;
/**********found**********/
   pa->next=___1___;
   pb->next=pc;
   p=pa;
   while( p )
   {
/**********found**********/
      printf("  %c",____2_____);
/**********found**********/
      p=____3____;
   }
   printf("\n");
}
main()
{  Q  a, b, c;
   a.data='E';  b.data='F';  c.data='G';  c.next=NULL;
   fun( &a, &b, &c );
}  
 31、给定程序中,函数fun的功能是:计算N×N矩阵的主褫角线元素和反向对角线元素之和,并作为函数值返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩阵:
        1    2    3
        4    5    6
        7    8    9fun函数首先累
加1、5、9,然后累加3、5、7,函数的返回值为30。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#define    N    4
fun(int  t[][N], int  n)
{  int  i, sum;
/**********found**********/
   ___1___;
   for(i=0; i/**********found**********/
     sum+=___2___ ;
   for(i=0; i/**********found**********/
     sum+= t[i][n-i-___3___] ;
   return sum;
}
main()
{  int  t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10},i,j;
   printf("\nThe original data:\n");
   for(i=0; i   {  for(j=0; j      printf("\n");
   }
   printf("The result is:  %d",fun(t,N));
}    32、给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
void fun(char  *s, int  a, double  f)
{
/**********found**********/
  __1__ fp;
  char  ch;
  fp = fopen("file1.txt", "w");
  fprintf(fp, "%s %d %f\n", s, a, f);
  fclose(fp);
  fp = fopen("file1.txt", "r");
  printf("\nThe result :\n\n");
  ch = fgetc(fp);
/**********found**********/
  while (!feof(__2__)) {
/**********found**********/
    putchar(__3__); ch = fgetc(fp);  }
  putchar('\n');
  fclose(fp);
}
main()
{ char  a[10]="Hello!";    int  b=12345;
  double  c= 98.76;
  fun(a,b,c);
}    33、给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。
    例如,形参s所指的字符串为:Abc@1x56*,程序执行后t所指字符数组中的字符串应为:A@156*。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
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__ ;
}
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);
}    34、给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
    例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#include 
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  {  if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) {
/**********found**********/
       t[j]=__1__; j++;}
     else
     {  p[k]=s[i]; k++; }
  }
/**********found**********/
  for(i=0; i<__2__; i++)  t[j+i]=p[i];
/**********found**********/
  t[j+k]= __3__;
  return  t;
}
main()
{ char  s[80];
  printf("Please input: ");  scanf("%s",s);
  printf("\nThe result is: %s\n",fun(s));
}    35、给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:
        1    2    3
        4    5    6
        7    8    9计算结果为
        7    4    1
        8    5    2
        9    6    3
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#define    N    4
void fun(int  (*t)[N])
{  int  j ,r[N];
   for(j=0; j   for(j=0; j/**********found**********/
      t[0][N-j-1]=t[j][___1___ ];
   for(j=0; 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___];
}
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   {  for(j=0; j      printf("\n");
   }
   fun(t);
   printf("\nThe result is:\n");
   for(i=0; i   {  for(j=0; j      printf("\n");
   }
}    36、给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵
        1    2    3
        4    5    6
        7    8    9程序执行结果为
        0    0    1
        0    0    4
        0    0    7
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include   
#define    N    4
void fun(int  (*t)[N], int  m)
{  int  i, j;
/**********found**********/
   for(i=0; i   {  for(j=N-1-m; j>=0; j--)
/**********found**********/
         t[i][j+___2___ ]=t[i][j];
/**********found**********/
      for(j=0; j<___3___; j++)
         t[i][j]=0;
  }
}
main()
{  int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j, m;
   printf("\nThe original array:\n");
   for(i=0; i   {  for(j=0; j        printf("%2d  ",t[i][j]);
      printf("\n");
   }
   printf("Input m (m<=%d):  ",N);scanf("%d",&m);
   fun(t,m);
   printf("\nThe result is:\n");
   for(i=0; i   {  for(j=0; j        printf("%2d  ",t[i][j]);
      printf("\n");
   }
}    37、给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include    
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___ ;
}
main()
{  char  s[80]="abcdefgh";
   printf("\nThe original string is :  %s\n",s);
   fun(s);
   printf("\nThe result is :  %s\n",s);
}    38、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#include   
#define    M    5
#define    N    20
int fun(char  (*ss)[N], int  *n)
{  int  i, k=0, len= N;
/**********found**********/
   for(i=0; i<___1___; i++)
   {  len=strlen(ss[i]);
     if(i==0)  *n=len;
/**********found**********/
     if(len  ___2___  *n)
     {  *n=len;
        k=i;
     }
   }
/**********found**********/
   return(___3___);
}
main()
{  char  ss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};
   int  n,k,i;
   printf("\nThe original strings are :\n");
   for(i=0;i   k=fun(ss,&n);
   printf("\nThe length of shortest string is :  %d\n",n);
   printf("\nThe shortest string is :  %s\n",ss[k]);
}    39、函数fun的功能是进行数字字符转换。若形参ch中是数字字符'0'~'9', 则'0'转换成'9','1'转换成'8','2'转换成'7',……,'9'转换成'0';若是其它字符则保持不变;并将转换后的结果作为函数值返回。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
/**********found**********/
___1___ fun(char  ch)
{
/**********found**********/
   if (ch>='0' && ___2___)
/**********found**********/
      return  '9'- (ch-___3___);
   return  ch ;
}
main()
{  char  c1, c2;
   printf("\nThe result  :\n");
   c1='2';   c2 = fun(c1);
   printf("c1=%c    c2=%c\n", c1, c2);
   c1='8';   c2 = fun(c1);
   printf("c1=%c    c2=%c\n", c1, c2);
   c1='a';   c2 = fun(c1);
   printf("c1=%c    c2=%c\n", c1, c2);
}    40、给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。
    例如,当x值为5时,100~999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
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;
}
main()
{ int x=-1;
  while(x<0)
  { printf("Please input(x>0): ");  scanf("%d",&x);  }
  printf("\nThe result is: %d\n",fun(x));
}    41、函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include   
#define    N    9
/**********found**********/
void fun(int  ___1___, int  n)
{  int  i, j, max, min, px, pn, t;
/**********found**********/
   for (i=0; i   {  max = min = a[i];
      px = pn = i;
/**********found**********/
      for (j=___3___; j      {  if (max < a[j])
         {  max = a[j]; px = j;  }
         if (min > a[j])
         {  min = a[j]; pn = j;  }
      }
      if (px != i)
      {  t = a[i]; a[i] = max; a[px] = t;
         if (pn == i) pn= px;
      }
      if (pn != i+1)
      {   t = a[i+1]; a[i+1] = min; a[pn] = t; }
   }
}
main()
{  int  b[N]={1,4,2,3,9,6,5,8,7}, i;
   printf("\nThe original data  :\n");
   for (i=0; i   printf("\n");
   fun(b, N);
   printf("\nThe data after moving  :\n");
   for (i=0; i   printf("\n");
}    42、给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#define    N    6
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q;    int  t;
  p = h;
  while (p) {
/**********found**********/
     q = __1__ ;
/**********found**********/
     while (__2__)
     {  if (p->data > q->data)
       {  t = p->data;  p->data = q->data;  q->data = t;  }
       q = q->next;
    }
/**********found**********/
    p = __3__ ;
  }
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
   h=NULL;
   for(i=0; i   {  q=(NODE *)malloc(sizeof(NODE));
      q->data=a[i];
      q->next = NULL;
      if (h == NULL)  h = p = q;
      else    {  p->next = q;  p = q;   }
   }
   return  h;
}
void outlist(NODE  *h)
{  NODE  *p;
   p=h;
   if (p==NULL)  printf("The list is NULL!\n");
   else
   {  printf("\nHead  ");
      do
      {  printf("->%d", p->data); p=p->next;  }
      while(p!=NULL);
      printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]= {0, 10, 4, 2, 8, 6 };
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
}    43、给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#define    N    5
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
void fun(NODE  *h)
{ NODE  *p, *q, *r;
/**********found**********/
  p = h->__1__;
/**********found**********/
  if (p==__2__)  return;
  q = p->next;
  p->next = NULL;
  while (q)
  {  r = q->next;    q->next = p;
/**********found**********/
     p = q;          q = __3__;
  }
  h->next = p;
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
  h = (NODE *)malloc(sizeof(NODE));
  h->next = NULL;
  for(i=0; i  {  q=(NODE *)malloc(sizeof(NODE));
     q->data=a[i];
     q->next = NULL;
     if (h->next == NULL)  h->next = p = q;
     else    {  p->next = q;  p = q;   }
  }
   return  h;
}
void outlist(NODE  *h)
{ NODE  *p;
  p = h->next;
  if (p==NULL)  printf("The list is NULL!\n");
  else
  {  printf("\nHead  ");
     do
     {  printf("->%d", p->data); p=p->next;  }
     while(p!=NULL);
     printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]={2,4,6,8,10};
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
}    44、给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include    
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___ ;
}
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);
}    45、给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。
    例如,有下列矩阵:
    1    2    13    4
    7    8    10    6
    3    5    9    7
    程序执行结果为:find:  a[2][2]=9
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#define   M   3
#define   N   4
void fun(int  (*a)[N])
{ int  i=0,j,find=0,rmax,c,k;
  while( (i  {  rmax=a[i][0];  c=0;
     for(j=1; j       if(rmax/**********found**********/
         rmax=a[i][j]; c= __1__ ; }
     find=1; k=0;
     while(k/**********found**********/
       if (k!=i && a[k][c]<=rmax)  find= __2__ ;
       k++;
     }
     if(find) printf("find: a[%d][%d]=%d\n",i,c,a[i][c]);
/**********found**********/
      __3__ ;
  }
  if(!find) printf("not found!\n");
}
main()
{ int  x[M][N],i,j;
  printf("Enter number for array:\n");
  for(i=0; i    for(j=0; j  printf("The array:\n");
  for(i=0; i  {  for(j=0; j     printf("\n\n");
  }
  fun(x);
}    46、给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include    
void fun(char  *s)
{  int  i, j, n;
   for(i=0; s[i]!='\0'; i++)
/**********found**********/
     if(s[i]>='0' ___1___ s[i]<='9')
     {  n=0;
/**********found**********/
        while(s[i+1+n]!= ___2___)  n++;
        for(j=i+n+1; j>i; j--)
/**********found**********/
           s[j+1]= ___3___;
        s[j+1]='*';
        i=i+1;
     }
}
main()
{  char  s[80]="ba3a54cd23a";
   printf("\nThe original string is :  %s\n",s);
   fun(s);
   printf("\nThe result is :  %s\n",s);
}    47、函数fun的功能是:输出a所指数组中的前n个数据,要求每行输出5个数。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
void fun( int *a,  int n )
{  int  i;
   for(i=0; i   {
/**********found**********/
     if( ___1___==0 )
/**********found**********/
           printf("___2___");
/**********found**********/
      printf("%d  ",___3___);
   }
}
main()
{  int  a[100]={0}, i,n;
   n=22;
   for(i=0; i   fun( a, n);
   printf("\n");
}    48、给定程序中,函数fun的功能是计算下式
 
    例如,若形参e的值为1e-3,函数的返回值2.985678。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!#include 
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;
}
main()
{ double  e=1e-3;
  printf("\nThe result is: %f\n",fun(e));
}    49、给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。
 
    例如,当形参n的值为10时,函数返回:-0.204491。
    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
double fun(int  n)
{ int  i, k;    double  s, t;
  s=0;
/**********found**********/
  k=__1__;
  for(i=1; i<=n; i++) {
/**********found**********/
    t=__2__;
    s=s+k*(2*i-1)*(2*i+1)/(t*t);
/**********found**********/
    k=k*__3__;
  }
  return  s;
}
main()
{ int  n=-1;
  while(n<0)
  { printf("Please input(n>0): ");  scanf("%d",&n);  }
  printf("\nThe result is: %f\n",fun(n));
}    50、给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。
    请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
    注意:源程序存放在考生文件夹下的BLANK1.C中。
          不得增行或删行,也不得更改程序的结构!
#include 
#include 
#define    N    5
typedef struct node {
  int  data;
  struct node  *next;
} NODE;
/**********found**********/
__1__ * fun(NODE *h)
{ NODE  *p, *q, *r;
  p = h;
  if (p == NULL)
    return NULL;
  q = p->next;
  p->next = NULL;
  while (q)
  {
/**********found**********/
    r = q->__2__;
    q->next = p;
    p = q;
/**********found**********/
    q = __3__ ;
  }
  return  p;
}
NODE *creatlist(int  a[])
{  NODE  *h,*p,*q;        int  i;
   h=NULL;
   for(i=0; i   {  q=(NODE *)malloc(sizeof(NODE));
      q->data=a[i];
      q->next = NULL;
      if (h == NULL)  h = p = q;
      else    {  p->next = q;  p = q;   }
   }
   return  h;
}
void outlist(NODE  *h)
{  NODE  *p;
   p=h;
   if (p==NULL)  printf("The list is NULL!\n");
   else
   {  printf("\nHead  ");
      do
      {  printf("->%d", p->data); p=p->next;  }
      while(p!=NULL);
      printf("->End\n");
  }
}
main()
{  NODE  *head;
   int  a[N]={2,4,6,8,10};
   head=creatlist(a);
   printf("\nThe original list:\n");
   outlist(head);
   head=fun(head);
   printf("\nThe list after inverting :\n");
   outlist(head);
}二、程序修改题
    1、给定程序MODI1.C中函数fun的功能是: 比较两个字符串,将长的那个字符串的首地址作为函数值返回。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
/**********found**********/
char fun(char *s,  char *t)
{  int  sl=0,tl=0;    char  *ss, *tt;
   ss=s;    tt=t;
   while(*ss)
   {  sl++;
/**********found**********/
      (*ss)++;
   }
   while(*tt)
   {  tl++;
/**********found**********/
      (*tt)++;
   }
   if(tl>sl)  return  t;
   else       return  s;
}
main()
{  char  a[80],b[80];
   printf("\nEnter a string :  "); gets(a);
   printf("\nEnter a string again :  "); gets(b);
   printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b));
}    2、给定程序MODI1.C中函数 fun 的功能是:求S的值。
 
    例如,当k为10时,函数值应为:1.533852。
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
/************found************/
void fun( int  k )
{  int n; double 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
}
main ( )
{
   printf("%f\n", fun (10));
}    3、由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。
    折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowhigh,查找结束。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#define   N   10
/************found************/
void fun(int  a[], int  m )
{  int  low=0,high=N-1,mid;
   while(low<=high)
   {  mid=(low+high)/2;
      if(m        high=mid-1;
/************found************/
      else If(m > a[mid])
        low=mid+1;
      else  return(mid);
   }
   return(-1);
}
main()
{  int  i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m;
   printf("a数组中的数据如下:");
   for(i=0;i   printf("Enter m: ");  scanf("%d",&m);
   k=fun(a,m);
   if(k>=0) printf("m=%d,index=%d\n",m,k);
   else  printf("Not be found!\n");
}    4、给定程序MODI1.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。
    例如:当s所指的字符串为:"ABCDE"时,
          则t所指的字符串应为:"EDCBAABCDE"。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
#include
void fun (char  *s, char  *t)
{
/************found************/
    int   i;
    sl = strlen(s);
    for (i=0; i/************found************/
       t[i] = s[sl-i];
    for (i=0; i  t[sl+i] = s[i];
    t[2*sl] = '\0';
}
main()
{  char s[100], t[100];
   printf("\nPlease enter string s:"); scanf("%s", s);
   fun(s, t);
   printf("The result is: %s\n", t);
}    5、给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……
    例如,若给n输入7,该项的斐波拉契数值为:13。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
long fun(int  g)
{
/**********found**********/
    switch(g);
    {  case 0: return 0;
/**********found**********/
       case 1 ;case 2 : return 1 ;
    }
    return( fun(g-1)+fun(g-2) );
}
main()
{  long   fib;    int   n;
   printf("Input n:  "); scanf("%d",&n); printf("n = %d\n",n);
   fib=fun(n);
   printf("fib = %d\n\n",fib);
}    6、给定程序MODI1.C中函数 fun 的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num )为止:
     π        1      1      1
    ┄┄≈1 - ┄┄ + ┄┄ - ┄┄ + ...
     4         3      5      7
    例如, 程序运行后, 输入0.0001, 则程序输出3.1414。
    请改正程序中的错误,使它能输出正确的结果。
    注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
#include
float fun ( float num )
{   int s ;
    float n, t, pi ;
    t = 1 ; pi = 0 ; n = 1 ;  s = 1 ;
/**************found**************/
    while(t >= num)
    {
        pi = pi + t ;
        n = n + 2 ;
        s = -s ;
/**************found**************/
        t = s % n ;
    }
    pi = pi * 4 ;
    return pi ;
}
main( )
{   float n1, n2 ;
    printf("Enter a float number: ") ;
    scanf("%f", &n1) ;
    n2 = fun(n1) ;
    printf("%6.4f\n", n2) ;
}    7、给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#define  M   5
/************found************/
int  fun(int  n, int  xx[][])
{  int  i, j, sum=0;
  printf( "\nThe %d x %d matrix:\n", M, M );
  for( i = 0; i < M; i++ )
  {  for( j = 0; j < M; j++ )
/************found************/
      printf( "%f ", xx[i][j] );
    printf("\n");
  }
  for( i = 0 ; i < n ; i++ )
    sum += xx[i][i]+xx[i][ n-i-1 ];
  return( sum );
}
main( )
{  int  aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},
    {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
  printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa ));
}    8、给定程序MODI1.C中函数fun的功能是:根据形参m的值(2≤m≤9〕,在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入 2              | 若输入  4
      则输出:              | 则输出:
            1   2           |       1   2   3   4
            2   4           |       2   4   6   8
                            |       3   6   9   12
                            |       4   8   12  16
    请改正程序函数中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
#include
#define  M 10
int  a[M][M] = {0} ;
/**************found**************/
void fun(int **a, int m)
{  int j, k ;
   for (j = 0 ; j < m ; j++ )
        for (k = 0 ; k < m ; k++ )
/**************found**************/
          a[j][k] = k * j ;
}
main ( )
{  int  i, j, n ;
   printf ( " Enter n : " ) ;  scanf ("%d", &n ) ;
   fun ( a, n ) ;
   for ( i = 0 ; i < n ; i++)
   {    for (j = 0 ; j < n ; j++)
          printf ( "%4d", a[i][j] ) ;
        printf ( "\n" ) ;
   }
}    9、给定程序MODI1.C中fun函数的功能是:求出以下分数序列的前n项之和。
        2      3      5      8     13     21
      ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ……
        1      2      3      5      8     13和值通过函数值返回main函数。
    例如,若 n = 5,则应输出: 8.391667。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
/**************found**************/
fun (int n )
{   int  a = 2, b = 1, c, k ;
    double  s=0.0 ;
    for ( k = 1; k <= n; k++ )
    {  s = s + 1.0 * a / b ;
/**************found**************/
       c = a;  a += b; b += c;
    }
    return(s) ;
}
main( )
{   int   n = 5 ;
    printf( "\nThe value of  function is: %lf\n",  fun (  n ) ) ;
}    10、给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值返回。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun(int m)
{  int i, k ;
   for (i = m + 1 ; ; i++) {
      for (k = 2 ; k < i ; k++)
/**************found**************/
         if (i % k != 0)
            break ;
/**************found**************/
         if (k < i)
           return(i);
   }
}
void main()
{
  int n ;
  n = fun(20) ;
  printf("n=%d\n", n) ;
}    11、给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。
    例如,当s中的数为:87653142时,t中的数为:7531。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
void fun (long  s, long *t)
{ int   d;
  long  sl=1;
/************found************/
  t = 0;
  while ( s > 0)
  {  d = s%10;
/************found************/
     if (d%2 == 0)
     {  *t = d * sl + *t;
 sl *= 10;
     }
     s /= 10;
  }
}
main()
{  long s, t;
   printf("\nPlease enter s:"); scanf("%ld", &s);
   fun(s, &t);
   printf("The result is: %ld\n", t);
}    12、给定程序MODI1.C中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。
    例如,当x的值为9、y的值为11、z的值为15时,函数值为 -3.50。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include
#include
#include
/************found************/
#define   FU(m,n)   (m/n)
float fun(float a,float b,float c)
{  float  value;
   value=FU(a+b,a-b)+FU(c+b,c-b);
/************found************/
   Return(Value);
}
main()
{  float  x,y,z,sum;
   printf("Input  x  y  z:  ");
   scanf("%f%f%f",&x,&y,&z);
   printf("x=%f,y=%f,z=%f\n",x,y,z);
   if (x==y||y==z){printf("Data error!\n");exit(0);}
   sum=fun(x,y,z);
   printf("The result is : %5.2f\n",sum);
}    13、给定程序MODI1.C中函数 fun 的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。
    请改正程序中的错误,使它能得出正确的结果。
    注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#define MAXLINE 20
fun ( char *pstr[6])
{   int  i, j ;
    char *p ;
    for (i = 0 ; i < 5 ; i++ ) {
/**************found**************/
      for (j = i + 1, j < 6, j++)
      {
        if(strcmp(*(pstr + i), *(pstr + j)) > 0)
        {
            p = *(pstr + i) ;
/**************found**************/
            *(pstr + i) = pstr + j ;
            *(pstr + j) = p ;
        }
      }
    }
}
main( )
{   int i ;
    char *pstr[6], str[6][MAXLINE] ;
    for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;
    printf( "\nEnter 6 string(1 string at each line): \n" ) ;
    for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ;
    fun(pstr) ;
    printf("The strings after sorting:\n") ;
    for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ;
}    14、给定程序MODI1.C中函数 fun 的功能是:求出以下分数序列的前n项之和。和值通过函数值返回到main函数。
           2      3      5      8      13     21
          ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ┄┄ , ……
           1      2      3      5      8      13
    例如,若n = 5,则应输出:8.391667。
    请改正程序中的错误,使它能计算出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
/************found************/
void 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;
}
main( )
{   int   n = 5;
    printf( "\nThe value of  function is: %lf\n",  fun (  n ) );
}    15、给定程序MODI1.C是建立一个带头结点的单向链表, 并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
typedef  struct  aa
{  int  data;
   struct  aa  *next;
} NODE;
int fun (  NODE  *h )
{ int  max=-1;
  NODE  *p;
/***********found**********/
  p=h ;
  while(p)
  {  if(p->data>max )
              max=p->data;
/***********found**********/
     p=h->next ;
  }
  return  max;
}
outresult(int  s, FILE *pf)
{  fprintf(pf,"\nThe max in link  :  %d\n",s);}
NODE  *creatlink(int  n, int  m)
{  NODE  *h, *p, *s;
   int  i;
   h=p=(NODE *)malloc(sizeof(NODE));h->data=9999;
   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;
   }
   p->next=NULL;
   return  h;
}
outlink(NODE  *h, FILE  *pf)
{  NODE  *p;
   p=h->next;
   fprintf(pf,"\nTHE  LIST :\n\n  HEAD ");
   while(p)
   {  fprintf(pf,"->%d ",p->data); p=p->next; }
      fprintf(pf,"\n");
   }
main()
{  NODE  *head;  int  m;
   head=creatlink(12, 100);
   outlink(head , stdout);
   m=fun(head);
   printf("\nTHE  RESULT  :\n"); outresult(m, stdout);
}    16、给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
int fun( int  k )
{  int m=0,  mc=0 ;
   while ((k >= 2) && (mc < 10))
   {
/************found************/
     if ((k%13 = 0) || (k%17 = 0))
     { m = m+ k;  mc++; }
     k--;
   }
   return m;
/************found************/
_____
main ( )
{
   printf("%d\n", fun (500));
}    17、给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
    例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
int  fun(int  a,int  b)
{  int   r,t;
   if(a/************found************/
     t=a; b=a; a=t;
   }
   r=a%b;
   while(r!=0)
   {  a=b; b=r; r=a%b; }
/************found************/
   return(a);
}
main()
{  int  num1, num2,a;
   printf("Input  num1  num2:   "); scanf("%d%d",&num1,&num2);
   printf("num1= %d  num2= %d\n\n",num1,num2);
   a=fun(num1,num2);
   printf("The maximun common divisor is %d\n\n",a);
}    18、给定程序MODI1.C中函数 fun 的功能是:统计substr所指子字符串在str所指字符串中出现的次数。
    例如,若字符串为aaas lkaaas,子字符串为as,则应输出2。
    请改正程序中的错误,使它能计算出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun (char *str,char *substr)
{  int i,j,k,num=0;
/************found************/
   for(i = 0, str[i], i++)
     for(j=i,k=0;substr[k]==str[j];k++,j++)
/************found************/
       If(substr[k+1]=='\0')
       {  num++;
          break;
       }
   return num;
}
main()
{
  char str[80],substr[80];
  printf("Input a string:") ;
  gets(str);
  printf("Input a substring:") ;
  gets(substr);
  printf("%d\n",fun(str,substr));
}    19、给定程序MODI1.C中函数 fun 的功能是: 读入一个字符串(长度<20 ),将该字符串中的所有字符按ASCII码升序排序后输出。
    例如, 若输入: edcba, 则应输出: abcde。
    请改正程序中的错误,使它能统计出正确的结果。
    注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
#include
void fun( char t[] )
{
  char c;
  int  i, j;
/**********found***********/
  for( i = strlen( t ); i; i-- )
    for( j = 0; j < i; j++ )
/**********found***********/
      if( t[j] < t[ j + 1 ] )
      {
        c = t[j];
        t[j] = t[ j + 1 ];
        t[j + 1 ] = c;
      }
}
main()
{
  char s[81];
  printf( "\nPlease enter a character string: " );
  gets( s );
  printf( "\n\nBefore sorting:\n  \"%s\"", s );
  fun( s );
  printf( "\nAfter sorting decendingly:\n  \"%s\"\n", s );
}    20、给定程序MODI1.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。
    例如,输入的数为:55  12  34,
          输出结果应当是:a=55.0 , b=34.0 , c=12.0。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include
void  fun(float *a,float *b,float *c)
{
/**********found**********/
   float   *k;
   if( *a<*b )
   {   k=*a; *a=*b; *b=k; }
/**********found**********/
   if( *a>*c )
   {   k=*c; *c=*a; *a=k; }
   if( *b<*c )
   {   k=*b; *b=*c; *c=k; }
}
main()
{  float   a,b,c;
   printf("Input  a  b  c:  ");  scanf("%f%f%f",&a,&b,&c);
   printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
   fun(&a,&b,&c);
   printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c);
}    21、给定程序MODI1.C中函数 fun 的功能是:计算n!。
    例如,给n输入5,则输出120.000000。
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
double fun ( int n )
{ double result = 1.0 ;
/************found************/
  if n = = 0
    return 1.0 ;
  while( n >1 && n < 170 )
/************found************/
    result *= n--
  return result ;
}
main ( )
{ int n ;
  printf("Input N:") ;
  scanf("%d", &n) ;
  printf("\n\n%d! =%lf\n\n", n, fun(n)) ;
}    22、已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的平方根之和。n的值通过形参传入。
    例如,当n=10时,程序的输出结果应为:23.197745。
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
/************found************/
fun(int n)
{  double   sum,  s0, s1, s2, s; int k;
   sum = 1.0;
   if (n <= 2) sum = 0.0;
   s0 = 0.0; s1 = 0.0; s2 = 1.0;
   for (k = 4; k <= n; k++)
   {  s = s0 + s1 + s2;
      sum += sqrt(s);
      s0 = s1; s1 = s2; s2 = s;
   }
/************found************/
   return sum
}
main ( )
{  int n;
   printf("Input N=");
   scanf("%d", &n);
   printf("%f\n", fun(n) );
}    23、给定程序MODI1.C中函数 fun 的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。
    例如,若输入 8 名学生的成绩:80.5  60  72  90.5  98  51.5   88  64则低于平均分的学生人数为:  4 (平均分为:75.5625 )。
    请改正程序中的错误,使它能统计出正确的结果。
    注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
#define  N   20
int fun ( float  *s, int n, float *aver )
{  float  ave, t = 0.0 ;
   int  count = 0, k, i ;
   for ( k = 0 ; k < n ; k++ )
/**************found**************/
     t = s[k] ;
   ave =  t / n ;
   for (  i = 0 ; i < n ; i++ )
     if ( s[ i ] < ave ) count++ ;
/**************found**************/
   *aver = Ave ;
   return  count ;
}
main()
{  float  s[30], aver ;
   int  m, i ;
   printf ( "\nPlease enter m:  " ) ; scanf ("%d", &m ) ;
   printf ( "\nPlease enter %d mark :\n ", m ) ;
   for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ;
   printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) );
   printf( "Ave = %f\n", aver ) ;
}    24、给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。
              ┌ 10            (n=1)
       fun(n)=┥
              └ fun(n-1)+2    (n>1)
    例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include
/************found************/
fun ( n )
{  int  c;
/************found************/
   if(n=1)
     c = 10 ;
   else    
     c= fun(n-1)+2; 
   return(c);
}
main()
{  int   n;
   printf("Enter  n :  "); scanf("%d",&n);
   printf("The result : %d\n\n", fun(n));
}    25、
    例如,若q的值为: 50.0,则函数值为: 49.394948。
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
double  fun( double q )
{ int n; double  s,t;
  n = 2;
  s = 2.0;
  while (s<=q)
  {
    t=s;
/************found************/
    s=s+(n+1)/n;
    n++;
  }
  printf("n=%d\n",n);
/************found************/
  return s;
}
main ( )
{
   printf("%f\n", fun(50));
}    26、给定程序MODI1.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。
    例如,若输入:77777,则输出将是:32767。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#include
#include
int  fun( char *p )
{   int   n;
/**********found**********/
    n= *P-'o';
    p++;
    while( *p!=0 ) {
/**********found**********/
      n=n*8+*P-'o';
 p++;
    }
    return  n;
}
main()
{   char   s[6];     int  i;   int   n;
    printf("Enter a string (Ocatal digits):  "); gets(s);
    if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); }
    for(i=0; s[i]; i++)
       if(s[i]<'0'||s[i]>'7')
       {  printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); }
    printf("The original string:  "); puts(s);
    n=fun(s);
    printf("\n%s is convered to integer number: %d\n\n",s,n);
}    27、给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点 (不包括头结点)数据域为偶数的值累加起来, 并且作为函数值返回。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
typedef  struct  aa
{  int  data;  struct  aa  *next; }NODE;
int  fun(NODE  *h)
{ int   sum = 0 ;
  NODE  *p;
/***********found**********/
  p=h;
  while(p)
  {  if(p->data%2==0)
     sum +=p->data;
/***********found**********/
     p=h->next;
  }
  return  sum;
}
NODE  *creatlink(int  n)
{  NODE  *h, *p, *s;
   int  i;
   h=p=(NODE *)malloc(sizeof(NODE));
   for(i=1; i<=n; i++)
   {  s=(NODE *)malloc(sizeof(NODE));
      s->data=rand()%16;
      s->next=p->next;
      p->next=s;
      p=p->next;
   }
   p->next=NULL;
   return  h;
}
outlink(NODE  *h, FILE  *pf)
{  NODE *p;
   p = h->next;
   fprintf(pf ,"\n\nTHE  LIST :\n\n  HEAD " );
   while(p)
   {  fprintf(pf ,"->%d ",p->data ); p=p->next; }
      fprintf (pf,"\n");
}
outresult(int  s, FILE *pf)
{  fprintf(pf,"\nThe sum of even numbers  :  %d\n",s);}
main()
{  NODE  *head;    int  even;
   head=creatlink(12);
   head->data=9000;
   outlink(head , stdout);
   even=fun(head);
   printf("\nThe  result  :\n"); outresult(even, stdout);
}    28、给定程序MODI1.C中,fun函数的功能是:删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据。
  请改正函数fun中指定部位的错误,使它能得出正确的结果。
  注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include 
#include 
#define   N  20
int  fun( int *b )
{
/**********found**********/
   int  t[N] ,i, num
   for(i=0; i     if(b[i]>=10)
/**********found**********/
       t[++num]=b[i];
/**********found**********/
    for(i=0; i      b[i]=t[i];
    return( num );
}
main()
{  int  a[N],i,num;
   printf("a数组中的数据 :\n");
   for(i=0;i   printf("\n");
   num=fun(a);
   for(i=0;i   printf("\n");
}    29、在主函数中从键盘输入若干个数放入数组中, 用0结束输入并放在最后一个元素中。给定程序MODI1.C中函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。
    例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,
          则程序的运行结果为:19.250000。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构!
#include
double fun ( int x[])
{
/************found************/
  int sum = 0.0;
  int c=0, i=0;
  while (x[i] != 0)
  { if (x[i] > 0) {
       sum += x[i]; c++; }
    i++;
  }
/************found************/
  sum \= c;
  return sum;
}
main( )
{  int x[1000];  int i=0;
   printf( "\nPlease enter some data (end with 0): " );
   do
     {  scanf("%d", &x[i]);  }
   while (x[i++] != 0);
   printf("%f\n", fun ( x ));
}    30、给定程序MODI1.C中,函数fun()的功能是统计s所指一维数组中0的个数(存在变量zero中)和1的个数(存在变量one中),并输出结果。
    请改正函数fun中指定部位的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include 
void  fun( int  *s, int  n )
{
/**********found**********/
   int  i,  one=0, zero ;
   for(i=0; i/**********found**********/
   switch( s[i] );
   {
/**********found**********/
      case  0  :  zero++;
      case  1  :  one ++;
   }
   printf( "one : %d    zero : %d\n", one,  zero);
}
main()
{  int  a[20]={1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0}, n=20;
   fun( a,  n );
}    31、
    例如,若给m输入 -100,给n输入90,则函数求得的一个根值为2.000。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#include
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;
}
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);
}    32、给定程序MODI1.C中函数fun的功能是: 依次取出字符串中所有数字字符, 形成新的字符串, 并取代原字符串。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!#include
void  fun(char  *s)
{  int  i,j;
   for(i=0,j=0; s[i]!='\0'; i++)
        if(s[i]>='0' && s[i]<='9')
/**********found**********/
            s[j]=s[i];
/**********found**********/
        s[j]="\0";
}
main()
{  char  item[80];
   printf("\nEnter a string  :  ");gets(item);
   printf("\n\nThe  string  is  : \"%s\"\n",item);
   fun(item);
   printf("\n\nThe string of changing is  : \"%s\"\n",item );
}    33、给定程序MODI1.C中函数 fun 的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。
    例如,n=8时,输入:193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763
    所得平均值为:195.838750,在平均值以上的实数个数应为:5
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
int fun(double x[], int n)
{
/************found************/
  int j, c=0, double xa=0.0;
   for (j=0; j     xa += x[j]/n;
   printf("ave =%f\n",xa);
   for (j=0; j/************found************/
     if (x[j] => xa)
       c++;
   return c;
}
main ( )
{  double x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763};
   printf("%d\n", fun (x, 8));
}    34、给定程序MODI1.C中函数 fun 的功能是:将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。
    例如,当s所指字符串中的内容为:"abcdabfabc",t1所指子串中的内容为:"ab",t2所指子串中的内容为:"99"时, 结果,在w所指的数组中的内容应为:"abcdabf99c"。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
void fun (char  *s,  char *t1, char *t2 , char *w)
{
  char   *p , *r, *a=s;
  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++; }
}
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");
}    35、给定程序MODI1.C中函数 fun 的功能是:计算
    S = f(-n) + f(-n+1) +…+ f(0) + f(1) + f(2) +…+ f(n)的值。例如,当n为5时,函数值应为:10.407143。f(x)函数定义如下:
           ┌(x+1)/(x-2)     x>0 且 x≠2
    f(x) = ┤0               x=0 或 x=2
           └(x-1)/(x-2)     x<0
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
/************found************/
f( double x)
{
   if (x == 0.0 || x == 2.0)
     return 0.0;
   else if (x < 0.0)
     return (x -1)/(x-2);
   else
     return (x +1)/(x-2);
}
double fun(  int  n )
{  int i;  double   s=0.0, y;
   for (i= -n; i<=n; i++)
    {y=f(1.0*i); s += y;}
/************found************/
   return s
}
main ( )
{
   printf("%f\n", fun(5) );
}    36、给定程序MODI1.C中函数 fun 的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。
    若high的值为: 100, 则函数的值为: 732。
    请改正程序中的错误,使程序能输出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
#include
int fun( int  high )
{ int sum = 0,  n=0,  j,  yes;
/************found************/
  while ((high >= 2) && (n < 10)
  {  yes = 1;
     for (j=2; j<=high/2; j++ )
     if (high % j ==0 ){
/************found************/
       yes=0; break
     }
     if (yes) { sum +=high; n++; }
     high--;
  }
  return sum ;
}
main ( )
{
   printf("%d\n", fun (100));
}    37、给定程序MODI1.C中 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
    a 和 n 是 fun 函数的形参,表达式的值作为函数值传回 main函数。
    请改正程序中的错误,使它能计算出正确的结果。
    注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
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) ;
}
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 ) );
}    38、给定程序MODI1.C中函数 fun 的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。
    例如,若输入"Ab, cD",则输出"AB, CD"。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
#include
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 );
}
main( )
{
  char tt[81];
  printf( "\nPlease enter a string: " );
  gets( tt );
  printf( "\nThe result string is:\n%s", fun( tt ) );
}    39、给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个空格。
    例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK,
    调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
void  fun(char  *p, char  *b)
{  int   i, k=0;
   while(*p)
   {  i=1;
      while( i<=3 && *p ) {
/**********found**********/
          b[k]=p;
          k++; p++; i++;
      }
      if(*p)
     {
/**********found**********/
         b[k++]=" ";
      }
    }
    b[k]='\0';
}
main()
{  char  a[80],b[80];
   printf("Enter a string:      ");  gets(a);
   printf("The original string: ");  puts(a);
   fun(a,b);
   printf("\nThe string after insert space:   ");  puts(b); printf("\n\n");
}    40、给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。
    例如,当s中的数为:7654321时,t中的数为:642。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
/************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;
    }
}
main()
{  long   s, t;
   printf("\nPlease enter s:"); scanf("%ld", &s);
   fun(s, &t);
   printf("The result is: %ld\n", t);
}    41、给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
    例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
    请改正程序中的错误,使它能得出正确结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include
#define   SIZE   20
fun(double  *s, double  *w)
{  int   k,i;    double  sum;
   for(k=2,i=0;i   {   s[i]=k;   k+=2;   }
/**********found**********/
   sun=0.0;
   for(k=0,i=0;i   {  sum+=s[i];
/**********found**********/
      if(i+1%5==0)
      {   w[k]=sum/5;  sum=0;  k++; }
   }
   return  k;
}
main( )
{  double  a[SIZE],b[SIZE/5];
   int   i, k;
   k = fun(a,b);
   printf("The original data:\n");
   for(i=0; i   {  if(i%5==0) printf("\n");
      printf("%4.0f", a[i]);
   }
   printf("\n\nThe result :\n");
   for(i=0; i   printf("\n\n");
}    42、给定程序MODI1.C中函数fun的功能是: 将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A, z转换为a),其它字符不变。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
void  fun (char  *s)
{
/**********found***********/
  while(*s!='@')
  {  if(*s>='A' && *s<='Z' || *s>='a' && *s<='z')
     {  if(*s=='Z')  *s='A';
        else if(*s=='z')  *s='a';
        else              *s += 1;
     }
/**********found***********/
     (*s)++;
  }
}
main()
{  char  s[80];
   printf("\n  Enter a string with length < 80.  :\n\n  "); gets(s);
   printf("\n  The  string :  \n\n  ");  puts(s);
   fun ( s );
   printf ("\n\n  The  Cords :\n\n  ");  puts(s);
}    43、给定程序MODI1.C中函数fun的功能是: 计算s所指字符串中含有t所指字符串的数目, 并作为函数值返回。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#define    N     80
int  fun(char  *s,  char  *t)
{  int  n;
   char  *p , *r;
   n=0;
   while ( *s )
   {  p=s;
/*********found**********/
      r=p;
      while(*r)
        if(*r==*p) {  r++;  p++;  }
        else  break;
/*********found**********/
      if(*r= 0)
        n++;
      s++;
   }
   return  n;
}
main()
{  char  a[N],b[N];    int   m;
   printf("\nPlease enter string a : "); gets(a);
   printf("\nPlease enter substring b : "); gets( b );
   m=fun(a, b);
   printf("\nThe result is :  m = %d\n",m);
}    44、给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a 中的值原为8,b中的值原为3, 程序运行后 a 中的值为 3,b中的值为8。
    请改正程序中的错误,使它能得出正确的结果。
    注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!#include
int fun(int *x,int y)
{
  int t ;
/**************found**************/
  t = x ; x = y ;
/**************found**************/
  return(y) ;
}
main()
{
  int a = 3, b = 8 ;
  printf("%d  %d\n", a, b) ;
  b = fun(&a, b) ;
  printf("%d  %d\n", a, b) ;
}    45、给定程序MODI1.C中函数fun的功能是:根据整型形参m的值,计算如下公式的值。
                1       1              1
      t = 1 - ----- - ----- - …… - -----
               2*2     3*3            m*m
    例如,若 m 中的值为: 5,则应输出: 0.536389。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
double fun ( int m )
{  double   y = 1.0 ;
   int  i ;
/**************found**************/
   for(i = 2 ; i < m ; i++)
/**************found**************/
      y -= 1 /(i * i) ;
   return( y ) ;
}
main( )
{  int n = 5 ;
   printf( "\nThe result is %lf\n", fun ( n ) ) ;
}    46、给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。
               1       1       1              1
     y = 1 + ----- + ----- + ----- + …… + -----
              2*2     3*3     4*4            m*m
    例如,若 m 中的值为: 5,则应输出:1.463611。
    请改正程序中的错误,使它能得出正确的结果。
    注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include
double  fun ( int   m )
{ double  y = 1.0 ;
   int i;
/**************found**************/
   for(i = 2 ; i < m ; i++)
/**************found**************/
      y += 1 / (i * i) ;
   return( y ) ;
}
main( )
{  int n = 5 ;
   printf( "\nThe result is %lf\n", fun ( n ) ) ;
}    47、给定程序MODI1.C中,函数fun的功能是:在任意给定的N个正整数中,从左到右依次逐个取三个数作为一组,按值大小找出该组数的中值,用该中值替换与该组数对应的原三个数中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中输出。例如,有10个正整数如下:
 
    请改正程序中指定部位的错误,使它能得出正确结果。
    注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
#include 
#define   N   10
int findmid(int  a, int  b, int  c)
{  int  t;
   t = (a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b));
/**********found**********/
   return  b;
}
void fun(int  x[])
{  int  i,a,b,c,t[N];
/**********found**********/
   for(i=0;i   for(i=0;i   {  a=t[i];b=t[i+1];c=t[i+2];
/**********found**********/
      t[i+1]=findmid(a,b,c);
   }
}
main()
{  int  i, x[N]={6,5,7,23,18,5,8,21,45,38};
   for(i=0; i   printf("\n");
   fun(x);
   for(i=0; i   printf("\n");
}    48、给定程序MODI1.C中函数 fun 的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
    例如,当s所指字符串为:"ABCD" 时,则t所指字符串中的内容应为:"ABCDDCBA"。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include
#include
/************found************/
void fun (char  s, char  t)
{
  int   i, d;
  d = strlen(s);
  for (i = 0; i  for (i = 0; i/************found************/
  t[2*d-1] = '\0';
}
main()
{
  char   s[100], t[100];
  printf("\nPlease enter string S:"); scanf("%s", s);
  fun(s, t);
  printf("\nThe result is: %s\n", t);
}    49、给定程序MODI1.C中函数 fun 的功能是:判断一个整数是否是素数,若是返回1,否则返回0。
    在main()函数中,若fun返回1输出YES,若fun返回0输出NO!。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!
#include
int  fun ( int m )
{  int k = 2;
   while ( k <= m && (m%k))
/************found************/
     k++
/************found************/
   if (m = k )
     return 1;
   else   return  0;
}
main( )
{  int  n;
   printf( "\nPlease enter n: " );   scanf(  "%d", &n );
   if (  fun (  n ) )  printf( "YES\n" );
   else printf( "NO!\n" );
}    50、给定程序MODI1.C中函数fun的功能是: 将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。
     例如, 字符串中的数据为: AABBCCDDEEFF,
               则输出应当是:ABBCDDEFF。
    请改正函数fun中指定部位的错误, 使它能得出正确的结果。
    注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
#include
#include
#define   N     80
void fun(char *s, char t[])
{  int  i, j=0;
   for(i=0; i<(int)strlen(s); i++)
/***********found**********/
   if(i%2 && s[i]%2==0)
        t[j++]=s[i];
/***********found**********/
   t[i]='\0';
}
main()
{  char  s[N], t[N];
   printf("\nPlease enter string s : "); gets(s);
   fun(s, t);
   printf("\nThe result is : %s\n",t);
}三、程序编写题
    1、请编写函数fun,函数的功能是: 移动字符串中的内容,移动的规则如下: 把第1到第m个字符, 平移到字符串的最后, 把第m+1到最后的字符移到字符串的前部。
    例如, 字符串中原有的内容为: ABCDEFGHIJK, m的值为3, 则移动后, 字符串中的内容应该是: DEFGHIJKABC。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define    N    80
void fun1(char *w)  /* 本函数的功能是将字符串中字符循环左移一个位置 */
{
  int i; char t;
  t=w[0];
  for(i=0;i<(int)strlen(w)-1;i++)
    w[i]=w[i+1];
  w[strlen(w)-1]=t;
}
void  fun(char  *w, int  m)  /* 可调用fun1函数左移字符 */
{}
main()
{  char  a[N]= "ABCDEFGHIJK";
   int  m;void
   printf("The original string:\n");puts(a);
   printf("\n\nEnter  m:  ");scanf("%d",&m);
   fun(a,m);
   printf("\nThe string after moving:\n");puts(a);
   printf("\n\n");
}    2、编写函数fun,它的功能是:计算并输出下列级数和:
          1      1            1
    S = ── + ── + … + ───
        1×2   2×3         n(n+1)
    例如,当n = 10时,函数值为:0.909091。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
double  fun(  int  n )
{}
main()   /* 主函数 */
{  void
   printf("%f\n", fun(10));
}    3、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了尾部的*号之外,将字符串中其它*号全部删除。形参p已指向字符串中最后的一个字母。在编写函数时,不得使用C语言提供的字符串函数。
    例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是: ABCDEFG*******。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun( char *a, char *p )
{}
main()
{  char  s[81],*t;
   void
   printf("Enter a string:\n");gets(s);
   t=s;
   while(*t)t++;
   t--;
   while(*t=='*')t--;
   fun( s , t );
   printf("The string after deleted:\n");puts(s);
}    4、函数fun的功能是: 将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。
    例如,当a=45,b=12。调用该函数后,c=1425。
    注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
void fun(int a, int b, long *c)
{}
main()   /* 主函数 */
{  int a,b; long c;void
   printf("Input a b:");
   scanf("%d%d", &a, &b);
   fun(a, b, &c);
   printf("The result is: %ld\n", c);
}    5、某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。
    例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。
#include
#define   N   8
typedef  struct
{  char  num[10];
   double  s[N];
   double  ave;
} STREC;
void  fun(STREC *a)
{}
main()
{  STREC  s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
   int  i;
   void
   fun( &s );
   printf("The %s's student data:\n", s.num);
   for(i=0;i     printf("%4.1f\n",s.s[i]);
   printf("\nave=%7.3f\n",s.ave);
}    6、请编写一个函数void fun (char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中, a指向原字符串, 删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。
    例如,输入一个字符串: World,然后输入3,则调用该函数后的结果为: Word。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define LEN 20
void fun (char a[], char b[], int n)
{}
main( )
{   char str1[LEN], str2[LEN] ;
    int n ;
    void
    printf("Enter the string:\n") ;
    gets(str1) ;
    printf("Enter the index of the char deleted:") ;
    scanf("%d", &n) ;
    fun(str1, str2, n) ;
    printf("The new string is: %s\n", str2) ;
}    7、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。
    例如,当a=45,b=12。调用该函数后,c=4251。
    注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(int a, int b, long *c)
{}
main()
{  int  a,b; long  c;void
   printf("Input a b:");
   scanf("%d%d", &a, &b);
   fun(a, b, &c);
   printf("The result is: %ld\n", c);
}    8、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。
    例如,当a=45,b=12。调用该函数后,c=5241。
    注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
void fun(int  a, int  b, long  *c)
{}
main()
{  int  a,b; long  c;void
   printf("Input a b:");
   scanf("%d%d", &a, &b);
   fun(a, b, &c);
   printf("The result is: %ld\n", c);
}    9、请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17, 5,则应输出:19, 23, 29, 31, 37。函数fun中给出的语句仅供参考。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(int m, int k, int xx[])
{
  /* 以下代码仅供参考 */
  int i, j=1, t=m+1;
  while(j<=k)
  {
    /* 以下完成判断素数,并存放到数组xx中 */
  }
}
main()
{
   int m, n, zz[1000] ;void
   printf( "\nPlease enter two integers:") ;
   scanf("%d%d", &m, &n ) ;
   fun( m, n, zz) ;
   for( m = 0 ; m < n ; m++ )
      printf("%d ", zz[m]) ;
   printf("\n") ;
}    10、请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
    例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun ( int x, int  pp[], int *n )
{}
main( )
{  int  x, aa[1000], n, i ;void
   printf( "\nPlease enter an integer number:\n" ) ; scanf("%d", &x) ;
   fun(x, aa, &n ) ;
   for( i = 0 ; i < n ; i++ )
         printf("%d ", aa[i]) ;
   printf("\n") ;
}    11、编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
    例如,分别输入下面两个字符串:
            FirstString--
            SecondString
    程序输出:
            FirstString--SecondString
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(char p1[], char p2[])
{}
main()
{    char s1[80], s2[40] ;void
     printf("Enter s1 and s2:\n") ;
     scanf("%s%s", s1, s2) ;
     printf("s1=%s\n", s1) ;
     printf("s2=%s\n", s2) ;
     printf("Invoke fun(s1,s2):\n") ;
     fun(s1, s2) ;
     printf("After invoking:\n") ;
     printf("%s\n", s1) ;
}    12、规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。
    例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
void  fun( char *a )
{}
main()
{  char  s[81];
   void
   printf("Enter a string:\n");gets(s);
   fun( s );
   printf("The string after deleted:\n");puts(s);
}    13、请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回此值。
    例如,若输入字符串: 123412132,输入字符为: 1,则输出:3。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define  M 81
int fun(char *ss, char c)
{}
main()
{  char  a[M], ch;
   void
   printf("\nPlease enter a string:"); gets(a);
   printf("\nPlease enter a char:"); ch = getchar();
   printf("\nThe number of the char is: %d\n", fun(a, ch));
}    14、请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。
    注意: 部分源程序存在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#define M 4
int fun (int a[][M])
{}
main( )
{  int arr[2][M]={5,8,3,45,76,-4,12,82} ;void
   printf("max =%d\n", fun(arr)) ;
}    15、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中, 一维数组中数据的个数存放在形参n所指的存储单元中。
    例如, 二维数组中的数据为:
         33  33  33  33
         44  44  44  44
         55  55  55  55
    则一维数组中的内容应是:
    33  33  33  33  44  44  44  44  55  55  55  55。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun(int  (*s)[10], int  *b, int  *n, int mm, int nn)
{}
main()
{ int w[10][10] = {{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j ;
  int a[100] = {0}, n = 0 ;void
  printf("The matrix:\n") ;
  for(i = 0 ; i < 3 ; i++)
  { for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ;
    printf("\n") ;
  }
  fun(w, a, &n, 3, 4) ;
  printf("The A array:\n") ;
  for(i = 0 ; i < n ; i++) printf("%3d",a[i]);printf("\n\n") ;
}    16、编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。
    例如若n为1000时,程序输出应为:s = 153.909064。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
#include
double  fun( int  n)
{}
main()   /* 主函数 */
{  void
   printf("s =%f\n", fun ( 1000) );
}    17、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。
    例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun( char *a )
{}
main()
{  char  s[81];
   void
   printf("Enter a string:\n");gets(s);
   fun( s );
   printf("The string after deleted:\n");puts(s);
}    18、请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005, 即某项小于0.0005时停止迭代):
 π      1  1×2 1×2×3   1×2×3×4         1×2×…×n
 ─ = 1+─+─—+────+──────+……+────────
 2       3  3×5 3×5×7   3×5×7×9      3×5×…×(2n+1)
    程序运行后,如果输入精度0.0005,则程序输出为3.14…。
    注意: 部分源程序存在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
double  fun ( double  eps)
{}
main( )
{ double  x;void
  printf("Input eps:") ;
  scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
}    19、请编写一个函数fun, 其功能是: 将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母, 则不转换)。
    例如, 若输入"abc4EFg",则应输出"aBc4EFg"。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
void fun( char *ss )
{}
void main( void )
{
   char tt[51];void
   printf( "\nPlease enter an character string within 50 characters:\n" );
   gets( tt );
   printf( "\n\nAfter changing, the string\n  \"%s\"", tt );
   fun(tt) ;
   printf( "\nbecomes\n  \"%s\"", tt );
}    20、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
#define   N   16
typedef  struct
{  char  num[10];
   int   s;
} STREC;
int  fun( STREC  *a, STREC *b )
{}
main()
{  STREC  s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
  {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},
  {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
  {"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};
   STREC  h[N];
   int  i,n;FILE *out ;
   n=fun( s,h );
   printf("The %d highest score :\n",n);
   for(i=0;i     printf("%s  %4d\n",h[i].num,h[i].s);
   printf("\n");
   out = fopen("c:\\test\\out.dat","w") ;
   fprintf(out, "%d\n",n);
   for(i=0;i     fprintf(out, "%4d\n",h[i].s);
   fclose(out);
}    21、请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234",则函数把它转换为整数值 -1234。函数fun中给出的语句仅供参考。
    注意: 部分源程序存在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
long  fun ( char *p)
{
  /* 以下代码仅供参考 */
  int i, len, t;  /* len为串长,t为正负标识 */
  long x=0;
  len=strlen(p);
  if(p[0]=='-')
  {  t=-1; len--; p++; }
  else t=1;
  /* 以下完成数字字符串转换为一个数字 */
  return x*t;
}
main()   /* 主函数 */
{ char s[6];void
  long    n;
  printf("Enter a string:\n") ;
  gets(s);
  n = fun(s);
  printf("%ld\n",n);
}    22、编写函数fun,它的功能是计算下列级数和,和值由函数值返回。
 
    例如,当n = 10,x=0.3时,函数值为1.349859。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
double fun(double x , int  n)
{}
main()
{  void
   printf("%f\n", fun(0.3,10));
}    23、请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
    例如, 输入如下整数: 876 675 896 101 301 401 980 431 451 777
    则输出结果为: 6, 980
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(int *s, int t, int *k)
{}
main( )
{
    int a[10]={876,675,896,101,301,401,980,431,451,777}, k ;void
    fun(a, 10, &k) ;
    printf("%d, %d\n", k, a[k]) ;
}    24、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做, 字符串中间和前面的*号不删除。
    例如,字符串中的内容为:****A*BC*DEF*G*******,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为7,则字符串中的内容仍为:****A*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
void  fun( char *a,int  n )
{}
main()
{  char  s[81];  int  n;
   void
   printf("Enter a string:\n");gets(s);
   printf("Enter n :  ");scanf("%d",&n);
   fun( s,n );
   printf("The string after deleted:\n");puts(s);
}    25、编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
         F(0)=0,F(1)=1
         F(n)=F(n-1)+F(n-2)
    例如:当t = 1000时,函数值为:1597。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
int  fun( int  t)
{}
main()   /* 主函数 */
{  int  n;
   void
   n=1000;
   printf("n = %d, f = %d\n",n, fun(n));
}    26、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp, strcmp(a, b)当a和b字符串相等时返回值为0)。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define   N   16
typedef  struct
{  char  num[10];
   int   s;
} STREC;
STREC  fun( STREC  *a, char *b )
{
  int i;
  STREC t = {'\0', -1};
}
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",77},{"GA017",64},{"GA018",64},{"GA016",72}};
   STREC  h;
   char  m[10];
   int  i;FILE *out ;
   printf("The original data:\n");
   for(i=0; i   {  if(i%4==0) printf("\n");
      printf("%s %3d  ",s[i].num,s[i].s);
   }
   printf("\n\nEnter the number:  ");gets(m);
   h=fun( s,m );
   printf("The data :  ");
   printf("\n%s  %4d\n",h.num,h.s);
   printf("\n");
   out = fopen("c:\\test\\out.dat","w") ;
   h=fun(s,"GA013");
   fprintf(out,"%s  %4d\n",h.num,h.s);
   fclose(out);
}    27、请编写函数fun, 函数的功能是: 判断字符串是否为回文?若是, 函数返回1,主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样的字符串。
    例如, 字符串LEVEL是回文, 而字符串123312就不是回文。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define  N  80
int fun(char *str)
{}
main()
{ char  s[N] ;void
  printf("Enter a string: ") ; gets(s) ;
  printf("\n\n") ; puts(s) ;
  if(fun(s)) printf("  YES\n") ;
  else       printf("  NO\n") ;
}    28、请编写函数fun,其功能是:统计s所指字符串中的数字字符个数,并作为函数值返回。
    例如,s所指字符串中的内容是:2def35adh25  3kjsdf 7/kj8655x,
          函数fun返回值为:11
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include 
void
int fun(char  *s)
{}
main()
{  char *s="2def35adh25  3kjsdf 7/kj8655x";
   printf("%s\n",s);
   printf("%d\n",fun(s));
}    29、编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
           1       1                1
    S=1 + ── + ─── + ... + ──────
          1+2    1+2+3          1+2+3+...+n
    例如:若n的值为11时,函数的值为:1.833333
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
double fun(int  n)
{}
main()
{  int n; double s;
   void
   printf("\nPlease enter N:"); scanf("%d", &n);
   s = fun(n);
   printf("the result is: %f\n", s);
}    30、请编写函数fun,其功能是将形参s所指的字符串放入形参a所指的字符数组中,使a中存放同样的字符串。说明:不得使用系统提供的字符串函数。
    注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。
#include 
#define    N    20
void
void  fun( char  *a , char  *s)
{}
main()
{  char  s1[N],  *s2="abcdefghijk";
   fun( s1,s2);
   printf("%s\n", s1);
   printf("%s\n", s2);
}    31、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是: 除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。
   例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun( char *a, char *h,char *p )
{}
main()
{  char  s[81],*t, *f;
   void
   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);
}    32、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的顺序依次放到一个字符串中。
    例如, 二维数组中的数据为:
         W  W  W  W
         S  S  S  S
         H  H  H  H
    则字符串中的内容应是: WSHWSHWSHWSH。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。#include
#define     M   3
#define     N   4
void  fun(char  s[][N], char *b)
{
  int i,j,n=0;
  for(i=0; i < N;i++)  /* 请填写相应语句完成其功能 */
  {  }
  b[n]='\0';
}
main()
{  char  a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}};
   int  i,j;void
   printf("The matrix:\n");
   for(i=0; i   {  for(j=0;j      printf("\n");
   }
   fun(w,a);
   printf("The A string:\n");puts(a);
   printf("\n\n");
}    33、编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m > n。
           m!
     P = ───
         n!(m-n)!
    例如:m=12,n=8时,运行结果为495.000000。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
float  fun(int m, int n)
{}
main()   /* 主函数 */
{  void
   printf("P=%f\n", fun (12,8));
}    34、函数fun的功能是:将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
    例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、… 都应当删除,其它依此类推。最后t所指的数组中的内容应是:"BDF24"。
    注意: 部分源程序存在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
void  fun(char  *s, char  t[])
{}
main()
{
  char   s[100], t[100];void
  printf("\nPlease enter string S:"); scanf("%s", s);
  fun(s, t);
  printf("\nThe result is: %s\n", t);
}    35、编写函数fun,它的功能是计算:
 
    s作为函数值返回。
    在C语言中可调用log ( n )函数求ln (n)。log函数的引用说明是:double log(double x)。
    例如,若m的值为: 20,fun函数值为: 6.506583。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
double   fun(  int  m )
{}
main()
{
   void
   printf("%f\n", fun(20));
}    36、编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0 的一个实根。
 
    迭代步骤如下:(1)取 x1 初值为0.0;(2)x0 = x1,把x1的值赋给 x0;(3)x1 = cos(x0),求出一个新的x1;(4)若x0 - x1的绝对值小于 0.000001,执行步骤(5),否则执
     行步骤(2);(5)所求x1就是方程 cos(x)-x=0 的一个实根,作为函数值返回。
    程序将输出结果Root=0.739086。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
#include
double fun()
{}
main()
{
   void
   printf("Root =%f\n", fun());
}    37、请编写一个函数 void fun(char  *tt, int pp[]),统计在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
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
void fun(char *tt, int pp[])
{}
main( )
{  char aa[1000] ;
   int  bb[26], k ;
   void
   printf( "\nPlease enter  a char string:" ) ; scanf("%s", aa) ;
   fun(aa, bb ) ;
   for ( k = 0 ; k < 26 ; k++ ) printf ("%d ", bb[k]) ;
   printf( "\n" ) ;
}    38、请编写函数fun,其功能是: 将所有大于1小于整数m的非素数存入xx所指数组中, 非素数的个数通过k传回。
    例如,若输入:17,则应输出:4 6 8 9 10 12 14 15 16。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun( int m, int *k, int xx[] )
{}
main()
{
   int m, n, zz[100];
   void
   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] );
}    39、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。
    例如,若学生的成绩是:85,76,69,85,91,72,64,87, 则平均分应当是:78.625。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define   N   8
struct  slist
{  double   s;
   struct slist  *next;
};
typedef  struct slist  STREC;
double  fun( STREC *h  )
{}
STREC * creat( double *s)
{ STREC  *h,*p,*q;   int  i=0;
  h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
  while(i  { q=(STREC*)malloc(sizeof(STREC));
    q->s=s[i]; i++;  p->next=q; p=q;
  }
  p->next=0;
  return  h;
}
outlist( STREC *h)
{ STREC  *p;
  p=h->next; printf("head");
  do
  { printf("->%4.1f",p->s);p=p->next;}
  while(p!=0);
  printf("\n\n");
}
main()
{  double  s[N]={85,76,69,85,91,72,64,87},ave;
   void
   STREC  *h;
   h=creat( s );   outlist(h);
   ave=fun( h );
   printf("ave= %6.3f\n",ave);
}    40、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
#define   N   16
typedef  struct
{  char  num[10];
   int   s;
} STREC;
void  fun( STREC  a[] )
{}
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   {  if( (i)%4==0 )printf("\n");
      printf("%s  %4d  ",s[i].num,s[i].s);
   }
   printf("\n");
   out = fopen("c:\\test\\out.dat","w") ;
   for(i=0;i   {  if( (i)%4==0 && i) fprintf(out, "\n");
      fprintf(out, "%4d  ",s[i].s);
   }
   fprintf(out,"\n");
   fclose(out) ;
}    41、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#define   N   8
typedef  struct
{  char  num[10];
   double  s;
} STREC;
double  fun( STREC  *a, STREC *b, int *n )
{}
main()
{  STREC  s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},
                {"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};
   STREC  h[N],t;FILE *out ;
   int  i,j,n;  double  ave;
   ave=fun( s,h,&n );
   printf("The %d student data which is lower than %7.3f:\n",n,ave);
   for(i=0;i     printf("%s  %4.1f\n",h[i].num,h[i].s);
   printf("\n");
   out = fopen("c:\\test\\out.dat","w") ;
   fprintf(out, "%d\n%7.3f\n", n, ave);
   for(i=0;i     for(j=i+1;j       if(h[i].s>h[j].s) {t=h[i] ;h[i]=h[j]; h[j]=t;}
   for(i=0;i     fprintf(out,"%4.1f\n",h[i].s);
   fclose(out);
}    42、请编写函数fun, 函数的功能是: 移动一维数组中的内容; 若数组中有n个整数, 要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。
    例如, 一维数组中的原始内容为: 1,2,3,4,5,6,7,8,9,10; p的值为3。移动后, 一维数组中的内容应为: 5,6,7,8,9,10,1,2,3,4。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#define    N    80
void  fun(int  *w, int  p, int  n)
{}
main()
{  int  a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   int  i,p,n=15;void
   printf("The original data:\n");
   for(i=0; i   printf("\n\nEnter  p:  ");scanf("%d",&p);
   fun(a,p,n);
   printf("\nThe data after moving:\n");
   for(i=0; i   printf("\n\n");
}    43、请编写函数fun, 函数的功能是: 将放在字符串数组中的M个字符串(每串的长度不超过N), 按顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。
    例如, 字符串数组中的M个字符串为
     AAAA
     BBBBBBB
     CC
    则合并后的字符串的内容应是: AAAABBBBBBBCC。
    提示:strcat(a,b)的功能是将字符串b复制到字符串a的串尾上,成为一个新串。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define   M   3
#define   N   20
void  fun(char  a[M][N], char  *b)
{
  /* 以下代码仅供参考 */
  int i; *b=0;
}
main()
{  char  w[M][N]={"AAAA","BBBBBBB","CC"}, a[100];
   int i ;void
   printf("The string:\n");
   for(i=0; i   printf("\n");
   fun(w,a);
   printf("The A string:\n");
   printf("%s",a);printf("\n\n");
}    44、请编写函数fun,它的功能是: 求出 1 到 1000 之间能被 7 或11整除、但不能同时被 7 和 11 整除的所有整数并将它们放在a所指的数组中,通过 n 返回这些数的个数。
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
void  fun (int *a, int *n)
{}
main( )
{  int aa[1000], n, k ;
   void
   fun ( aa, &n ) ;
   for ( k = 0 ; k < n ; k++ )
      if((k + 1) % 10 == 0) printf("\n") ;
      else printf("%5d", aa[k]) ;
}    45、m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。
    例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4, below中的数据应为: 10、20、30、40。
    注意: 部分源程序在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
int fun(int score[], int m, int below[])
{}
main( )
{  int i, n, below[9] ;void
   int score[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90} ;
   n = fun(score, 9, below) ;
   printf( "\nBelow the average score are: " ) ;
   for (i = 0 ; i < n ; i++)  printf("%d ", below[i]) ;
}    46、请编写函数fun, 函数的功能是:实现B=A+A', 即把矩阵A加上A的转置, 存放在矩阵B中。计算结果在 main 函数中输出。例如,输入下面的矩阵:       其转置矩阵为:
             1  2  3              1  4  7
             4  5  6              2  5  8
             7  8  9              3  6  9
    程序输出:
                         2   6  10
                         6  10  14
                        10  14  18
    注意: 部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun ( int a[3][3], int b[3][3])
{}
main( )   /* 主程序 */
{  int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, t[3][3] ;
   int i, j ;
   void
   fun(a, t) ;
   for (i = 0 ; i < 3 ; i++) {
      for (j = 0 ; j < 3 ; j++)
        printf("%7d", t[i][j]) ;
      printf("\n") ;
   }
}    47、请编写函数fun,函数的功能是查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1。
    注意:部分源程序存在PROG1.C中,请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include 
#include 
#define   N   15
void
int  fun( int *s, int x)
{}
main()
{  int a[N]={ 29,13,5,22,10,9,3,18,22,25,14,15,2,7,27},i,x,index;
   printf("a数组中的数据 :\n");
   for(i=0; i   printf("给x输入待查找的数 :  ");   scanf("%d",&x);
   index=fun( a, x );
   printf("index=%d\n",index);
}    48、函数fun的功能是: 将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。
    例如,若s所指字符串中的内容为:"ABCDEFG12345",其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:"135"。
    注意: 部分源程序存在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include
#include
void fun(char *s, char t[])
{}
main()
{
  char   s[100], t[100];void
  printf("\nPlease enter string S:"); scanf("%s", s);
  fun(s, t);
  printf("\nThe result is: %s\n", t);
}    49、请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标, 最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
    主函数中x是数组名, n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
    注意: 部分源程序存在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
void fun(int  a[],  int  n , int  *max, int  *d )
{}
main()
{ int i,  x[20],  max , index, n = 10;void
  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 );
}    50、请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序依次放到一维数组中。函数fun中给出的语句仅供参考。
    例如, 二维数组中的数据为:
         33  33  33  33
         44  44  44  44
         55  55  55  55
    则一维数组中的内容应是:
    33  44  55  33  44  55  33  44  55  33  44  55。
    注意:部分源程序在文件PROG1.C中。
    请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。
#include
void  fun(int s[][10], int  b[], int  *n, int mm, int nn)
{
  /* 以下代码仅供参考 */
  int i,j,np=0;   /* np用作b数组下标 */
  *n=np;
}
main()
{  int  w[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;
   int  a[100]={0}, n=0;void
   printf("The matrix:\n");
   for(i=0; i<3; i++)
   {  for(j=0;j<4; j++)printf("%3d",w[i][j]);
      printf("\n");
   }
   fun(w,a,&n,3,4);
   printf("The A array:\n");
   for(i=0;i}       参考答案
一、程序填空题
1、(1)double(2)f1(3)f2
2、(1)*s(2)1(3)k[n]
3、(1)t[][N](2)i=0;i4、(1)0(2)x(3)t++
5、(1)a[i](2)a[j](3)a[j]
6、(1)t=i(2)i(3)0
7、(1)1(2)s(3)i*10
8、(1)k(2)N-1(3)temp
9、(1)s(2)--(3)return 0
10、(1)t,s(2)s[i](3)0
11、(1)0(2)10*x(3)n/10
12、(1)[N](2)t[i][j](3)t[j][i]
13、(1)j++(2)s[i]=t1[i](3)j
14、(1)3.(2)>(3)(2*i+1)
15、(1)h->next(2)p->next(3)>=
16、(1)48(2)s++(3)sum
17、(1)1(2)j++(3)j
18、(1)0(2)n(3)(t*t)
19、(1)k(2)N(3)a[k][i]
20、(1)1(2)i(3)a[p+i]
21、(1)10(2)0(3)x
22、(1)i(2)ps[j](3)tp
23、(1)n++(2)0(3)s++
24、(1)a[i]%2(2)a[j](3)j
25、(1)N(2)N-1(3)0
26、(1)n/2(2)i(3)a[n-i-1]
27、(1)double(2)f1(3)f2
28、(1)b[k](2)N/2(3)<
29、(1)0(2)0(3)c
30、(1)pb(2)p->data(3)p->next
31、(1)sum=0(2)t[i][i](3)1
32、(1)FILE *(2)fp(3)ch
33、(1)*s(2)s++(3)n
34、(1)s[i](2)k(3)0
35、(1)0(2)j--(3)j
36、(1)i++(2)m(3)m
37、(1)1(2)s[k](3)c
38、(1)M(2)<(3)k
39、(1)char(2)ch<='9'(3)'0'
40、(1)999(2)t/10(3)x
41、(1)*a(2)2(3)i+1
42、(1)p->next(2)q(3)p->next
43、(1)next(2)0(3)r
44、(1)s[i](2)'9'(3)*t=n
45、(1)j(2)0(3)i++
46、(1)&&(2)0(3)s[j]
47、(1)i%5(2)\n(3)a[i]
48、(1)0(2)i++(3)2.*i
49、(1)1(2)2*i(3)(-1)
50、(1)NODE(2)next(3)r
二、程序修改题
1、(1)char *fun(char *s,char *t)(2)ss++;(3)tt++;
2、(1)float fun(int  k)(2)return s;
3、(1)fun(int a[],int m)(2)else if(m>a[mid])
4、(1)int i,sl;(2)t[i]=s[sl-i-1];
5、(1)switch(g)(2)case 1: return 1; case 2:return 1;
6、(1)while((fabs(t))>=num)(2)t=s/n;
7、(1)int fun(int n,int xx[][M])(2)printf("%d",xx[i][j]);
8、(1)void fun(int a[][M], int m)(2)a[j][k]=(k+1)*(j+1);
9、(1)double fun (int n)(2)c=a;a+=b;b=c;
10、(1)if(i%k==0)(2)if(k>=i)
11、(1)*t=0;(2)if(d%2!=0)
12、(1)#define FU(m,n) ((m)/(n))(2)return (value);
13、(1)for(j=i+1;j<6;j++)(2)*(pstr+i)=*(pstr+j);
14、(1)double fun(int n)(2)s=s+(double)a/b;
15、(1)p=h->next;(2)p=p->next;
16、(1)if ((k%13 == 0) || (k%17 == 0))(2)}
17、(1)t=a;a=b;b=t;(2)return(b);
18、(1)for(i=0;str[i];i++)(2)if(substr[k+1]==0)
19、(1)for(i = strlen( t )-1; i;i--)(2)if(t[j] > t[j + 1 ] )
20、(1)float k;(2)if(*c>*a)
21、(1)if (n==0)(2)result *= n-- ;
22、(1)double fun(int n)(2)return sum;
23、(1)t+=s[k];(2)*aver=ave;
24、(1)fun (int n)(2)if(n==1)
25、(1)s=s+(n+1.)/n;(2)return t;
26、(1)n= *p-'0';(2)n=n*8+*p-'0';
27、(1)p=h->next;(2)p=p->next;
28、(1)int  t[N] ,i, num=0;(2)t[num++]=b[i];(3)for(i=0; i29、(1)double sum=0.;(2)sum /= c;
30、(1)int i, one=0, zero=0;(2)switch( s[i] )(3)case 0:zero++;break;
31、(1)double r;(2)while(fabs(m-n)>0.001)
32、(1)s[j++]=s[i];(2)s[j]=0;
33、(1)int j, c=0; double xa=0.;(2)if (x[j]>=xa)
34、(1)while(*w)(2)if(*r==*p)
35、(1)double f(double x)(2)return s;
36、(1)while((2<=high) && (n<10))(2)yes=0; break;
37、(1)long s=0,t=0;(2)t=t/10;
38、(1)if(('a'<=tt[i])&&(tt[i]<='z'))(2)tt[i]-=32;
39、(1)b[k]=*p;(2)b[k]=' ';k++;
40、(1)void fun(long s,long *t)(2)while(s>0)
41、(1)sum=0;(2)if((i+1)%5==0)
42、(1)while(*s)(2)s++;
43、(1)r=t;(2)if(*r==0)
44、(1)t=*x;*x=y;(2)return t;
45、(1)for(i=2;i<=m;i++)(2)y-=1.0/i/i;
46、(1)for(i=2;i<=m;i++)(2)y+=1.0/i/i;
47、(1)return t;(2)for(i=0;i48、(1)void fun (char  *s, char  *t)(2)t[2*d] = 0;
49、(1)k++;(2)if(m==k)
50、(1)if(i%2 || s[i]%2==0)(2)t[j]=0;
三、编程题
1.void  fun(char  *w, int  m)
{
char a[N];
int i;
for(i=0;iwhile(w[i]) { w[i-m]=w[i]; i++;}
i--;m--;
for(;m>=0;m--,i--) w[i]=a[m];
}2.double  fun(  int  n )
{
int i;
double s;
for(i=1;i<=n;i++)
{ s+=1.0/(i*(i+1));
}
return s;
}
3.void fun(char *a,char *p)
{ char *q;
while(aif(*a=='*')
{ for(q=a;*q;q++)
    *q=*(q+1);
     p--;}
else a++;
}
4.void fun(int a, int b, long *c)
{
*c=a/10*100+a%10+b/10*1000+b%10*10;
}5.void  fun(STREC *a)
{
   int i=0;
   double sum=0.0;
   for(;i   {
     sum+=a->s[i];
   }
   a->ave=sum/N;
}6.void fun (char a[], char b[], int n)
{
  int i=0,j=0;
  while(a[i])
  {
     if(i!=n)
  {
    b[j]=a[i];
    j++;
  }
  i++;
  }
   b[j]='\0';
}7.void fun(int a, int b, long *c)
{
 *c=a/10*1000+a%10*10+b/10+b%10*100;
}8.void fun(char p1[], char p2[])
{
char *p,*q;
p=p1;
q=p2;
while(*p) p++;
while(*q) *p++=*q++;
*p='\0';
}9.void fun(int m, int k, int xx[])
{
int i,j=m+1,n=0;
while(n{
for(i=2;iif(j%i==0) break;
if(j==i)
{
xx[n]=i;
n++;
}
j++;
}
}10.void  fun ( int x, int  pp[], int *n )
{
int i;
*n=0;
for(i=1;i<=x;i+=2)
{
if(x%i==0)
{
pp[*n]=i;
(*n)++;
}
}
}11.void fun(int  a, int  b, long  *c)
{
*c=a/10*10+a%10*1000+b/10+b%10*100;
}12..void  fun( char *a )
{
 int i=0,j=0;
 while(a[i])
 {
   if(a[i]!='*')
   {
     j=i;
  break;
   }
   i++;
 }
    while(a[i])
 {
   a[i-j]=a[i];
   i++;
 }
 a[i-j]='\0';
}13.int fun(char *ss, char c)
{
 int n=0,i=0;
 while(ss[i])
 {
    if(ss[i]==c)
    {
      n++;
    }
    i++;
 }
 return n;
}14.int fun (int a[][M])
{
 int i,j,max=0;
 for(i=0;i<2;i++)
   for(j=0;j     {
          if(max   max=a[i][j];
     }
   return max;
}
15.void  fun(int  (*s)[10], int  *b, int  *n, int mm, int nn)
{
int i,j;
*n=0;
for(i=0;ifor(j=0;j{
b[*n]=s[i][j];
(*n)++;
}
}16.double  fun( int  n)
{
int i;
double s=0;
for(i=1;i{
if(i%3==0 && i%7==0) s+=i;
}
return sqrt(s);
}17.void  fun( char *a )
{
 char p[81];
 int i=0,j=0;
 while(a[i])
 {
  if(a[i]!='*')
   a[j++]=a[i];
 i++; 
 }
a[j]=0;
}18.double  fun ( double  eps)
{
 int i=0;
 double pi=0,a=1;
 while(a>=eps)
 {
  pi+=a;
  i++;
  a=a*i/(2*i+1);
 }
 return pi*2;
}
19.void fun( char *ss )
{
int i=1;
while(ss[i-1] && ss[i])
{
if(ss[i]>='a' && ss[i]<='z') ss[i]+='A'-'a';
i+=2;
}
}
20.int  fun( STREC  *a, STREC *b )
{
   int i,j=0,s=a[0].s;
   for(i=1;i     if(a[i].s>s) s=a[i].s;
   for(i=0;i     if(a[i].s==s)
     {
       b[j]=a[i];
       j++;
     }
   return j;
}
21.long  fun ( char *p)
{
long i,s=0;
if(p[0]=='-')
{
i=1;
while(p[i])
{
s=s*10+p[i]-'0';
i++;
}
s*=-1;
}
else
{
i=0;
while(p[i])
{
s=s*10+p[i]-'0';
i++;
}
}
return s;
}
22.double fun(double x , int  n)
{
int i;
double a=1,b=1,s=1;
for(i=1;i<=n;i++)
{
a*=x;
b*=i;
s+=a/b;
}
return s;
}23.int fun(int *s, int t, int *k)
{
int i;
*k=0;
for(i=0;iif(s[i]>s[*k]) *k=i;
}24.void  fun( char *a,int  n )
{
 int i=0,j=0,c,k;
 while(a[i])
  i++;
 c=i;
 while(a[i-1]=='*')
 {
  j++;
    i--;
 }
 if(j>n)
 {
  k=j-n;
  a[c-k]='\0'; 
 }
}25.int  fun( int  t)
{
int a=1,b=1,c=0,i;
for(i=4;i<=t;i++)
{if(c{c=a+b;
a=b;
b=c;}
else
break;}
return c;
}
26.STREC  fun( STREC  *a, char *b )
{
   STREC res;
   int  i;
   for(i=0;i   {
      if(strcmp(a[i].num,b)==0)
   {
     res=a[i];
  return res;
   }
   }
   strcpy(res.num,"");
   res.s=-1;
   return res;
}
27.int fun(char *str)
{
int i,j=0;
while(str[j]) j++;
for(i=0;i<=j/2;i++)
if(str[i]!=str[j-i-1]) break;
if(i>=j/2) return 1;
else return 0;
}28、int fun(char  *s)
{
 int nCnt = 0, i;
 for(i = 0; s[i]; i++)
   if('0'<=s[i] && s[i] <= '9')
     ++nCnt;
 
 return nCnt;
}
29.double func(int n)
{
 int i, j;
 float sum, resu;
 resu = 0;
 for (i = 1; i <= n; i++)
 {
  sum = 0;
  for (j = 1; j <= i; j++)
  {
            sum = sum + j;
  }
  resu = resu + 1 / sum;
 }
 return resu;
}
30、void  fun( char  *a , char  *s)
{
  int i;
  for(i = 0; s[i]; i++)
    a[i] = s[i];
  a[i] = '\0';
}
31.void  fun( char *a, char *h,char *p )
{
 int i=0; 
for(;a[i]=='*';i++) 
a[i]='*'; 
while(h{ if(*h!='*') 
{a[i]=*h; 
i++; } 
h++;} 
while(*h) 
{ a[i]=*h; 
i++; 
h++; 

a[i]='\0'; 
}  32.void  fun(char  (*s)[N], char *b)
{
int i,j,k=0;
for(i=0;ifor(j=0;j{
b[k]=s[j][i];
k++;
}
}33.float  fun(int m, int n)
{ int i;
float m1=1.0,n1=1.0,k=1.0;
for(i=1;i<=m;i++)  m1*=i;
for(i=1;i<=n;i++) n1*=i;
for(i=1;i<=m-n;i++) k*=i;
return m1/n1/k;
}34.void  fun(char  *s, char  t[])
{
 int i=0,j=0,m;
 while(m=s[i])
 {
  if(m%2==0)
  {
   t[j]=s[i];
         j++;
  }
     i++;
 }
 t[j]='\0';
}35.double   fun(  int  m )
{
int i=1;
double sum=0.0;
for(;i<=20;i++){
sum = sum + log(i);
}
sum=sqrt(sum);
return sum;
}
36.double fun()
{
float x0,x1=0.0;
while(1)
{x0=x1;
x1=cos(x0);
if(fabs(x0-x1)<1e-6)  break;
}
return x1;
}37.void fun(char *tt, int pp[])
{
 int i;
    for(i=0;i<26;i++)
  pp[i]=0;
        i=0;
 while(tt[i])
 {
  pp[tt[i]-97]++;
         i++;
 }
}
38.void fun( int m, int *k, int xx[] )
{
int i,j,c=0;
  for(i=2;i<=m;i++)
  {
   for(j=2;j     if(i%j==0)
   {
    xx[c]=i;
       c++;
    break;
   }
  }
  *k=c;
}39.double  fun( STREC *h  )
{
float ave,sum=0.0;
STREC *p;
p=h->next;
while(p)  
{sum+=p->s;p=p->next;}
ave=sum/N;
return ave;
}40.void fun(int a, int b, long *c)
{
*c=a/10*100+a%10+b/10*10+b%10*1000;
}41.double  fun( STREC  *a, STREC *b, int *n )
{
   int i,j;
   double ave,sum=0.0;
   *n=0;
   for(i=0;i   {
     sum+=a[i].s;
   }
   ave=sum/N;
   for(i=0,j=0;i   {
      if(a[i].s<=ave)
   {
      b[j]=a[i];
   j++;
   (*n)++;
   }
      i++;
   }
   return ave;
}
42.void  fun(int  *w, int  p, int  n)
{
int i,a[N];
for(i=0;i<=p;i++) a[i]=w[i];
for(i=0;ifor(i=0;i<=p;i++) w[n-(p+1)+i]=a[i];
}
43.void  fun(char  a[M][N], char  *b)
{
int i,k=0;
char *p;
for(i=0;i{ p=a[i];
while(*p) b[k++]=*p++;
}
b[k]='\0';
}
44.void  fun (int *a, int *n)
{
int i=0,j=0;
*n=0;
for(;i<=1000;i++)
{
  if(i%7==0||i%11==0)
  {
    if(i%7==0&&i%11==0)continue;
  (*n)++;
  a[j++]=i;}
}
return *n;
}
45.int fun(int score[], int m, int below[])
{
int i,j=0,s=0;
for(i=0;is/=m;
for(i=0;i{
if(score[i]{
below[j]=score[i];
j++;
}
}
return j;
}46. void  fun ( int a[3][3], int b[3][3])
{
int i,j;
for(i=0;i<3;i++)
 for(j=0;j<3;j++)
 b[i][j]=0;for(i=0;i<3;i++)
 for(j=0;j<3;j++)
    b[i][j]=a[i][j]+a[j][i];
}47、int  fun( int *s, int x)
{
 int i;
 for(i = 0; i < N; i++)
   if(s[i] == x)
     return i;
 if(i == N)
   return -1;
}48.void fun(char *s, char t[])
{
int i=0,j=0;
while(s[i])
{
if(i%2==1 && s[i]%2==1)
{
t[j]=s[i];
j++;
}
}
t[j]=0;
}49.void fun(int  a[],  int  n , int  *max, int  *d )
{
int i;
*d=0;
for(i=1;iif(a[i]>a[*d]) *d=i;
*max=a[*d];
}50.void  fun(int  (*s)[10], int  *b, int  *n, int mm, int nn)
{
int i,j,k=0;
for(j=0;jfor(i=0;ib[k++]=s[i][j];
*n=k;
}  
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为
    A)PAD图 
    B)N-S图 
    C)结构图 
    D)数据流图(2)结构化程序设计主要强调的是
    A)程序的规模  
    B)程序的效率
    C)程序设计语言的先进性  
    D)程序易读性 (3)为了使模块尽可能独立,要求
    A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强
    B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱
    C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱
    D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强 (4)需求分析阶段的任务是确定
    A)软件开发方法 
    B)软件开发工具
    C)软件开发费用 
    D)软件系统功能(5)算法的有穷性是指
    A)算法程序的运行时间是有限的 
    B)算法程序所处理的数据量是有限的
    C)算法程序的长度是有限的 
    D)算法只能被有限的用户使用 (6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是
    A)快速排序 
    B)冒泡排序
    C)直接插入排序 
    D)堆排序 (7)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是
    A)e3,e1,e4,e2 
    B)e2,e4,e3,e1 
    C)e3,e4,e1,e2 
    D) 任意顺序 (8)将E-R图转换到关系模式时,实体与联系都可以表示成
    A)属性 
    B)关系 
    C)键 
    D)域(9)有三个关系R、S和T如下:

B  C  D  
a  0  k1  
b  1  n1  S 
B  C  D  
f  3  h2  
a  0  k1  
n  2  x1  T 
B C D 
a 0 k1 由关系R和S通过运算得到关系T,则所使用的运算为
    A)并 
    B)自然连接 
    C)笛卡尔积 
    D)交(10)下列有关数据库的描述,正确的是
    A)数据处理是将信息转化为数据的过程
    B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
    C)关系中的每一列称为元组,一个元组就是一个字段
    D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字 (11)以下叙述中正确的是
    A)用C程序实现的算法必须要有输入和输出操作
    B)用C程序实现的算法可以没有输出但必须要有输入
    C)用C程序实现的算法可以没有输入但必须要有输出
    D)用C程序实现的算法可以既没有输入也没有输出 (12)下列可用于C语言用户标识符的一组是
    A)void, define, WORD 
    B)a3_3,_123,Car
    C)For, -abc, IF Case 
    D)2a, DO, sizeof (13)以下选项中可作为C语言合法常量的是
    A)-80 
    B)-080 
    C)-8e1.0 
    D)-80.0e (14)若有语句:char *line[5];,以下叙述中正确的是
    A) 定义line是一个数组,每个数组元素是一个基类型为char为指针变量
    B) 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
    C) 定义line是一个指针数组,语句中的*号称为间址运算符
    D) 定义line是一个指向字符型函数的指针 (15)以下定义语句中正确的是
    A)int  a=b=0; 
    B)char  A=65+1,b=′b′;
    C)float  a=1,*b=&a,*c=&b; 
    D)double  a=00;b=1.1; (16)有以下程序段
char  ch;    int  k;
ch=′a′;
k=12;
printf("%c,%d,",ch,ch,k);    printf("k=%d \n",k);
已知字符a的ASCII码值为97,则执行上述程序段后输出结果是
    A)因变量类型与格式描述符的类型不匹配输出无定值
    B)输出项与格式描述符个数不符,输出为零值或不定值
    C)a,97,12k=12
    D)a,97,k=12 (17)有以下程序
main()
{  int  i,s=1;
for (i=1;i<50;i++)
if(!(i%5)&&!(i%3))  s+=i;
printf("%d\n",s);}
程序的输出结果是
    A)409         
    B)277          
    C)1           
    D)91 (18)当变量c的值不为2、4、6时,值也为"真"的表达式是
    A)(c==2)||(c==4)||(c==6)
    B)(c>=2&& c<=6)||(c!=3)||(c!=5)
    C)(c>=2&&c<=6)&&!(c%2)
    D)(c>=2&& c<=6)&&(c%2!=1) (19)若变量已正确定义,有以下程序段
    int  a=3,b=5,c=7;
 if(a>b) a=b;  c=a;
 if(c!=a) c=b;
 printf("%d,%d,%d\n",a,b,c);
其输出结果是
    A)程序段有语法错      
    B)3,5,3       
    C)3,5,5       
    D)3,5,7 (20)有以下程序
#include 
main()
{  int  x=1,y=0,a=0,b=0;
 switch(x)
 {  case  1:
 switch(y)
 {  case  0:a++;  break;
 case  1:b++;  break;
}
case 2:a++; b++; break;
case 3:a++; b++;
}
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是
    A)a=1,b=0       
    B)a=2,b=2       
    C)a=1,b=1       
    D)a=2,b=1 (21)下列程序的输出结果是
#include "stdio.h"
main()
{  int i,a=0,b=0;
for(i=1;i<10;i++)
{  if(i%2==0)
  {a++;
continue;}
b++;}
printf("a=%d,b=%d",a,b); }
    A)a=4,b=4 
    B)a=4,b=5  
    C)a=5,b=4 
    D)a=5,b=5 (22)已知
#int t=0;
while (t=1)
{...}
则以下叙述正确的是
    A)循环控制表达式的值为0 
    B)循环控制表达式的值为1
    C)循环控制表达式不合法 
    D)以上说法都不对 (23)下面程序的输出结果是
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
  printf("%d\n",*(p+2));}
    A)3 
    B)4 
    C)1 
    D)2 (24)以下错误的定义语句是
    A)int  x[][3]={{0},{1},{1,2,3}};
    B)int  x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
    C)int  x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
    D)int  x[][3]={1,2,3,4}; (25)有以下程序
void ss(char *s,char t)
{  while(*s)
{  if(*s==t)*s=t-′a′+′A′;
s++; } }
main()
{  char str1[100]="abcddfefdbd",c=′d′;
ss(str1,c); printf("%s\n",str1);}
程序运行后的输出结果是
    A)ABCDDEFEDBD 
    B)abcDDfefDbD
    C)abcAAfefAbA
    D)Abcddfefdbd (26)有如下程序
main()
{  char ch[2][5]={"6937","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>′\0′;j+=2)
s=10*s+p[i][j]-′0′;
printf("%d\n",s);}
该程序的输出结果是
    A)69825
    B)63825
    C)6385
    D)693825 (27)有定义语句:char  s[10];,若要从终端给s输入5个字符,错误的输入语句是
    A)gets(&s[0]);
    B)scanf("%s",s+1);
    C)gets(s);
    D)scanf("%s",s[1]); (28)以下叙述中错误的是
    A)在程序中凡是以"#"开始的语句行都是预处理命令行
    B)预处理命令行的最后不能以分号表示结束
    C)#define  MAX  是合法的宏定义命令行
    D)C程序对预处理命令行的处理是在程序执行的过程中进行的 (29)设有以下说明语句
typedef struct
{ int n;
  char ch[8];
} PER;
则下面叙述中正确的是
    A)PER 是结构体变量名
    B)PER是结构体类型名
    C)typedef struct 是结构体类型
    D)struct 是结构体类型名 (30)以下叙述中错误的是
    A)gets函数用于从终端读入字符串
    B)getchar函数用于从磁盘文件读入字符
    C)fputs函数用于把字符串输出到文件
    D)fwrite函数用于以二进制形式输出数据到文件 (31)以下能正确定义一维数组的选项是
    A)int a[5]={0,1,2,3,4,5};
    B)char a[]={′0′,′1′,′2′,′3′,′4′,′5′,′\0′};
    C)char a={′A′,′B′,′C′};
    D)int a[5]="0123"; (32)有以下程序
#include
main()
{  char p[]={′a′, ′b′, ′c′},q[10]={ ′a′, ′b′, ′c′};
printf("%d%d\n",strlen(p),strlen(q));}
以下叙述中正确的是
    A) 在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
    B) 由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3
    C) 由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3
    D) 由于p和q数组中都没有字符串结束符,故长度都不能确定 (33)有以下程序
#include 
#include 
void  fun(char  *s[],int  n)
{  char  *t;        int  i,j;
for(i=0;ifor(j=i+1;j if(strlen(s[i])>strlen(s[j]))  {t=s[i];s[i]:s[j];s[j]=t;}
}
main()
{  char  *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};
fun(ss,5);      printf("%s,%s\n",ss[0],ss[4]);
}
程序的运行结果是
    A)xy,aaaacc
    B)aaaacc,xy
    C)bcc,aabcc
    D)aabcc,bcc (34)有以下程序
#include 
int f(int  x)
{  int  y;
if(x==0||x==1)  return(3);
y=x*x-f(x-2);
return  y;
}
main()
{  int  z;
z=f(3);      printf("%d\n",z);
}
程序的运行结果是
    A)0
    B)9
    C)6
    D)8 (35)下面程序段的运行结果是
char str[]="ABC",*p=str;
printf("%d\n",*(p+3));
    A)67
    B)0
    C)字符′C′的地址
    D)字符′C′ (36)若有以下定义:
struct link
{  int data;
struct link *next;
} a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:  
指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是:
    A)a.next=c; c.next=b;
    B)p.next=q; q.next=p.next;
    C)p->next=&c; q->next=p->next;
    D)(*p).next=q; (*q).next=&b; (37)对于下述程序,在方式串分别采用"wt"和"wb"运行时,两次生成的文件TEST的长度分别是
#include
void main()
{  FILE *fp=fopen("TEST",);
fputc(′A′,fp);fputc(′\n′,fp);
fputc(′B′,fp);fputc(′\n′,fp);
fputc(′C′,fp);
fclose(fp); }
    A)7字节、7字节
    B)7字节、5字节
    C)5字节、7字节
    D)5字节、5字节 (38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是
    A)a^b
    B)a|b
    C)a&b
    D)a<<4(39)下面的程序段运行后,输出结果是
int i,j,x=0;
static int a[8][8];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=2*i+j;
for(i=0;i<8;i++)
    x+=a[i][j];
printf("%d",x);
    A)9
    B)不确定值
    C)0
    D)18 (40)下列程序执行后的输出结果是
void func(int *a,int b[])
{  b[0]=*a+6; }
main()
{  int a,b[5];
a=0; b[0]=3;
func(&a,b); printf("%d\n",b[0]);}
    A)6
    B)7
    C)8
    D)9  二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)测试的目的是暴露错误,评价程序的可靠性;而  【1】   的目的是发现错误的位置并改正错误。(2)某二叉树中度为2的结点有18个,则该二叉树中有   【2】   个叶子结点。 (3)当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为   【3】   。(4)在关系模型中,把数据看成一个二维表,每一个二维表称为一个   【4】   。 (5)在计算机软件系统的体系结构中,数据库管理系统位于用户和  【5】  之间。(6)以下程序的输出结果是   【6】   。
main()
{ char c=′z′;
  printf("%c",c-25); } (7)阅读下面语句,则程序的执行结果是   【7】  。
#include "stdio.h"
main()
{    int a=-1,b=1,k;
if((++a<0)&&!(b--<=0))
    printf("%d,%d\",a,b);
else printf("%d,%d\n",b,a);} (8)下列程序的输出结果是  【8】  。
main()
{  int i;
for(i=1;i+1;i++)
{  if(i>4)
{  printf("%d\n",i);
break; }
printf("%d\n",i++);}}(9)以下程序的定义语句中,x[1]的初值是  【9】  ,程序运行后输出的内容是  【10】  。
#include 
main()
{  int  x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;
for(i=0;i<4;i++)
 {  p[i]=&x[2*i+1];
printf("%d",p[i][0]);
 }
printf("\n");)
} (10)以下程序的输出结果是  【11】  。
#include 
void  swap(int  *a,  int  *b)
{  int  *t;
t=a;  a=b;  b=t;
}
main()
{  int  i=3,j=5,*p=&i,*q=&j;
swap(p,q);    printf("%d  %d\N,*p,*q))
} (11)以下程序的输出结果是   【12】   。
main()
{ char s[]="ABCD", *p;
  for(p=s+1; pfloat fun(int x,int y)
{  return(x+y);}
main()
{  int a=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));} (13)有如下图所示的双链表结构,请根据图示完成结构体的定义:
lhead  data  rchild  
struct aa
{   int data;
  【14】    }node;
(14)fseek函数的正确调用形式是  【15】 。 一、选择题(1)B
    【解析】 N-S图是由Nassi 和 Shneiderman 提出的一种符合程序化结构设计原则的图形描述工具。它的提出是为了避免流程图在描述程序逻辑时的随意性上灵活性。(2)D
    【解析】 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用goto语句,总的来说可使程序结构良好、易读、易理解、易维护。(3)B
    【解析】 模块的独立程度可以由两个定性标准度量:耦合性和内聚性。耦合性是衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚性是衡量一个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能地低,而内聚性尽可能地高。(4)D
    【解析】 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。选项A)软件开发方法是在总体设计阶段需完成的任务;选项B)软件开发工具是在实现阶段需完成的任务;选项C)软件开发费用是在可行性研究阶段需完成的任务。(5)A
    【解析】 算法具有5个特性:① 有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;② 确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义;③ 可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现;④ 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;⑤ 输出:一个算法有一个或多个输出。(6)D
    【解析】 在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都为n(n-1)/2,堆排序需要的比较次数为nlog2n。(7)B
    【解析】 由栈"后进先出"的特点可知:A)中e1不可能比e2先出,C)中e1不可能比e2先出,D)中栈是先进后出的,所以不可能是任意顺序。B)中出栈过程如下图所示:
 (8)B
    【解析】 关系数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。首先,从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性,实体集也可以转换成关系。(9)D
    【解析】 在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则R1 R2为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1,又属于R2。(10)D
    【解析】 数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。(11)C
    【解析】 算法具有的5个特性是:有穷性;确定性;可行性;有0个或多个输入;有一个或多个输出。所以说,用C程序实现的算法可以没有输入但必须要有输出。(12)B
    【解析】 C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D);C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。(13)A
    【解析】 选项B)项中,以0开头表示是一个八进制数,而八进制数的取值范围是0~7,所以-080是不合法的;选项C)和D)中,e后面的指数必须是整数,所以也不合法。(14)A
    【解析】 C语言中[ ]比*优先级高,因此line先与[5]结合,形成line[5]形式,这是数组形式,它有5个元素,然后再与line前面的"*"结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char的指针变量。(15)B
    【解析】 本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开,因此选项A)和D)错误。在选项C)中,变量c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量b,故选项C)错误。(16)D
    【解析】 输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12。(17)D
    【解析】 本题是计算50之内的自然数相加之和,题中if语句括号中的条件表达式!(i%5)&&!(i%3)表明只有能同时被5和3整除的数才符合相加的条件,1~ 49之间满足这个条件的只有,15、30和45,因为s的初始值为1,所以s=1+15+30+45=91。(18)B
    【解析】 满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,选项B中的表达式都为"真"。(19)B
    【解析】 两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为B)。(20)D
    【解析】 本题考查switch语句,首先,x=1符合条件case 1,执行switch(y)语句,y=0符合case 0语句,执行a++并跳出switch(y)语句,此时a=1。因为case 1语句后面没有break语句,所以向后执行case 2语句,执行a++,b++,然后跳出switch(x),得a=2,b=1。(21)B
    【解析】continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被2整除时,a就会增1,之后执行continue语句,直接执行到for循环体的结尾,进行i++,判断循环条件。(22)B
    【解析】t=1是将t赋值为1,所以循环控制表达式的值为1。判断t是否等于1时,应用t==1,注意"="与"=="的用法。(23)A
    【解析】 在C语言中,数组元素是从0开始的。指针变量p指向数组的首地址,(p+2)就会指向数组中的第3个元素。题目中要求输出的是元素的值。(24)C
    【解析】 本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度。故选项C)错误。(25)B
    【解析】 在内存中,字符数据以ASCII码存储,它的存储形式与整数的存储形式类似。C语言中,字符型数据和整型数据之间可以通用,也可以对字符型数据进行算术运算,此时相当于对它们的ASCII码进行算术运算,在本题中,s++相当于s=s+1,即让s指向数组中的下一个元素。(26)C
    【解析】 该题稍微难一点。主要要搞清楚以下几点:①定义了一个指针数组char *p[2]后,程序中第一个循环for(i=0;i<2;i++)p[i]=ch[i];的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串"6937",第二行ch[1]中的内容为字符串"8254"。③程序中第二个循环中的循环体s=s*10+p[i][j]-'0';的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i][j]>'\0 '是指p[i][j]中的字符只要不是字符串结束标志'\0'就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串"6937"中一个隔一个地取出字符,分别是'6'和'3',然后从p[1]所指向的字符串"8254"中一个隔一个地取出字符,分别是'8'和'5',同时经过转换和相加运算后,结果s中的值应该是6385。(27)D
    【解析】 在格式输入中,要求给出的是变量的地址,而D)答案中给出的s[1]是一个值的表达式。(28)D
    【解析】 C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D)的描述错误。(29)B
    【解析】 本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。(30)B
    【解析】 getchar函数的作用是从终端读入一个字符。(31)B
    【解析】 选项A)中,定义的初值个数大于数组的长度;选项C)中,数组名后少了中括号;选项D)中,整型数组不能赋予字符串。(32)A
    【解析】 在给p和q数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组p和q都有3个字符,所以长度均为3。(33)A
    【解析】 函数fun(char *s[],int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行fun(ss,5)语句后,*ss[]={"xy", "bcc", "bbcc", "aabcc", "aaaacc"},ss[0],ss[4]的输出结果为xy,aaaacc。(34)C
    【解析】 函数int f(int x)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其他情况下y=x2-f(x-2),所以在主函数中执行语句z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。(35)B
    【解析】 考查指向字符串的指针变量。在该题中,指针变量p指向的应该是该字符串中的首地址,p+3指向的是字符串结束标志'\0'的地址,因而*(p+3)的值为0。(36)D
    【解析】 本题考查链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。(37)B
    【解析】 以"wt"方式写入的是字符文件,转义字符'\n'被看作两个字符来处理。而"wb"方式写入的是二进制文件,转义字符'\n'是一个字符。(38)A
    【解析】 本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会产生任何变化。(39)C
    【解析】 本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:
0    1    2
2    3    4
4    5    6由于数组的下标是从0开始的,所以二维数组元素a[i][j]表示的是二维数组a的第i+1行、第j+1列对应位置的元素。 (40)A
    【解析】 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针型。它的作用是将一个变量的地址传递到另一个函数中。当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值也将随之发生变化。
二、选择题(1)【1】调试
    【解析】 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定;调试也称排错,它是一个与测试既有联系又有区别的概念。具体来说,测试的目的是暴露错误,评价程序的可靠性,而调试的目的是发现错误的位置,并改正错误。(2)【2】19
    【解析】 在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。(3)【3】 上溢
    【解析】 入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本操作:首先将队尾指针进一(即rear=rear+1),并当rear=m+1时,置rear=1;然后将新元素插入队尾指针指向的位置。当循环队列非空(s=1)且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为"上溢"。(4)【4】 关系
    【解析】 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。(5)【5】 操作系统或OS
    【解析】 数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务。位于用户和操作系统之间。(6)【6】 a
    【解析】 'z'的ASCII码值为122,经过c-25运算后,得97,以字符形式输出是a。(7)【7】 1,0
    【解析】 与运算两边的语句必须同时为真时,结果才为真。当执行完if((++a<0)&&!(b--<=0))时,a,b的值已经发生了变化。(8)【8】 1
3
5
    【解析】 本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf("%d\n",i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf("%d\n",i++);输出3,同时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf("%d\n",i),输出5,然后break语句跳出了for循环。(9)【9】 2
【10】 2 4 6 8
    【解析】 在主函数中根据整型数组x[]的定义可知,x[1]的初值等于2。在for循环语句中,当i=0时,p[0]=&x[1],p[0][0]=2; 当i=1时,p[1]=&x[3],p[1][0]=4;当i=2时,p[2]=&x[5],p[2][0]=6;当i=3时,p[3]=&x[7],p[3][0]=8,所以程序输出的结果为2、4、6、8。(10)【11】 35
    【解析】 函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。(11)【12】 BCD
CD
D
    【解析】 本题考查指向字符串的指针的运算方法。指针变量p首先指向字符串中的第一个字符A,执行p=s+1后,p指向字符串中的第二个字符B,然后输出值"BCD"并换行,依次执行循环语句。(12)【13】 9
    【解析】 本题考查函数的综合知识。首先,我们可以利用强制转换类型转换运算符,将一个表达式转换成所需类型。如:(double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。
本题可按部就班地逐步运算:
fun((int)fun(a+c,b),a-c)
fun((int)fun(10,5),2-8)
fun((int)15.000000,-6)
fun(15,-6)
9(13)【14】 struct aa *lhead,*rchild;
    【解析】 结构体对链表的定义。(14)【15】 fseek(文件指针,位移量,起始点)
    【解析】 本题考查函数fseek的用法。fseek函数的调用形式为:
fseek(文件指针,位移量,起始点)
"起始点"用0,1或2代替,其中,0代表"文件开始";1为"当前位置";2为"文件末尾"。"位移量"指以"起始点"为基点,向前移动的字节数。ANSI C和大多数C版本要求位移量是long型数据,这样当文件的长度大于64k时不致出现问题。ANSI C标准规定在数字的末尾加一个字母L,就表示long型。 
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)程序流程图中带有箭头的线段表示的是
    A)图元关系
    B)数据流
    C)控制流      
    D)调用关系(2)下面不属于软件设计原则的是
    A)抽象     
    B)模块化     
    C)自底向上    
    D)信息隐蔽(3)下列选项中,不属于模块间耦合的是
    A)数据耦合      
    B)标记耦合      
    C)异构耦合     
    D)公共耦合(4)下列叙述中,不属于软件需求规格说明书的作用的是
    A)便于用户、开发人员进行理解和交流
    B)反映出用户问题的结构,可以作为软件开发工作的基础和依据
    C)作为确认测试和验收的依据
    D)便于开发人员进行需求分析(5)算法的时间复杂度是指
    A)执行算法程序所需要的时间
    B)算法程序的长度
    C)算法执行过程中所需要的基本运算次数
    D)算法程序中的指令条数(6)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是
    A)堆排序      
    B)直接插入排序       
    C)快速排序      
    D)B)和C)(7)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是
    A)ABCED     
    B)DCBEA      
    C)DBCEA     
    D)CDABE(8)数据库设计包括两个方面的设计内容,它们是
    A)概念设计和逻辑设计
    B)模式设计和内模式设计
    C)内模式设计和物理设计
    D)结构特性设计和行为特性设计(9)关系表中的每一横行称为一个
    A)元组    
    B)字段    
    C)属性     
    D)码(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字 (键或码)为
    A)课号,成绩        
    B)学号,成绩
    C)学号,课号        
    D)学号,姓名,成绩(11)以下不正确的叙述是
    A)在C程序中,逗号运算符的优先级最低
    B)在C程序中,APH和aph是两个不同的变量
    C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变
    D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值(12)请选出可用作C语言用户标识符的是
    A)void,define,WORD        
    B)a3_b3,_123,IF
    C)FOR,--abc,Case          
    D)2a,Do,Sizeof(13)以下选项中,不能作为合法常量的是
    A)1.234e04     
    B)1.234e0.4      
    C)1.234e+4      
    D)1.234e0(14)在C语言中,运算对象必须是整型数的运算符是
    A)%                    
    B)\                
    C)%和\               
    D)**(15)若变量均已正确定义并赋值,以下合法的C语言赋值语句是
    A)x=y==5;          
    B)x=n%2.5;       
    C)x+n=i;     
    D)x=5=4+1; (16)有以下程序段
char  ch;    int  k;
ch=′a′; k=12;
printf("%c,%d,",ch,ch,k);    printf("k=%d \n",k);
已知字符a的ASCII码值为97,则执行上述程序段后输出结果是
    A)因变量类型与格式描述符的类型不匹配输出无定值
    B)输出项与格式描述符个数不符,输出为零值或不定值
    C)a,97,12k=12
    D)a,97,k=12(17)已知字母A的ASCII代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是
    A)kk>=′A′&& kk<=′Z′               
    B)!(kk>=′A′||kk<=′Z′)
    C)(kk+32)>=′a′&&(kk+32)<=′Z′ 
    D)isalpha(kk)&&(kk<91) (18)当变量c的值不为2、4、6时,值也为"真"的表达式是
    A)(c==2)||(c==4)||(c==6)
    B)(c>=2&& c<=6)||(c!=3)||(c!=5)
    C)(c>=2&&c<=6)&&!(c%2)
    D)(c>=2&& c<=6)&&(c%2!=1)(19)若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是
    A)(exp==0) 
    B)(exp!=0)
    C)(exp==1)               
    D)(exp!=1)(20)以下不正确的定义语句是
    A)double x[5]={2.0,4.0,6.0,8.0,10.0};
    B)int y[5]={0,1,3,5,7,9};
    C)char c1[]={′1′,′2′,′3′,′4′,′5′};
    D)char c2[]={′\x10′, ′xa′, ′\x8′};(21)下列程序执行后的输出结果是
main()
{ int a[3][3], *p,i;
  p=&a[0][0];
  for(i=1; i<9; i++)p[i]=i+1;
  printf("%d\n",a[1][2];)
    A)3
    B)6                 
    C)9             
    D)随机数(22)设有以下程序段
int x=0,s=0;
while(!x!=0)s+=++x;
printf("%d",s);

    A)运行程序段后输出0 
    B)运行程序段后输出1
    C)程序段中的控制表达式是非法的         
    D)程序段执行无限次(23)(23)下面程序段的运行结果是
char *s="abcde";
s+=2;printf("%d",s);
    A)cde                                    
    B)字符′c′
    C)字符′c′的地址         
    D)无确定的输出结果(24)阅读下列程序,则执行后的结果为
#include "stdio.h"
main()
{   int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};
printf("%x,%x\n",c[2][2],*(*(c+1)+1));}
    A)3e,6 
    B)62,5 
    C)56,5 
    D)3E,6 (25)下面判断正确的是
    A)char *a="china";等价于 char *a;*a="china";
    B)char str[5]={"china"};等价于char str[]={"china"};
    C)char *s="china";等价于 char *s;s="china";
    D)char c[4]="abc",d[4]="abc";等价于char c[4]=d[4]="abc"; (26)若有定义:int  a[2][3];,以下选项中对a数组元素正确引用的是
    A)a[2][!1]
    B)a[2][3] 
    C)a[0][3] 
    D)a[1>2][!1] (27)有定义语句:char  s[10];,若要从终端给s输入5个字符,错误的输入语句是
    A)gets(&s[0]);                      
    B)scanf("%s",s+1);
    C)gets(s);                    
    D)scanf("%s",s[1]);(28)有以下程序
#include 
#define  N  5
#define  M  N+1
#define  f(x)  (x*M)
main()
{ int  i1,i2;
  i1=f(2);
  i2=f(1+1);
  printf("%d %d\n",i1,i2);
}
程序的运行结果是
    A)12  12
    B)11  7 
    C)11  11
    D)12  7(29)若有以下说明和定义
union dt
{ int a; char b; double c;}data;
以下叙述中错误的是
    A)data的每个成员起始地址都相同
    B)变量data所占内存字节数与成员c所占字节数相等
    C)程序段:data.a=5;printf("%f\n",data.c);输出结果为5.000000
    D)data可以作为函数的实参 (30)有以下程序
#include
main()
{FILE *fp;int k,n,a[6]={1,2,3,4,5,6};
fp=fopen("d2.dat","w");
fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);
fprintf(fp,"%d%d%d\n",a[3],a[4],a[5]);
fclose(fp);
fp=fopen("d2.dat","r");
fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是
    A)1  2       
    B)1  4 
    C)123  4 
    D)123  456(31)若已定义
int a[]={0,1,2,3,4,5,6,7,8,9}, *p=a,i;
其中 则对a数组元素不正确的引用是
    A)a[p-a]
    B)*(&a[i])
    C)p[i]
    D)a[10](32)有以下程序
#include 
void  fun(int  *s,int  n1,int  n2)
{  int  i,j,t;
i=n1;  j=n2;
while(i}
main()
{  int  a[10]={1,2,3,4,5,6,7,8,9,0},k;
fun(a,0,3);  fun(a,4,9);  fun(a,0,9);
for(k=0;k}
程序的运行结果是
    A)0987654321
    B)4321098765
    C)5678901234
    D)0987651234
(33)阅读下列程序,当运行函数时,输入asd af aa z67,则输出为
#include
#include
#include
int fun (char *str)
{ int i,j=0;
  for(i=0;str[i]!=′ \0′;i++)
  if(str[i]!=′ ′)str[j++]=str[i];
  str[j]= ′\0′;
}
main()
{
  char str[81];
  int n;
  printf("Input a string : ");
  gets(str);
  puts(str);
  fun(str);
  printf("%s\n",str);
}
    A)asdafaaz67
    B)asd af aa z67  
    C)asd
    D)z67(34)有以下程序
int fun(int n)
{if(n==1)return 1;
  else
    return(n+fun(n-1));
}
main()
{int x;
    scanf("%d",&x); x=fun(x);printf("%d\n",x)
}
执行程序时,给变量x输入10,程序的输出结果是
    A)55 
    B)54 
    C)65
    D)45(35)下面程序段中,输出*的个数是
char *s="\ta\018bc";
for(;*s!='\0';s++)printf("*");
    A)9 
    B)5 
    C)6 
    D)7 (36)C语言结构体类型变量在程序运行期间
    A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元
    B)所有的成员一直驻留在内存中
    C)只有最开始的成员驻留在内存中
    D)部分成员驻留在内存中(37)已知函数的调用形式为fread(buf,size,count,fp),参数buf的含义是
    A)一个整型变量,代表要读入的数据项总数
    B)一个文件指针,指向要读的文件
    C)一个指针,指向要读入数据的存放地址
    D)一个存储区,存放要读的数据项(38)设有以下语句
char x=3,y=6,z;
z=x^y<<2;
则z的二进制值是
    A)00010100 
    B)00011011 
    C)00011100 
    D)00011000(39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是
    A)auto和register 
    B)extern和register
    C)auto和static 
    D)static和register(40)设有定义语句int  (*f)(int);,则以下叙述正确的是
    A)f是基类型为int的指针变量
    B)f是指向函数的指针变量,该函数具有一个int类型的形参
    C)f是指向int类型一维数组的指针变量
    D)f是函数名,该函数的返回值是基类型为int类型的地址 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)测试用例包括输入值集和  【1】  值集。(2)在树形结构中,树根结点没有   【2】   。(3)数据结构分为逻辑结构与存储结构,线性链表属于   【3】   。(4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体"项目主管"与实体"项目"的联系属于  【4】  的联系。(5)数据库设计分为以下6个设计阶段:需求分析阶段、   【5】   、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(6)阅读下面程序段,则执行后输出的结果是  【6】  。
#include "stdio.h"
main()
{   char fun(char,int);
char a=′A′;
int b=13;
a=fun(a,b);
putchar(a);}
char fun(char a,int b)
{  char k;
k=a+b;
return k;}(7)函数fun的返回值是  【7】  
fun(char *a,char *b)
{ int num=0,n=0;
  while(*(a+num)!='\0')mm++;
  while(b[n]){*(a+num)=b[n];num++;n++;}
  return num;
}(8)以下程序的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:
2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10
删除后,数组中的内容应该是:
2 3 4 5 6 7 8 9 10。
请填空。
#include
#define N 80
int fun(int a[], int n)
{ int i,j=1;
  for(i=1;i  if(a[j-1]  【8】  a[i])
  a[j++]=a[i];
    【9】  ;
}
main()
{ int a[N]={ 2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}, i, n=19;
  printf("The original data : \n");
  for(i=0; i  n=fun(a,n);
  printf("\nThe data after deleted: \n");
  for(i=0; i} (9)以下程序的运行结果是  【10】  。
#include 
main()
{  int  x=1,y=0,a=0,b=0;
 switch(x)
 {  case  1:
 switch(y)
 {  case  0:a++;  break;
 case  1:  b++;  break;
}
case 2:a++; b++; break;
case 3:a++; b++;
}
printf("a=%d,b=%d\n",a,b);
} (10)以下程序的输出结果是  【11】  。
fun (int x,int y,int z)
{ z =x*x+y*y;}
main ()
{  int a=31;
fun (6,3,a)
printf ("%d", a)
}(11)函数my_cmp( )的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,sMy_cmp(char*s,char*t)
{  while (*s == *t)
{  if (*s == ′ \0)return0;
++s; ++t;
} return  【12】  ;
} (12)以下程序的输出结果是  【13】  。
void reverse(int a[],int n)
{ int i,t;
  for(i=0;i  { t=a[i]; a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
  reverse(b,8);
  for(i=6;i<10;i++)s+=b[i];
  printf(" %d\n",s);
}(13)以下说明语句中,  【14】  是结构体类型名。
typedef struct
{ int n;
  char ch[8];
} PER;(14)以下程序的作用是:从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。
#include 
main()
{FILE  *fp;  char  ch;
fp=fopen(  【15】  );
ch=fgetc(fp);
while(!feof(fp))  {  putchar(ch);  ch=fgetc(fp);  }
putchar('\n');fclose(fp);

一、选择题(1)C
    【解析】 程序流程图是人们对解决问题的方法、思路或算法的一种图形方式的描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容;流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流;带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。(2)C
    【解析】 软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们具有抽象、模块化、信息隐蔽和数据独立性。自底向上是集成测试中增量测试的一种。(3)C
    【解析】 模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从强到弱分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合和非直接耦合,没有异构耦合这种方式。(4)D
    【解析】 软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段的最后成果,是软件开发中的重要文档之一。它具有以下几个方面的作用:① 便于用户、开发人员进行理解和交流;② 反映出用户问题的结构,可以作为软件开发工作的基础和依据;③ 作为确认测试和验收的依据。(5)C
    【解析】 算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算的次数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。(6)B
    【解析】 堆排序的比较次数为nlog2n;直接插入排序的比较次数为n(n-1)/2;快速排序的比较次数为nlog2n。当数据表A中每个元素(7)B
    【解析】 栈操作原则上"后进先出",栈底至栈顶依次存放元素A、B、C、D,则表明这4个元素中D是最后进栈,B、C处于中间,A最早进栈,所以出栈时一定是先出D,再出C,最后出A。(8)A
    【解析】 数据库设计包括数据库概念设计和数据库逻辑设计两个方面的内容。(9)A
    【解析】 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为一个属性,对应表中的一个字段;在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。(10)C
    【解析】  "选课SC" 表是 "学生S" 表和 "课程C" 表的映射表,主键是两个表主键的组合。(11)D
    【解析】 在C语言所有的运算符中,逗号运算符的优先级最低。C语言中区分大小写,所以APH和aph是两个不同的变量。赋值表达式a=b表示将b的值付给a,而b本身的值保持不变;通过键盘可以向计算机输入允许的任何类型的数据。选项D)中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数值和整型数值等。(12)B
    【解析】 C语言规定用户标识符由字母、数字和下划线组成,且第一个字符必须是字母或下划线,可见选项C),D)是错误的;此外,C语言不允许用户将关键字作为标识符,而选项A)中的void正是C语言的关键字。(13)B
    【解析】 C语言的语法规定,字母e(E)之前必须有数字,且e(E)后面的指数必须是整数,而选项B)中,e(E)后面的指数是小数,所以不合法。(14)A
    【解析】 在C语言中,"%"运算符两侧的运算数必须是整型。(15)A
    【解析】 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C)和D)错误。"%"运算符两侧都应当是整型数据,选项B)错误。(16)D
    【解析】 输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12。(17)B
    【解析】 C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在'A'和'Z'之间就可以了,选项A)和C)符合要求。函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。(18)B
    【解析】 满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,表达式B)都为"真"。(19)B
    【解析】 条件运算符要求有3个操作对象,称三目(元)运算符,它是C语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3其求解顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,注意++、--的用法。(20)B
    【解析】 在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于0,选项B)中定义有5个元素,但赋值时有6个元素,所以是错误的。(21)B
    【解析】 本题中,a[1][2]是二维数组中的第6个元素,对应for循环中i的值为5,p[5]=5+1。(22)B
    【解析】 本题中,"!"表示逻辑非运算符,"!="表示不等于运算符,逻辑非运算符比不等于运算符的优先级高。(23)C
    【解析】 对于字符串指针,其保留的是整个串的首地址,即第一个字符的起始地址;当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。 (24)A
    【解析】 数组c[][4]表示一个4行4列数组,c[2][2]表示第3行第3列上的元素62,*(*(c+1)+1))表示第2行第2列上的元素6,通过十六进制输出为3e,6。(25)C
    【解析】 选项A)char *a;*a="china"应改为a=china;,选项B)应该是char str[6];D)项表述方法有错误。
(26)D
    【解析】 C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示数组元素a[0][0]。(27)D
    【解析】 在格式输入中,要求给出的是变易的地址,而D)答案中给出的s[1]是一个值的表达式。
(28)B
    【解析】 根据宏替换的替换规则,我们可知,f(2)=2*N+1=2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。(29)D
    【解析】 选项A),共用体的每个成员的起始地址都相同;选项B),共用体变量所占的内存长度等于最长的成员的长度;选项C)因为每个成员的起始地址相同,所以整型数5以浮点型输出时为5.000000;选项D)C语言规定,不能把共用体变量作为函数的参数。(30)D
    【解析】 将有6个元素的整型数组分两行输出到一个文件中,因为输出的都是数字并且每行都没有分隔符,所以当再对其进行读取操作时,每一行都会被认为是一个完整的数,而换行符则作为它们的分隔符。(31)D
    【解析】 通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。(32)C
    【解析】 函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。
(33)A
    【解析】 本题题意要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用"留下"字符的算法,以前的题目亦是如此。用str[i]从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格(注意在if()的单引号之间有一个空格),则将其保存str[j]中。注意j的下标变化、初值及最后加串结束符'\0'。(34)A
    【解析】 本程序考察的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10=55。(35)C
    【解析】 本题中,格式符0表示的是八进制无符号形式输出整型数(不带前导0),字符常量在内存中占一个字节,存放的是ACSII码代码值。C语言规定,所有字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ACSII字符集中该字符的序号,即&*s中有几个字符就输出几个*。(36)B
    【解析】 结构体类型的变量在程序运行期间要作为一个整体占用连续的内存单元。(37)C
    【解析】 这是一道考查fread函数的题。buf是一个指针,fread是读入数据的存放地址;fwrite是输出数据的地址(以上指的是起始地址)。(38)B
    【解析】 本题考查两个位运算符。
按位异或运算符"^"是双目运算符,其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异或时,结果为1。
左移运算符"<<"是双目运算符,其功能把"<< "左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0,并且"<<"运算符的优先级于"^"。(39)A
    【解析】 在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。(40)B
    【解析】 本题考查的是指向函数的指针。语句 int (* f)(int);是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。
二、选择题(1)【1】 输出
    【解析】 软件测试用例是为了有效发现软件缺陷面编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。(2)【2】 前件
    【解析】 在树形结构中,每一个结点只有一个前件,称为父结点;没有前件的结点只有一个,称为树的根结点;每一个结点可以有多个后件,它们都称为该结点的子结点;没有后件的结点称为叶子结点。(3)【3】 存储结构
    【解析】 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间前后件关系的信息。(4)【4】 一对多(或1∶N)
    【解析】 两个实体集间的联系实际上是实体集间的函数系,这种函数关系可以有3种,即一对一(1∶1)的联系、一对多(1∶N)或多对一(N∶1)的联系和多对多(N∶N)的联系。(5)【5】 概念设计阶段
    【解析】 数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。(6)【6】 N
    【解析】 函数说明语句中的类型名必须与函数返回值的类型一致。本题实现的是在字符'A'的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。(7)【7】 字符串a和b的长度之和
    【解析】 本题首先通过第一个while循环计算字符串a的长度,再通过第二个循环,将字符串a和b相连,最后返回连接后的总长度。(8)【8】!=   【9】 return j
    【解析】 本题程序的流程是:让i,j都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a[j-1]!=a[i],其中a[j-1]就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以a[i]要留到新数组中。注本题中i、j的初值都要从1开始,该算法只能用于数组已排序的题目中。(9)【10】 a=2,b=1
    【解析】 本题考查了 switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的 case 2:分支,最后a和b的值分别为2和1。(10)【11】 31
    【解析】 在函数调用时,形参值的改变,不会改变实参值。(11)【12】 *s-*t
    【解析】 两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s > t时,返回正值,当s < t时,返回负值。(12)【13】 22
    【解析】 在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7]...b[9]的值相加,结果为22。(13)【14】 PER
    【解析】 本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。(14)【15】 “filea.dat”,“r”
    【解析】 fopen函数的调用方式通常为 fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容,所以空白处应当填入 "filea.dat","r"。  一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)软件是指
    A)程序                                       
    B)程序和文档
    C)算法加数据结构               
    D)程序、数据与相关文档的完整集合(2)检查软件产品是否符合需求定义的过程称为
    A)确认测试 
    B)集成测试
    C)验证测试 
    D)验收测试(3)以下不属于对象的基本特点的是
    A)分类性                                
    B)多态性
    C)继承性                    
    D)封装性(4)在设计程序时,应采纳的原则之一是
    A)不限制goto语句的使用
    B)减少或取消注解行
    C)程序越短越好
    D)程序结构应有助于读者理解(5)下列叙述中正确的是
    A)程序执行的效率与数据的存储结构密切相关
    B)程序执行的效率只取决于程序的控制结构
    C)程序执行的效率只取决于所处理的数据量
    D)以上三种说法都不对(6)数据结构中,与所使用的计算机无关的是数据的
    A)存储结构                 
    B)物理结构
    C)逻辑结构           
    D)物理和存储结构(7)线性表的顺序存储结构和线性表的链式存储结构分别是
    A)顺序存取的存储结构、顺序存取的存储结构
    B)随机存取的存储结构、顺序存取的存储结构
    C)随机存取的存储结构、随机存取的存储结构
    D)任意存取的存储结构、任意存取的存储结构(8)树是结点的集合,它的根结点数目是
    A)有且只有1
    B)1或多于1
    C)0或1                                                         
    D)至少2(9)下列有关数据库的描述,正确的是
    A)数据库是一个DBF文件
    B)数据库是一个关系
    C)数据库是一个结构化的数据集合
    D)数据库是一组文件(10)数据库、数据库系统和数据库管理系统之间的关系是
    A)数据库包括数据库系统和数据库管理系统
    B)数据库系统包括数据库和数据库管理系统
    C)数据库管理系统包括数据库和数据库系统
    D)三者没有明显的包含关系(11)以下4个选项中,不能看作一条语句的是
    A);                                            
    B)a=5,b=2.5,c=3.6;
    C)if(a<5);                         
    D)if(b!=5)x=2;y=6;(12)下面四个选项中,均是不合法的用户标识符的选项是
    A)A P_0 do       
    B)float la0_A        
    C)b-a goto int        
    D)_123 temp int(13)以下选项中不属于字符常量的是
    A)′C′ 
    B)′′C′′ 
    C)′\xCC′          
    D) ′\072′(14)设变量已正确定义并赋值,以下正确的表达式是
    A)x=y*5=x+z 
    B)int(15.8%5) 
    C)x=y+z+5,++y 
    D)x=25%5.0(15)若变量已正确定义并赋值,以下符合C语言语法的表达式是
    A)a:=b+1 
    B)a=b=c+2 
    C)int 18.5%3 
    D)a=a+7=c+b(16)以下程序的运行结果是
int k=0;
void fun(int m)
{m+=k;k+=m;printf("m=%d  k=%d  ",m,k++);}
main()
{int i=4;
fun(i++);    printf("i=%d  k=%d\n",i,k);
}
    A)m=4  k=5  i=5  k=5 
    B)m=4  k=4  i=5  k=5
    C)m=4  k=4  i=4  k=5                                 
    D)m=4  k=5  i=4  k=5(17)已有定义:char  c;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是
    A)isupper(c) 
    B)′A′<=c<=′Z′
    C)′A′<=c&&c<=′Z′                                 
    D)c<=(′z′-32)&&(′a′-32)<=c(18)设有:
int a=1,b=2,c=3,d=4,m=2,n=2;
执行 (m=a>b)&&(n=c>d)后,n的值是
    A)1 
    B)2 
    C)3 
    D)4(19)若变量已正确定义,有以下程序段
    int  a=3,b=5,c=7;
 if(a>b) a=b;  c=a;
 if(c!=a) c=b;
 printf("%d,%d,%d\n",a,b,c);
其输出结果是
    A)程序段有语法错       
    B)3,5,3       
    C)3,5,5       
    D)3,5,7(20)若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的switch语句是
    A)switch(x)                    
        {case 1.0:printf("*\n");                    
         case 2.0:printf("**\n");}                  
    B)switch((int)x);
       {case 1:printf("*\n");
         case 2:printf("**\n");}
    C)switch(a+b)                     
       {case 1:printf("*\n");        
         case 2+1:printf("**\n");}
    D)switch(a+b)
       {case1:printf(**\n);}
         casec:printf(**\n);}(21)有以下程序
#include 
main0
{ int  y=9;
for(  ;  y>0;y--)
  if(y%3==0)  printf("%d",--y);
}
程序的运行结果是
    A)741
    B)963
    C)852
    D)875421(22)以下描述中正确的是
    A)由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
    B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
    C)在do-while循环体中,是先执行一次循环,再进行判断
    D)do-while循环中,根据情况可以省略while(23)有以下程序
#include 
main()
{  int  a[ ]={1,2,3,4},y,*p=&a[3];
--p;    y=*p;printf("y=%d\n",y);
}
程序的运行结果是
    A)y=0 
    B)y=1 
    C)y=2 
    D)y=3(24)以下数组定义中错误的是
    A)int x[][3]={0};
    B)int x[2][3]={{l,2},{3,4},{5,6}};
    C)int x[][3]={{l,2,3},{4,5,6}};
    D)int x[2][3]={l,2,3,4,5,6};(25)下面说明不正确的是
    A)char a[10]="china";                        
    B)char a[10],*p=a;p="china"
    C)char *a;a="china";                    
    D)char a[10],*p;p=a="china"(26)若有定义:int  a[2][3];,以下选项中对a数组元素正确引用的是
    A)a[2][!1]
    B)a[2][3]
    C)a[0][3]
    D)a[1>2][!1](27)若要求从键盘读入含有空格字符的字符串,应使用函数
    A)getc()
    B)gets()
    C)getchar()
    D)scanf()(28)阅读下列程序段,则程序的输出结果为
#include "stdio.h"
#define M(X,Y)(X)*(Y)
#define N(X,Y)(X)/(Y)
main()
{  int a=5,b=6,c=8,k;
k=N(M(a,b),c);
printf("%d\n",k);
    A)3  
    B)5  
    C)6  
    D)8(29)在16位IBM-PC机上使用C语言,若有如下定义
struct data
    { int i;
      char ch;
      double f;
    } b;
则结构变量b占用内存的字节数是
    A)1 
    B)2 
    C)7 
    D)11(30)有以下程序
#include
main()
{FILE *fp; int i,a[6]={l,2,3,4,5,6};
fp=fopen("d3.dat","w+b");
fwrite(a,sizeof(int),6,fp);
fseek(fp,sizeof(int)*3,SEEK_SET);/*该语句使读文件的位置指针从文件头向后移动3个int型数据*/
fread(a,sizeof(int),3,fp); fclose(fp);
for(i=0;i<6;i++)printf("%d,",a[i]);
}
程序运行后的输出结果是
    A)4,5,6,4,5,6, 
    B)1,2,3,4,5,6, 
    C)4,5,6,1,2,3, 
    D)6,5,4,3,2,1,
(31)有以下程序
#include 
main()
{  int  s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)  c[s[i]]++;
for(i=1;i<5;i++)  printf("%d",c[i]);
printf("\n");
}
程序的运行结果是
    A)1 2 3 4 
    B)2 3 4 4 
    C)4 3 3 2 
    D)1 1 2 3(32)有以下程序
#include 
void fun(int  *a,int  n)/*fun函数的功能是将a所指数组元素从大到小排序*/
{ int   t,i,j;
for(i=0;i  for(j=i+1;j    if(a[i]}
main()
{ int  c[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for(i=0;i<10;i++)  printf("%d,",c[i]);
printf("\n");
}
程序的运行结果是
    A)1,2,3,4,5,6,7,8,9,0, 
    B)0,9,8,7,6,5,1,2,3,4,
    C)0,9,8,7,6,5,4,3,2,1, 
    D)1,2,3,4,9,8,7,6,5,0,(33)下面程序的输出结果是
#include
#include
main()
{  char *p1="abc",*p2="ABC",str[50]= "xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n",str);}
A)xyzabcABC 
B)zabcABC 
C)xyabcABC 
D)yzabcABC(34)以下函数返回a所指数组中最小的值所在的下标值
fun(int *a, int n)
{ int i,j=0,p;
  p=j;
  for(i=j;iif(a[i]  return(p);}
在横线处应填入的是
A)i=p 
B)a[p]=a[i] 
C)p=j 
D)p=i(35)下列程序的运行结果为
#include
void abc(char*str)
{  int a,b;
for(a=b=0;str[a]!='\0';a++)
if(str[a]!='c')
str[b++]=str[a];
str[b]='\0';}
void main()
{  char str[]="abcdef";
abc(str);
printf("str[]=%s",str); }
    A)str[]=abdef 
    B)str[]=abcdef 
    C)str[]=a 
    D)str[]=ab(36)有以下程序
#include 
#include 
typedef  struct{  char name[9];  char sex;  float score[2];  }STU;
void  f(STU  a)
{  STU  b={"Zhao",′m′,850,900};    int  i;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)  a.score[i]=b.score[i];
}
main()
{  STU  c={"Qian",′f′,95.0,92.0};
f(c);
printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是
    A)Qian,f,95,92     
    B)Qian,m,85,90     
    C)Zhao,f,95,92   
    D)Zhao,m,85,90(37)有以下程序
#include 
main()
{  FILE  *fp;    int  a[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++)  fprintf(fp,"%d",a[i]);
fprintf(fp,"\n");
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);
fclose(fp);
printf("%d\n",n);
}
程序的运行结果是
    A)12300 
    B)123 
    C)1 
    D)321(38)已知 int a=1,b=3则a^b的值为
    A)3 
    B)1 
    C)2 
    D)4(39)阅读下列程序,则运行结果为
#include "stdio.h"
fun()
{   static  int x=5;
x++;
return x;}
main()
{    int i,x;
for(i=0;i<3;i++)
x=fun();
printf("%d\n",x);}
    A)5  
    B)6  
    C)7 
    D)8(40)有以下程序
#include 
void fun(char *t,char *s)
{ while(*t!=0)  t++;
while((*t++=*s++)!=0);
}
main()
{ char ss[10]="acc",aa[10]="bbxxyy";
fun(ss,aa);  printf("%s,%s\n",ss,aa);
}
程序的运行结果是
    A)accxyy,bbxxyy                      
    B)acc,bbxxyy
    C)accxxyy,bbxxyy            
    D)accbbxxyy,bbxxyy 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)需求分析的最终结果是产生  【1】  。(2)为了便于对照检查,测试用例应由输入数据和预期的   【2】   两部分组成。(3)数据结构分为逻辑结构与存储结构,线性链表属于   【3】   。(4)某二叉树中度为2的结点有18个,则该二叉树中有   【4】   个叶子结点。(5)  【5】   是数据库设计的核心。(6)已有定义:char  c=′  ′;int  a=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为  【6】  。(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为  【7】  。(8)下面程序的功能是:计算1 10之间的奇数之和与偶数之和,请填空。
#include
main()
{ int a,b,c,I;
a=c=0;
for(I=0;I<=10;I+=2)
{a+=I;
  【8】  ;
c+=b; }
printf("偶数之和=%d\n",a);
printf("奇数之和=%d\n",c-11);}(9)以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。
#define  N  4
void rotade(int  a[][N],int  b[][N])
{  int I,j;
for(I=0;I{  b[I][N-1]=  【9】  ;      【10】  =a[N-1][I]; } }(10)以下程序的输出结果是  【11】  。
#include 
void  swap(int  *a,  int  *b)
{  int  *t;
t=a;  a=b;  b=t;
}
main()
{  int  i=3,j=5,*p=&i,*q=&j;
swap(p,q);    printf("%d  %d\n",*p,*q);
}(11)下面程序的运行结果是  【12】  。
#include
#define SIZE 12
main()
{ char s[SIZE]; int I;for(I=0;Isub(s,7,SIZE-1);
for(I=0;Iprintf("\n");}
sub(char*a,int t1,int t2)
{ char ch;
while (t1{ ch=*(a+t1);
*(a+t1)=*(a+t2);
*(a+t2)=ch;
t1++;t2--; } }(12)以下程序的输出结果是  【13】  。
#include 
main()
{  int  a[5]={2,4,6,8,10},*p;
p=a;  p++;
printf("%d",*p);
}(13)设有定义"struct {int a; float b; char c;} abc, *p_abc=&abc;",则对结构体成员a的引用方法可以是abc.a和p_abc  【14】  a。(14)以下程序的运行结果是  【15】  。
#include 
main()
{ FILE  *fp;    int  a[10]={1,2,3,0,0},i;
fp=fopen("d2.dat","wb");
fwtite(a,sizeof(int),5,fp);
fwrite(a,sizeof(int),5,fp);
fclose(fp);
fp=fopen("d2.dat","rb");
fread(a,sizeof(int),10,fp);
fclose(fp);
for(i=0;i<10;i++)printf("%d",a[i]);

一、选择题(1)D
    【解析】 软件是程序、数据与相关文档的集合,相对于计算机硬件而言,软件是逻辑产品而不是物理产品,是计算机的无形部分。(2)A
    【解析】 确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求;集成测试的主要目的是发现与接口有关的错误。(3)C
    【解析】 对象的基本特点:标识惟一性、分类性、多态性、封装性和模块独立性。(4)D
    【解析】 滥用goto 语句将使程序流程无规律,可读性差,因此A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。(5)A
    【解析】 程序执行的效率与很多因素有关,如数据的存储结构、程序所处理的数据量、程序所采用的算法等。顺序存储结构在数据插入和删除操作上的效率比链式存储结构的效率低。(6)C
    【解析】 数据结构概念一般包括数据的逻辑结构、存储结构及数据上的运算集合等。数据的逻辑结构只抽象地反映数据元素之间的逻辑关系,而不管它在计算机中的存储形式。(7)B
    【解析】 顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)=LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。(8)C
    【解析】 树是N(N>0)个结点的有限集合,当N=0,时称为空树,对于空树没有根结点,即根结点的个数为0,对于非空树有且只有一个根结点,所以树的根结点数目为0或1。(9)C
    【解析】 数据库(DataBase,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,可被各个应用程序所共享。数据库中的数据具有"集成"、"共享"的特点。(10)B
    【解析】 数据库系统(Database System,简称DBS),包括数据库(Database,简称DB)和数据库管理系统(Database Management System,简称DBMS)。(11)D
    【解析】 选项D)为两条语句。(12)C
    【解析】 C语言规定的标识符只能由字母、数字和下划线3种字符组成,第一个字符必须为字母或下划线,并且不能使用C语言中的关键字作为标识符。选项C)中goto和int是关键字,b-a中'-'不是组成标识符的3种字符之一;选项D)中int是关键字,所以,均是不合法用户标识符的选项是C)。(13)B
    【解析】 在C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项A)、C)和D)为正确的字符常量,而选项B)是用双引号括起来的字符,表示一个字符串常量。(14)C
    【解析】 求余运算符"%"两边的运算对象必须是整型,而选项B)和D)中 "%"两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)中赋值表达式的两边出现相同的变量x,也是错误的。选项C)是一个逗号表达式,所以正确答案为C)。(15)B
    【解析】 选项A)中包含一个不合法的运算符":=";选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。(16)B
    【解析】 由于在main()函数中,变量 i=4,所以就调用fun(4),则输出"m=4 k=4"。然后变量k增1等于5,变量i增1等于5,所以main()函数的"printf("i=%d k=%d\n",i,k);"语句输出"i=5 k=5"(17)B
    【解析】 在本题中,选项B)实际是先计算关系表达式"'A'<=c"的值是0还是1,再比较该值与字符'Z'之间的大小关系,显然不能实现题目所要求的功能,而选项A)、C)、D)都可以。(18)B
    【解析】 本题考查逻辑与运算的运算规则。其规则是:当运算符前后两个条件表达式都满足时,其最终结果才为真。当发现第一个表达式的值为假,计算机将不再执行后面表达式的运算。
本题中,由于前一个表达式的值为"假",所以,后面的表达式不再进行运算,因而n的值保持不变,仍为2。(19)B
    【解析】 两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没有变化,程序输出的结果为3,5,3。(20)C
    【解析】 C语言中,switch语句专用于实现多分支结构程序,其特点是各分支清晰而直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。(21)C
    【解析】 本题考察变量的自加"++"和自减"--"问题。当y 的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式--y的值,y的自减要先于输出语句执行,故输出结果为8 5 2。(22)C
    【解析】 do while语句的一般形式为:do 循环体语句 while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作为语句的结束,在do-while循环中,不可以省略while。(23)D
    【解析】 在程序中指针变量p初始指向a[3],执行p减1后,p指向a[2],语句y=*p的作用是把a[2]的值赋给变量y,所以输出为y=3。(24)B
    【解析】 二维数组的初始化有以下几种形式:①分行进行初始化;②不分行进行初始化;③部分数组元素进行初始化;④省略第一维的定义,不省略第二维的定义。选项B)等号右边分了3行,大于等号左边数组的行数2。(25)D
    【解析】 C语言中操作一个字符串常量的方法有:①将字符串常量存放在一个字符数组之中;② 用字符指针指向字符串, 然后通过字符指针来访问字符串存储区域。当字符串常量在表达式中出现时, 根据数组的类型转换规则, 将其转换成字符指针。
本题D)项中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。(26)D
    【解析】 C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示数组元素a[0][0]。(27)B
    【解析】 scanf()语句用"空格"区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。(28)A
    【解析】 带参数的宏定义命令行形式如下:#define 宏名(形参表) 替换文本。首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为 (a)*(b)/(c)。(29)D
    【解析】 结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和。本题中整型变量i所占用的内存是2字节,字符型变量ch所占用的内存是1字节,双精度型变量f所占用的内存是8字节,三者相加即可。(30)A
    【解析】 首先利用fwrite函数将数组a中的数据写到文件中,接着fseek函数的功能是读文件的位置,指针从文件头向后移动3个int型数据,这时文件位置指针指向的是文件中的第4个int数据"4",然后 fread函数将文件fp中的后3个数据4,5,6读到数组a中,这样就覆盖了数组中原来的前3项数据。最后数组中的数据就成了{4,5,6,4,5,6}。(31)C
    【解析】 在for(i=0;i<12;i++) c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。(32)D
    【解析】 在本题中,主函数在调用fun()函数进行排序时,传递的参数是c+4和6,fun()函数实现的功能是将数组c的第5个元素开始的6个元素依次进行从大到小的顺序排列。排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}。(33)C
    【解析】 本题考查的重点是拷贝字符串──使用strcpy()函数,该函数的调用方式是:strcpy(字符数组, 字符串),其中"字符串"可以是字符串常量,也可以是字符数组。函数的功能是:将"字符串"完整地复制到"字符数组"中,字符数组中原有的内容被覆盖。
使用该函数时注意:①字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一起复制;②不能用赋值运算符"="将一个字符串直接赋值给一个字符数组,只能用strcpy( )函数处理。
另外,本题还考查连接字符串的strcat()函数,其调用方式是:strcat(字符数组, 字符串)。
功能是把"字符串"连接到"字符数组"中的字符串尾端,并存储于"字符数组"中。"字符数组"中原来的结束标志,被"字符串"的第一个字符覆盖,而"字符串"在操作中未被修改。
使用该函数时注意:①由于没有边界检查,编程者要注意保证"字符数组"定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题;②连接前两个字符串都有结束标志'\0',连接后"字符数组"中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。(34)D
    【解析】 该程序先判断a[i]    【解析】 本题考查了用字符指针引用字符数组中的字符及对字符的操作。函数abc()的for语句执行过程是:从字符指针str所指向的字符数组的第一个元素开始,逐一判断字符是否为'c',若不是就执行一次数组元素的赋值过程,若字符为'c'就不执行。(36)A
    【解析】 本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量c在栈中的一个拷贝,函数f的所有操作只是针对这个数据拷贝进行的修改,这些都不会影响变量c的值。(37)B
    【解析】 在函数中首先把整型数组a[10]中的每个元素写入文件d1.dat中,然后再次打开这个文件,把文件d1.dat中的内容读入到整型变量n中,最后输出变量n的值。(38)C
    【解析】 ^是按位异或运算,如果对应位不同则结果为1,相同则为0。(39)D
    【解析】 在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久的存储单元,即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来的存储单元,静态局部变量的初值是在编译的时候赋予的,在程序执行期间不再赋予初值。本题由于连续三次调用函数fun(),三次对静态变量x进行操作,x的值应依次为6,7,8。(40)D
    【解析】 本题中fun函数实现了字符串函数strcat的功能,将字符串aa连接到字符串ss的末尾。调用fun函数时,形参t和s分别指向了字符串ss和aa,然后通过一个while循环使t指向字符串ss的结束符的位置,第二个while循环将字符串aa中的字符(包括结束符'\0')逐个复制到字符串ss的末尾处。
二、选择题(1)【1】 需求规格说明书
    【解析】 软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。需求规格说明书包括正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性等。(2)【2】 输出结果
    【解析】 测试用例(Text Case)是为测试设计的数据。测试用例由测试输入数据和与之对应的预期输出结果两部分组成。(3)【3】 存储结构
    【解析】 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。(4)【4】 19
    【解析】 在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。(5)【5】 数据模型
    【解析】 数据模型是对客观事物及联系的数据描述,它反映了实体内部及实体与实体之间的联系。因此,数据模型是数据库设计的核心。(6)【6】 1
    【解析】 字符空格的ASCII码不为0,所以本题中表达式!c的值为0, b=0&&1的结果显然为0。(7)【7】 3
    【解析】 本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达式的值等于其中最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。(8)【8】 b=I+1
    【解析】 本题考查了for循环语句的执行过程。i+=2是修正表达式,执行一次循环体后i的值就增加2,i的初始值为0,每次加2后的和累加至a,所以a的值就是1 10之间的偶数之和; b的值是1 11之间的奇数和,但在输出b值时,c去掉多加的11,即为1 10之间的奇数之和。(9)【9】 a[0][I]
【10】 b[I][0]
    【解析】 b[i][N-1]= a[0][i]实现把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b[I][0]=a[N-1][I] 实现将a所指N行N列的二维数组中的最后一行放到b所指二维数组中的第0列。(10)【11】 3 5
    【解析】 函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为3 5。(11)【12】 a b c d e f g l k j I h
    【解析】 本题主要考查了字符变量可参与的运算。因为字符在计算机中是以ASCII码的形式存放的,所以字符变量可看作整型变量来处理,如参与算术运算等,某字符的大写字母的ASCII码值比它对应的小写字母ASCII码值小32。(12)【13】 4
    【解析】 在主函数中,语句p=a;p++使用指针p指向数组a[1],所以输出结果为4。(13)【14】 ->
    【解析】 若结构体变量abc有成员a,并有指针p_abc指向结构变量abc,则引用变量abc成员a的标记形式有abc.a和p_abc->a。
(14)【15】 1,2,3,0,0,1,2,3,0,0,
    【解析】 本题考查文件读写函数fread和fwrite的用法。fwrite函数将数组a的前5个元素输出到文件fp中两次,共10个字节,再调用fread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的内容就变为{1,2,3,0,0,1,2,3,0,0},最后的输出结果为"1,2,3,0,0,1,2,3,0,0,"。 
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)软件生命周期中花费费用最多的阶段是
    A)详细设计                                  
    B)软件编码
    C)软件测试                           
    D)软件维护(2)为了提高测试的效率,应该
    A)随机选取测试数据
    B)取一切可能的输入数据作为测试数据
    C)在完成编码以后制定软件的测试计划
    D)集中对付那些错误群集的程序(3)以下不是面向对象思想中的主要特征的是
    A)多态                
    B)继承
    C)封装                            
    D)垃圾回收(4)下列叙述中,不符合良好程序设计风格要求的是
    A)程序的效率第一,清晰第二       
    B)程序的可读性好
    C)程序中要有必要的注释           
    D)输入数据前要有提示信息(5)软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指
    A)模块间的关系
    B)系统结构部件转换成软件的过程描述
    C)软件层次结构
    D)软件开发过程(6)数据处理的最小单位是
    A)数据                             
    B)数据元素
    C)数据项                         
    D)数据结构(7)假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为
    A)log2n                           
    B)n2
    C)O(n1..5)             
    D)n(n-1)/2(8)在深度为5的满二叉树中,叶子结点的个数为
    A)32                                
    B)31
    C)16                                
    D)15(9)数据库系统的核心是
    A)数据库 
    B)数据库管理系统 
    C)模拟模型 
    D)软件工程(10)一个关系中属性个数为1时,称此关系为
    A)对应关系                   
    B)单一关系
    C)一元关系                                  
    D)二元关系(11)下面各选项中,均是C语言合法标识符的选项组是
    A)33  we  auto                            
    B)_23  me  _3ew
    C)_43  3e_  else                          
    D)ER -DF  32
(12)可在C程序中用作用户标识符的一组标识符是
    A)and                B)Date            C)Hi     D)case
      _2007                 y-m-d             Dr.Tom            Bigl(13)以下对C语言函数的有关描述中,正确的是
    A)在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参
    B)C函数既可以嵌套定义又可以递归调用
    C)函数必须有返回值,否则不能使用函数
    D)函数必须有返回值,返回值类型不定(14)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是
    A)函数的实参和其对应的形参共占同一存储单元
    B)形参只是形式上的存在,不占用具体存储单元
    C)同名的实参和形参占同一存储单元
    D)函数的形参和实参分别占用不同的存储单元(15)现有定义int a;double b;float c;char k;,则表达式a/b+c-k值的类型为:
    A)int 
    B)double  
    C)float               
    D)char(16)以下关于long、int和short类型数据占用内存大小的叙述中正确的是
    A)均占4个字节
    B)根据数据的大小来决定所占内存的字节数
    C)由用户自己定义
    D)由C语言编译系统决定(17)有以下程序段
int  j;float  y;char  name[50];
scanf("%2d%f%s",&j,&y,name);
当执行上述程序段,从键盘上输入55566 7777abc后,y的值为
    A)55566.0 
    B)566.0           
    C)7777.0 
    D)566777.0(18)若变量已正确定义,有以下程序段
i=0;
do printf("%d,",i);while(i++);
printf("%d\n",i);
其输出结果是
    A)0,0                              
    B)0,1
    C)1,1                          
    D)程序进入无限循环(19)下列程序的运行结果是
#include "stdio.h"
main()
{  int x=-9,y=5,z=8;
if(x    if(y<0)z=0;
    else z+=1;
printf("%d\n",z);}
    A)6 
    B)7  
    C)8 
    D)9(20)若程序执行时的输入数据是"2473",则下述程序的输出结果是
#include
void main()
{   int cs;
  while((cs=getchar())!=; '\n')
  {switch(cs-'2')
{  case 0
case 1: putchar(cs+4);
case 2: putchar(cs+4);
break;
case 3: putchar(cs+3); default: putchar(cs+2); } } }
    A)668977 
    B)668966 
    C)6677877 
    D)6688766(21)以下程序的输出结果是
main()
{  int a,i;a=0;
for(i=1;i<5;i++)
{  switch(i)
{  case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5; }
}printf("%d\n",a);}
    A)31 
    B)13 
    C)10 
    D)20(22)现有如下程序段
#include "stdio.h"
main()
{   int k[30]={12,324,45,6,768,98,21,34,453,456};
int count=0,i=0;
while(k[i])
{   if(k[i]%2==0||k[i]%5==0)count++;
i++; }
printf("%d,%d\n",count,i);}
则程序段的输出结果为
    A)7,8  
    B)8,8 
    C)7,10 
    D)8,10(23)若有以下程序
#include
int a[]={2,4,6,8};
main()
{   int i;
int *p=a;
for(i=0;i<4;i++)a[i]=*p;
printf("%d\n",a[2]);}
上面程序的输出结果是
    A)6 
    B)8 
    C)4 
    D)2(24)有以下程序
#include 
main()
{ int i,j,m=55;
for(i=1;i<=3;i++)
  for(j=3;j<=i;j++)m=m%j;
printf("%d\n",m);
}
程序的运行结果是
    A)0 
    B)1 
    C)2 
    D)3(25)已知字符′A′的ASCII码值是65,字符变量cl的值是′A′,c2 的值是′D′。执行语句printf("%d,%d",c1,c2-2);后,输出结果是
    A)A,B     
    B)A,68 
    C)65,66  
    D)65,68(26)下列程序是用来判断数组中特定元素的位置所在的。
#include
#include
int fun(int *s, int t, int *k)
{ int i;
  *k=0;
  for(i=0;i  if(s[*k]  return s[*k]; }
main()
{   int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;
  fun(a, 10, &k);
  printf("%d, %d\n",k,a[k]);}
如果输入如下整数:876 675 896 101 301 401 980 431 451 777
则输出结果为
    A)7,431   
    B)6        
    C)980           
    D)6,980(27)下面程序的文件名为t.exe,在DOS下输入的命令行参数为:t to meet me<回车>
则程序输出的结果是
#include "stdio.h"
main(argc,argv)
int argc;char *argv[];
{  int i;
printf("%d\n",argc);}
    A)3                                  
    B)4
    C)2                             
    D)以上答案都不正确(28)有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p=&a[3],b;b=p[5];
则b的值是
    A)5 
    B)6 
    C)9 
    D)8(29)以下叙述中错误的是
    A)改变函数形参的值,不会改变对应实参的值
    B)函数可以返回地址值
    C)可以给指针变量赋一个整数作为地址值
    D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL(30)下面程序的输出结果是
#include
main()
{  int a[]={1,2,3,4,5,6,7,8,9,0},*p;
  p=a;
  printf("%d\n",*p+9);}
    A)0 
    B)1 
    C)10 
    D)9(31)有下面程序段
#include "stdio.h"
#include "string.h"
main()
{  char a[3][20]={{"china"},{"isa"},{"bigcountry!"}};
char k[100]={0},*p=k;
int i;
for(i=0;i<3;i++)
{ p=strcat(p,a[i]);}
i=strlen(p);
printf("%d\n",i);}
则程序段的输出结果是
    A)18  
    B)19  
    C)20 
    D)21(32)若有定义: char *st= "how are you "; ,下列程序段中正确的是
    A)char a[11], *p; strcpy(p=a+1,&st[4]);
    B)char a[11]; strcpy(++a, st);
    C)char a[11]; strcpy(a, st);
    D)char a[], *p; strcpy(p=&a[1],st+2);(33)有以下程序
#include 
int  fun(char  s[])
{ int  n=0;
while(*s<=′9′&&*s>=′0′)  {n=10*n+*s-′0′;s++;}
return(n);
}
main()
{ char  s[10]={′6′,′1′,′*′,′4′,′*′,′9′,′*′,′0′,′*′};
printf("%d\n",fun(s));
}
程序的运行结果是
    A)9 
    B)61490 
    C)61 
    D)5(34)设有定义:char p[]={′1′,′2′,′3′},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是
    A)sizeof(p)                                
    B)sizeof(char)
    C)sizeof(*q)                              
    D)sizeof(p[0])(35)有以下函数
int aaa(char  *s)
{ char  *t=s;
while(*t++);
t--;
return(t-s);
}
以下关于aaa函数的功能的叙述正确的是
    A)求字符串s的长度              
    B)比较两个串的大小
    C)将串s复制到串t                           
    D)求字符串s所占字节数(36)当用户要求输入的字符串中含有空格时,应使用的输入函数是
    A)scanf() 
    B)getchar() 
    C)gets()       
    D)getc()(37)下列选项中错误的说明语句是
    A)char a[]={′t′,′o′,′y′,′o′,′u′,′\0′};      
    B)char a[]={"toyou\0"};
    C)char a[]="toyou\0";                    
    D)char a[]=′toyou\0′;(38)以下程序的输出结果是
int f()
{ static int i=0;
  int s=1;
  s+=i; i++;
  return s; }
main()
{ int i,a=0;
  for(i=0;i<5;i++)a+=f();
  printf("%d\n",a);}
    A)20 
    B)24 
    C)25 
    D)15(39)下列程序的输出结果是
#include "stdio.h"
#define  M(x,y)  x%y
main()
{    int a,m=12,n=100;
a=M(n,m);
printf("%d\n",a--);}
    A)2 
    B)3 
    C)4  
    D)5(40)假定当前盘符下有两个如下文本文件:
文件名     a1.txt   a2.txt
内容     123#    321#
则下面程序段执行后的结果为
#include "stdio.h"
void fc(FILE *p)
{    char c;
while((c=fgetc(p))!=′#′)putchar(c);}
main()
{    FILE *fp;
fp=fopen("a1.txt","r");
fc(fp);
fclose(fp);
fp=fopen("a2.txt","r");
fc(fp);
fclose(fp);
putchar('\n');}
    A)123321  
    B)123 
    C)321           
    D)以上答案都不正确 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)软件定义时期主要包括  【1】  和需求分析两个阶段。(2)软件维护活动包括以下几类:改正性维护、适应性维护、   【2】   维护和预防性维护。(3)数据的逻辑结构有线性结构和   【3】  两大类。(4)某二叉树中度为2的结点有n个,则该二叉树中有  【4】  个叶子结点。(5)在ER图中,矩形表示  【5】  。(6)阅读下面程序,则执行后的输出结果是  【6】   。
#include "stdio.h"
main()
{  int x,y,z;
x=1;y=2;z=3;
if(x>y)if(x>z)printf("%d",x);
else printf("%d",y);
printf("%d\n",z);}(7)以下程序的输出结果是  【7】  。
main()
{ int y=9;
  for(; y>0; y--)
  if (y%3==0)
  {printf("%d", --y); continue;} }(8)有以下程序段,且变量已正确定义和赋值
for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
请填空,使下面程序段的功能与之完全相同
s=1.0;k=1;
while(  【8】  ){s=s+1.0/(k*(k+1));  【9】  ;}
printf("s=%f\n\n",s);(9)设有以下定义和语句,则*(*(p+2)+1)的值为  【10】  。
int a[3][2]={10, 20, 30, 40, 50, 60}, (*p)[2];
p=a;(10)以下程序的输出结果是  【11】  。
#include 
main()
{ int  i;
for(i=′a′;i<′f′;i++,i++)printf("%c",i-′a′+′A′);
printf("\n");
}(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。
#include 
void f(int x[],int    n)
{ int p0,p1,i,j,t,m;
i=j=x[0];    p0=p1=0;
for(m=0;m{ if(x[m]>i)    {i=x[m];p0=m;}
else  if(x[m]}
t=x[p0];x[p0]=x[n-1];x[n-1]=t;
t=x[p1];x[p1]=  【12】  ;  【13】  =t;
}
main()
{ int  a[10],u;
for(u=0;u<10;u++)  scanf("%d",&a[u]);
f(a,10);
for(u=0;u<10;u++)  printf("%d",a[u]);
printf("\n");
}(12)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。
int mystrlen(char *str)
{ int I;
  for(I=0;  【14】  != '\n';I++);
  return(I); }(13)阅读下列程序,则程序的输出结果为  【15】  。
#include "stdio.h"
struct ty
{  int data;
char c; };
main()
{    struct ty a={30,′x′};
fun(a);
printf("%d%c",a.data,a.c); }
fun(struct ty b)
{   b.data=20;
b.c=′y′; }  一、选择题(1)D
    【解析】 软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。(2)D
    【解析】 测试的目的是发现软件中的错误。经验表明,程序中存在错误的概率与该程序中已发现的错误成正比。这一现象说明,为了提高测试效率,测试人员应该集中对待那些错误群集的程序。(3)D
    【解析】 面向对象思想中的三个主要特征是:封装性、继承性和多态性。(4)A
    【解析】 当今主导的程序设计风格是"清晰第一,效率第二"的观点。结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,而在实际应用中,人们更注重程序的可理解性。(5)B
    【解析】 软件设计包括软件结构设计、数据设计、接口设计和过程设计。其中,结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。(6)C
    【解析】 数据处理的最小单位是数据项;由若干数据项组成数据元素;数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。(7)D
    【解析】 假设线性表的长度为n,则在最坏情况下,冒泡排序要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。(8)C
    【解析】 满二叉树是指除最后一层外,每一层上的所有结点都有两个叶子结点。在满二叉树中,层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。(9)B
    【解析】 数据库管理系统(Database Management System,简称DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,数据库管理系统是数据库系统的核心。(10)C
    【解析】 在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有N个属性的关系称为N元关系。(11)B
    【解析】 合法的标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,用户定义的标识符不能与关键字相同。选项A),数字不能为第一个字母,auto为关键字;选项C)中,也是数字不能为第一个字母,else为关键字;选项D)中负号不合法。(12)A
    【解析】 在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。C语言的标识符可以分为关键字、预定义标识符和用户标识符。选项B)和C)中的横线以及点都不合法,选项D)中的case为C语言关键字。(13)A
    【解析】 C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函数不用有返回值,若有返回值,则返回值类型必确定。(14)D
    【解析】 在内存中,实参单元与形参单元是不同的单元。在C语言中,仅在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。(15)B
    【解析】 双目运算中两边运算量类型转换规律:
运算数1运算数2转换结果类型
短整型 长整型 短整型->长整型
整型  长整型 整型->长整型
字符型  整型 字符型->整型
有符号整型 无符号整型 有符号整型->无符号整型
整型 浮点型  整型->浮点型
在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double←float。(16)D
    【解析】 在ANSI标准中,long、int和short分别占用4、2和2个字节。但实际上对于某些C编译系统,int和short都占用4个字节,所以说各种类型数据占用内存大小是由选择何种C编译系统决定的。(17)B
    【解析】 本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式控制为"%2d",即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。(18)B
    【解析】 对于do…while循环,程序先执行一次循环体,再判断循环是否继续。本题先输出一次i的值"0,",再接着判断表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,程序再次输出i的值"1"。(19)D
    【解析】 if…else语句的执行过程如下,首先计算if后面一对圆括号内表达式的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句。C语言的语法规定,else子句总是与前面最近的不带else的if匹配,与书写格式无关,本题目的后一个if-else相当于嵌套在第一个if子句里,相当于x=0时,z=z+1。(20)A
    【解析】 本题主要考查switch语句的使用方法。switch语句的执行过程为:进入switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的case,以此作为入口,执行switch结构中后面的各语句,直到遇到break语句,则跳出switch语句,如果各case都不匹配时,则执行default后面的语句。(21)A
    【解析】 本题考查用于多分支选择的switch语句, 其一般形式为:
switch(表达式)
{
  case常量表达式1: 语句1;
  case常量表达式2: 语句2;
  …
  case常量表达式n: 语句n;
  default : 语句n+1;
}
其语义是:计算表达式的值,并逐个与其后的常量表达式值进行比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有 case后的语句;如表达式的值与所有case后的常量表达式均不相等时,则执行default后的语句。(22)D
    【解析】 在C语言中,定义一维数组的语句一般形式如下:
类型名    数组名[常量表达式];
一维数组的引用形式为:数组名[下标表达式]。count表示能被2整除或被5整除的个数,i则计算有多少个数组元素。(23)D
    【解析】 在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为2。(24)B
    【解析】 本题考查循环语句的嵌套以及条件的判断问题。在程序中,内层循环判断条件为"j<=i",而j的初值为3,故当i的值为1和2时,内层循环体都不会被执行。只有当i和j都等于3时才会执行一次。m的值为55对3取模,计算结果为1。(25)C
    【解析】 在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需要以整型格式输出字符时,输出的也是ASCII码值。字符'A'和'D'的ASCII码值分别为65和68。(26)D
    【解析】 本题中直接使用指针变量k,但在使用时要注意对k的指针运算。此外,一开始应知道*k的值为数组中的某一下标值,即*k=0,本函数的功能是找出数组中的最大元素的位置及最大元素的值。(27)B
    【解析】 argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指针数组的指针。(28)C
    【解析】 p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=9,所以b=9。(29)C
    【解析】 函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项A)正确。指针类型的函数可以返回地址值,选项B)正确。在文件stdio.h中,NULL被定义为void 型的指针,选项D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项C)错误。(30)C
    【解析】 此题考查了指针引用一维数组元素的方法。*p+9因为运算符"*"的优先级高于"+",所以输出结果为p指向的元素1,然后加9,值为10。(31)B
    【解析】 字符串连接函数strcat的调用形式如下:strcat(s1,s2)。此函数将s2所指字符串的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的尾标,函数返回s1的地址值。(32)A
    【解析】 本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:str1="China",如果想把"China"这5个字符放到数组str1中,除了逐个输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(str1,"China")或strcpy(str1,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给str1):str1=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
strcpy函数的结构是:strcpy(字符数组1,字符串2)
其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,"字符数组1"必须写成数组名形式,如(str1),"字符串2"可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。(33)C
    【解析】 在fun函数中,while循环的功能是:逐个取字符数组s的字符判断其是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位将相应左移一个10进制位。当指针s指向数组的第3位时,循环条件不成立,循环结束,返回n 的值,输出n的值为61。(34)A
    【解析】 在本题中,p和q同为指向字符类型数据的指针。*q 和p[0]同为字符型数据。选项B)、C)和D)都符合题目的要求;选项A)计算得出的是指针类型数据所占的内存字节数。(35)A
    【解析】 循环开始前,指针t和s都指向字符串的起始位置,然后通过while循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t自减1,此时t指向的位置是字符串的结束标志'\0'处,故t-s的值是字符串的长度,并不包括结束标志。(36)C
    【解析】 本题综合考查了输入函数的使用。scanf函数会将空格视为分隔符,getchar函数只能输入单个字符,getc函数是文件操作函数,显然都不符合题意。通过gets函数输入字符串时,输入的空格被认为是字符串的一个字符。(37)D
    【解析】 通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。选项B)和C)后面的'\0'是多余的,在C语言中,系统会自动在字符串的结尾处加上一个字符'\0'作为串的结束标记。(38)D
    【解析】 函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋值,而只是保留上次函数调用结束时的值。(39)C
    【解析】 带参数的宏定义命令行形式如下:
#define 宏名(形参表) 替换文本
在编译的时候编译预处理程序用"替换文本"来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间。(40)A
    【解析】 本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen函数将返回NULL。
二、选择题(1)【1】 可行性研究
    【解析】 软件生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等,还可以将软件生命周期分为三个阶段:①软件定义阶段:可行性研究和需求分析;②软件开发阶段:设计、实现和测试;③软件运行维护阶段:交付使用和维护。(2)【2】 完善性
    【解析】 软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是指在软件交付使用后,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再次开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的进一步改进软件打下良好基础。(3)【3】 非线性结构
    【解析】 数据的逻辑结构有线性结构和非线性结构两大类。(4)【4】 n+1
    【解析】 在任意一棵二叉树中,度为O多结点(即叶子结点)总是比度为2多结点多一个。(5)【5】 实体
    【解析】 在E-R图中用矩形表示实体;椭圆形表示属性;菱形表示联系。(6)【6】 3
    【解析】 C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf("%d\n",z);语句。(7)【7】 852
    【解析】 循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。(8)【8】 k<=n
【9】 k++
    【解析】 本题要求将一个for循环改成while循环。首先要保证循环条件相同,在for循环中,每次执行循环之后,循环控制变量k都会加1,而while循环则没有,故需在循环体中增加改变k数值的语句"k++;"。(9)【10】 60
    【解析】 本题中,代码定义3行2列的二维数组a,定义指向两个元素的一维数组指针p,并让p指向两维数组a的首行,则代码*(*(p+2)+1)中的p+2指向两维数组a的第三行a[2],*(p+2)指向a[2][0],*(p+2)+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60(10)【11】 ACE
    【解析】 在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为'a',执行一次循环后变为'c',之后再变成'e',当其变为'g'时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式"i-'a'+'A'"即表示输出i对应的大写字母,结果为ACE。(11)【12】 x[0]
【13】 x[0]
    【解析】 函数f( )通过for循环逐个比较数组x中的元素,循环结束后,p0和p1分别表示最大值和最小值在数组中的下标位置,然后按照题意将最大值x[p0]和数组的最后一个元素x[n-1]交换位置,再将最小值x[p1]和第一个元素(x[0]) 进行交换,所以空白处应该填入x[0]。(12)【14】 *(str+I)或str[I]
    【解析】 str是指针变量,它指向字符型数据,在循环过程中,可以用 *(str+I)来访问字符串中的第I个元素,判断是否为结束标志,如果不是,I=I+1,继续取下一个元素进行判断,直到 *(str+I)的值为'\0'为止,也可以用下标的方式引用字符,如*(str+I)相当于str[I]。(13)【15】 30x
    【解析】 本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。 
55555555555555555555555555555555555555555555555555555555555555555555555
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)算法的空间复杂度是指
    A)算法程序的长度                       
    B)算法程序中的指令条数
    C)算法程序所占的存储空间    
    D)执行算法需要的内存空间(2)在结构化程序设计中,模块划分的原则是
    A)各模块应包括尽量多的功能
    B)各模块的规模应尽量大
    C)各模块之间的联系应尽量紧密
    D)模块内具有高内聚度、模块间具有低耦合度(3)下列叙述中,不属于测试的特征的是
    A)测试的挑剔性
    B)完全测试的不可能性
    C)测试的可靠性
    D)测试的经济性(4)下面关于对象概念的描述中,错误的是
    A)对象就是C语言中的结构体变量
    B)对象代表着正在创建的系统中的一个实体
    C)对象是一个状态和操作(或方法)的封装体
    D)对象之间的信息传递是通过消息进行的(5)下列关于队列的叙述中正确的是
    A)在队列中只能插入数据
    B)在队列中只能删除数据
    C)队列是先进先出的线性表
    D)队列是先进后出的线性表(6)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是
    A)acbed             
    B)decab 
    C)deabc         
    D)cedba(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为
    A)n+1 
    B)n-1 
    C)2n 
    D)n/2(8)设有如下三个关系表
R  S   T
A  B C  A B C
m  1 3  m 1 3
n     n 1 3下列操作中正确的是
    A) T=R∩S
    B) T=R∪S
    C) T=R×S
    D) T=R/S
(9)下列叙述中,正确的是
    A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系
    B)用E-R图只能表示实体集之间一对一的联系
    C)用E-R图只能表示实体集之间一对多的联系
    D)用E-R图表示的概念数据模型只能转换为关系数据模型(10)下列有关数据库的描述,正确的是
    A)数据处理是将信息转化为数据的过程
    B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
    C)关系中的每一列称为元组,一个元组就是一个字段
    D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字(11)C语言规定,在一个源程序中,main函数的位置
    A)必须在最开始
    B)必须在系统调用的库函数的后面
    C)可以任意
    D)必须在最后(12)以下叙述中错误的是
    A)计算机不能直接执行用C语言编写的源程序
    B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
    C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
    D)后缀为.obj和.exe的二进制文件都可以直接运行(13)下列选项可以正确表示字符型常量的是
    A)′\r′     
    B)"a"      
    C)"\897"      
    D)296(14)以下叙述中正确的是
    A)构成C程序的基本单位是函数
    B)可以在一个函数中定义另一个函数
    C)main()函数必须放在其他函数之前
    D)C函数定义的格式是K&R格式(15)设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)
    A) 10□X□20□Y<回车> 
    B) 10□X20□Y<回车>
    C) 10□X<回车>
         20□Y<回车>    
    D) 10X<回车>
         20Y<回车>(16)若有说明:int *p,m=5,n;,以下正确的程序段是
    A)p=&n;scanf("%d",&p);
    B)p=&n;scanf("%d",*p)
    C)scanf("%d",&n);*p=n;
    D)p=&n;*p=m;(17)在执行下述程序时,若从键盘输入6和8,则结果为
main()
{  int a,b,s;
scanf("%d%d",&a,&b);
s=a
if(as=b;
s*=s;
printf("%d",s); }
    A)36 
    B)64 
    C)48 
    D)以上都不对(18)若执行下面的程序时,从键盘输入5和2,则输出结果是
main()
{ int a,b,k;
  scanf("%d,%d ",&a,&b);
  k=a;
  if(a    else k=b%a;
  printf("%d\n",k);}
    A)5 
    B)3 
    C)2 
    D)0(19)在C语言中,函数返回值的类型最终取决于
    A)函数定义时在函数首部所说明的函数类型
    B)return语句中表达式值的类型
    C)调用函数时主调函数所传递的实参类型
    D)函数定义时形参的类型(20)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是
    A)c=(c-′A′)%26+′a′
    B)c=c+32
    C)c=c-′A′+′a′
    D)c=(′A′+c)%26-′a′(21)以下选项中,当x为大于l的奇数时,值为0的表达式是
    A)x%2==1 
    B)x/2 
    C)x%2!=0 
    D)x%2==0(22)有以下程序
main()
{int k=5,n=0;
do
{switch(k)
  {case 1:    case 3:n+=1;k--;break;
     default:n=0;k--;
     case 2:    case 4:n+=2;k--;break;
  }
  printf("%d",n);
}while(k>0 && n<5);
}
程序运行后的输出结果是
    A)235 
    B)0235 
    C)02356 
    D)2356(23)有如下程序
main()
{  int n=9;
while(n>6){n--; printf("%d",n);} }
该程序的输出结果是
    A)987 
    B)876 
    C)8765
    D)9876(24)有以下程序
#include
main()
{  int c;
while((c=getchar())!=′\n)
{  switch(c-′2′)
{  case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
case 4:putchar(c+3);break; } }
printf("\n")}
从第一列开始输入以下数据代表一个回车符。
2743
程序的输出结果是
    A)66877 
    B)668966 
    C)6677877 
    D)6688766(25)有以下程序
main()
{ int   x=0,y=0,i;
for (i=1;;++i)
{  if (i%2==0) {x++;continue;}
if (i%5==0) {y++;break;} }
printf (" %d,%d",x,y); }
程序的输出结果是
    A)2,1 
    B)2,2 
    C)2,5 
    D)5,2(26)有以下程序
main()
{int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t;
for(i=0;i<4;i++)
  for(j=0;j<3;j++)
     for(k=j+1;k<4;k++)
       if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/
for(i=0;i<4;i++)printf("%d,",a[i][i]);
}
程序运行后的输出结果是
    A)1,6,5,7, 
    B)8,7,3,1, 
    C)4,7,5,2, 
    D)1,6,2,1,(27)有以下程序
int f(int n)
{ if(n==1)return 1;
  else return f(n-1)+1;}
main()
{ int i,j=0;
  for(i=1;i<3;i++)j+=f(i);
  printf("%d\n",j);}
程序运行后的输出结果是
    A)4
    B)3
    C)2
    D)1(28)当运行以下程序时,从键盘输入AhaMA(空格)Aha,则下面程序的运行结果是
#include
main()
{ char s[80],c=′a′;
  int i=0;
  scanf("%s",s);
  while(s[i]!=′ 
  { if(s[i]==c)s[i]-32;
  else if(s[i]==c-32)s[i]=s[i]+32;
  i++; }
  puts(s); }
    A)ahaMa                                 
    B)AbAMa
    C)AhAMa[空格]ahA               
    D)ahAMa[空格]ahA(29)下面程序输出的结果是
main()
{ int i;
  int a[3][3]={1,2,3,4,5,6,7,8,9};
  for(i=0;i<3;i++)
  printf("%d ",a[2-i][i]); }
    A)1 5 9 
    B)7 5 3 
    C)3 5 7 
    D)5 9 1(30)现有如下程序段
#include "stdio.h"
main()
{ int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};
int i=0,j=5;
printf("%d\n",*(&a[0][0]+2*i+j-2));}
则程序的输出结果为
    A)21 
    B)78  
    C)23  
    D)28(31)请选出正确的程序段
    A)int *p;
        scanf("%d",p);
            …
    B)int *s, k;
        *s=100;
    …
    C)int *s, k;
        char *p, c;
        s=&k;
        p=&c;
        *p=′a′;
            …
    D)int *s, k;
        char *p, e;
        s=&k;
        p=&c;
        s=p;
        *s=1;
            …(32)下面程序段的运行结果是
char a[]="lanuage",*p;
p=a;
while(*p!=′u′){printf("%c",*p-32);p++;}
    A)LANGUAGE    
    B)language 
    C)LAN     
    D)langUAGE(33)以下程序的输出结果是
#include
int a[3][3]={1,2,3,4,5,6,7,8,9,},*p;
main()
{  p=(int*)malloc(sizeof(int));
f(p,a);
printf("%d\n",*p);
free(p); }
f(int *s, int p[][3])
{ *s=p[1][1];}
    A)1 
    B)4 
    C)7 
    D)5(34)有以下程序
void f(int *q)
{int i=0;
for(;i<5; i++) (*q)++;
}
main()
{int a[5] ={1,2,3,4,5}, i;
f(a);
for(i=0;i<5; i++) printf("%d,", a[i]);
}
程序运行后的输出结果是
    A)2,2,3,4,5, 
    B)6,2,3,4,5, 
    C)1,2,3,4,5, 
    D) 2,3,4,5,6,(35)以下合法的字符型常量是
    A)′\x13′        
    B) ′\081′       
    C) ′65′         
    D)"\n"(36)有以下语句,则对a数组元素的引用不正确的是 
int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
    A)a[p-a] 
    B)*(&a[i]) 
    C)p[i] 
    D)*(*(a+i))(37)有以下程序
# include
main()
{char p[20]={′a′, ′b′, ′c′, ′d′}, q[]="abc", r[]="abcde";
strcat(p, r); strcpy(p+strlen(q), q);
printf("%d\n",strlen(p));
}
程序运行后的输出结果是
    A)9 
    B)6 
    C)11 
    D)7(38)在C语言中,变量的隐含存储类别是
    A)auto         
    B)static   
    C)extern 
    D)无存储类别(39)以下程序的输出结果是
main()
{ int c=35; printf("%d\n",c&c);}
    A)0 
    B)70 
    C)35 
    D)1(40)有以下程序
#include
main()
{ FILE *fp; int i=20,j=30,k,n;
  fp=fopen("d1.dat","w");
  fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
  fclose(fp);
  fp=fopen("d1.dat","r");
  fscanf(fp,"%d%d",&k,&n); printf("%d %d\n",k,n);
  fclose(fp); }
程序运行后的输出结果是
    A)20 30 
    B)20 50 
    C)30 50 
    D)30 20 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)设一棵完全二叉树共有700个结点,则在该二叉树中有  【1】  个叶子结点。(2)常用的黑箱测试有等价类划分法、  【2】   和错误推测法3种。(3)数据库管理系统常见的数据模型有层次模型、网状模型和   【3】   3种。(4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为   【4】   。(5)数据库保护分为:安全性控制 、   【5】   、并发性控制和数据的恢复。(6)执行以下程序后的输出结果是  【6】  。
main()
{int a=10;
a=(3*5,a+4);printf("a=%d\n",a);
}(7)以下程序的输出结果是  【7】  。
#include
main()
{printf("%d\n",strlen("IBM\n012\1\\"));}(8)已定义char ch=′$′; int i=1,j;,执行j!=ch&&i++以后,i的值为  【8】  。(9)以下程序的运行结果是  【9】  。
#include
long fib(int g)
{  switch(g)
{  case 0:return 0;
case 1:
case 2:return 1; }
return(fib(g-1)+fib(g-2)); }
main()
{  long k;
k=fib(5);
printf("k=%5ld\n",k);}(10)下面程序的功能是输出数组s中最大元素的下标,请填空。
main()
{ int k, p,s[]={1, -9, 7, 2, -10, 3};
  for(p=0, k=p; p<6; p++)
    if(s[p]>s[k])  【10】  
  printf("%d\n",k);}(11)以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。
main()
{int x[10],a[9],I;
for(I=0; I<10; I++) scanf("%d",&x[I]);
for(  【11】  ; I<10; I++ )
     a[I-1]=x[I]+  【12】  ;.
for(I=0; I<9; I++) printf("%d ",a[I]);
printf("");
}(12)设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:try_me()函数在a:\myfile.txt中有定义。)
  【13】  
main()
{  printf("\n");
try_me();
printf("\n");}(13)以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph->next==NULL),请填空。
#include
struct list { int data; struct list *next;};
struct list*creatlist()
{  struct list *p,*q,*ph;int a;ph=(struct list *)malloc (sizeof(struct list));
p=q=ph;printf("Input an integer number; entre-1 to end:\n");
scanf("%d",&a);
while(a!=-1)
{  p=(struct list*)malloc(sizeof(struct list));
  【14】  =a;q->next=p;  【15】  =p;scanf("%d",&a);}
p->next=′\0;return(ph);}
main()
{struct list * head; head=creatlist();}(1)D
    【解析】 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个算法所需要的内存空间。(2)D
    【解析】 在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。(3)C
    【解析】 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。(4)A
    【解析】 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联系,从模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,对象的思想广泛应用于C++、Java等语言中,因此A)错误。(5)C
    【解析】 队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按"先进先出"的原则组织数据的。(6)D
    【解析】 依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二叉树的前序遍历序列为选项D)。
 (7)A
    【解析】 对于任何一棵二叉树T,如果其终端结点(叶子)数为n1,度为2的结点数为n2,则n1=n2+1,所以该二叉树的叶子结点数等于n+1。(8)C
    【解析】  对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m元关系S,它们分别有p和q个元组,则R与S的笛卡儿积记为R×S它是一个m+n元关系,元组个数是p×q由题意可得,关系T是由关系R与关系S进行笛卡尔积运算得到的。(9)A
    【解析】 两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。(10)D
    【解析】 数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。(11)C
    【解析】 不论main函数在整个过程中的位置如何,一个C程序总是从main函数开始执行的。(12)D
    【解析】 一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。(13)A
    【解析】 C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是0~127。由于字符常量用单引号括起来,所以选项B),C)错误,选项D)超过了字符常量的表示范围。(14)A
    【解析】 本题考查C语言的综合基础知识。构成C程序的基本单位是函数,不论main函数在整个程序中的位置如何,一个C程序总是从main函数开始执行,C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。(15)D
    【解析】 本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B)、C),输入的第一个空格会作为字符赋值给变量c1,而不会被解释成分隔符。(16)D
    【解析】 "&"是求址运算符,"*"是指变量说明符。选项A)、B)应改为scanf("%d",p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。(17)B
    【解析】 本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。(18)C
    【解析】 本题考查简单的if…else语句。先执行条件if(a    【解析】 在C语言中,应当在定义函数时指定函数值的类型,凡不加类型说明的函数,一律按整型处理。在定义函数时,对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数类型为主,即函数类型决定返回值的类型。(20)D
    【解析】 C语言中,字符数据参加运算时,实际上是其ASCII码参与运算。大写字母的ASCII码比其对应的小写字母的ASCII码小32。因此大写字母转化为小写字母只需将其加上32即可。所以选项B)、C)都符合条件,因为变量c中存储的是大写字母,所以"c-'A'"的值一定小于26,故选项A)与选项C)的含义相同。(21)D
    【解析】 因为x的值为大于1的奇数,所以x除以2的余数等于1,因此,选项A)、C)中表达式的结果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中表达式的结果为假,即等于0。(22)A
    【解析】 因为变量的初始值分别为"k=5,n=0",所以程序第一次进入循环时,执行default语句,这时k=4,执行"case 4:"这个分支,结果是"n=2,k=3",打印出2;程序然后进行第二次循环,这时"n=2,k=3",执行"case 3:"这个分支,结果是"n=3,k=2",打印出3;程序进行第三次循环,这时"n=3,k=2",执行"case 2: case 4:"这两个分支,结果是"n=5,k=1",打印出5,这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束,故输出结果为235。(23)B
    【解析】 该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。第一次进入循环时,n的值是9,循环体内,先经过n--运算,n的值变为8,所以第一次的输出值是8,由此可以排除选项A)和D)。由循环条件n>6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环时,输出为6,由此可以排除选项C)。(24)A
    【解析】 本题主要考查了字符输入输出函数getchar和putchar的使用。getchar函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量c中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。(25)A
    【解析】 本题考查了continue和break语句在循环语句中的作用。break语句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。(26)A
    【解析】 本题利用多重 for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。(27)B
    【解析】 在main函数中,对f(1)和f(2)的值进行了累加。
f(1)=1
f(2)=f(1)+1=2
最后,j的值为1+2=3(28)A
    【解析】 本题主要考查的知识点是大写字母比它对应的小写字母ASCII码值小32,并且字符可以看作整数进行算术运算等操作。(29)B
    【解析】 本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[1][1]=5,依次循环,可求出答案。(30)A
    【解析】 通过地址来引用二维数组,若有以下定义:int a[3][4],i,j;且当0≤i≤3,0≤j<4则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表达式&a[0][0]+2*i+j-2相当于是地址&a[0][0]加上多少偏移量。(31)C
    【解析】 本题的选项A)和B)犯了同样的错误,即指针变量在定义后并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。(32)C
    【解析】 本段程序的作用是输出字符串"lanuage"中字母u之前的字符,并将其转化为大写字母。
注意:如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符多一个元素,以存放'\0'。(33)D
    【解析】 本题考查了二维数组元素引用的方法。题中用动态存储分配函数malloc分配了一个int型数据长度大小的内存,然后指针p指向了这段内存,函数f()中对p所指向的数据进行了赋值,p[1][1]为二维数组第二行第二列的元素,对应于实参a的元素5,所以输出结果为5。(34)B
    【解析】 调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a[0]。在5次循环过程中,q始终指向a[0],因此a[0]的值增加了5。最后的输出结果为"6,2,3,4,5"。(35)A
    【解析】 C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用一个"\" 开头的字符序列来表示字符常量。其中,形式"\ddd"表示1到3位8进制数所代表的字符;形式"\xhh"表示1到2位16进制数所代表的字符。在本题中,'\x13'表示回车符,是一个字符常量;'\081'用8进制数所代表的字符,但形式不正确,因为8进制数所代表的字符中不会出现数字"8";'65'不是一个字符,而是一个十进制数字;"\n"是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。(36)D
    【解析】 本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。(37)B
    【解析】 strcpy()函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串结束标志'\0' 到p[6]中。函数strlen()返回的是字符串中不包括'\0'在内的实际长度,故本题答案为B)(38)A
    【解析】 auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字"auto "可以省略,auto不写则隐含确定为"自动存储类别",属于动态存储方式。(39)C
    【解析】 本题考查按位与"&"。因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。(40)A
    【解析】 本题中,最主要的是掌握几个有关文件函数的应用。
函数名:fopen
功能:打开一个文件
调用方式FILE *fp ;
fp=fopen(文件名,使用文件方式);
函数名:fprintf
功能:传送格式化输出到一个文件中
调用方式:fprintf(文件指针,格式字符串,输出表列);
函数名:fclose
功能:关闭一个文件
调用方式:fclose(文件指针);
函数名:fscanf
功能:从磁盘文件执行格式化输入
调用方式:fscanf(文件指针,格式字符串,输入列表)。           二、选择题(1)【1】 350
    【解析】 完全二叉树中,设高度为n,则除h层外其它层结点数都到达最大,可以算出h=10,1至9层结点个数为2^9-1=511,最后一层结点个数为700-511=189个,189/2=95,除最后一层外共有结点2^(9-1)-95=161个,所以所有的结点个数为:189+161=350个。(2)【2】 边界值分析法
    【解析】 黑箱测试法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分法、边界值分析法和错误推测法3种。(3)【3】 关系模型
    【解析】 数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。(4)【4】 软件生命周期
    【解析】 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。(5)【5】 完整性控制
    【解析】 安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库将其恢复到正确的状态。(6)【6】 a=14
    【解析】 本题考查的是表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf()函数内的输出格式控制串,最后的输出结果应为"a=14"。(7)【7】 9
    【解析】本题的字符串中共有9个字符,它们分别是'I'、'B'、'M'、'\n'、 '0'、'1'、'2'、'\1'、'\\',其中,"\n"表示换行,"\\"表示反斜杠字符"\",所以本题的最后输出结果为9。(8)【8】 1
    【解析】 在执行逻辑表达式"j=!ch&&i++"时,首先判断j=!ch的值,因为"ch='$'"不为0,所以"j=!ch=0",编译系统便不再计算表达式"i++"的值,i的值不变,仍为1。(9)【9】 k=5
    【解析】 本题主要考查了函数的递归调用方法。g=0或g=1或g=2是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。(10)【10】 k=p;
    【解析】 为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐一考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查通常从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量p控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k]更大时,应该用p更新k,所以在空框处应填入代码"k=p;"。 (11)【11】 I=1
【12】 x[I-1]
    【解析】 对于10个数,相临的两个数相加取和,总共要进行9次加法运算,所以空14处应填入I=1。相临的两个数相加取和,放在数组a中,x[0]与x[1]的和存放在a[0]中,所以空15处应填入x[I-1]。(12)【13】 #include
    【解析】 本题考查了函数的存储分类的概念。如果没有特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用#include文件包含命令将定义函数的文件包含进来。(13)【14】 p->data
【15】 q
    【解析】 本题考查的是链表这一数据结构对结构体变量中数据的引用。链表的特点是结构体变量中有两个域,一个是数据,另一个是指向该结构体变量类型的指针,用以指明链表的下一个结点。 
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)程序流程图中带有箭头的线段表示的是
    A)图元关系           
    B)数据流           
    C)控制流           
    D)调用关系(2)结构化程序设计的基本原则不包括
    A)多态性     
    B)自顶向下     
    C)模块化     
    D)逐步求精(3)软件设计中模块划分应遵循的准则是
    A)低内聚低耦合     
    B)高内聚低耦合
    C)低内聚高耦合     
    D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是
    A)可行性分析报告     
    B)软件需求规格说明书
    C)概要设计说明书     
    D)集成测试计划(5)算法的有穷性是指
    A)算法程序的运行时间是有限的     
    B)算法程序所处理的数据量是有限的
    C)算法程序的长度是有限的            
    D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是
    A)快速排序            
    B)冒泡排序
    C)直接插入排序     
    D)堆排序(7)下列关于栈的叙述正确的是
    A)栈按"先进先出"组织数据     
    B)栈按"先进后出"组织数据
    C)只能在栈底插入数据           
    D)不能删除数据(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于
    A)需求分析阶段     
    B)概念设计阶段
    C)逻辑设计阶段     
    D)物理设计阶段(9)有三个关系R、S和T如下:

B C D 
a 0 k1 
b 1 n1 S 
B C D 
f 3 h2 
a 0 k1 
n 2 x1 T 
B C D 
a 0 k1  由关系R和S通过运算得到关系T,则所使用的运算为
    A)并     
    B)自然连接     
    C)笛卡尔积     
    D)交(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字 (键或码)为
    A)课号,成绩     
    B)学号,成绩
    C)学号,课号     
    D)学号,姓名,成绩(11)以下叙述中正确的是
    A)C程序中的注释只能出现在程序的开始位置和语句的后面
    B)C程序书写格式严格,要求一行内只能写一个语句
    C)C程序书写格式自由,一个语句可以写在多行上
    D)用C语言编写的程序只能放在一个程序文件中(12)以下选项中不合法的标识符是
    A)print     
    B)FOR     
    C)&a     
    D)_00(13)以下选项中不属于字符常量的是
    A)′C′     
    B)"C"     
    C)′\xCC′    
    D) ′\072′(14)设变量已正确定义并赋值,以下正确的表达式是
    A)x=y*5=x+z     
    B)int(15.8%5)     
    C)x=y+z+5,++y     
    D)x=25%5.0(15)以下定义语句中正确的是
    A)int  a=b=0;
    B)char  A=65+1,b=′b′;
    C)float  a=1,*b=&a,*c=&b;
    D)double  a=0.0;b=1.1; (16)有以下程序段
char  ch;    int  k;
ch=′a′;       k=12;
printf("%c,%d,",ch,ch,k);    printf("k=%d\n",k);
已知字符a的ASCII码值为97,则执行上述程序段后输出结果是
    A)因变量类型与格式描述符的类型不匹配输出无定值
    B)输出项与格式描述符个数不符,输出为零值或不定值
    C)a,97,12k=12
    D)a,97,k=12(17)已知字母A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是
    A)kk>=′A′&& kk<=′Z′                   
    B)!(kk>=′A′||kk<=′Z′)
    C)(kk+32)>=′a′&&(kk+32)<=′Z′     
    D)isalpha(kk)&&(kk<91) (18)当变量c的值不为2、4、6时,值也为"真"的表达式是
    A)(c==2)||(c==4)||(c==6)           
    B)(c>=2&& c<=6)||(c!=3)||(c!=5)
    C)(c>=2&&c<=6)&&!(c%2)     
    D)(c>=2&& c<=6)&&(c%2!=1)(19)若变量已正确定义,有以下程序段
    int  a=3,b=5,c=7;
      if(a>b)      a=b;  c=a;
      if(c!=a)      c=b;
      printf("%d,%d,%d\n",a,b,c);
其输出结果是
    A)程序段有语法错       
    B)3,5,3       
    C)3,5,5       
    D)3,5,7 (20)有以下程序
#include 
main()
{  int  x=1,y=0,a=0,b=0;
      switch(x)
      {  case  1:
      switch(y)
      {  case  0:a++;  break;
      case  1:  b++;  break;
}
case 2:a++; b++; break;
case 3:a++; b++;
}
printf("a=%d,b=%d\n",a,b);
}
程序的运行结果是
    A)a=1,b=0         
    B)a=2,b=2         
    C)a=1,b=1         
    D)a=2,b=1(21)有以下程序
#include 
main()
{  int  x=8;
for(  ;  x>0;  x--)
{  if(x%3)  {printf("%d,",x--);  continue;}
printf("%d,",--x);
}
}
程序的运行结果是
    A)7,4,2,     
    B)8,7,5,2,     
    C)9,7,6,4,     
    D)8,5,4,2,(22)以下不构成无限循环的语句或语句组是
    A) n=0;
    do{++n;}while(n<=0);
    B) n=0;
    while(1){n++;}
    C) n=10;
    while(n);{n--;}
    D) for(n=0,i=1;  ;i++)n+=i;(23)有以下程序
#include 
main()
{  int  a[ ]={1,2,3,4},y,*p=&a[3];
--P;    y=*p;printf("y=%d\n",y);
}
程序的运行结果是
    A)y=0     
    B)y=1     
    C)y=2     
    D)y=3(24)以下错误的定义语句是
    A)int  x[][3]={{0},{1},{1,2,3}};
    B)int  x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
    C)int  x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
    D)int  x[][3]={1,2,3,4};(25)设有如下程序段
  char  s[20]="Beijing",*p;
  p=s;
则执行p=s;语句后,以下叙述正确的是
    A)可以用*p表示s[0]     
    B)s数组中元素的个数和p所指字符串长度相等
    C)s和p都是指针变量     
    D)数组s中的内容和指针变量p中的内容相同(26)若有定义:int  a[2][3];,以下选项中对a数组元素正确引用的是
    A)a[2][!1]     
    B)a[2][3]     
    C)a[0][3]     
    D)a[1>2][!1](27)有定义语句:char  s[10];,若要从终端给s输入5个字符,错误的输入语句是
    A)gets(&s[0]);     
    B)scanf("%s",s+1);     
    C)gets(s);     
    D)scanf("%s",s[1]); (28)以下叙述中错误的是
    A)在程序中凡是以"#"开始的语句行都是预处理命令行
    B)预处理命令行的最后不能以分号表示结束
    C)#define MAX是合法的宏定义命令行
    D)C程序对预处理命令行的处理是在程序执行的过程中进行的(29)以下结构体类型说明和变量定义中正确的是
    A)tupedef strct
      {int n; char c;}REC;
      REC t1,t2;
    B)tupedef strct
      {int n; char c;};
      REC t1,t2;
    C)tupedef strct REC;
      {int n=0; char c='A';}t1,t2;
    D)strct
      {int n; char c;}REC;
      REC t1,t2;
(30)以下叙述中错误的是
    A)gets函数用于从终端读入字符串
    B)getchar函数用于从磁盘文件读入字符
    C)fputs函数用于把字符串输出到文件
    D)fwrite函数用于以二进制形式输出数据到文件(31)有以下程序
#include 
main()
{  int  s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)  c[s[i]]++;
for(i=1;i<5;i++)  printf("%d",c[i]);
printf("\n");
}
程序的运行结果是
    A)1 2 3 4     
    B)2 3 4 4     
    C)4 3 3 2     
    D)1 1 2 3(32)有以下程序
#include 
void  fun(int  *s,int  n1,int  n2)
{  int  i,j,t;
i=n1;  j=n2;
while(i}
main()
{  int  a[10]={1,2,3,4,5,6,7,8,9,0},k;
fun(a,0,3);  fun(a,4,9);  fun(a,0,9);
for(k=0;k}
程序的运行结果是
    A)0987654321     
    B)4321098765     
    C)5678901234     
    D)0987651234(33)有以下程序
#include 
#include 
void  fun(char  *s[],int  n)
{  char  *t;        int  i,j;
for(i=0;ifor(j=i+1;j      if(strlen(s[i])>strlen(s[j]))  {t=s[i];s[i]:s[j];s[j]=t;}
}
main()
{  char  *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};
fun(ss,5);      printf("%s,%s\n",ss[0],ss[4]);
}
程序的运行结果是
    A)xy,aaaacc       
    B)aaaacc,xy       
    C)bcc,aabcc       
    D)aabcc,bcc(34)有以下程序
#include 
int f(int  x)
{  int  y;
if(x==0||x==1)  return(3);
y=x*x-f(x-2);
return  y;
}
main()
{  int  z;
z=f(3);      printf("%d\n",z);
}
程序的运行结果是
    A)0     
    B)9     
    C)6     
    D)8(35)有以下程序
#include 
void  fun(char  *a,char*b)
{  while(*a==′*′)a++;
while(*b=*a){b++;a++;}
}
main()
{  char  *s="*****a*b****",t[80];
fun(s,t);  puts(t);
}
程序的运行结果是
    A)*****a*b     
    B)a*b     
    C)a*b****     
    D)ab(36)有以下程序
#include 
#include 
typedef  struct{  char name[9];  char sex;  float score[2];  }STU;
void  f(STU  a)
{  STU  b={"Zhao",′m′,85.0,90.0};    int    i;
strcpy(a.name,b.name);
a.sex=b.sex;
for(i=0;i<2;i++)  a.score[i]=b.score[i];
}
main()
{  STU  c={"Qian",′f′,95.0,92.0};
f(c);      printf("%s,%c,%2.0f,%2.0f\n",c.name,c.sex,c.score[0],c.score[1]);
}
程序的运行结果是
    A)Qian,f,95,92       
    B)Qian,m,85,90       
    C)Zhao,f,95,92       
    D)Zhao,m,85,90(37)有以下程序
#include 
main()
{  FILE  *fp;    int  a[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++)  fprintf(fp,"%d",a[i]);
fprintf(fp,"\n");
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);
fclose(fp);
printf("%d\n",n);
}
程序的运行结果是
    A)12300     
    B)123     
    C)1     
    D)321(38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是
    A)a^b      
    B)a|b     
    C)a&b    
    D)a<<4(39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是
    A)auto和register     
    B)extern和register
    C)auto和static        
    D)static和register(40)设有定义语句int  (*f)(int);,则以下叙述正确的是
    A)f是基类型为int的指针变量
    B)f是指向函数的指针变量,该函数具有一个int类型的形参
    C)f是指向int类型一维数组的指针变量
    D)f是函数名,该函数的返回值是基类型为int类型的地址 二、填空题
请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。
(1)测试用例包括输入值集和  【1】  值集。(2)深度为5的满二叉树有  【2】  个叶子结点。(3)设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有  【3】  个元素。(4)在关系数据库中,用来表示实体之间联系的是  【4】  。(5)在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,  【5】  负责数据的模式定义与数据的物理存取构建。(6)已有定义:char  c=′  ′;int  a=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为  【6】  。(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为  【7】  。(8)若有定义:int  k;,以下程序段的输出结果是  【8】  。
    for(k=2;k<6;k++,k++)  printf("##%d",k); (9)以下程序的定义语句中,x[1]的初值是  【9】  ,程序运行后输出的内容是  【10】  。
#include 
main()
{  int  x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;
for(i=0;i<4;i++)
      {  p[i]=&x[2*i+1];
printf("%d",p[i][0]);
      }
printf("\n");
}(10)以下程序的输出结果是  【11】  。
#include 
void  swap(int  *a,  int  *b)
{  int  *t;
t=a;  a=b;  b=t;
}
main()
{  int  i=3,j=5,*p=&i,*q=&j;
swap(p,q);    printf("%d  %d\n",*p,*q);
}(11)以下程序的输出结果是  【12】  。
#include 
main()
{  int  a[5]={2,4,6,8,10},*p;
p=a;  p++;
printf("%d",*p);
} (12)以下程序的输出结果是  【13】  。
#include 
void  fun(int  x)
{  if(x/2>0)  fun(x/2);
printf("%d",x);
}
main()
{  fun(3);  printf("\n");}(13)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。请填空。
#include 
#define  N  3
typedef  struct
{  int  num;  char  nam[10];  char  sex;}SS;
int  fun(SS  person[])
{  int  I,n=0;
for(I=0;Iif(  【14】  ==′M′)n++;
return  n;
}
main()
{SS  W[N]={{1,"AA",′F′},{2,"BB",′M′},{3,"CC",′M′}};  int  n;
n=fun(W);  printf("n=%d\n",n);
}(14)以下程序的功能是从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。
#include 
main()
{FILE  *fp;  char  ch;
fp=fopen(  【15】  );
ch=fgetc(fp);
while(!feof(fp))  {  putchar(ch);  ch=fgetc(fp);  }
putchar(′\n′);fclose(fp);
}   一、选择题(1)C
    【解析】 程序流程图是人们对解决问题的方法、思路或算法的一种描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流。带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。构成程序流程图的基本图符及含义:→或 表示控制流;□表示加工步骤; 表示逻辑条件。(2)A
    【解析】 结构化程序设计的原则包括:"自顶而下,逐步求精"的设计思想,"独立功能,单出、入口"的模块化设计等。多态性是面向对象程序语言的特征。(3)B
    【解析】 模块划分应遵循的准则包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即高内聚、低耦合的原则。(4)B
    【解析】 需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面。产生的主要文档为软件需求规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。(5)A
    【解析】 算法具有6个特性:① 有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;② 确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。③ 可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。④ 输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。⑤ 输出:一个算法有一个或多个输出。(6)D
    【解析】 在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都n(n-1)/2,堆排序需要比较的次数为nlog2n。(7)B
    【解析】 在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照"先进后出"或"后进先出"的原则组织数据的。(8)C
    【解析】 数据库的逻辑设计分为:① 将概念模型转换成一般的数据模型;② 将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。把概念模型转换成关系数据模型就是把E-R图转换成一组关系模式。(9)D
    【解析】 在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则 为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1又属于R2。(10)C
    【解析】  "选课SC" 表是 "学生S" 表和 "课程C" 表的映射表,主键是两个表主键的组合。(11)C
    【解析】 在C语言中,注释可以加在程序中的任何位置,选项A)错误;C程序可以分模块写在不同的文件中,编译时在将其组合在一起,选项D)错误。C程序的书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。所以正确答案选C)。(12)C
    【解析】  C语言合法标识符的命名规则是:标识符只能由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。因为选项C)中的标识符的第一个字符为"&",所以C)为本题的正确答案。(13)B
    【解析】 在C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项A)、C)和D)为正确的字符常量。而选项B)是用双引号括起来的字符,表示一个字符串常量。所以正确答案为B)。(14)C
    【解析】 求余运算符"%"两边的运算对象必须是整型,而选项B)和D)中 "%"两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)中赋值表达式的两边出现相同的变量x,也是错误的。选项C)是一个逗号表达式,所以正确答案为C)。(15)B
    【解析】 本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开。因此选项A)和C)错误。在选项C)中,变量c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量b 。所以正确答案为B)。(16)D
    【解析】 输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12。所以选项D)为正确答案。(17)B
    【解析】 C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在'A'和'Z'之间就可以了,选项A)和C)符合要求。函数isalpha用来确定一个字符是否字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。本题答案选B)。(18)B
    【解析】 满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和C!=5中至少有一个为真,即不论C为何值,表达式B)都为"真"。正确答案为B)。(19)B
    【解析】 两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为B)。(20)D
    【解析】 本题考查了 switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的 case 2:分支。最后a和b的值分别为2和1。(21)D
    【解析】 本题中,程序每执行一次循环x的值减2,循环共执行4次。当x的值为8,4,2时,printf语句先输出x的值,再将x的值减1。而当x为6时,if语句条件成立,程序先将x的值减1,再将其输出。所以输出结果为选项D)。(22)A
    【解析】 选项A)中变量n的值,先自加1,再进行循环条件判断,此时循环条件n<=0不成立,跳出循环。所以正确答案为A。(23)D
    【解析】 在程序中指针变量p初始指向a[3],执行p减1后,p指向a[2],语句y=*p的作用是把a[2]的值赋给变量y,所以输出为y=3。正确答案为D)。(24)C
    【解析】 本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组的第一维的长度,但是不能省略第二维的长度。故选项C)错误。(25)A
    【解析】 语句p=s的作用是把字符数组s的首地址作为初值赋给了指针变量p,并且使p指向了字符数组s的第一个字符s[0]。(26)D
    【解析】 C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示是数组元素a[0][0]。所以正确答案为D)。(27)D
    【解析】 在格式输入中,要求给出的是变易的地址,而D)答案中给出的s[1]是一个值的表达式。(28)D
    【解析】 C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D)的描述错误。 故答案选D)。(29)A
    【解析】 本题考查的是typedef的用法和结构体变量的定义方法。typedef可用于声明结构体类型,其格式为:typedef struct {结构元素定义}结构类型; 本题正确答案为A)。(30)B
    【解析】 getchar函数的作用是从终端读入一个字符。(31)C
    【解析】 在for(i=0;i<12;i++) c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。所以输出结果为选项C)。(32)C
    【解析】 函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组 a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。所以正确答案为C)。(33)A
    【解析】 函数fun(char *s[],int n)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行fun(ss,5)语句后,*ss[]={"xy", "bcc", "bbcc", "aabcc", "aaaacc"},ss[0],ss[4]的输出结果为xy,aaaacc。所以选项A)为正确答案。(34)C
    【解析】 函数int f(int x)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其它情况下y=x2-f(x-2)。所以在主函数中执行语句z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。所以正确答案为C)。(35)C
    【解析】 在函数fun(char *a,char *b)中,while(*a=='*')a++的功能是:如果*a的内容为'*',则a指针向后移动,直到遇到非'*'字符为止,退出循环进入下一个while循环,在while(*b=*a){b++;a++;}中,把字符数组a逐个字符的赋给字符数组b。所以在主函数中,执行fun(s,t)语句后,字符数组t中的内容为"a*b****",所以选项C)为正确答案。(36)A
    【解析】 本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量c在栈中的一个拷贝,函数f所做所有操作只是针对这个数据拷贝进行的修改,这些都不会影响变量c的值。(37)B
    【解析】 在函数中首先把整型数组a[10]中的每个元素写入文件d1.dat中,然后再次打开这个文件,把文件d1.dat中的内容读入到整型变量n中,最后输出变量n的值。所以正确答案为B)。(38)A
    【解析】 本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会产生任何变化,故本题答案选A)。(39)A
    【解析】 在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。所以正确答案为A)。(40)B
    【解析】 本题考查的是指向函数的指针。语句 int (* f)(int);是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。故答案选 B)。
二、选择题(1)【1】 预期输出
    【解析】 输入数据是指被测试函数所读取的外部数据及这些数据的初始值。预期输出是指:返回值及被测试函数所写入的外部数据的结果值。(2)【2】 16
    【解析】 在满二叉树中,叶子结点数目的计算公式为2n-1,其中n为树的深度。(3)【3】 24
    【解析】 实现循环队列时,头指针指向第一个元素的前一个空间,尾指针指向最后一个元素。 因此,此时队列中6,7,8,...,29这二十四个空间存有元素,即队列中有29-5=24个元素。(4)【4】 关系
    【解析】 在关系数据库中,用关系(二维表结构)表示实体及其之间联系的模型称为关系数据模型。(5)【5】 数据定义语言
    【解析】 数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,如查询与增、删、改等;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等。(6)【6】 1
    【解析】 字符空格的ASCII码不为0,所以本题中表达式!c的值为0, b= 0&&1的结果显然为0。(7)【7】 3
    【解析】 本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。(8)【8】 ##2##4
    【解析】 在for循环语句中,自变量k的自增表达式为k++,k++,这是一个逗号表达式,所以输出结果为##2##4。 (9)【9】 2
【10】 2 4 6 8
    【解析】 在主函数中根据整型数组x[]的定义可知,x[1]的初值等于2。在for循环语句中,当i=0时,p[0]=&x[1],p[0][0]=2; 当i=1时,p[1]=&x[3],p[1][0]=4;当i=2时,p[2]=&x[5],p[2][0]=6;当i=3时,p[3]=&x[7],p[3][0]=8。所以程序输出的结果为2 4 6 8。 (10)【11】 3 5
    【解析】    函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为3 5。(11)【12】 4
    【解析】 在主函数中,语句p=a;p++使用指针p指向数组a[1],所以输出结果为4。(12)【13】 1 3
    【解析】 在主函数中调用fun(3)时,实参3传递给形参x。在fun(x)内,执行第一条语句,输出1,然后执行第二条语句,输出3,所以结果为1 3。(13)【14】 person[I].sex
    【解析】 在函数fun(SS person[])对person[]的性别进行判断,所以其正确的调用格式为person[I].sex。(14)【15】 "filea.dat","r"
    【解析】    fopen函数的调用方式通常为 fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容。所以空白处应当填入 "filea.dat","r"。