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

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



  (27)有以下程序段:
  int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
  b=p[5];
  b中的值是______。
  A)5       B)6         C)8         D)9
  答案:D
  评析:数组a各元素a[O]~a[9]的值依次为1~10;在程序的说明部分,指针变量p初始化为&a[3](即a+3),则p[5]相当于·(p+5),相当于a[8],所以执行语句b=p[5];后,b的值为9。
  
  (28)在C语言中,形参的缺省存储类是______。
  A)auto     B)register      C)static      D)extern
  答案:A
  评析:程序进行编译时,并不为形式参数分配存储穿间。只有在被调用时,形式参数才临时地占有存储空间。形式参数用关键字auto作存储类别的声明时,关键字"auto"可以省略,auto不写则隐含确定为"自动存储类别",它属于动态存储方式。
  
  (29)有以下定义:
  #include<stdio.h>
  char a[10],*b=a;
  不能给数组a输入字符串的语句是______。
  A)gets(a);  B)gets(a[0]);  C)gets(&a[0]); D)gets(b);
  答案:B
  评析:函数gets的格式为:gets(字符数组名)
  c语言中,字符数组名代表数组的首元素地址,即&a[O],字符指针变量lb值也为数组a的首地址,选项A、c、D均能给数组a输入字符串。选项B中a[O]为数组元素,是一个数据变量。
  
  (30)若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是 ______.
  A)p=2*(int*)malloc(sizeof(int));  B)p=(int*)malloc(2*sizeof(int))
  C)p=(int*)malloc(2*2)        D)p=(int*)calloc(2,sizeof(int))
  答案:A
  评析:malloe函数的作用是在内存开辟指定大小的存储空问,并将此存储空间的地址作为函数值带回,它的原型为void。malloe(unsigned int size),函数值为指针,这个指针是指向void类型。如果要将此返回地址赋给一个指向特定类型的指针变量,则应进行强制类型转换。
  calloc函数的模型是:void*calloc(unsigned int num,unsigned int size)作用是分配num个大小为size字节的空间。
  
  (31)下面程序段的输出结果是______ 。
  main()
  {
  char strl [10]={'s','t','u','d','e','n','t'};
  printf("%d\n",strlen(strl));
  }
  A)7       B)8         C)10        D)存在语法错误
  答案:A
  评析:strlen()函数得到字符串的长度,返回值为数值型。字符数组初始化,若提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符。
  
  (32)以下程序的输出结果是______。
  main()
  {int x=040;
  printf("%o\n",x<<1);
  }
  A)100      B)80        C)64         D)32
  答案:A
  评析:040用二进制表示就是00100000,左移一位,得到的值应该是01000000,化成八进制应该是0100。
  
  (33)下面程序运行后的输出结果是______。
  main()
  {
  char arr[2][4];
  strcpy(arr[0],"you");strcpy(arr[1],"me");
  arr[0][3]='&';
  print"%s\n",arr[0]);
  }
  A)you&me    B)you        C)me         D)err
  答案:A
  评析:在主函数中定义了一个2*4的二维字符数组,执行strcpy(arr[O]"fIyou");后,arr[0]={'y''o','u','\0'},执行strcpy(arr[1],"me");后arr[1]={ 'm', 'e','\0',不定},当执行完arr[O][3];'&';从arr[O]开始的存储空间中的字符依次是'y','o','u','&','m','e','\0',故执行printf("%s\n",arr[O]);后的输出结果为"you&me",选A。
  
  (34)若要打开A盘上的user子目录下名为abc.txt的文本文件进行读、写操作,下面符合  此要求的函数调用是______。
  A)fopen("A:\user\abc.txt","r")   B)fopen("A:\\user\\abc.txt","r+")
  C)fopen("A:\user\abc.txt","rb")   D)fopen("A:\\user\\abc.txt","w")
  答案:B
  评析:本题考查点是fopen函数中文件使用方式的指定。
  文件使用方式"r",表示以"只读"方式打开一个字符文件。
  文件使用方式"r+",表示以"读写"方式打开一个字符文件。
  文件使用方式""rb",表示以"只读"方式打开一个二进制文件。
  文件使用方式"w",表示以"只写"方式打开一个字符文件。
  
  (35)以下不能正确进行字符串赋初值的语句为______。
  A)char str[5]= "good! "     B)char str[]="good! "
  C)char *str="good! "       D)char str[5]={'g','0','o','d'}
  答案:A
  评析:用字符串作初值为字符数组赋值时,系统总会自动在字符串的末尾补上一个"\O",如选项A中定义的话,把第6个字符也就是"\0"赋给str数组,但此数组只含5个元素,而放到了s仃数组之后的存储单元中,这就可能会破坏其它数据区或程序本身。
  
  (36)有以下程序:
  #include<string.h>
  main(int argc,char*argv[])
  {
  int i,len=O;
  for(i=1;i<argc;i+=2)len+=strlen(argv[i]);
  Print("%d\n",len);
  }
  经编译连接后生成可执行文件ex.exe,若运行时输入以下带参数的命令行
  ex abcd efg h3 k44
  运行后输出结果是______。
  A)14      B)12         C)8         D)6
  答案:C
  评析:main函数的第一个参数argc是int型变量,用来统计命令行中的字符串个数,本题输入带参数的命令行"ex abed efg h3 k44<回车>",argc的值是5;第二个参数是字符型指针数组,长度由argc的值决定,每个数组元素存放一个指向字符串数据的指针。for语句将命令行中两个字符串abed和h3的长度进行累加,放在变量len中。
  
  (37)若有下面的说明和定义:
  struct test
  { int ml;char m2;float m3;
  union uu{char ul[5];int u2[2];}ua;
  }myaa;
  则sizeof(stuct test)的值是______。
  A)12      B)16          C)14       D)9
  答案:A
  评析:在定义了结构体变量后,系统会为之分配内存单元,在内存中一个整型占2个字节,一个字符占1个字节,一个数组元素占1个字节,一个浮点型占4个字节。结构体变量所占内存长度是各成员占的内存长度之和;而共用体变量所占的内存长度等于最长的成员的长度。所以test在内存中占12个字节(2+l+4+5=12)。
  
  (38)若有定义:int aa[8];,则以下誊达式中不能代表数组元素aa[1]的地址的是______。
  A)&aa[0]+l   B)&aa[1]      C)aa[0]++    D)aa+1
  答案:C
  评析:答案A中&aa[0]表示aa[0]的地址,加上1就是aa[1]的地址。同样aa[1]的地址也可以直接用&aa[1]或aa+l表示。
  
  (39)下面叙述中正确的是______。
  A)全局变量的作用域一定比局部变量的作用域范围大
  B)静态类别变量的生存期贯穿于整个程序的运行期间
  C)函数的形参都属于全局变量
  D)未在定义语句中赋值的auto变量和static变量的初值都是随机值
  答案:B
  评析:c语言中,全局变量的作用范围是从定义处到程序结束,因此全局变量的定义点直接影响其作用范围,因此选项A错误。静态(statiC)存储类别变量是在程序编译时分配存储空间,该类别变量在整个程序运行期间占据着固定的存储单元,当多次调用其所在的函数时,该类别变量的值为上一次调用的值,直至整个程序结束运行后才释放该变量所占存储单元。因此选项B正确,选项D错误。c语言规定:函数的形参是auto型局部变量,因此选项c错误。
  
  (40)以下程序的输出结果是______ 。
  f(int b[],int m,int n)
  {jnt i,s=0;
  for(i=m;i<n;i=i+2)s=s+b[i];
  return s;
  )
  main()
  {int x,a[]:{1,2,3,4,5,6,7,8,9};
  x=f(a,3,7);
  printf("%d\n",x);
  )
  A)10      B)18         C)8         D)15
  答案:A
  评析:本题中,主函数调用f函数,在f函数中执行了两次循环,第一次i=3,s=0+b[i]:4,然后i的值被修改成5,仍然满足循环条件,进入第二轮循环,s=4+b[5]=4+6=10,随后,i的值被修改成7,不再满足循环条件,退出循环,返回s的值。所以最后输出结果是10。
  
  (41)若有以下定义和语句:
  int s[4][5],(*ps)[5];
  ps=s;
  则对s数组元素的正确引用形式是______ 。
  A)ps+l       B)*(ps+3)     C)ps[0][2]    D)*(ps+1)+3
  答案:C
  评析:选项A得到的是s数组第一行的地址,选项B得到的是s数组第三行第零列元素的地址,而选项D得到的是s数组第一行第三列元素的地址。只有选项c正确引用了ps数组第零行第二列的元素。
  
  (42)以下程序的输出结果是______。
  main()
  {int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
  for(i=0;i<3;i++)
  fbr(j=I;J<=I;J++)t=t+b[i][b[j][j]];
  printf("%d\n",t);
  }
  A)3       B)4          C)l         D)9
  答案:B
  评析:`两个循环语句嵌套使用,在第一次外循环中,i=0,执行内循环时,将j赋值为i的值O,执行一次t=t+b[i][b[j][j]],得到t




 相关文章  热门文章
计算机等级考试三级网络复习资料总录
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语言考前密卷1(八)

 文章评论


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