2011年计算机等级二级C语言章节习题及答案(10)
第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;ireturn 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
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;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
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
二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)
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;i
{ 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;
}
正确答案: q
max 正确答案: *q 10.31b 设有以下定义和语句,则*(*(p+2)+1)的值为 【9b】 。 10.33b 下面程序段的功能是:从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。请填空。 编辑推荐: 一、2010年全国计算机二级C语言考试题型分析 二、2010年全国计算机二级C语言考试教材及出题比例 三、2010年全国计算机二级C语言考试教材各章的特点及学习方法 四、2010年全国计算机二级C语言考试答题策略及技巧 五、2010全国计算机等级考试二级C编程时常犯的错误 六、2010年全国计算机二级C语言考试就业方向和就业前景
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
#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;i
{ 【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;相关阅读