当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机等级二级C语言章节习题及答案(10)
发布时间:2010/11/7 23:39:13 来源:城市学习网 编辑:ziteng
  第10章 指针
  同步练习二
  一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)
  10.1b 下列关于指针变量赋空值的说法错误的是
  A)当赋空值的时候,变量指向地址为0的存储单元
  B)赋值语句可以表达为变量名=′\0′;
  C)赋值语句可以表达为变量名=0;
  D)一个指针变量可以被赋空值
  考生答案: 正确答案: A
  10.2b 下面函数的功能是
  char *fun(char *str1,char*str2)
  { while((*str1)&&(*str2++=*str1++));
  return str2;
  }
  A)求字符串的长度 B)比较两个字符串的大小
  C)将字符串str1复制到字符串str2中 D)将字符串str1接续到字符串str2中
  考生答案: 正确答案: C
  10.3b 下面程序段中,输出*的个数是
  char *s="\ta\018bc";
  for(;*s!=′\0′;s++)printf("*");
  A)9
  B)5
  C)6
  D)7
  考生答案: 正确答案: C
  10.4b 下列程序是用来判断数组中特定元素的位置所在。如果输入如下整数:
  876 675 896 101 301 401 980 431 451 777
  #include
  #include
  int fun(int *s, int t, int *k)
  { int i;
  *k=0;
  for(i=0;iif(s[*k]return s[*k];
  }
  main()
  { int a[10]={ 876,675,896,101,301,401,980,431,451,777},k;
  clrscr();
  fun(a, 10, &k);
  printf("%d, %d\n ", k, a[k]);
  }
  则输出结果为
  A)7,431
  B)6
  C)980
  D)6,980
  正确答案: D
  10.5b 有以下程序
  #include
  main()
  { char *p,*q;
  p=(char *)malloc(sizeof(char)*20); q=p;
  scanf("%s %s",p,q); printf("%s %s\n",p,q);
  }
  若从键盘输入:abc def<回车>,则输出结果是
  A)def def
  B)abc def
  C)abc d
  D)d d
  考生答案: 正确答案: A
  10.6b 有以下程序
  #include
  main()
  { char *p="abcde\0fghjik\0 ";
  printf("%d\n ",strlen(p));
  }
  程序运行后的输出结果是
  A)12
  B)15
  C)6
  D)5
  考生答案: 正确答案: D
  10.7b 已知char **t;则变量t是
  A)指向char变量的指针
  B)指向指针的char变量
  C)指向指针的指针
  D)以上说法都不对
  考生答案: 正确答案: C
  10.8b 阅读下面程序,执行后的结果为
  #include "stdio.h"
  void fun(int *a,int *b)
  { int k;
  k=5;
  *a=k;
  *b=*a+k;}
  main()
  { int *a,*b,x=10,y=15;
  a=&x;
  b=&y;
  fun(a,b);
  printf("%d,%d\n",*a,*b);
  }
  A)10,15
  B)5,15
  C)5,10
  D)15,10
  考生答案: 正确答案: C
  10.9b 阅读下面程序,在程序执行后的结果为
  #include "stdio.h"
  int *fun(int *a,int *b)
  { int m;
  m=*a;
  m+=*b-3;
  return(&m);
  }
  main()
  { int x=21,y=35,*a=&x,*b=&y;
  int *k;
  k=fun(a,b);
  printf("%d\n",*k);
  }
  A)53
  B)21
  C)35
  D)14
  考生答案: 正确答案: A
  10.10b 阅读下列程序,则执行后的结果为
  #include "stdio.h"
  main()
  { int c[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};
  printf("%x,%x\n",c[2][2],*(*(c+1)+1));
  }
  A)3e,6 B)62,5 C)56,5 D)3E,6
  考生答案: 正确答案: A [NextPage]   10.11b 下面程序的文件名为t.exe,在DOS下输入的命令行参数如下:t to meet me<回车>
  则程序输出的结果是
  #include "stdio.h"
  main(argc,argv)
  int argc;char *argv[];
  { int i;
  printf("%d\n",argc);
  }
  A)3
  B)4
  C)2
  D)以上答案都不正确
  考生答案: 正确答案: B
  10.12b 现有如下程序段
  #include "stdio.h"
  int *fun(int *a,int *b)
  { int c;
  c=*a%*b;
  return &c;
  }
  main()
  { int a=5,b=19,*c;
  c=fun(&a,&b);
  printf("%d\n",++*c);
  }
  则程序段执行后的结果为
  A)8
  B)7
  C)6
  D)5
  考生答案: 正确答案: C
  10.13b 现有int a,*b;,b=&a;,则下列运算错误的是
  A)*&a
  B)&*a
  C)*&b
  D)&*b
  考生答案: 正确答案: B
  10.14b 现有如下定义语句
  int*p,s[20],i;
  p=s;
  表示数组元素s[i]的表达式不正确的是
  A)*(s+i)
  B)*(p+i)
  C)*(s=s+i)
  D)*(p=p+i)
  考生答案: 正确答案: C
  10.15b 阅读如下程序段,这个程序在编译的时候会有一个警告,下列关于这个警告叙述正确的是
  #include "stdio.h"
  #define N 10
  int *fun(int a[N],int n)
  { int i,b[N];
  for(i=0;ib[i]=a[i];
  return(b);
  }
  main()
  { int a[N]={12,34,45,5,6,34,4,655,2};
  int *k;
  k=fun(a[N],5);
  printf("%d\n",*k);
  }
  A)指针k没有指向任何对象而成为“无向指针”,所以这里会产生警告
  B)return语句不应该有括号,所以在这里会有警告
  C)return语句的返回值类型与指针k的基类型不一致,这里会产生警告
  D)数组赋值的时候没有把数组全部都赋初值,所以在这里会有警告
  考生答案: 正确答案: A
  10.16b 现有如下程序段
  #include "stdio.h"
  main()
  { int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};
  int i=0,j=5;
  printf("%d\n",*(&a[0][0]+2*i+j-2));
  }
  则程序的输出结果为
  A)21
  B)78
  C)23
  D)28
  考生答案: 正确答案: A
  10.17b 现有如下程序段
  #include "stdio.h"
  #include "string.h"
  main()
  { char a[]="acfijk"; /*这里是有序的字符序列*/
  char b[]="befijklqswz"; /*这里是有序的字符序列*/
  char c[80],*p;
  int i=0,j=0,k=0;
  while(a[i]!=′\0′ && b[j]!=′\0′)
  { if(a[i]else if(a[i]>b[j]) c[k++]=b[j++];
  else {c[k++]=b[j++]; i++; }
  }
  while(a[i]==′\0′ && b[j]!=′\0′)
  c[k++]=b[j++];
  while(a[i]!=′\0′ && b[j]==′\0′)
  c[k++]=a[i++];
  c[k]=′\0′;
  puts(c);
  }
  则输出结果是
  A)acfijkbefijklqswz
  B)abceffiijjkklqswz
  C)befijklqswz acfijk
  D)abcefijklqswz
  考生答案: 正确答案: D
  10.18b 阅读下面程序,则执行后输出的结果为
  #include "stdio.h"
  void fun(int *a,int *b)
  { int m;
  m=(*a+*b)*(*a+*b);
  m+=(*a-*b)*(*a-*b);
  printf("%d\n",m);}
  main()
  { int a=5,b=6,*x=&a,*y=&b;
  fun(x,y);
  }
  A)120
  B)121
  C)122
  D)123
  考生答案: 正确答案: C
  10.19b 阅读下面程序,则执行后的结果为
  #include "stdio.h"
  main()
  { char *str="abcdefghijklmnopq";
  while(*str++!=′e′);
  printf("%c\n",*str);
  }
  A)f
  B)a
  C)e
  D)q
  考生答案: 正确答案: A
  10.20b 现有如下程序段
  #include "stdio.h"
  int fun(int k,int *m)
  { if(k%3) *m=k*k;
  else *m=k/3;
  }
  main()
  { int (*p)(int,int *),m;
  p=fun;
  (*p)(78,&m);
  printf("%d\n",m);
  }
  则程序段的输出结果为
  A)24
  B)25
  C)26
  D)27
  考生答案: 正确答案: C
 [NextPage]   10.21b 阅读如下程序段,则执行后的结果为
  #include "stdio.h"
  main()
  { int a,*p,*q,**w;
  p=&a;
  q=&a;
  w=&p;
  *p=5%6;
  *q=5;
  **w=3;
  printf("%d\n",a);
  }
  A)无确定值
  B)1
  C)5
  D)3
  考生答案: 正确答案: D
  10.22b 现有定义int a=10,*p=&a;则不能使a的内容增1的语句是
  A)*p++;
  B)*p=*p+1;
  C)++*p;
  D)*p+=1;
  考生答案: 正确答案: A
  10.23b 现有下列程序段
  #include "stdio.h"
  void JFT(int *a,int *b,int *c,int *d,int *e)
  { int i,j,k,m;
  for(i=0;i<*a;i++)
  for(j=0;j<*b;j++)
  for(k=0;k<*c;k++)
  for(m=0;m<*d;m++)
  *e++;
  }
  main()
  { int a=10,b=10,c=10,d=10,e=0;
  JFT(&a,&b,&c,&d,&e);
  printf("%d\n",e);
  }
  则程序段的输出结果是
  A)10000
  B)1000
  C)10001
  D)0
  考生答案: 正确答案: D
  10.24b 阅读下面程序,则程序的输出结果为
  #include "stdio.h"
  main()
  { int c[]={1,2,3,4,5,6};
  int *p;
  p=c;
  printf("%d,",*p);
  printf("%d\n",*++p);
  }
  A)1,2
  B)2,1
  C)1,1
  D)2,2
  考生答案: 正确答案: A
  10.25b 有如下定义,则函数fun的首部可以是
  #define N 5
  #define M 6
  main()
  { doublec[M][N];
  fun(c);
  }
  A)fun(double a)
  B)fun(double a[M][])
  C)fun(double *a)
  D)fun(double (*a)[N])
  考生答案: 正确答案: D
 [NextPage]   二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)
  10.26b 设有以下定义和语句,则*(*(p+2)+1)的值为【1b】。
  int a[3][2]={10, 20, 30, 40, 50, 60}, (*p)[2];
  p=a;
  考生答案: 正确答案: 60
  10.27b 以下函数用来在w数组中插入x。n所指向的存储单元中存放w数组中字符个数。数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序。请填空。
  void fun(char *w, char x, int *n)
  { int i, p;
  p=0;
  w[*n]= x;
  while(x > w[p]) p++;
  for(i=*n; i>p; i--) w[i]=【2b】;
  w[p]=x;
  ++*n;
  }
  考生答案: 正确答案: w[i-1]
  10.28b 以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。
  #define N 3
  #define M 3
  select(int a[N][M],int *n)
  { int i,j,row=1,colum=1;
  for(i=0;ifor(j=0;jif(a[i][j]>a[row][colum])
  { row=i;colum=j; }
  *n= 【3b】 ;
  return 【4b】 ;
  }
  main()
  { int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;
  max=select(a,&n);
  printf("max=%d,line=%d\n",max,n);
  }
  正确答案: row 正确答案: a[row][colum]
  10.29b 函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s > t时返回正值,当s < t时返回负值。请填空。
  my_cmp(char *s, char *t)
  { while (*s == *t)
  { if (*s == ′\0′) return 0;
  ++s; ++t;
  }
  return 【5b】 ;
  }
  考生答案: 正确答案: *s-*t
  10.30b 下面的程序实现的是指针p所指向的地址的n个数中,求出最大的和最小的数据,请填空。
  fun(int *p,int n)
  { int *q;
  int max,min;
  max=min=*p;
  for(q=p; 【6b】 ;q++)
  if( 【7b】 ) max=*q;
  else if( 【8b】 ) min=*q;
  }
  正确答案: qmax 正确答案: *q
  10.31b 设有以下定义和语句,则*(*(p+2)+1)的值为 【9b】 。
  int a[3][2]={10,20,30,40,50,60},(*p)[2];
  p=a;
  考生答案: 正确答案: 60
  10.32b 下面程序的功能是:对字符串从小到大进行排序并输出,请填空。
  #include "string.h"
  #include "stdio.h"
  sort(char *a[],int n)
  { int i,j;
  char *p;
  for(j=1;j<=n-1;j++)
  for(i=0; 【10b】 ;i++)
  if( 【11b】 >0)
  { p=a[i];
  a[i]=a[i+1];
  a[i+1]=p;
  }
  }
  main()
  { int i;
  char *book[]={"itisme","itisyou","howareyou","fine","goodnight","goodbye"};
  sort(【12b】 );
  for(i=0;i<6;i++)
  printf("%s\n",book[i]);
  }
  正确答案: i
  10.33b 下面程序段的功能是:从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。请填空。
  #include "stdio.h"
  fun(char *x,char *y,char *z)
  { char t,*p;
  p=z;
  while(*x!=′\0′&&*y!=′\0′)
  { t=*x<*y?*x++:*y<*x?*y++: 【13b】 ;
  if(*p==′\0′) *p=t;
  else if(t!=*p) *++p=t;
  }
  if(*x!=′\0′)
  while(*x!=′\0′)
  if(*x!=*p) *++p=*x++;
  else x++;
  if(*y!=′\0′)
  while(*y!=′\0′)
  if(*y!=*p) *++p=*y++;
  else y++;
  *++p= 【14b】 ;
  }
  sort(char *s)
  { int i,j,k;
  char t,*p;
  p=s;
  for(k=0;*p!=′\0′;k++) p++;
  for(i=0;ifor(j=i+1;jif(s[i]>s[j])
  { 【15b】 }
  }
  main()
  { char s1[100],s2[100],s3[200];
  scanf("%s",s1);
  scanf("%s",s2);
  sort(s1);
  sort(s2);
  s3[0]=′\0′;
  fun(s1,s2,s3);
  printf("%s\n",s3);
  }
  正确答案: (*x++,*y++) 正确答案: ′\0′ 正确答案: t=s[i];s[I]=s[j];s[j]=t;
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved