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

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



  (28)以下程序的输出结果是_______。
  fun(int x,inty,int z)
  {z=x*x+y*y;}
  main()
  {
  int a=3l:
  fun(5,2,a);
  printf("%d",a);
  }
  A)0  B)29  C)3l  D)无定值
  答案:C
  评析:本题中,a的值并没有改变,因为传递到函数中的是变量值。
  
  (29)下列程序段的输出结果是__________。
  void fun(、int *x,int *y)
  {primf("%d%d",*x,*y);*x=3;*y=4;}
  main()
  {
  int x=l,y=2;
  fun(&y,&x);
  printf("%d%d",x,y);
  }
  A)2 1 4 3  B)1 2 l 2  C)l 2 3 4  D)2 1 l 2
  答案:A
  评析:本题中函数传递的是变量的地址,如果形参在函数中发生改变,相对应的实参也就有了改变。
  
  (30)对于下面的程序
  #include<stdio.h>
  #include<string.h>
  char*scmp(char*s1,char*s2)
  {
  if(strcmp(sl,s2)<0)retum(s1);
  else return(s2);
  }
  main()
  {
  int i;char string[20],str[3][20];
  for(I=0;i<3;i++)gets(str[i]);
  strcpy(string,scmp(str[0],str[1]));
  strcpy(string,scmp(string,str[2]));
  printf("%s\n",string);
  }
  若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为________。
  A)abcd  B)abba  C)abc  D)abca
  答案:B
  评析:本题自定义函数semp()的作用是比较字符串s1和s2的大小,如果sl<s2,函数返回s1的值,否则返回s2的值。若运行时依次输入abed、abba和abe三个字符串,执行strcpy(string,scmp(str[O],str[1]));后,string的值为abba,再执行strepy(string,scmp(string,str[2]));,由于scmp(string,str[2])返回string的值
  abba,再拷贝到字符串数组string中,所以本题输出abba。
  
  (31)下列程序的输出结果是__________。
  main()
  {
  char a[10]={9,8,7,6,5,4,3,2,1,O},*p=a+5;
  print"%d*--p);
  }
  A)非法  B)a[4]的地址  C)5  D)3
  答案:C
  评析:本题中char*p=a+5;即相当于p=&a[5],而--p,是先要减1,则printf语句要输出的值就是a[4]。
  
  (32)对下面的程序进行编译与连接生成可执行文件c.exe,并在DOS命令提示符下输入:
  c I said"I love China"!
  程序代码如下:
  main(、int argc,char*argv[])
  {
  printf("%d",argC);
  }
  其输出结果为________。
  A)4  B)5  C)6  D)7
  答案:B
  评析:带参数的main()函数常用形式为:main(int argc,ehar*argv[])
  其中,参数的个数由C程序运行时自动计算出来。字符型指针数组argv的第一个元素存放命令名,其后各个元素依次存放命令行中各个参数的首地址;整型变量arge用来记录命令行中的参数个数,文件名也作为一个参数,对于命令行中双引号内的字符串,即使有空格分开,也只算是一个参数,同时双引号本身不算参数的内容,因此本题argc的值等于5
  
  (33)下列程序的运行结果是________。
  void fun(int *a,int *b)
  {
  int *k:
  k=a;a-b;b=k;
  }
  main()
  {
  int a=3,b=6,*x=&a,*y=&b;
  fun(x,y);
  printf["%d%d.f,a,b);
  }
  A)6 3  B)3 6  C)编译出错  D)0 0
  答案:B
  评析:本题中主函数里的x、y,fun函数里的a、b、k,这些都是指针,fun函数中只是将a、b这两个指针交换了位置,而并没有改变主函数中变量a、b的值。
  
  (34)若有定义:int*p[3];,则以下叙述中正确的是________。
  A)定义了一个基类型为int的指针变量p,该变量有三个指针
  B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
  C)定义了一个名为+p的整型数组,该数组含有三个int类型元素
  D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
  答案:B
  评析:由于运算符[]优先级比*高,int*p[3];相当于int *(p[3]);表示数组p的三个元素都是指针变量,且每个元素都是基类型为int的指针。
  
  (35)有以下程序:
  void swapl(int *a,int *b)
  {int *c=a;
  a=b,b=c;
  }
  void swap2(int *a,int *b)
  {
  int c=*a:
  *a=*b,*b=c;
  }
  main()
  (int a=lO,b=15;
  swapl(&a,&b);
  printf("%d,%d,",a,b);
  a=lO,b=15;
  swap2(&a,&b);
  printf("%d,%dt.,a,b);
  }
  其输出结果为_________。
  A)15,10,10,15  B)15,10,15,10  C)10,15,10,15  D)10,15,15,10
  答案:D
  评析:C语言规定,实参变量对形参变量的数据传递是"值传递",只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swapl()函数中,虽然改变了形参指针的值,但实参指针的值并没有改变,所以执行第一个printf后应输出10,15,;swap2()函数实现了交换两个变量a和b的值,因此执行第二个printf后输出交换后的值15,10,所以本题答案为D。
  
  (36)当调用函数时,实参是一个数组名,则向函数传送的是__________。
  A)数组的长度       B)数组的首地址
  C)数组每一个元素的地址  D)数组每个元素中的值
  答案:B
  评析:当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址,函数中的形参可定义成以下三种形式:
  ①形参定义成数组;
  ②形参定义成可变长数组;
  ③形参定义为指针变量。
  
  (37)下面的程序输出结果是________。
  #define r16
  #ifr==16
  void p(int a)
  {
  printf("%x",a);
  }
  #else
  voidp(int a)
  {
  printf("%d",a);
  }
  #endif
  main()
  {
  p(32);
  }
  A)32  B)20  C)编译时错误 D)运行时错误
  答案:B
  评析:"#define r16"的作用是指定用标识符r来代替16,因此程序编译时只编译#if部分,故程序运行时,打印输出十六进制的32,即20。
  
  (38)设有以下声明语句
  struct ex
  {  intx;floaty;char z;}example;
  则下面的叙述中不正确的是_________。
  A)struct是结构体类型的关键字  B)example是结构体类型名
  C)x,y,z都是结构体成员名    D)struct ex是结构体类型
  答案:B
  评析:example是结构体变量名。
  
  (39)以下只有在使用时才为该类型变量分配内存的存储类说明是_________。
  A)auto和stmic      B)auto和register
  C)register和static   D)extem和register
  答案:B
  评析:extem、register、static、auto分别是定义外部变量、寄存器变量、静态变量、自动变量,其中,自动变量和寄存器变量属于动态存储,调用时临时分配单元;而静态变量和外部变量属于静态存储,在整个程序运行时都存在。
  
  (40)下面程序运行后的输出结果是__________。
  fut(int**s,int p[2][3])
  {
  **s=p[l][1];
  }
  main()
  {
  int a[2][3]={1,3,5,7,9,1l},*p;
  p=(int*)malloc(sizeof(int));
  fut(&p,a);
  printf("%d\n",*p);
  }
  A)l  B)7  C)9  D)ll
  答案:C
  评析:本题a[2][3]定义为一个具有两行三列的元素的数组,malloc()函数的作用是开辟了一个长度为sizeof(int)的内存区,p为指向整型数据的指针变量,程序调用fur()函数,将第一行第一列对应的元素值赋给一s,由于数组中第一行第一列对应的元素为9,所以本题输出值9。
  
  (41)以下程序的输出结果是_________。
  main()
  {
  inti,k,a[10],p[3];
  k=5;
  for(I=O;i<10;i++)a[i]=i;
  for(i=0;i<3;i++)p[i]=a[I*(i+1)];
  fbr(i=O;i<3;i++)k+=p[I]*2;
  printf("%d\n",k);
  }
  A)20  B)2l  C)22  D)23
  答案:B
  评析:按照程序的流程走一遍,可以得到,p[O]=0,p[1]=2,p[3]=6;执行三次k+=p[i]*2,相当于k=5+0*2+2*2+6*2=21
  
  (42)当执行下面的程序时,其输出结果为__________。
  union st
  {
  int a:
  charb:
  }
  main()
  {
  union st s:
  char*p=(char*)&s;
  s.a=Ox3132;
  s.b=Ox33;
  printf("%c",*p);
  }
  A)l  B)2  C)3  D)不确定
  答案:C
  评析:共用体类型结构的特点是使几个不同的变量共占同一段内存,但在每一瞬时只能存放其中一种,而不是同时存放几种,共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。因此本题起作用的是成员b的值,所以程序打印输出3。
  
  (43)当执行下面的程序时,如果输入ABc,则输出结果是________。
  #include"stdio.h"
  #include"string.H"
  main()
  { char ss[10]="12345";
  gets(ss);strcat(ss,"6789");
  printf("%s\n",ss);
  }
  A)ABC6789 




 相关文章  热门文章
计算机等级考试三级网络复习资料总录
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
相关下载
论坛新帖
博 客