C++指针函数习题

C++指针函数习题
C++指针函数习题

C++指针函数习题

一、选择题

1.以下程序的运行结果是()。

sub(int x, int y, int *z) { *z=y-x; }

void main()

{ int a,b;

sub(10,5,&a);

sub(7,a,&b);

cout<

}

A) 5, 2 B) -5,-2 C) -5,-12 D) 5, -2

2. 函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则()。

A)称为函数的直接递归调用B)称为函数的间接递归调用

C)称为函数的循环调用D)C语言中不允许这样的递归调用

3.变量的指针,其含义是指该变量的()。

A)地址B) 值C)名D)一个标志

4.已有定义int k=2; int * ptr1,* ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )。

A)k=*ptr1 + *ptr2; B)ptr2=k; C)ptr1=ptr2; D)k=*ptr1*(*ptr2);

5.(去掉)若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是

A)*p=&a; scanf(“%lf”,p); B)*p=&a; scanf(“%f”,p);

C) p=&a; scanf(“%lf”,*p); D)p=&a; scanf(“%lf”,p);

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

A)a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point

7.设char *s="\ta\103bc";则指针变量s指向的字符串所占的字节数是()。

A)9 B)5 C)6 D)7

8.下面程序段的运行结果是()。

char *s="abcde"; s+=2; cout<

A)cde B)字符'c' C)字符'c'的地址D)无确定的输出结果

9.设有下面的程序段:则下列叙述正确的是()。

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

A)s和p完全相同B)数组s中的容和指针变量p中的容相等

C) *p与s[0]相等D) s数组长度和p所指向的字符串长度相等

10.若有定义int a[5], * p=a; 则对a数组元素的正确引用是()。

A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)

11.若已定义char s[10]; 则在下面表达式中不表示s[1]的地址的是()。

A)s+1 B)s++ C)&s[0]+1 D)&s[1]

12.下面程序的运行结果是()。

#include

#include

int main()

{ char * s1="AbDeG";

char * s2="Abdeg";

s1+=2; s2+=2;

cout<

}

A)负数B) 正数C)零D)不确定的值

13.若有定义:int *p[4]; 则标识符p()。

A)是一个指向整型变量的指针B)是一个指针数组名

C)是一个指针,它指向一个含有四个整型元素的一维数组D)说明不合法

14.若有int a[10] , *p=a; 则p+5表示()。

A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值

15.设有以下定义:则正确的叙述是()。

char *cc[2]={"1234","5678"};

A)cc数组的两个元素中各自存放了字符串"1234"和"5678"的首地址

B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

C)cc是指针变量,它指向含有两个数组元素的字符型一维数组

D)cc数组元素的值分别是"1234"和"5678"

16.若有以下定义,则能够正确表示数组元素x[1][2]的表达式是()。

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

A)p[1][2] B)(*p+1)+2 C)p+5 D)p[5]

17.语句int (*ptr)( );的含义是()。

A)ptr是指向一维数组的指针变量

B)ptr是指向int型数据的指针变量

C)ptr是指向函数的指针,该函数返回一个int型数据

D)ptr是一个函数名,该函数的返回值是指向int型数据的指针

18.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是()。

A)p=max; B)*p=max; C)p=max(a,b); D)*p=max(a,b);

19.下面程序段的运行结果是()。

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

while(*p!='u') { cout<<( *p-32 ); p++; }

A)LANGUAGE B)language C)LANG D)language

20.关于语句int *ptr( ); 以下说确的是()。

A)ptr是一个指针变量

B) *ptr是一个函数名

C)这个语句是定义函数的语句

D) ptr是一个函数名,该函数的返回值是指向int型数据的指针

21. 以下叙述中正确的是()。

A)局部变量说明为static存储类,其生存期将得到延长

B)全局变量说明为static存储类,其作用域将被扩大

C)任何存储类的变量在未赋初值时,其值都是不确定的

D)形参可以使用的存储类说明符与局部变量完全相同

22. 有以下程序,程序运行后的输出结果是()。

A)64, 28 B)4, 4 C)4, 3 D)64, 64

#include

# define f(x) (x*x)

int main( )

{ int i1, i2;

i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;

cout<

23.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。

A) 地址传递B) 单向值传递

C) 由实参传给形参,再由形参传回实参D) 传递方式由用户指定

24.有以下程序,

#include

int fun(int n)

{ if(n==1) return 1;

else return (n+fun(n-1)); }

int main( )

{ int x;

cin>>x;

x=fun(x);

cout<

}

程序执行时,给变量x输入10,程序的输出结果是( )

A)55 B) 54 C) 65 D) 45

25. 已有定义:char a[]="xyz", b[]={'x','y','z'};,以下叙述中正确的是()。

A)数组a和b的长度相同B)a数组长度小于b数组长度

C)a数组长度大于b数组长度D)上述说法都不对

26. 以下程序的输出结果是()。

#include

#include

main()

{ char st[20]= “hello\0\t\\”;

cout<

A) 9 9 B) 5 20 C) 13 20 D) 20 20

