c语言分章节试题及答案,2012年计算机等级二级C语言章节习题及答案(9)

第10章 指针

同步练习一

一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。)10.1 若有下面的程序段:

char s[]="china";char *p; p=s;

则下列叙述正确的是

A)s和p完全相同落千丈

B)数组s中的内容和指针变量p中的内容相等

C)s数组长度和p所指向的字符串长度相等

D)*p与s[0]相等

考生答案: 正确答案: D

10.2 若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是

A)a,point,*&a

B)&*a,&a,*point

C)*&point,*point,&a

D)&a,&*point,point

考生答案: 正确答案: D

10.3 下列程序执行后的输出结果是

void func(int *a,int b[])

{ b[0]=*a+6; }

main()

{ int a,b[5];

a=0; b[0]=3;

func(&a,b); printf("%d\n",b[0]);

}

A)6

B)7

C)8

D)9

考生答案: 正确答案: A

10.4 已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!=’\0’){p1++;p2++;}

}

函数的功能是

A)将p1所指字符串复制到p2所指内存空间

B)将p1所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有’\0’

考生答案: 正确答案: A

10.5 有以下程序

void ss(char *s,char t)

{ while(*s)

{ if(*s= =t)*s=t-’a’+’A’;

s++;

}

}

main()

{ char str1[100]="abcddfefdbd",c=’d’;

ss(str1,c);

printf("%s\n",str1);

}

程序运行后的输出结果是

A)ABCDDEFEDBD

B)abcDDfefDbD

C)abcAAfefAbA

D)Abcddfefdbd

考生答案: 正确答案: B

10.6 下面说明不正确的是

A)char a[10]="china";

B)char a[10],*p=a;p="china"

C)char *a;a="china";

D)char a[10],*p;p=a="china"

考生答案: 正确答案: D

10.7 设有定义:int n=0,*p=&n,**q=&p,则下列选项中正确的赋值语句是

A)p=1;

B)*q=2;

C)q=p;

D)*p=5;

考生答案: 正确答案: D

10.8 执行以下程序后,a,b的值分别为

main()

{ int a,b,k=4,m=6,*p1=&k,*p2=&m;

a=p1==&m;

b=(*p1)/(*p2)+7;

printf("a=%d\n",a);

printf("b=%d\n",b);

}

A)-1,5

B)1,6

C)0,7

D)4,10

考生答案: 正确答案: C

10.9 假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:

PROG ABCDEFGH IJKL,则输出结果为

main( int argc, char *argv[])

{ while(--argc>0)

printf("%s",argv[argc]);

printf("\n");

}

A)ABCDEFG

B)IJHL

C)ABCDEFGHIJKL

D)IJKLABCDEFGH

考生答案: 正确答案: D

10.10 以下程序有错,错误原因是

main()

{ int *p,i;char *q,ch;

p=&i;

q=&ch;

*p=40;

*p=*q;

......

}

A)p和q的类型不一致,不能执行*p=*q;语句

B)*p中存放的是地址值,因此不能执行*p=40;语句

C)q没有指向具体的存储单元,所以*q没有实际意义

D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以执行*p=*q;没有意义,可能会影响后面语句的执行结果

考生答案: 正确答案: D来源:-计算机二级考试

10.11 下面程序段的运行结果是

char a[]="lanuage",*p;

p=a;

while(*p!=′u′){printf("%c",*p-32);p++;}

A)LANGUAGE

B)language

C)LAN

D)langUAGE

考生答案: 正确答案: C

10.12 有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)

int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;

A)a[p-a]

B)*(&a[i])

C)p[i]

D)*(*(a+i))

考生答案: 正确答案: D

10.13 函数fun的返回值是

fun(char *a,char *b)

{ int num=0,n=0;

while(*(a+num)!=′\0′) num++;

while(b[n]) { *(a+num)=b[n]; num++;n++; }

return num;

}

A)字符串a的长度

B)字符串b的长度

C)字符串a和b的长度之差

D)字符串a 和b的长度之和

考生答案: 正确答案: D

10.14 下列程序的输出结果是

main()

