C++指针函数习题.docx

上传人:b****8 文档编号:30285680 上传时间:2023-08-13 格式:DOCX 页数:14 大小:20.98KB
下载 相关 举报
C++指针函数习题.docx_第1页
第1页 / 共14页
C++指针函数习题.docx_第2页
第2页 / 共14页
C++指针函数习题.docx_第3页
第3页 / 共14页
C++指针函数习题.docx_第4页
第4页 / 共14页
C++指针函数习题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C++指针函数习题.docx

《C++指针函数习题.docx》由会员分享,可在线阅读,更多相关《C++指针函数习题.docx(14页珍藏版)》请在冰豆网上搜索。

C++指针函数习题.docx

C++指针函数习题

C++指针函数习题

一、选择题

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

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

voidmain()

{inta,b;

sub(10,5,&a);

sub(7,a,&b);

cout<

}

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

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

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

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

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

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

4.已有定义intk=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,*&aB)&*a,&a,*pointC)*&point,*point,&aD)&a,&*point,point

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

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

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

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

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

9.设有下面的程序段:

则下列叙述正确的是()。

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

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

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

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

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

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

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

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

#include

#include

intmain()

{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.若有inta[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]的表达式是()。

intx[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)+2C)p+5D)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.下面程序段的运行结果是()。

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

while(*p!

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

A)LANGUAGEB)languageC)LANGD)language

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

A)ptr是一个指针变量

B)*ptr是一个函数名

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

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

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

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

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

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

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

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

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

#include

#definef(x)(x*x)

intmain()

{inti1,i2;

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

cout<

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

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

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

24.有以下程序,

#include

intfun(intn)

{if(n==1)return1;

elsereturn(n+fun(n-1));}

intmain()

{intx;

cin>>x;

x=fun(x);

cout<

}

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

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

25.已有定义:

chara[]="xyz",b[]={'x','y','z'};,以下叙述中正确的是( )。

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

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

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

#include

#include

 main()

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

   cout<

 A)99  B)520  C)1320  D)2020

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

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

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

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

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

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

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

#include

structWWW{intX;intY;};

voidmain()

{structWWWA[3]={{7,8},{9,10},{12,13}};

inta;

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

cout<

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

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

 strucSTU{  charname[10];   intnum;    };

    voidf1(structSTUc)

    { structSTU b={“LiSiGuo”,2042};      c=b;    }

    voidf2(structSTU*c)

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

    main()

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

      f1(a);f2(&b);

      cout<

执行后的输出结果是

   A)20412044 B)20412043 C)2042 2044  D)2042 2043

二、填空题

1.若想输出b数组的十个元素,下面存在错误的程序行是。

(每个程序行前面的数字代表行号)

1intmain()

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

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

4cout<<*b;

5}

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

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

3.C++语言中,数组名是一个不可改变的,不能对它进行赋值运算;数组在内存中占用一段连续的存储空间,它的首地址由表示。

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

三、读程序写结果。

1.#include

inti=1;

test()

{inti;

cout<

i=2;

return(i);

}

intmain()

{cout<

i=test();

cout<

}

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

#include

intmain()

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

ints,i,*p;

s=0;

p=&x[0];

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

cout<<“sum=”<

return0;

}

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

#include

intmain()

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

int*p;

p=x;

Cout<<(++*p);

return0;

}

四、程序填空。

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

#defineN10

intmain()

{inta[N],i,j,k=N;

cout<<“Enter“<

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

for(k=0;;k++)

for(i=0;i

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

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

for(i=0;i

return0;

}

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

#include

intmain()

{chars1[80],s2[80];

gets(s1);gets(s2);

conj(s1,s2);

puts(s1);

return0;

}

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

{while((*p1)!

=‘\0’);

while((*p2)!

=‘\0’)

{*p1=;

p1++;p2++;

}

}

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

#include

intmain()

{chars1[80],s2[80];

gets(s1);gets(s2);

Cout<<“Resultis:

”<

return0;

}

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

intcomp(char*p1,char*p2)

{

while((*p1!

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

='\0'))

{

if(*p1!

=*p2);

p1++;;

}

if()return1;

elsereturn-1;

}

五、编程题。

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

例如:

输入字符串:

hello,输出:

hlo

2.编写程序,把一个字符串中的第m个字符开始的全部字符复制生成另一个字符串。

要求从键盘输入字符串及m的值并输出生成的字符串。

3.请编写一个函数,它的功能是:

对一个数组进行从小到大的排序。

函数首部为voidsort(inta[],intn),其中a为数组名,n为数组元素的个数。

主函数如下,请把子函数补充完整。

#include

#defineN10

intmain()

{intnum[N],i=0;

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

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

printf("\n排序之后:

");

for(i=0;i

return0;

}

//以下为子函数部分。

选择题

1

2

3

4

5

6

7

8

9

10

C

B

A

B

D

D

C

C

C

D

11

12

13

14

15

16

17

18

19

20

B

A

B

A

A

D

C

A

C

D

21

22

23

24

25

26

27

28

29

30

A

C

B

A

C

B

A

A

B

A

二填空题

第1题

3

第2题

*(x+i)

*(p+i)

p[i]

第3题

地址常量

数组名

第4题

auto

三读程序写结果。

1.

1,随机数,0,

2.

Sum=25

3.

2

四程序填空。

1.

k

a+i+1

a+i+1

2

P1++

*p2

*p1='\0';

3.

break

p2++

*p1>*p2

五编程题

第一题:

思路

#defineN100

intmain()

{

charstr[N];

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

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

fun(str);//函数调用

return0;

}

/*

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

把参数字符串间隔输出

要求使用指针,在这里,参数是指针,满足要求

在子函数中,使用一个while循环,使得指针每次递增2,输出它所指向的字符即可。

也就是说,子函数只需要一个while语句。

*/

voidfun(char*s){。

}

第二题:

思路

#defineN100

intmain()

{

charstr1[N],str2[N];

intm;

voidfun(char*s1,char*s2,intn);//函数声明

gets(str1);

Cin>>m;

fun(str1,str2,m);//函数调用

puts(str2);

return0;

}

/*以下为子函数部分

要求实现把字符串s1中从第n个字符开始的所有数据复制到字符串s2中

例如s1为“students”,n为4,则运算之后,s2应该是“dents”*/

voidfun(char*s1,char*s2,intn)

{

参考算法,

1、找到s1的第n个字符

2、开始复制:

从当前s1所对应的字符开始,逐个复制到s2里面

}

第三题:

思路

intn=10;//数组的成员个数

intmain()

{

inta[N];

int*p=a;

//三个函数,分别是输入,输出,处理数组函数

voidscan(int*),print(int*),pro(int*);

scan(p);//调用函数,给数组输入数据

cout<<"\n原始数据为:

\n";

print(p);//调用函数,输出数组

pro(p);//调用函数,对数组进行处理

cout<<"\n交换之后的数据为:

\n";

print(p);//调用函数,输出数组

}

voidscan(int*p)//给数组输入数据,数组成员个数为全部变量n

{。

}

voidprint(int*p)//输出数组,数组成员个数为全部变量n

{。

}

/*以下为子函数,处理函数,按照要求对数组进行处理,数组的成员个数为全局变量n*/

voidpro(int*p)

{

intmax=0,min=0;

inti,temp;

//以下循环求出数组的最大值放在max变量中

for(

//以下循环求出数组的最小值放在min变量中

for(

/*以下为交换语句

最小的数和第一个数对换

把最大的数和最后一个对换。

*/

}

 

展开阅读全文
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1