您现在的位置: 中国IT实验室 >> 计算机等级考试 >> 考前密卷 >> 文章正文
05年9月等级考试二级C语言考前密卷2(三)

ChinaITLab收集整理  2005-9-7  保存本文  推荐给好友  QQ上看本站  收藏本站



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




 相关文章  热门文章
计算机等级考试三级网络复习资料总录
05年9月等级考试二级C语言考前上机密卷1
05年9月等级考试二级C语言考前上机密卷2
05年9月等级考试二级C语言考前密卷2(十一)
05年9月等级考试二级C语言考前密卷1(十一)
05年9月等级考试二级C语言考前密卷2(十)
05年9月等级考试二级C语言考前密卷1(十)
05年9月等级考试二级C语言考前密卷2(九)
05年9月等级考试二级C语言考前密卷1(九)
05年9月等级考试二级C语言考前密卷2(八)

 文章评论


认证培训
热门专题       more
相关下载
论坛新帖
博 客