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

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



  (28)已定义以下函数:
  fun(char*p2,char*p1)
  {while((*p2=*p1)!='\0'){pl++;p2++;}}
  函数的功能是__________。
  A)将p1所指字符串复制到p2所指内存空间
  B)将pl所指字符串的地址赋给指针p2
  C)对p1和p2两个指针所指字符串进行比较
  D)检查p1和p2两个指针所指字符串中是否有'\O'
  答案:A
  评析:由于在while循环的条件中执行了*p2=*pl运算,其作用是将*pl中的内容复制到*p2中,而(*p2=*p1)!='\0'的作用是判断当前字符是否为字符串结束字符'\O'。在循环体中p1++,p2++的目的是移动字
  
  (29)有以下程序
  void fun(char*c,int d)
  {*c=*c+1;d=d+1;
  printf("%c,%c,",*c,d);
  }
  main()
  {char a:。A',b。'a';
  fun(&b,a);printf("%c,%c\n",a,b);
  )
  程序运行后的输出结果是_________。
  A)B,a,B,a  B)a,B,a,B  C)A,b,A,b  D)b,B,A,b
  答案:D
  评析:将a,b代入函数得+&b=。&b+1=a+l=b,所以打印出第一个字母b;
  a=a+l=A+l=B,打印出第二个字符B;
  a='A',输出字母A;
  b由于是按地址传到函数而被修改,为'b',输出字母b
  
  (30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。
  void sort(int a[],im n)
  {intiJ,t;
  for(i=O;i<n-1;i++)
  for=i+1 0<n0++)
  if(a[i]<aD)) {t=-a[I];a[I=a[j];a[j]=t;}
  }
  main()
  {int aa[10]:{1,2,3,4,5,6,7,8,9,10},i;
  sort(&aa[3],5);
  for(i=0;i<lO;i++)primf("%d,",aa[I]);
  printf("\n");
  )
  程序运行后的输出结果是________。
  A)l,2,3,4,5,6,7,8,9,10,  B)10,9,8,7,6,5,4,3,2,1,
  C)l,2,3,8,7,6,5,4,9,10,  D)l,2,10,9,8,7,6,5,4,3,
  答案:C
  评析:本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。
  
  (31)对于基类型相同的两个指针变量,不能进行的运算是________。
  A)<  B)=  C)+  D)
  答案:C
  评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意义的。
  
  (32)有以下程序
  main()
  {char a[]={'a','b','c','d','e','f','g','h','\O'};int I,J;
  i=sizeof(a); j=strlen(a);
  printf("%d,%d\n",I,J);
  }
  程序运行后的输出结果是________。
  A)9,9  B)8,9  C)1,8  D)9,8
  答案:D
  评析:sizeof()函数是计算字符数组的长度,因为'\0'也是一个字符,要计算在内。strlen()是计算字符串长度的函数,遇到'\0'即认为是字符串结束,不把空字符计入字符串的长度。
  
  (33)以下不能正确定义二维数组的选项是_________。
  A)int a[2][2]={{1},{2}}  B)int a[][2]={l,2,3,4}
  C)int a[2][2]={{l},2,3}  D)int a[2][]={{1,2},{3,4}}
  答案:D
  评析:在二维数组进行初始化时,可以省略数组的一个维度,但省略的维数只能是高维部分,不能是低维。对于多维数组的初始化时,也是同样处理,因此,本题答案应选D,其它选项均能对数组进行正确的初始化。
  
  (34)有一函数
  ┏  l x>O
  y=┨  O x=O
  ┗ -1 x<O
  以下程序段中不能根据x的值正确计算出y的值的是___________。
  A)if(x>O)y=l;else if(x==O)y=0;else y=-l;
  B)y=O;if(x>O)y=1;else if(x<O)y=-1;
  C)y=0;if(x>=0)if(x>O)y=1;else y=-l;
  D)if(x>=0)if(x>O)y=l;else y=O;else y=-1;
  答案:C
  评析:本题应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。
  
  (35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。
  void reverse(int a[],im n)
  {int i,t;
  for(i=O;i<n/2;i++)
  {t=a[i];a[i]=a[n-l-i];a[n-1-i]=t;}
  }
  main()
  {int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0;
  reverse(b,8);
  for(i=6;i<10;i++)s+=b[I];
  printf("%d\n",s);
  }
  程序运行后的输出结果是
  A)22  B)10  C)34  D)30
  答案:A
  评析:本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。
  
  (36)执行下面的程序段后,变量k的值为___________。
  int k=3,s[2];
  s[0]=k;k=s[1]*10;
  A)不确定  B)33  C)30  D)10
  答案:A
  评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元素的值都是不确定的,虽然在代码中对s[O]进行了赋值,但没有对s[1]进行赋值,故执行l(=s[1]+10;后,k的值不确定。
  
  (37)有以下程序
  #include<string.h>
  main()
  { char'p="abcde\0fghjik\O";
  printf("%d\n",strlen(p));
  }
  程序运行后的输出结果是__________。
  A)12  B)15  C)6  D)5
  答案:D
  评析:"\0"是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的长度为5。
  
  (38)程序中头文件t)rpel_h的内容是:
  #define N 5
  #define Ml N*3
  程序如下:
  #include"type 1.h"
  #define M2 N*2
  main()
  { int i;
  i=MI+M2;
  printf("%d\n",i);
  }
  程序编译后运行的输出结果是_________。
  A)lO  B)20  C)25  D)30
  答案:C
  评析:宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为:
  #define  标识符   字符串
  这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为"宏名"。
  
  (39)若有以下的程序段,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是________。
  int t[3][3],*pt[3],k;
  for(k=0;k<3;k++)pt[k]=&t[k][O];
  A)t[2][0]  B]t[2][2]  C]t[1][2]  D]t[2][1]
  答案:C
  评析:在题面中定义了一个二维数组l,及一个一维指针数组pt,在循环语句中分别对指针数组赋值为二维数组t的第k行首元素的地址。*(pt+1),表示的是数组pt中下标为1的元素的值,而该值为二维数组t的第l行(从第0行算起)的首元素的地址,故*(*(pt+1)+2)表示的是数组t中t[1][2]的元素的值。
  
  (40)以下叙述中错误的是_________。
  A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以
  B)在程序结束时,应当用fclose函数关闭已打开的文件
  C)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数  据
  D)不可以用FILE定义指向二进制文件的文件指针
  答案:D
  评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。
  
  (41)有以下程序
  #include<string.h>
  main(int argc,char *argv[])
  { inti,len=0;
  for(i=1;i<argc;i++)len+=strlen(argv[I]);
  printf("%d\n",len);
  )
  程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令行是:
  exl  abcd  efg  10↙
  则运行的结果是________。
  A)22  B)17  C)12  D)9
  答案:D
  评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv用来存放命令行中命令字和所有参数的字符串,并规定argv[0]存放命令字字符串exl,argv[1]用来存放第一个参数的字符串abcd,argv[21用来存放第二个参数的字符串e龟,argv[3]用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到len中,所以答案为9。
  
  (42)若有以下说明和定义:__________。
  fun(*C){…}
  main()
  {int(*a)()=fun,(*b)(),w[10],c;}
  在必要的赋值后,对fun函数调用正确的是_________。
  A)a=a(w);  B) (*a)(&C);  C)b=*b(w);  D)fun(b);
  答案:B
  评析:在主函数中定义了二个指向函数的指针a,b,其中指针a指向函数fun,指针b未初始化。对于选项A、c,其返回类型是错误的,对于D,其调用的参数是错误的,选项B是正确的,其相当于调用函数fhll(&C);。
  
  (43)有以下程序
  intfa(intx、
  {returnx*x;}
  int fb(intxl
  {returnX*X*x;}
  int f(int(*f1)(),int(*f2)(),int x)
  {return f2(x)-fl(x);)
  main()
  { int i;
  i=f(fa,fb,2);printf("%d\n",i);
  }
  程序运行后的输出结果是
  A) 4  B)1  C)4  D)8
  答案: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语言考前密卷1(九)
05年9月等级考试二级C语言考前密卷2(八)
05年9月等级考试二级C语言考前密卷1(八)

 文章评论


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