| 网站首页 | 考研信息中心 | 考研资料下载 | 考研论坛 | 考研专业试题 | 2008考研招生简章 | 考研图书 | 留言板 | 考研图片中心 | 

设为首页
加入收藏
联系我们

您现在的位置: 考研信息网 >> 考研信息中心 >> 计算机类考试首页 >> 水平考试 >> 模拟试题 >> 正文 用户登录 新用户注册
06年四月全国等级考试二级C语言考前密卷2(一)     ★★★ 【字体:
06年四月全国等级考试二级C语言考前密卷2(一)
作者:佚名    文章来源:本站原创    点击数:    更新时间:2006-3-23

本站推荐Firefox浏览器,有效阻止病毒和垃圾弹出[正版免费下载]



(26)下列程序执行后输出的结果是___________。
  int d=l:
  fun(int p)
  { int d。5;
  d+=p++;
  printf("%d,",d);
  }
  main()
  { int a=3;
  fun(a);
  d+=a++:
  printf("%d\n",d);
  }
  A)8,12  B)9,13  C)8,4  D)9,5
  答案:C
  评析:本题执行过程如下:首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行"d+=a++",此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
  
(27)已知下面的程序段,正确的判断是_________。
  #define A 3
  #define B(A)((_A+1)'a)
  int a=3:
  ……
  X=3*(A+B(7));
  A)程序错误,不允许嵌套定义  B)X=93
  C)X=8l            D)程序错误,宏定义不允许有参数
  答案:C
  评析:本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
  
(28)定义int*swap()指的是_______。
  A)一个返回整型值的函数swap()
  B)一个返回指向整型值指针的函数swap()
  C)一个指向函数swap()的指针,函数返回一个整型值
  D)以上说法均错
  答案:B
  评析:一个函数可以带回一个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。本题的定义中,包括括号和·号,由于f)优先级高于t。故它是一个返回整型指针的函数。
  
(29)以下程序段的输出结果是__________。
  main()
  {  char s1[10],s2[10],s3[10];
  scanf("%s",s1);gets(s2);gets(s3);
  puts(s 1);puts(s2);puts(s3);
  }
  输入数据如下: (此处<cR>代表回车符)
  aaa<CR>
  bbb<CR>
  A)aaa  B)aaa  C)aaa\0bbb\0  D)aaabbb
  bbb
  bbb
  答案:B
  评析:scanf是标准输入函数,在输入字符串aaa时,实际的内容为"aaa\0","\0"是由系统自动加入的;gets的功能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以"\0"代替换行符。
  
(30)下述函数功能是________。
  Int fun(char*x)
  { char*y=x;
  while(*y++);
  return y-x-l;
  }
  A)求字符串的长度     B)求字符串存放的位置
  C)比较两个字符串的大小  D)将字符串x连接到字符串y后面
  答案:A
  评析:在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。
  
(31)以下程序的输出结果是_________。
  main()
  { char str[12]={'s','t','r','i','n',' g'};
  printf("%d\n",strlen(str));
  }
  A)6  B)7  C)ll  D)12
  答案:A
  评析:在c语言中,字符串的长度是其首字符到NULL(不含)字符的总字符个数。本题定义字符数组str的同时,对第7个元素,由系统自动添加上"\0",故字符串的长度为6。
  
(32)请读程序段:
  char str[]="ABCD",*p=str;
  printf("%d\n",*(p+4));
  程序段的输出结果是_________。
  A)68         B)0
  C)字符'D'的地址   D)不确定的值
  答案:B
  评析:在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符串结束标志"\0",故指向字符数组的指针p的+(p+4)的值为"\0"。由于"\0"的编码值就是0,所以本题输出为0。
  
(33)若有定义:int a[4][10];,则以下选项中对数组元素a[i][j]引用错误的是________。
  (0<=i<4,0<=j<10)
  A)*(&a[O][O]+10*i+j)   B)*(a+i)+j
  C)*(*(a+i)+j)       D)*(a[i]+j)
  答案:B
  评析:本题中选项B是错误的引用,*(a+i)+j只代表了a[i][i]的地址。
  