{ int a[5]={2,4,6,8,10},*p,**k;

p=a;

k=&p;

printf("%d",*(p++));

printf("%d\n",**k);

}

A)4

B)22

C)24

D)46

考生答案: 正确答案: C

10.15 下面判断正确的是

A)char *a="china";等价于 char *a;*a="china";

B)char str[5]={"china"};等价于char str[]={"china"};

C)char *s="china";等价于 char *s;s="china";

D)char c[4]="abc",d[4]="abc";等价于char c[4]=d[4]="abc";

考生答案: 正确答案: C

10.16 以下定义中,标识符prt int(*prt)[3]

A)定义不含法

B)是一个指针数组名,每个元素都是一个指向整数变量的指针

C)是一个指针,它指向一个具有三个元素的一维数组

D)是一个指向整型变量的指针

考生答案: 正确答案: D

10.17 有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则数值为9的表达式是

A)*p+9

B)*(p+8)

C)*p+=9

D)p+8

考生答案: 正确答案: B

10.18 若有定义: char *st= "how are you "; 下列程序段中正确的是

A)char a[11], *p; strcpy(p=a+1,&st[4]);

B)char a[11]; strcpy(++a, st);

C)char a[11]; strcpy(a, st);

D)char a[], *p; strcpy(p=&a[1],st+2);

考生答案: 正确答案: A

10.19 下列程序的运行结果是

void fun(int *a, int *b)

{ int *k;

k=a; a=b; b=k;

}

main()

{ int a=3, b=6, *x=&a, *y=&b;

fun(x,y);

printf("%d %d", a, b);

}

A)6 3

B)3 6

C)编译出错

D)0 0

考生答案: 正确答案: B来源:-计算机二级考试

10.20 若有说明语句

char a[]="It is mine";

char *p="It is mine";

则以下不正确的叙述是

A)a+1表示的是字符t的地址

B)p指向另外的字符串时,字符串的长度不受限制

C)p变量中存放的地址值可以改变

D)a中只能存放10个字符

考生答案: 正确答案: D

10.21 以下程序的运行结果是

sub(int x,int y,int *z)

{ *z=y-x; }

main()

{ int a,b,c;

sub(10,5,&a);

sub(7,a,&b);

sub(a,b,&c);

printf("M,M,M\n",a,b,c);

}

A)5,2,3

B)-5,-12,-7

C)-5,-12,-17

D)5,-2,-7

考生答案: 正确答案: B

10.22 若有下面的程序片段:

int[12]={0},*p[3],**pp,i;

for(i=0;i<3;i)

p[i]=&a[i*4];

pp=p;

则对数组元素的错误引用是

A)pp[0][1]

B)a[10]

C)p[3][1]

D)*(*(p+2)+2)

考生答案: 正确答案: C

10.23 下面程序的输出结果是

#include#includemain()

{ char *p1="abc",*p2="ABC",str[50]= "xyz";

strcpy(str+2,strcat(p1,p2));

printf("%s\n",str);

}

A)xyzabcABC

B)zabcABC

C)xyabcABC

D)yzabcABC

考生答案: 正确答案: C

10.24 有如下程序

main()

{ char ch[2][5]={"6937","8254"},*p[2];

int i,j,s=0;

for(i=0;i<2;i++)

p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>′\0′;j+=2)

s=10*s+p[i][j]-′0′;

printf("%d\n",s);

}

该程序的输出结果是

A)69825

B)63825

C)6385

D)693825

考生答案: 正确答案: C

10.25 阅读下面程序,则执行后的结果为

#include "stdio.h"

#include "string.h"

#define N 10

#define M 10

char *find(char (*a)[M],int n)

{ char *q; int i;

q=a[0];

for(i=0;i

if(strcmp(a[i],q)<0)

q=a[i];

return q;

}

main()

{ char s[N][M]={"tomeetme","you","and","he","china"};

char *p;

int n=5,i;

p=find(s,n);

puts(p);

}

A)he B)and C)you D)tomeetme

