c语言下列程序段的功能,2012年计算机等级二级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;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

for(j=0;j

for(k=0;k

for(m=0;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 

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

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

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值