(34)设有以下语句:
  char strl[]="string",str2[8],。str3,。str4="strin∥;
  则__________不是对库函数的正确调用。
  A)strcpy(strl,"HELLOl");  B)strcpy(str2,"HELL02");
  C)strcpy(str3,"HELL03");  D)strcpy(str4,"HELL04");
  答案:C
  评析:c语言中:sgcpy(stl,st2);,其两个参数均为字符指针或字符数组,选项c中的目的串指针str3没有指向具体有效的存储单元,故是错误的调用。
  
(35)请读程序:
  #include<stdio.h>
  #include<string.h>
  main()
  { char*sl="AbCdEf",*s2="aB";
  s1++;s2++;
  printf("%d\n",strcmp(s 1,s2));
  }
  上面程序的输出结果是___________。
  A)正数  B)负数  C)零  D)不确定的值
  答案:A
  评析:函数strcmp的功能是比较字符串s1和s2,如果sl>s2,则返回个正数;如果sl<s2,则返回负数,否则返回零。由于本题中小写字母b的ASCII码值大于大写字母B,故sl>s2,所以函数的值为正数。
  
(36)下面程序的输出是_________。
  char s[]="ABcD";
  main()
  { char*p;
  for(p=s;p<s+4;p++)
  printf("%s\n",p);
  }
  A)ABCD  B)A    C)D  D)ABCD
   BCD    B     C   ABC
   CD    C     B   AB
   D     D     A   A
  答案:A
  评析:在第一次执行for循环时,字符数组的首地址赋给了指针变量p,使得指针变量p指向了s的首地址,输出p所指向的字符串;第二次执行for循环时,p值增加1,p指向了s的第二个元素输出BCD;第三次输出CD;第四次输出D;直到p指向字符串的结束字符"\0",for循环终止执行。
  
(37)以下程序输出的结果为__________。
  main()
  { char* alpha[6]={"ABCD",EFGH","IJKL","MNOP","QRST","UVwX"};
  char**p;
  int i:
  p=alpha;
  for(I=0;i<4;i++)
  printf("%s",p[I]);
  }
  A)ABCDEFGHIJKL      B)ABCD
  C)ABCDEFGHIJKLMNOP    D)AEIM
  答案:C
  评析:alpha[O]指向"ABCD"的首地址;alpha[1]指向"EFGH"的首地址;alpha[2]指向"IJKL"的首地址,依此类推。当执行p=alpha后,p指向指针数组alpha的首地址。for循环中输出了4个字符串。
  
(38)下面程序的输出结果是_________。
  #include<stdio.h>
  main()
  { char*p[]={"B00L","0PK","H","SP"};
  int i:
  for(i=3;i>=0;i--,i--)
  printf("%c",*p[i]);
  printf("\n");
  }
  A)SO  B)SP  C)SPOPK  D)SHOB
  答案:A
  评析:p[0]存放的是"BOOL\0"的首地址;p[1]存放的是"OPK\0"的首址等。
  在printf语句中输出的+p[I]表示p[i]字符串的第一个字符。在for循环中,i的初值为3,那么输出的第一个字符为"s",接着两次i--,则输出的值为+p[1],即字符"0",所以本题的输出为SO。
  
(39)以下程序的输出结果是_________。
  #include<stdio.h>
  void prt(int*x,int*y,int*z)
  {  printf("%d,%d,%d\n",++*x,++*y*(z++));}
  int a=10,b=40,c=20;
  main()
  { prt(&a,&b&c);
  prt(&a,&b,&c);
  }
  A)ll,42,3l  B)ll,41,20  C)1l,21,40  D)11,41,2l
   12,22,41   12,42,20   11,2l,41   12,42,22
  答案:B
  评析:由于实参传送的是变量的地址,所以对形参指针所指向的单元内容的改变,即对实参内容的改变。
  
(40)若一个外部变量的定义形式为static int x;,那么,其中static的作用应该是_______。
  A)将变量存储在静态存储区
  B)使变量x可以由系统自动初始化
  c)使x只能在本文件内引用
  D)使x的值可以永久保留
  答案:C
  评析:事实上,无论有无static修饰,外部变量都具有A、B和c三种特性。作为一种修饰,static仅是限制此类型外部变量的引用范围:只能在定义它的文件范围内使用。
  
(41)以下程序的输出结果是________。
  #include<stdio.h>
  #define SQR(x)x*x
  main()
  { int a,k=3;
  a=++SQR(k+1);
  printf("%d\n",a);
  }
  A)8  B)9  C)17  D)20
  答案:B
  评析:本题宏替换中遇到形参x以实参k+l代替,其它字符不变。sQR(k+1)展开后应为字符串k+l*k+l。
  