考生答案: 正确答案: B来源:-计算机二级考试 二、填空题(请将每一个空的正确答案写在答题卡相应序号后。)10.26 函数 void fun(float *sn, int n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。

void fun( float *sn, int n)

{ float s=0.0, w, f=-1.0;

int i=0;

for(i=0; i<=n; i++)

{ f=【1】* f;

w=f/(2*i+1);

s+=w;

}

【2】=s;

}

考生答案: 正确答案: -1 正确答案: *sn

10.27 该程序运行的结果是【3】。

#include#include#define M 100

void fun(int m, int *a, int *n)

{ int i,j=0;

for(i=1;i<=m;i++)

if(i%7==0||i==0)

a[j++]=i;

*n=j;

}

main()

{ int aa[M],n,k;

clrscr();

fun(10,aa,&n);

for(k=0;k

if((k+1) ==0)

printf("\n");

else printf("M",aa[k]);

printf("\n");

}

考生答案: 正确答案: 7

10.28 下列程序的功能是:求出ss所指字符串中指定字符的个数,并返回此值。

例如,若输入字符串123412132,输入字符1,则输出3,请填空。

#include #include #define M 81

int fun(char *ss, char c)

{ int i=0;

for(; 【4】;ss++)

if(*ss==c) i++;

return i;

}

main()

{ char a[M], ch;

clrscr();

printf("\nPlease enter a string: "); gets(a);

printf("\nPlease enter a char: "); ch=getchar();

printf("\nThe number of the char is: %d\n", fun(a,ch));

}

考生答案: 正确答案: *ss!= ’\0’

10.29 若给fun函数的形参s传送字符串:“]]6354abcc” (其中]表示空格字符),则函数的返回值是【5】。

#include long fun(char s[])

{ long n;int sign;

for(;isspace(*s);s++);

sign=(*s==′-′)?-1:1;

if(*s==′+′||*s==′-′) s++;

for(n=0;isdigit(*s);s++) n=10*n+(*s-′0′);

return sign*n;

}

考生答案: 正确答案: 6354

10.30 下面程序是指从终端读入的20个字符放入字符数组中,然后利用指针变量输出上述字符串,请填空。

#include main ()

{ int i; char s[21],*p;

for (i=0;i<20;i++)

s[i]=getchar ();

s[i]=【6】;

p =【7】

while (*p) putchar (【8】);

}

正确答案: ’\0’ 正确答案: s 正确答案: *p++

10.31 以下函数的功能是求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。

例如,若x中的值为30,则有4个数符合要求,它们是1,3,5,15。

请按题意,完成填空。

试题程序:

#include #include void fun (int x, int pp[], int *n)

{ int i,j=0;

【9】

if(x%i==0) pp[j++]=i;

【10】;

}

main ()

{ int x,aa[1000], n, i ;

clrscr();

printf("\nPlease enter an integer number : \n ");

scanf ("%d ", &x);

fun (x, aa, &n);

for (i=0 ; i

printf ("%d ", aa [i]);

printf ("\n ");

}

正确答案: for(i=1;i

10.32 mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。

int mystrlen(char *str)

{ int i;

for(i=0;【11】!= ′\0′;i++);

return(i);

}

考生答案: 正确答案: *(str+i) 或 str[i]

10.33 下面函数的功能是:找出一维数组元素中最大的值和它所在的下标,最大值的和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。请填空。

#include#includevoid fun(int a[],int n, int *max, int *d)

{ int i;

*max=a[0];

*d=0;

for(i=0;【12】;i++)

if(*max

{ *max=a[i];*d=i; }

}

main()

{ int i, x[20], max, index, n=10;

randomize();

for(i=0;i

{ x[i]=rand()P; printf("M",x[i]);

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=],Index=M\n",max,index);

}

考生答案: 正确答案: i

10.34 阅读以下程序,使程序输出结果为30,4.000 000,请填空。

#include "stdio.h"

main()

{ int a=30,b=40,c;

double 【14】 ,s;

s=fun(&a,&b,&c);

printf("%d,%lf\n",c,s);}

double fun(int *a,int *b, 【15】 )

{ *c=*a%*b;

return(4.0);

}

正确答案: fun(int *,int *,int *) 正确答案: int *c

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值