·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发设计
考试公务员高考考研
业界互联网通信探索
05年9月等级考试二级C语言考前密卷2(三)
http://www.21tx.com 2005年09月07日

  (26)有以下程序:
  #include<stdio.h>
  main(){
  char c[6];
  int I=0:
  for(;i<6;c[-]=getchar(),i++);
  for(I=0;i<6;i++)putchar(c[i]);
  primf("\n");
  }
  如果从键盘上输入:
  ab<回车>
  c<回车>
  def<回车>
  则输出结果为_________.
  A)a  B)a  C)ab  D)abcdef
  b   b   c
  c   c   d
  d   d
  e
  f
  答案:C
  评析:1.getchar():此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。
  2.putchar():此函数的作用是向终端输出一个字符,也可以输出控制字符。
  本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和e[4],所以,正确答案为c。
  
  (27)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。
  A)地址传递       B)单向值传递
  C)由实参传递给形参,再由形参传递给实参
  D)传递方式由用户指定
  答案:B
  评析:c语言规定,实参变量对形参变量的数据传递是"单向值传递",只由实参传给形参。在内存中,实参单元与形参单元是不同的单元。调用结束后,实参单元仍保留并维持原值。
  
  (28)下面程序
  #include<stdio.h>
  #include<string.h>
  main()
  { char*p1="abc",*p2="ABC",str[50]="xyz";
  strcpy(str+2,strcat(p1,p2));
  printf("%s\n",str);
  }
  的输出是_________。
  A)xyzabcABC    B)zabcABC
  C)yzabcABC     D)xyabcABC
  答案:D
  评析:strcat(pl,p2)将字符串abcABC放到了*pl所指向的存储单元中;strcpy在本题将abcABC复制到str+2所指向的存储单元中,即覆盖原str数组中的字符z及其后的所有字符,故str的值为"xyabcABC"。
  
  (29)下面程序
  int aa[3][3]:{{2},{4},{6}};
  main()
  {  int i,*p:&aa[0][0];
  for(I=0;i<2;i++){
  if(i==0)aa[I][i+l]=*p+1;
  else++p;
  printf("%d'.,。p);
  }
  }
  的输出是__________。
  A)23  B)26  C)33  D)36
  答案:A
  评析:观察题目,可以发现,*p=&aa[01[o]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,+p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[O][O],输出2,而i=l时执行了++p操作使指针向后移动指向了aa[O儿1],所以在输出*p时应为3。
  
  (30)以下程序的输出结果是_________。
  #include<stdio.h>
  #include<s~ing.h>
  fun(char*w,int n)
  {
  char t,*s1,*s2;
  s1=w;s2=w+n-l:
  while(s1<s2)
  {
  t=*s1++:
  *sl=*s2--;
  *s2=t;
  }
  }
  main()
  {
  char*p;
  p="1234567";
  fun(p,strlen(p));
  puts(p);
  }
  A)1234567  B)7654321  C)1711717  D)717717l
  答案:C
  评析:在子函数fun中,sl为字符串w的起始地址,s2为字符串的结束地址(字符'\O'除外),当执行循环结束循环,w="1711717"。
  
  
  (31)下面程序
  main()
  { int x=100,a=10,b=20,okl=5,ok2=0;
  if(a<b)
  if(b!=15)
  if(10k1) x=l;
  else i"oL2)x。10;
  X=-1;
  Printf(%d\n",x);
  }
  的输出是________。
  A)-1  B)0  c)1  D)不确定的值
  答案:A
  评析:第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断……如此循环,在打印输出语句的前一行,程序给变量x赋了值,为.1,所以,无论前期如何变化,最后的x值依然为-1。
  
  (32)下面程序
  main()
  {
  int x=32:
  printf("%d\n",x=x<<1);
  }
  的输出是________。
  A)100  B)160  C)120  D)64
  答案:D
  评析:<<是c语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘于2,左移两位相当于该数乘以2的2次方。所以,x<<1=32.2=64。
  
  (33)设有以下定义和语句,输出的结果是(用small模式编译,指针变量占2个字节)_________。
  
  struct date
  {
  long *cat;
  struct date *next;
  double dog;
  }too;
  printf("%d",sizeof(too));
  A)20  B)16  C)14  D)12
  答案:D
  评析:sizeof函数计算已知类型所占的字节数。结构体变量所占内存长度是各成员占的内存长度之和。指针变量占2个字节,所以cat和*next各占2个字节;double型占8个字节,故too共占12个字节。
  
  (34)以下程序的输出结果是_________。
  #include<stdio.h>
  #define FUDGE(y)    2.84+y
  #define PR(a)printf  ("%d",(int)(a))
  #define PRINT l(a)   PR(a);putchar('\n')
  main()
  { intx=2;
  PRINTl(FUDGE(5)*x);
  }
  A)ll  B)12  C)13  D)15
  答案:B
  评析:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换,如果串中包含宏中的形参,则将程序语句中相应的实参代替形参。将实参带入已经定义的宏中,可以得出答案灯"12"。
  
  (35)以下程序段给数组所有的元素输入数据,请选择正确答案填入:
  #include<stdio.h>
  main()
  {
  int a[10],i=O;
  while(i<l0)scanf("%d",________);
  :
  :
  }
  A)a+(i++)  B)&a[i+l]  C)a+i  D)&a[++I]
  答案:A
  评析:a就是数组a的首地址,而a+x是数组中第x个元素的地址,。所以在四个选项中,选项B和c只能输入一个数据,选项D不能给a[O]输入数据,只有A可以完成给数组所有的元素输入数据的任务。
  
  (36)以下对枚举类型名的定义中正确的是________。
  A)enum a={one,two,three};      B)enum a{one=9,two=-1,three};
  C)enum a={"one","two","three"}; D)enum a{"one","two","three"};
  答案:B
  评析:声明枚举类型用enum开头。例如:enum weekday(SUN,mon,tue,wed,thu,fri,sat);
  说明:1、在c编译中,对枚举元素按常量处理,同时可以改变他们的值。2、枚举值可以用来做判断比较。3、一个整数不能直接赋给一个枚举变量。
  
  (37)字符(char)型数据在微机内存中的存储形式是________.
  A)反码      B)补码
  C)EBCDIC码   D)ASCII码
  答案:D
  评析:将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的ASCII码值放到存储单元中。
  
  (38)下面程序的输出是________。
  typedef union
  { long x[2];
  int y[4];
  char z[8];
  }MYTYPE;
  MYTYPE them;
  main()
  { printf("%d\n",sizeof(them));}
  A)32  B)16  C)8  D)24
  答案:C
  评析:sizeof(x)是一个标准c函数,它的返回值是x型的数据结构占用的内存字节数。题目中定义了一个共用体,共用体变量在内存中所占的长度等于最长的成员的长度。
  
  (39)有以下程序,程序运行后的输出结果是_________。
  Int f(intb[][4])
  { int I,J,s=O;
  for(j=00<4;j++)
  {
  I=j;
  if(I>2)i=3-j;
  s+=b[i][j];
  }
  return s:
  }
  main()
  {
  int a[4][4]={{1,2,3,4},{O,2,4,6},{3,6,9,12},{3,2,1,0}};
  printf("%d\n",f(a));
  }
  A)22  B)ll  C)18  D)16
  答案:D
  评析:本题通过函数调用对数组a[0][0]、a[1][l]、a[2112]、a[0][3]进行求和,然后用return语句返回s的值。
  
  (40)不能把字符串:Hello!赋给数组b的语句是_________。
  A)charb[10]={'H','e','1','l','0','!'};
  B)char b[10]={'h','e','1','l''O','!'};
  C)charb[10];strcpy(b,"Hello!");
  D)char b[10]="Hello!";
  答案:B
  评析:在c语言中,大写字母和小写字母被认为是两个不同的字符,因此,"hello!"和"Hello!"是两个不同的字符串。
  
  (41)下面程序的输出是_________。
  main()
  { int x=3,y=6,a=0;
  while(x++!=(y-=1))
  { a+=1;
  if(y<x)break;
  }
  primf("x=%d,y=%d,a=%d\n",x,y,a);
  }
  A)x=4,y=4,a=1  B)X=5,y=5,a=1
  C)x=5,y=4,a=3  D)x=5,y=4,a=l
  答案:D
  评析:注意的是x++中x值的引用时,这里应当是先引用,后自加,具体执行过程如下:
  第一次while循环:条件为真,执行a=a+l=l;此时,x的值已为4,判断y<x不成立,继续执行循环;
  第二次while循环:条件为假,此时x的值已为5,退出while循环,执行printf。
  
  (42)若有程序:
  fun(int a,int b)
  {
  static int c=O:
  c+:a+b:
  return C;
  }
  main()
  {
  int x=5,y=3,z=7,r;
  r=fun((y,x+y),z);
  r=fun(x,y);
  printf("%d\n",r);
  }
  上面程序的输出结果是__________。
  A)23  B)15   C)19  D)18
  答案:A
  评析:stoic声明的外部变量只限于被本文件引用,而不能被其他文件引用。用static来声明一个变量的作用有:①对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在;②全部变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。调用第一个fun,其两个实参的值为(3,5+3)与7即8与7,在函数fun执行结束返回15。第二次调用fun时,由于stat~为静态类型,其值保留,执行fun(5,3)后,其返回值为23,故选A。
  
  (43)下面程序的输出是________。
  main()
  {char*s="12134211";
  int vl=0,v2=0,v3=0,v4=0,k;
  for(k=0;s[k];k++)
  switch(s[k])
  {  default:v4++;
  case'l':vl++;
  case'3':v3++;
  case'2':v2++;
  }
  printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);
  }
  A)vl=4,v2=2,v3=l,v4=l  B)vl=4,v2=9,v3=3,v4=l
  C)vl=5,v2=8,v3=6,v4=l  D)vl=8,v2=8,v3=8,v4=8
  答案:C
  评析:当switch后面括弧内的表达式的值与某一个case后面的常量的表达式的值相等时,就执行此caSe后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。
  
  (44)下面程序的输出是_________。
  main()
  { int k=11;
  printf("k=%d,k=%o,k=%x\n",k,k,k);
  }
  A)k=l1,k=12,k=l1   B)k=ll,k=13,k=13
  C)k=l1,k=013,k=0xb  D)k=l1,k=13,k=B
  答案:D
  评析:在C语言格式字符的输出中,"%d"是以带符号的十进制形式输出整数;"%0"是以8进制无符号形式输出整数(不输出前导符O);"O/ox"是以16进制无符号形式输出整数(不输出前导符0x)。
  
  (45)下面程序段中c的二进制值是__________。
  char a=3,b=6,c;
  c=a^b<<1:
  A)00001011   B)00001111  C)00011110  D)00011100
  答案:B
  评析:c语言提供六种位运算符,按优先级由高到低的顺序分别为:取反(~)、左移((<)和右移(>>)、按位与(&)、按位异或(八)、按位或(I)。所以表达式c=aAb<<l先运算b<<l得二进制值为00001 100,再运算aA00001 100,最后得二进制值00001ll1。B
  评析:c语言提供六种位运算符,按优先级由高到低的顺序分别为:取反(~)、左移((<)和右移(>>)、按位与(&)、按位异或(八)、按位或(I)。所以表达式c=aAb<<l先运算b<<l得二进制值为00001 100,再运算aA00001 100,最后得二进制值00001ll1。
  
  (46)以下叙述中正确的是__________。
  A)C语言比其他语言高级
  B)C语言可以不用编译就能被计算机识别执行
  C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式
  D)C语言出现的最晚,具有其他语言的一切优点
  答案:C
  评析:计算机语言分为低级语言、汇编语言和高级语言,c语言属于高级语言,但并不是说c语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;C语言出现从1972年到1973年间,并不是出现最晚的语言,所以选项D也是错误的。
  
  (47)下列可用于C语言用户标识符的一组是__________。
  A)void define WORD   B)a3_b3 _123 Car
  C)For -abc IFCase    D)2a DO sizeof
  答案:B
  评析:c语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,所以排除c和D。c语言还规定标识符不能为c语言的关键字,从而选项A(void是关键字)是错误的。
  
  (48)fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是________。
  A)只读  B)追加  C)读或读写  D)以上均正确
  答案:D
  评析:fgetc函数是指从指定的文件读入一个字符,该文件必须是以读或读写方式打开的。电etc"函数的调用形式为:ch=fgetc(fp);。
  
  (49)请选出正确的程序段_________。
  A)int*p               B)int*s,k;
  Scanf(""%d"",p);  *s=100;
  ……                 ……
  C)int*s,k;             D)int*s,k;
  Char *p,c;             char *p,e;
  s=&k:                s=&k
  p=&c;                p=&c;
  *p='a';              s=p;
  ……                 *s=l;
  ……
  答案:C
  评析:本题的A和B犯了一个同样的错误,即指针变量p定义后并没有指向具体的变量,因此不能进行赋值操作。另外,在选项D中,s是int指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。
  
  (50)若有下面的说明和定义,则sizeof(struct aa)的值是__________。
  struct aa
  {
  int rl;double r2;float r3:
  union uu{char u1[5];long u2[2]}ua;
  }mya;
  A)30  B)29  C)24  D)22
  答案:D
  评析:结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有自己的内存单元;共用体变量所占的内存长度等于最长的成员的长度。结构体变量aa中,成员r1占2个字节,r2占8个字节,r3古4个字节,共用体ua占8个字节,所以共占用2+8+4+8=22个字节。
  
  二、填空题(每空2分,共40分)
  
  请将每一个空的正确答案写在答题卡的【1】至【20】序号的横线上,答在试卷上不得  分。
  
  (1)在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍  历、 【1】 遍历和后序遍历。
  答案:【1】中序
  评析:在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历。
  前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
  中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。
  后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点,最后遍历左子树;并且遍历左、右子树时,仍然先遍历右子树,然后访问根结点,最后遍历左子树。
  
  (2)结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、 【2】 和限制使用goto语句。
  答案:【2】模块化
  评析:结构化程序设计方法的主要原则可以概括为自项向下、逐步求精、模块化和限制使用goto语句。
  自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。
  逐步求精:对复杂问题,应设计一些子目标作过度,逐步细化。
  模块化:一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。
  限制使用goto语句。
  
  (3)软件测试是保证软件质量的重要手段,而软件测试的主要和重要的测试方法是通过测  试数据和 【3】  的设计来实现。
  答案:【3】测试实例
  评析:进行软件测试时,应精心设计测试实例和选择测试数据,以对系统进行全面测试。
  
  (4)数据库系统的三级模式分别为 【4】 模式、内部级模式与外部级模式。
  答案:【4】概念 或 概念级
  评析:数据库系统在其内部具有三级模式及二级映射,三级模式分别是概念级模式、内部级模式和外部级模式。
  概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。
  内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,.它还未深入到设备级上(如磁盘及磁盘操作)。
  外模式也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导面出。
  
  (5)数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、 【5】 和处理过程。
  答案:【5】数据存储
  评析:数据字典是各类数据描述的集合,它通常包括5个部分,即数据项,是数据的最小单位;数据结构,是若干数据项有意义的集合;数据流,可以是数据项,也可以是数据结构,表示某一处理过程的输入或输出;数据存储,处理过程中存取的数据,常常是手工凭证、手工文档或计算机文件;处理过程。
  
  (6)下面程序的输出是 【6】 。
  main()
  {int arr[10],i,k=O:
  for(i=0;i<10;i++)
  arr[i]=i;
  for(I=1;i<4;i++)
  k+=arr[I]+i;
  printf("%d\n",k);}
  答案:【6】12
  评析:本题通过第一个for循环将数组arr[O]-arr[9]分别赋值为0-9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如下:
  i=l:k=0+arr[1]+l即k=2:
  i=2:k=2+arr[2]+2即k=6:
  i=3:k=6+arr[3]+3即k=12;
  
  (7)若a=10,b=20,则表达式!(a<b)的值是 【7】 。
  答案:【7】0
  评析:已知a=10,b=20,所以逻辑表达式a<b的值为true,即为1,在这个表达式前面有一个逻辑运算符!,表示反操作,所以整个语句的值应当为false,即为0。
  
  (8)有以下程序:
  int fa(int x){return x*x;}
  int fb(int x){return x*x*x;}
  int f(int(*f1)(),int(*f2)(),int x)
  {return f2(X)-n(x);}
  main()
  {int i;i=f(fa,fb,2);printf("%d\n",i);}
  程序运行后,输出结果是 【8】 。
  答案:【8】4
  评析:在主函数中调用函数f,函数f有三个参数,形参f1与f2分别是两个指向函数的指针。在f中执行r2(x)-f1(x),实际上是执行了fb(2).fa(2),故执行i=(fa,fb,2)后i的值为2^3-2^2=4。
  
  (9)下面程序的输出是 【9】 。
  main()
  {enum em{eml=3,em2=1,em3};
  char*aa[]={"AA","BB","CC","DD"};
  primf("%s%s%s\n",aa[eml],aa[em2],aa[em3]);
  }
  答案:【9】DDBBCC
  评析:c语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素的值为其上一个元素的值+1。
  在本题中,没有明确说明枚举元素em3的值,则em3=em2+l=1+l=2,进而可知,在printf()打印函数中,要打印的数组元素是aa[3]、aa[1]、aa[2],因此最后的打印结果应当为"DDBBCC"。
  
  (10)若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是 【10】 。
  int b,c;float a;
  scanf("%£%d,c=%d",&a,&b,&c)
  答案:【10】5.0,4,c=3
  评析:scanf(格式控制,地址表列),如果在"格式控制"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。所以此题中输入数据的形式是5.0;4,c=3。
  
  (11)下列程序的输出结果是 【11】 。
  int t(int x,int y,int cp,int dp)
  {  cp=x*x+y*y;
  dp=x*x-y*y;
  }
  main()
  {  int a=4,b=3,c=5,d=6;
  t(a,b,c,d);
  printf("%d%d\n",c,d);
  }
  答案:【ll】5 6
  评析:本题中a,b,c,d是实参,x,多,cp,dp是形参。c语言规定,实参变量对形参变量的数据传递是"值传递",即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,程序的输出结果是5 6。
  
  (12)下面程序的输出结果是 【12】 。
  char b[]="ABCD";
  main()
  {
  char b[30];
  strcpy(&b[0],"GH");
  strcpy(&b[1],"GH");
  strcpy(&b[2],"GH");
  printf("%s\n",b);
  }
  答案:【12】GGGH
  评析:由于在函数main中定义了数组变量b,其将屏蔽全局变量b。对于一维数组变量,其值为一常数,等于数组首元素地址。strcpy(&b[0],"GH"),是将字符串。"GH"复制到数组b中从首元数开始的空间中,此是b中的字符串为"GH";strcpy(&b[1],"GH"),是将字符串。"GH"复制到数组b中从第二个元素开始的空间中,此是b中的字符串为"GH"。执行第三次strcpy函数后,b中的字符串为"GGGH"。
  
  (13)有以下定义和语句,则sizeof(a)的值是 【13】 ,而sizeof(a.share)的值是 【14】 。
  struct date
  { int day;
  int mouth;
  int year;
  union{int sharel;
  float share2;
  }share;
  }a;
  答案:【13】10
  【14】4
  评析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int占2个字节,float占4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。
  
  (14)下述函数用于统计一行字符中的单词个数,单词之间用空格分隔。
  Word_num(str)
  char str[];
  {int i,num=O,word=O;
  for(i=0;str[i]!= 【15】 ;i++)
  if( 【16】 =='')word=0;
  else if(word==0)
  {
  word=l;
  【17】 ;
  }
  return(num);
  }
  答案:【15】'\0'或0或NULL
  【16】str[I]
  【17】num++或num=num+l或num+=1
  评析:观察题目要求,可以知道以下几点:
  ①for循环的结束条件应当是:str[i]已是字符串的最后一个字符;
  ②strⅢ代表字符串str中的第i+1个字符;
  ③整型变量num的值是要记录的单词的个数。
  c语言中规定字符串的最后一个字符是一个隐含的字符串结束符"\0",所以在题中第一个空中应填写"\0";题中第二个空应填写"str[i]",以判断当前位置的字符是否为空格;题中第三个空中应当填写"num++",通过变量num的加l累加得到字符串中的单词个数。
  
  (15)有一个已排好序的数组,今输入一个数,要求按原来的顺序规律将它插入到数组中。算法是:假设排序顺序是从小到大,对输入的数,检查它在数组中哪个数之后,然后将比这个数大的数顺序后移一个位置,在空出的位置上将该数插入。请在程序中的空白处填上一条语句或一个表达式。
  #defineN 100
  main()
  { float a[N+1],x;
  inti,p;
  for(i=0;i<N;i++)
  scanf("%f",&a[I]);
  scanf("%f",&x);
  for(I=0,p=N;i<N;i++)
  if(x<a[I])
  { 【18】 ;
  break;}
  for(i=N-1; 【19】 ;I--)
  a[I+1]=a[I];
  a[p]_x;
  for(i=0; 【20】 ;i++)
  { primf("%8.2f",a[i]);
  if(i%5==O)
  printf("\n");
  }
  }
  答案:【18】p=i;
  【19】i>=p
  【20】i<=N
  评析:本题主要考查了插入排序。由于程序中的数组在开始已经按从小到的大顺序排好。在插入时,首先要查到第一个大于待插入数的数组下标,即当待插入元素小于数组中当前元素时,记下数组的当前下标p,并结束循环。故第一空目的是为了记下数组下标,应填p=i;插入排序的第二部是将大于待插入元素的所有元素都向后移动一位,故在循环时,要从最后一个元素到第p个元素都要后移一位,因此第二空应埴i>=p。最后一个循环是将N+1个元素都输出,故最后一空应为i<=N。(注:本题有多种答案,以上仅提供一种)

上一篇: 05年9月等级考试二级C语言考前密卷1(十)
下一篇: 05年9月等级考试二级C语言考前密卷2(七)

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2011 21tx.com, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net