(42)下面是对宏定义的描述,不正确的是_______。
  A)宏不存在类型问题,宏名无类型,它的参数也无类型
  B)宏替换不占用运行时间
  C)宏替换时先求出实参表达式的值,然后代入形参运算求值
  D)宏替换只不过是字符替代而已
  答案:C
  评析:宏替换实质上就是字符替代,它不可能进行计算,故c错误。带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。
  
(43)以下程序(程序左边的数字为附加的行号)________。
  1#include<str.h>
  2#include<stdio.h>
  3main()
  4{char s[]="string";
  5 puts(s);
  6 strcpy(s,"hello");
  7 printf("%3s\n",s);}
  A)没有错   B)第l行有错   C)第6行有错  D)第7行有错
  答案:B
  评析:字符串复制函数strcpy包含在头文件string.h中,因此,程序中的第l行文件包含命令是错误的。
  
(44)若有如下说明,则__________的叙述是正确的。
  struct st
  { int a;
  int b[2l;
  }a;
  A)结构体变量a与结构体成员a同名,定义是非法的
  B)程序只在执行到该定义时才为结构体st分配存储单元
  c)程序运行时为结构体st分配6个字节存储单元
  D)类型名struct st可以通过extern关键字提前引用(即引用在前,说明在后)
  答案:D
  评析:结构体变量a与结构体成员a同名是合法的定义,引用成员a的方法是a.a,变量a处于不同的"层次"上,系统完全能够分清。st是一个结构体名,不会为结构体名分配存储空间,应该是在运行时为结构体变量a分配6个字节的存储单元,故选项B和选项C错误。
  
(45)若有以下结构体定义,则________是正确的引用或定义。
  struct example
  { int x;
  int y;
  }v1;
  A)example.x=10     B)example v2.x=10
  C)struct v2;v2.x=lO  D)struct example v2={10};
  答案:D
  评析:在定义结构体变量时,不能只用结构体名example或关键字strum进行定义,必需要用结构体类型名struct example定义,在引用结构体成员变量时,需要用结构体变量名进行引用,所以选D。
  
(46)下列程序的执行结果是_________。
  #include<stdio.h>
  union un
  { int i;
  char c[21;
  };
  void main()
  { union un x;
  x.c[0]=10:
  x.c[1]=1:
  printf("\n%d",x.i);
  }
  A)266  B)ll  C)265  D)138
  答案:A
  评析:由于本题定义的是共用体,所以成员表列中的整型变量x与字符数组c共占用同一个存储单元,且此存储单元为2个字节,通常c[O]位于低字节,c[1]位于高字节,所以x.i的值为266。
  
  
(47)已知形成链表的存储结构如下图所示,则下述类型描述中的空白处应填_______。
  struct link
  Data next
  {  char data;
  ___________
  }node;
  A)struct link next  B)link*next
  C)struct next link  D)struct link*next
  答案:D
  评析:在单向链表中,由于每个结点需要存储下一个结点的地址,且下一个结点的数据类型与前一个结点的数据类型完全相同,故应为struct link*next。
  
(48)已知小写字母a的ASCII码为97,大写字母A的ASCII.码为65,以下程序的结果是__________。
  main()
  { unsigned int a=32,b=66;
  printf("%c\n",atb);
  }
  A)66  B)98  C)b  D)B
  答案:C
  评析:位运算符"l"的作用是按位或,即两个二进制数的相应位中只要有一个为1,该位的结果值为l。最后以字符型输出, 98对应的字符"b"。
  
(49)C语言库函数龟ets(str,n,fp)的功能是_________。
  A)从fp指向的文件中读取长度n的字符串存入str指向的内存
  B)从fp指向的文件中读取长度不超过n-l的字符串存入str指向的内存
  C)从fp指向的文件中读取n个字符串存/Xstr指向的内存
  D)从str读取至多n个字符到文件fp
  答案:B
  评析:fgets函数的作用是从指定的文件读入一个字符串。fgets(str,n,fp);中的n为要求得到的字符的个数,但只从fb指向的文件输入n-1个字符,然后在最后加一个'\O'字符,因此得到的字符串共有n个字符。
  