27.当说明一个结构体变量时系统分配给它的存是()。

A)各成员所需存量的总和B)结构中第一个成员所需存量

C)成员中占存量最大者所需存D)结构中最后一个成员所需存量

28.C语言结构体类型变量在程序执行期间()。

A)所有成员一直驻留在存中B)只有一个成员驻留在存中

C)部分成员驻留在存中D)没有成员驻留在存中

29.以下程序的结果是()。

#include

struct WWW { int X; int Y; };

void main( )

{ struct WWW A[3]={{7,8},{9,10},{12,13}};

int a;

a=A[1].X+A[2].Y;

cout<

A) 17 B) 22 C) 16 D) 21

30.以下程序的输出结果是()。

struc STU{ char name[10]; int num; };

void f1(struct STU c)

{ struct STU b={“LiSiGuo”,2042};c=b; }

void f2(struct STU *c)

{ struct STU b={“SunDan”,2044};*c=b; }

main()

{ struct STU a={“YangSan”,2041},b={“WangYin”,2043};

f1(a); f2(&b);

cout<

执行后的输出结果是

A)2041 2044 B)2041 2043 C)2042 2044 D)2042 2043

二、填空题

1.若想输出b数组的十个元素,下面存在错误的程序行是。(每个程序行前面的数字代表行号)

1 int main()

2 { int b[10]={1,3,5,7,9,2,4,6,8,10},k;

3 for(k=0;k<10;k++,b++)

4 cout<<*b;

5 }

2.若有定义语句int x[10] , *p=x ; 在程序中引用数据元素x[i]的四种形是:,

,和x[i](假设i已正确说明并赋值)。

3. C++语言中,数组名是一个不可改变的,不能对它进行赋值运算;数组在存中占用一段连续的存储

空间,它的首地址由表示。

4.在C++语言中,形参的缺省存储类是。

三、读程序写结果。

1. #include

int i = 1;

test()

{ int i;

cout<

i = 2;

return(i);

}

int main()

{ cout<

i = test();

cout<

}

2.下面程序的运行结果是。

#include

int main()

{ int x[]={0,1,2,3,4,5,6,7,8,9};

int s,i,*p;

s=0;

p=&x[0];

for(i=1;i<10;i+=2) s+=*(p+i);

cout<<“sum= ”<

return 0;

}

3.下面程序的运行结果是。

#include

int main( )

{ int x[4]={1,3,5,7};

int *p;

p=x;

Cout<<(++*p);

return 0;

}

四、程序填空。

1.以下程序对数组a中的数据进行降序排序,请填空。

#define N 10

int main()

{ int a[N],i,j,k=N;

cout<<“Enter “<

for(i=0;i>*(a+i);

for(k=0; ;k++)

for(i=0;i< N-k;i++)

if(*(a+i)<*(a+i+1))

{j=*(a+i); *(a+i)=*( );*( )=j;}

for(i=0;i

return 0;

}

2.下面程序的功能是将两个字符串s1和s2连接起来,请填空。

#include

int main()

{ char s1[80],s2[80];

gets(s1); gets(s2);

conj(s1,s2);

puts(s1);

return 0;

}

void conj(char *p1, char *p2) //此函数实现把字符串p2连接在p1的后面。

{ while( (*p1) != ‘\0’);

while( (*p2) != ‘\0’ )

{ *p1= ;

p1++; p2++;

}

}

3.下面程序的功能是比较2个字符串的大小,请填空。

#include

int main()

{ char s1[80], s2[80];

gets(s1); gets(s2);

Cout<<“Result is: ”<

return 0;

}

//以下函数实现比较2个字符串的大小,若p1比p2大,返回数值1,否则返回数值-1,

int comp(char *p1, char *p2)

{

while( (*p1 !='\0')&&(*p2 !='\0') )

{

if(*p1 != *p2 ) ;

p1++; ;

}

if( ) return 1;

else return -1;

}

五、编程题。

1.编写程序,把一个从键盘输入字符串间隔的输出,请用指针完成。例如:输入字符串:hello,输出:hlo

2.编写程序,把一个字符串中的第m个字符开始的全部字符复制生成另一个字符串。要求从键盘输入字符串及m的值并输出生成的字符串。

3.请编写一个函数,它的功能是:对一个数组进行从小到大的排序。函数首部为void sort(int a[],int n) ,其中a为数组名,n为数组元素的个数。主函数如下,请把子函数补充完整。

#include

#define N 10

int main()

{ int num[N],i=0;

for(i=0;i>num[i]; //输入数据

sort( num, N); //调用子函数,对数组的元素进行排序。

printf("\n排序之后:");

for(i=0;i

return 0;

}

//以下为子函数部分。

一选择题

二填空题

三读程序写结果。

五编程题

第一题:思路

#define N 100

int main()

{

char str[N];

void fun(char *s); //子函数说明

gets(str); //读入字符串

fun(str);//函数调用

return 0;

}

/*

以下为子函数,请补充完整

相关主题