| 网站首页 | 文秘公文 | 免费试题 | 教学用文 | 优秀教案 | 各类考试 | 
您现在的位置: 东星资源网 >> 各类考试 >> 计算机等级考试 >> 历年试题 >> 正文
05年9月等级考试二级C语言考前密卷2(二)
05年9月等级考试二级C语言考前密卷2(二)

  (26)下面程序的输出结果是__________。
  #define P1(x)printf(x)
  main()
  {
  char d[]。"p";
  Pl(d);
  P1("d");
  }
  A)pd  B)d"d"  C)"p"d  D)"p""d"
  答案:A
  评析:带参数的宏定义的为:#define宏名(参数表)字符串
  程序中的Pl(d);经宏置换后为printf(d);,输出字符串p;程序中的Pl("d");经宏置换后printf("d")。
  
  (27)选项中,能定义s为合法的结构体变量的是__________。
  A) typedef struct abc
  {  double a;
  charb
  }s;
  B) struct
  {  double a;
  char b
  }s;
  C) struct ABC
  {  double a;
  char b
  }
  ABC s:
  D) typedef ABC
  {  double a;
  char b
  }
  ABC s:
  答案:B
  评析:定义结构体类型的变量,可采用三种方法:
  ①先定义结构体类型,再定义变量名;②在定义类型的定义变量:③直接定义结构类型变量,即不结构体名:选项B符合种定义方法。
  
  (28)请读程序:
  #include<stdiO.h>
  #include<string-h>
  main()
  {
  char*s1="AbCdEf", *s2="aB";
  s1++; s2++;
  printf("%d、n",strcmp(sl,s2));
  }
  上面程序的输出结果是________。
  A)正数  B)负数  c)零  D)不的值
  答案:A
  评析:strcmp(X1,X2)是串函数,本题中"s1"、"s2"分别表示这两个串中个字符的地址,s1++和s2++是将指针指向串的个字符,则*sl为"bCdEf'',*s2为"B"。在字符串中,大小的是各个字符串位置字符的ASCII码值的大小决定的, sl>s2,返回值为正数。
  
  (29)请读程序:
  #include<stdiO.h>
  main()
  {
  int a=5,b=7,c=9;
  printf("%d,%d,",a,b,c);
  printf("%d,%d,%d,"a,b);
  }
  上面程序的输出结果是________。
  A)5,7,9,5,7  B)5,7,5,7  C)5,7,不定,7,9  D)5,7,5,7,不定
  答案:D
  评析:printf函数按格式控制符的个数输出表列中对应的数据,若输出表列的个数大于格式控制符个数,则输出与格式控制符对应的输出表列的数据,输出表列中多的则省略;若格式控制符个数大于输出表列的个数,则输出与格式控制符对应的输出表列的数据,格式控制符多的输出的数据是随机的。
  
  (30)请读程序:
  #incIude<stdio.h>
  func(int a,int b){
  Int C;
  c=a+b:
  return C:
  }
  main(){
  int x=6,y=7,z=8,r;
  r=func((x--,y++,x+y),z--);
  printf("%d\n",r);
  }
  上面程序的输出结果是________。
  A)ll  B)20  C)2l  D)31
  答案:C
  评析:函数func()的作用是返回两个形参的和,个形参是x、y分别自减和自增后的和,(x--,y++,x+y)是逗号表达式,它的值应该等于x+y,整个表达式(x--,y++,x+y)的值为13,而个形参的值为8(语法规则,应当先使用,后自增),func()的返回值为13+8=21。
  
  (31)请读程序:
  #include<stdiO.h>
  main()
  {
  int a,b;
  for(a=l,b=1;a<=100;a十+){
  if(b>=20)break;
  if(b%3==1){b+=3;continue;}
  b-=5:
  }
  printf("%d\n",a);
  }
  上面程序的输出结果是_________。
  A)7  B)8  C)9  D)10
  答案:B
  评析:break语句的作用是用于跳出循环体; continue语句的作用是用于跳出本次循环。次循环时,(b%3==1)为真,b=4,下一次循环,如此反复,当b=22时结束循环,共循环8次,即a=8。
  
  (32)设变量x为float型且赋值,则语句中能够将x中的数值保留到小数点后面两位,并将位四舍五入的是__________。
  A)X=X*100+0.5/100.0      B)x=(X*100+0.5)/100
  C)x=(int)(x*100+0.5)/100.0  D)x=(x/100+0.5)*100.0
  答案:C
  评析:本题算术表达式的运算小数位数保留两位并四舍五入的操作,(int)(x*100+0.5)是指将(x*100+0.5)的值强制转换成整型。
  
  (33)请读程序片段(字符串内空格字符):
  printf("%d\n",strlen("ATS\n012\1\\"));
  上面程序片段的输出结果是____________。
  A)ll  B)10  C)9   D)8
  答案:C
  评析:语句的目的是输出"ATS\n012\1\\"串的长度,在串中"\\"代表"\",而"\1"代表数字1,也占字符,"\n"是回车换行符,也占字符,加上A、T、s、0、l、2,共9个字符。
  
  (34)运行程序后,从键盘上输入china撑<回车>,则输出结果为_________。
  #include<stdio.h>
  main()
  {
  int v1=0,v2=0;char ch:
  while((ch=getchar())!='#')
  switch(ch)
  {
  case'a':
  case 'h':
  default:v1++;
  case'0':v2++:
  }
  printf("%d,%d\n",v1,v2);
  }
  A)2,0  B)5,0  C)5,5  D)2,5
  答案:C
  评析:case后面的语句后,流程控制转移到下case。"case常量表达式"只是起语句标号作用,并在该处条件判断。在switch语句时,switch后面表达式的值找到匹配的入口标号,就从此标号开始下去,不再判断。
  
  (35)请选出可用作c语言用户标识符的一组标识符__________。
  A)void   B)a3.b3   c)For   D)2a
  define   -123     -abc    DO
  WORD    IF      case    sizeof
  答案:B
  评析:c语言规定标识符只能由字母、数字和下划线三种符号组成,而且个字符是字母或下划线。选项A中的void是c语言的关键字,不合法;选项c中的case和c语言的关键字重名,不合法;选项D中的2a是数字打头而且sizeof和c语言的关键字重名,不合法。
  
  (36)下面能定义数组,并赋值的语句是_________。
  A)int N=5,b[N][N]          B]int a={{1},{3}}
  C)int c[]={{1,2},{3,4}}    D)int d={{1,2},{34}}
  答案:D
  评析:可以用下面的方法对二维数组初始化:
  l、分行给二维数组赋初值。如int a={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  2、可以将所有数据写在花括弧内,按数组排列的顺序对各元素赋初值。如:
  int a={1,2,3,4,5,6,7,8;9,10,1 l,12);
  3、可以对元素赋初值:int a={{1},{5},{9}};
  它的作用是只对各行列的元素赋初值,其余元素值自动为0。
  4、元素都赋初值(即初始数据),则定义数组时对维的长度可以不指定,但维的长度省。如:int a={1,2,3,4,5,6,7,8,9,10,11,12};
  与下面的定义等价:int a[]={1,2,3,4,5,6,7,8,9,10,1l,12};
  
  (37)请选出程序的输出结果___________。
  #include<stdio.h>
  sub(int*s,int y)
  { static int t=3;
  y=s[t];t--;
  }
  main()
  { int a[]={1,2,3,4},i,x=0;
  for(i=0;i<4;i++){
  sub(a,x);printf("%d",x);)
  printf("\n");
  }
  A)1234  B)432l  C)0000  D)4444
  答案:C
  评析:x函数sub()的实参时,函数对x值的返回主函数,并使得x的值在打印时,x的值是不变的,即为0。
  
  (38)假定下面程序可文件名prg.exe,则该程序所在的子目录下输入命令行:prg hello
  good<回车>后,程序的输出结果是_________。
  main(int argc,char*argv[])
  {
  int i;
  for=1;i<argc;i++)printf("%c",*argv[I]);
  }
  A)heUo good   B)hg  C)hel   D)hellogood
  答案:B
  评析:带参数的main()函数常用为:main(int argc,char.*argv[]),,整型变量argc用来记录命令行中的参数个数。参数的个数由c程序运行时自动计算。字符型指针数组argv的个元素存放命令名,其后各个元素依次存放命令行中各个参数的首地址,数组的大小由argc。for循环语句输出各参数的个字母。
  
  (39)若有说明和语句,请选出哪个是对c数组元素的引用_________。
  int c,(*cp)
  cp=c;
  A)cp+l  B)*(cp+3)  C)*(cp+1)+3  D)*(*cp+2)
  答案:D
  评析:cp=c语句是将数组第0行的地址赋给了cp。cp+1使指针指向二维数组c的行;+(cp+3)是数组c的行的第0列的地址值;+(cp+1)+3是数组c的列的地址值。
  
  (40)下列选项中定义结构体的是_________。
  A)typede fstruct     B)struct color c1
  { int red;        { int red;
  int GREen;        int green;
  int blue;        int blue;
  }cOLOR;         };
  COLOR cl;
  C)struct color      D)struct
  { int red;       { int red;
  int green;       int green;
  int blue;        int blue;
  }cl;          }cl;
  答案:B
  评析:将变量定义为标准类型与定义为结构体类型不同之处在于:后者要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,struct color),只指定结构体名。可以不结构体名,答案D缺省结构体名的情况。而变量名列表列表后面,B答案将c1定义为结构体变量。
  
  (41)设有语句
  char a=3,b=6,c;
  c=a^b<<2:
  则c的二进制值是_________。
  A)00011011   B)00010100   c)00011100   D)00011000
  答案:A
  评析:"<<"是c语言中规定的左移运算符,n是异或运算符,,c的二进制值应为0001 1011。
  
  (42)设有如下定义
  struct ss
  {  char name
  int age;
  char sex;
  }std,*p=std;
  下列各输入语句中错误的是__________.
  A)scanf("%d",&(*p).age);   B)scanf("%s",&std.name);
  c)scanf("%c",&std[O].sex);  D)SCanf("%c",&(p->SEX));
  答案:B
  评析:在c语言中,结构体变量的引用有三种等价
  1、结构体变量.名;2、(*p).名;3、p->名。
  std.name是字符数组名,-本身代表地址,其前面不应该使用"&"符号,选项B错误。
  
  (43)设有
  static char str[]="Beijing";
  则
  printf(%d\n",strlen(strcpy(str,"China")));
  后的输出结果为__________。
  A)5  B)7  C)12  D)14
  答案:A
  评析:在printf()函数前,数组str的长度是7,当使用strcpy()函数将新的值赋给str后,strlenr)函数返回的应当是现在的str字符串的字符个数,即是5。
  
  (44)下列程序段中,死循环的是__________。
  A)int i=100;      B)unsigned k=0;
  while(1)         do
  {             {
  i=i%100+l:        ++k;
  if(i>=100)break;    }
  }            while(k>=0);
  C)for(;;);       D)int s=3379;
  while(s++%2+s%2)s++;
  答案:A
  评析:当表达式为非0值时,while语句中的内嵌语句,可用break语句跳出循环,用continue语句结束本次循环。选项A死循环,当i=100时跳出循环。选项c为空循环语句。
  
  (45)程序的输出结果是________。
  #include<stdio.h>
  main()
  { int i;
  for(i=l;i<5;i++){
  if(i%2)print引剃');
  else continue;
  printf("≠f");
  }
  printf("$\n");
  }
  A)*#*#*#$  B)#*#*#*$   C)*#*#$   D)#*#*$
  答案:C
  评析:当i不可以整除2时打印"*",然后打印"拌",整除2则continue,跳过printf("#"):语句,结束本次循环,返回到循环的起始点。当循环结束后,打印"$"。
  
  (46)库函数strcpy用以复制字符串,若有定义和语句:
  char strl[]="china",str2,*str3,*str4="china";
  则对库函数strcpy的的调用是_________。
  A)strcpy(strl,"people");  B)strcpy(str2,"people");
  C)strcpy(str3,"people");  D)strcpy(str4,"people");
  答案:B
  评析:strcpy(字符数组1,字符串2)其作用是将字符串2复制到字符数组l中去。
  注:(1)字符数组l定义得足够大;(2)"字符数组1"写成数组名的; (3)复制时连同字符串后面的'\0'一起复制到字符数组1中。
  
  (47)有程序
  #include<stdio.h>
  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);
  default:putchar(c+2);break;}
  }
  }
  从列开始输入数据,↙代表回车符。
  2473↙
  程序的输出结果是_________。
  A)668977   B)668966   C)66778777    D)6688766
  答案:A
  评析:getchar()函数是从键盘字符输入;当用户键入的字符回车符时,会多分支选择语句,C-'2'的值分支选择;putchar()是在屏幕上打印字符,最后的结果应当为668977。
  
  (48)下面程序的输出结果是_________。
  Union un
  { int a
  long b:
  char c;}
  main()
  {
  union un u:
  printf("%d%d",sizeof(u),sizeof(u.a));
  }
  A)82  B)88  C)188  D)182
  答案:B
  评析:sizeof函数计算已知类型所占的字节数。共用体变量所占的内存长度等于最长的的长度。
  
  (49)程序的输出结果是________。
  main()
  { int w=5;fun(w);printf("\n");}
  fun(int k)
  { if(k>0) fun(k-1);
  printf("%d.t,k);
  }
  A)5 4 3 2 l    B)0 1 2 3 4 5
  C)l 2 3 4 5    D)5 4 3 2 l 0
  答案:B
  评析:函数的递归调用在调用函数的过程中又直接或间接地调用该函数本身。fun函数共被调用6次,即fun(5)、fun(4)、fun(3)、fun(2)、向n(1)、fun(0)。fun(5)是main函数调用的。
  
  (50)若巾是指向某文件的指针,且已读到此文件的末尾,则函数feof(f1))的返回值是
  A)EOF  B)O  C)非零值  D)NULL
  答案:C
  评析:函数feof是用来判断文件已读到末尾,已读到末尾则返回非零值,否则返回O。
  
  二、填空题(每空2分,共40分)
  请将每空的答案写在答题卡的【1】至【20】序号的横线上,答在试卷上  分。
  (1)算法的度主要包括度和 【1】 度。
  答案:【1】空间
  评析:习惯上常常把语句重复的次数算法运行量度,称作算法的度。算法在运行过程中需辅助存储空间的大小称为算法的空间度。
  
  (2)数据的物理结构在计算机存储空间中的存放称为数据的 【2】 。
  答案:【2】内模式或物理模式或存储模式
  评析:数据库内模式,它是数据物理结构和存储的描述,是数据库内部的表示方法。例如,记录的存储是顺序存储、索引组织;数据压缩存储,加密等。
  
  (3)若按功能划分,软件测试的方法通常分为 【3】 测试方法和黑盒测试方法。
  答案:【3】白盒
  评析:软件测试的方法有三种:测试、静态测试和性证明。设计测试实例的方法有两类:黑盒测试方法和自盒测试方法。
  
  (4)数据库三级模式体系结构的划分,有利于数据库的 【4】 。
  答案:【4】数据独立性
  评析:数据库的三级模式体系结构把数据的组织管理工作了划分,把数据的组织留给DBMS管理,使用户能逻辑地、抽象地数据,而不必数据在计算机中的表示与存储了数据的独立性。
  
  (5)在关系运算中,查找条件的元组的运算称之为 【5】 。
  答案:【5】选择
  评析:在关系数据库中,选择运算元运算,关系R选择运算(并由该运算给出所选择的逻辑条件)后仍为关系。关系是由R中的那些逻辑条件的元组所组成。
  
  (6)在C语言中(以16位PC机为例),float型数据在内存中所占的字节数为4;double型数据在内存中所占的字节数为 【6】 。
  答案:【6】8
  评析:在16位PC机中,float型数据在内存中占4个字节(32位),double型数据占8个字节。
  
  (7)设有变量定义,并已赋的值,
  char w;int x;float y;double z;
  则表达式:w*x+z-y所求得的数据类型为 【7】 。
  答案:【7】double型或双精度型
  评析:①先W*X的运算,先将字符型w转换成整型,运算结果为整型;②再将W*X的结果与z相加,要先将步的整型转换为double型,运算结果为double型;③最后将W*X+Z的结果与y相减,要先将float型y转换成double型,结果为double型。
  
  (8)若运行时给变量x输入12,则程序的运行结果是 【8】 ;
  main(){
  int,y;
  scanf(""%d"",&X);
  y=x>12?x+lO:x-12;
  printf(""%d\n"",y);
  }
  答案:【8】0
  评析:三目运算符的为(表达式1)7(表达式2):(表达式3)。当(表达式1)值为真时,返回(表达式2)的值;为假时,返回(表达式3)的值。题中x>t2为假,结果为x-12,即为0。
  
  (9)四条语句:x++;、++x;、x=x+l;、x=l+x;,后都使变量x中的值增l,请写出一条同一功能的赋值语句(与列举的相同) 【9】 。
  答案:【9】x+=1:
  评析:题面中的四条语句的作用是使x的值加1,在c中有多种方法可以对变量加1操作,这里可以C的复合赋值运算符+=,本题答案为x+=1:。
  
  (10)设有定义和语句,则*(*(p+2)+1)的值为 【10】 。
  int={10,20,30,40,50,60},(*p)
  p=a;
  答案:【10】60
  评析:本题定义了3行2列的二维数组a,并定义了指向两个元素的一维数组指针p,让p指向二维数组a的首行。*(*(p+2)+1)是引用a,其值是60。
  
  (11)若要使指针p指向double类型的存储单元,请填空。
  p= 【11】 malloc(sizeof(double));
  答案:【11】(double*)
  评析:函数malloc返回的是void*,若要使指针指向double类型,则类型转换,类型转换格式为:(数据类型*)。
  
  (12)下面程序的功能:输出100以内能被3整除且个位数为6的所有整数,请补充完整。
  main().
  { int ij;
  for(i=O; 【12】 ;i++)
  { j=I*10+6;
  if( 【13】 )continue;
  printf("%d",j);
  }
  }
  答案:【12】i<lO
  【13】j%3!=0
  评析:本题要求输出100以内能被3整除且个位数为6的所有整数,程序中j=i*10+6;语句是求个位数为6的整数,由此可得出程序的循环次数为i<lO。然后if语句判断整数能被3整除,若下一次循环,若能则输出该整数,逻辑表达式为i%3 1=00
  
  (13)函数mycmp(char*s,char。t)的功能是字符串s和t的大小,当s等于t时返回0,
  当s>t返回正值,当s<t时返回负值。请填空。
  mycmp(char*s,char*t)
  { while(*s==*t)
  { if(*s=='\0')return 0;
  ++s;++t;
  }
  return( 【14】 );
  }
  答案:【14】*s-*t或-*t+*s
  评析:函数的两个形参是两个字符指针变量,字符串的首地址是指针变量的值,*s和*t表示字符串数组s和t的个字符,在while循环中,是s和t值的指针所指向的字符,要s和t所指不同字符的ASCII码的差值,使用"*s-*t"得出。
  
  (14)程序运行后的输出结果是 【15】 。
  void fun(、)
  {
  static int a=0:
  a+=2;printf("%d",a);
  }
  main()
  { int cc;
  for(CC=1;cc<4;cc++)fun();
  printf("\n");
  }
  答案:【15】2 4 6
  评析:static声明的外部变量只限于被本文件引用,而文件引用。用static来声明变量的作用有:①对局部变量用static声明,则为该变量分配的空间在整个程序期间;②变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。
  
  (15)下列程序的运行结果是 【16】 。
  main()
  { union EXAMPLE
  { struct
  {int x;int y;}in;
  int a;
  int b:
  }e;
  e.a=1;e.b=2;
  e.in.x=e.a*e.b;
  e.in.y=e.a+e.b;
  printf("%d,%d\n",e.in.x,e.in.y);
  }
  答案:【16】4,8
  评析:c语言规定,共用体中各个变量在内存中占用同一段内存单元,即e.in.x和e.a、e.b占用同一段内存单元,e.in.x和e.a、e.b占用的是同一段内存单元,程序最后的打印结果为"4,8"。
  
  (16)在对文件操作的过程中,若要求文件的位置回到文件的开头,应当调用的函数  是 【17】 函数。
  答案:【17】[NNlrewind或fseek
  评析:在对文件操作的过程中,若要求文件的位置回到文件的开头,可以调用rewind或fseek函数。rewind函数的作用是将位置指针重新返回文件的开头,而fseek函数可以文件指针的定位。
  
  (17)函数用于求出2×4矩阵中的最大元素值。
  max_value(arr)
  int arr[]
  {
  int I,J,max;
  max=alT[0][0];
  for(i=0;i<2;i++)
  for(j=0; 【18】 ;J++)
  if( 【19】 >max)max=[2Q];
  return(max);
  }
  答案:【18】j<4
  【19】arr[i][j]
  【20】arr[i][j]
  评析:2*4矩阵二维数组,本题应为arr个循环中应当填写"4";个横线处是要判断当前的数组元素值大于max,应填写arr[i][j];个横线处是要将当前大于max的数组元素的值赋给变量max,应当填写"arr[i][il"。 --下载<<05年9月等级考试二级C语言考前密卷2(二)>>Word文档 ,本文由东星资源网收集,版权归原作者所有
文章录入:admin    责任编辑:admin 
  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    相关历年试题 最新热点 最新推荐
    名师指点:历年考研数学重点…
    迈入六月天 2010考研大纲出来…
    我的暑期我做主:2010考研数…
    2010年考研数学线性代数解题…
    专家指导:2010年考研数学命…
    2010年考研数学指导:掌握学…
    名师指点:搜索2010考研数学…
    六月备考:为你量身定制2010…
    2010年考研数学复习名师忠言…
    我的暑期我做主:成就2010年…
      各类考试导航:
    英语四六级考试试题   英语作文   技巧心得   复习指南
    公务员考试最新资讯   申论试题   行政职业能力   公务员面试试题   专业科目试题   公共科目试题   考试攻略   时事政治
    成人高考语文复习   英语复习   史地复习   理化复习   数学(文)   数学(理)   政治复习
    计算机等级考试最新动态   历年试题   政策说明   经验交流
    职称英语理工类   卫生类   综合类   经验交流
    商务英语
    护士执业考试临床护理   基础护理学   心理护理    中医护理
    考研资料工程硕士   MBA   法律硕士    在职研究生   同等学历   心得指南