(50)下述程序向文件输出的结果是__________。
  #include<stdio.h>
  void main()
  { FILE*fp=fopen("TEST","wb");
  fprintf(fp,"%d%5.0f%c%d",58,76273.0,'-',2278);
  fclose(fp);
  }
  A)58 76273-2278   B)5876273。.000000-2278
  c)5876273-2278    D)因文件为二进制文件而不可读
  答案:C
  评析:fprintf函数工作时,多个数据间不会自动加分隔符,选项A错误;浮点数的输出格式是"%5.0f"表明其小数部分输出O位,即没有输出,所以选项B也是错误的。
  
二、填空题(每空2分,共40分)
  
请将每空的正确答案写在【l】至【20】序号的横线上,答在试卷上不得分。
  
(1)对于长度为n的顺序存储的线性表,当随机插入和删除一个元素时,需平均移动元素  的个数为 【l】 。
  答案:【1】n/2
  评析:删除一个元素,平均移动的元素个数为(n-l+n-2+……+0)n=(n-1)/2;插入一个元素,平均移动元素个数为(n+n-l+n-2+……+1)n=(n+1)/2;所以总体平均移动元素个数为n/2。
  
(2)注释说明了程序的功能,它分为 【2】 注释和功能性注释。
  答案:【2】序言性
  评析:注释一般分为序言性注释和功能性注释。
  
(3)软件测试中路径覆盖测试是整个测试的基础,它是对软件 【3】 进行测试。
  答案:【3】结构
  评析:路径测试是白盒测试方法中的一种,它要求对程序中的每条路径最少检查一次,目的是对软件的结构进行测试。
  
(4)数据库技术的主要特点为数据的集成性、数据的高 【4】 和低冗余性、数据独立性和数据统一管理与控制。
  答案:【4】共享性
  评析:数据库技术的主要特点有以下几个方面:数据的集成性,数据的高共享性与低冗余性,数据韵独立性,数据统一管理与控制。
  
(5)数据元素之间 【5】 的整体称为逻辑结构。
  答案:【5】逻辑关系
  评析:数据元素之间逻辑关系的整体称为逻辑结构。数据的逻辑结构就是数据的组织形式。
  
  (6)若有定义int m=5,y=2,则执行表达式y+=y-=m*=y后,y的值为 【6】 。
  答案:【6】.16
  评析:将赋值运算符右侧的"表达式"的值赋给左侧的变量,并且赋值运算符按照"白右而左"的结合顺序,本题表达式应先算m的值为10,再运算y的值为8,最后计算y=y+(-8)=-8+(-8)=-16。
  
(7)若x和y都是double型变量,]ix的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为 【7】 。
  答案:【7】8.000000
  评析: fabs函数功能是求x的绝对值,计算结果为double型。pow功能是计算x的y次方的值,计算结果同样为double型。所以本题表达式相当于2.0的3.0次方,结果为8.000000。
  
(8)设有char a,b;,若要通过a&b运算屏蔽掉a中的其它位,只保留第2位和第8位(右起为第1位),则b的二进制是 【8】 。
  答案:【8】10000010
  评析:运算"&"的规则是只有当两个相应的二进制位都为1时,该位的结果才为1。要保留2、  8位,只要将其与二进制数10000010相与。
  
(9)下列程序执行后输出的结果是 【9】 。
  f(int a)
  { static c=0;
  C=a+C++:
  return(c);
  }
  main()
  { int a=2,i,k;
  for(i=O;i<2;i++)
  k=f(a++);
  printf("%d\n",k);
  }
  答案:【9】7
  评析:在程序执行时,static变量仅初始化一次,下次使用时将使用上次保存的值。
  
(10)下面程序执行后输出的结果是 【10】 。
  int m=13:
  int fun(int x,int y)
  { int m=3;
  return(x*y-m);
  }
  main()
  { int a=7,b=5;
  printf("%d\n",fun(a,b)/m);
  }
  答案:【10】2
  评析:本题变量m既是外部变量(值是13),又是fun函数的局部变量(值为3)。函数fun(x*y-m)的值为7*5-3=32,在main函数中,ftm(a,b)/m中的m应取外部变量的值13,因此输出2。
  
(11)下列程序执行后输出的结果是 【11】 。
  main()
  { nt arr[10],i,k=0;
  for(I=0;i<l0;i++)arr[I]=i;
  for(I=1;i<4;i++)k+=arr[i]+i;
  printf("%d\n",k);
  }
  答案:【11】12
  评析:本题的第一个fur循环用于给数组arr赋初值,第二个for循环用于求和运算。由于第二个fur循环初始值为1,而循环条件为i<4,所以求的是art[1]到arr[3]及i的和,所以输出结果为12。
  
