无忧首页企业系统我的无忧
无忧服务:
兼职活动培训
娱乐交友:
交友社区资讯
全职实习:
实习暑假寒假
微信号:school51
扫一下,立即关注
加关注
在线支付,立省10元
下载新版APP
===大学生成长生活平台===

2011年计算机等级二级C语言章节习题及答案(10)

2012-12-26来源/作者:卫凯点击次数:628

第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

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

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;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;

编辑推荐:

一、2010年全国计算机二级C语言考试题型分析

二、2010年全国计算机二级C语言考试教材及出题比例

三、2010年全国计算机二级C语言考试教材各章的特点及学习方法

四、2010年全国计算机二级C语言考试答题策略及技巧

五、2010全国计算机等级考试二级C编程时常犯的错误

六、2010年全国计算机二级C语言考试就业方向和就业前景





相关阅读



关于我们 | 联系我们 | 用户指南 | 网站地图 | 意见建议 | 会员注册 | 用户协议 | 隐私政策