(12)下列程序执行后输出的结果是 【12】 。
  struct s
  {int x,y;}data[2]={10,100,20,200};
  main()
  {
  struct s*p=data;
  printf("%d\n",++(p->x));
  }
  答案:【12】11
  评析:程序中结构体数组data首地址(即&data[0])赋值给结构体指针变量p,++(p->x)表示先将p所指向的结构体变量的成员x值加1,然后将此x(即data[01.x]输出。
  
(13)下面程序有两个printf语句,如果第一个printf语句输出的是194,则第二个print语句的输出结果是 【13】 。
  main()
  { int a [10]={1,2,3,4,5,6,7,8,9,0},*p;
  p=a;
  printf("%X\n",p);
  printf("%x\n",p+9);
  }
  答案:【13】la6
  评析:对于指针变量的运算,就是对地址的运算。本题中由于指针指向的是整型变量,所以,使指针变量移动9个位置也就是移动18个字节。注意,本题是以16进制输出的。
  
(14)以下函数的功能是计算s=l+l/2!+l/3!+…+l/n!,请填空.
  double fun(int n)
  { double s=O.O,fac=1.O;
  int i,k=1;
  for(i=l;i<=n;i++)
  {  【14】 ;
  fat=fat/k;
  s=s+fac;
  }
  }
  答案:【14】k=k*i
  评析:本题中通过for循环求s表达式中每一项的和,表达式"fac=fac/k;"求的是每一项的值,所以k的值应为n!,在求n!的时候,可以用上次循环阶乘的值乘i,就可以直接得此次n!,故本题填k=k*i。
  
(15)下面程序的运行结果是 【15】 。
  main()
  { unsigned a=0112,x;
  x=a>>3:
  printf("x=%o",x);
  }
  答案:【15】x=11
  评析:在对无符号数的右移是高位补0。
  
(16)函数delete(s,i,n)是作用是从字符串s中删除从第i个字符开始的n个字符,请填空。
  void delete(char s[],int i,int n)
  { int j,k,length=O;
  while(s[1ength])
  【16】 ;
  --i:
  j=i;
  }
  if( 【17】 )
  { k=i+n;
  if(i+n<=length)
  while(k<length)
  s[j++]=s[k++];
  s[j]='\0';
  }
  答案:【16】length++
  【17】i<length
  评析:第一个循环极有可能是计算串的长度,在i<=length时字符才被删除,被删除的是从第i个到第i+n或最后一个间的所有字符。删除前,应判断i<=length。由于已经进行了一i运算,故实际应填入i<length。
  
(17)下述函数统计一个字符串中的单词个数,单词是指处在空格之间的字符序列,请填空。
  int word(char*s)
  { int num=O,flag=O;
  while(*s)
  { if( 【18】 ==")flag=O;
  else if( 【19】 ){flag=1;num++}
  }
  return 【20】 ;
  }
  答案:【18】*s++
  【19】flag==O或*(s-1)=="
  【20】num
  评析:在统计字符串单词个数的算法中,本题的flag是为了记录一个单词是否结束。第18空应填*s++;如果某个字符不是空格,则必需判断它是否是单词,如是,则使得flag的标志为1,num的值加1。本题判断方法是:先判断s所指向的字符是否为空格,如果是则使得flag=O,否则判断前一个字符是否是空格,如果是则说明这个字符是一个单词的开始,将flag标志为1,num的值加1,如果不是,则不必记录。故第19空应flag==O或*(s-1)==";最后一个空格需填写的是返回的单词的个数,即num。

考研信息网在线版权与免责声明

1、 凡本站注明“稿件来源:考研信息网(sanwww.com)”的所有文字、图片和音视频稿件,版权均属本网所有,任何媒体、

网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发表。已经本站协议授权的媒体、网站,在下载使用时

必须注明"稿件来源:sanwww.com",违者本站将依法追究责任。

2、本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着

赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

3、考研试题、各种考试试题以及考试信息转载于各大bbs论坛,就其真实性本站无法证实,并不意味着赞同其观点。

如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
           最新热点        最新推荐        相关文章
    没有相关文章
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)