{ cp=x+y; //*cp=30+50=80 }
void main() { } A.50,30
答案:C
分析:函数fun(a,b,&c,&d)中参数 a,b是传值,参数&c,&d是传地址,因此形参cp和实参c
共用一个存储空间,形参dp和实参d共用一个存储空间,所以改变指针变量cp所指向地址的值也就改变变量c的值,同样改变指针变量dp所指向地址的值也就改变变量d的值,因此选C。
(6)要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。
A.funa(int *x,int *y) { int *p=new int ; p=*x;
B.funb(int x,int y) { int t;
B.30,50
C.80,-20
D.80,20
int a,b,c,d; a=30,b=50; fun(a,b,&c,&d);
cout< t=x; x=y; y=t; } *x=*y; *y=*p; } C.func(int *x,int *y) { *x=*y; D.fund(int x,int y) { *x=*x+*y; *y=*x; } 答案:A *y=*x-*y; *x=*x-*y; } 分析:按照C++语言规则,通过参数带回运算值,只能是传地址,不能是传值 ,B和D的参数是传值,故B和D不能选。C中传回值都是指针变量y所指向地址的值,C也不能选。 (7)以下程序的输出结果是( )。 #include void main() { } A.4,2,1,1 B.4,9,3,1 答案:C 分析:C++语言中的switch语句中,如果没有break语句,一旦满足某一条件进入,就一直运行到switch的结束,如在本题s[1]=’1’,除v1加1之外,v2和v3都要加1。故运行结果是“5,,8,6,1”,选择C。如果程序做下面修改: C.5,8,6,1 D.8,8,8,8 char *s=\ int v1=0,v2=0,v3=0,v4=0; for (int k=0;s[k];k++) switch(s[k]) { } default:v4++; case '1':v1++; case '3':v3++; case '2':v2++; cout< switch(s[k]) { } default:v4++; break; case '1':v1++; break; case '3':v3++;break; case '2':v2++;break; 运行结果是“4,2,1,1”,选择A。 (8)设有如下定义,下面关于ptr正确叙述是( )。 int (*ptr)(); A.ptr是指向一维数组的指针变量 B.ptr是指向int 型数据的指针变量 C.ptr是指向函数的指针,该函数返回一个int型数据 D.ptr是一个函数名,该函数的返回值是指向int型数据的指针 答案:C 分析:参照函数指针定义。 (9)若有如下语句: int **pp,*p,a=10,b=20; pp=&p; //二级指针pp取一级指针p地址 p=&a; //一级指针p取变量a地址 p=&b; //一级指针p取变量b地址 cout<<*p<<”,”<<**pp< A.10,20 答案:D 分析:见程序注释。 B.10,10 C.20,10 D.20,20 (10)设char **s;以下正确的表达式是( )。 A.s=”computer”; B.*s=”computer”; C.**s=”computer”;D.*s=’c’; 答案:C 分析:由char**s语句可知,**s表示是一个二级字符指针变量,*s是一个指向字符串的指针变量,故A、C、D都 不正确,只有B是正确的。 2.编写程序,在堆内存中申请一个float型数组,把10个float型数据0.1、0.2、0.3、…、1.0赋予该数组,然后使用float型指针输出该数组的各元素值并求出其累加和。 #include void main() { float *p= new float[10]; //在堆内申请一个float型数组 int i; float sum=0.0; for(i=0;i<10;i++) {*(p+i)=(i+1)*.1; //给数组赋值0.1,0.2,……,1.0 cout<<*(p+i)<<'\\t'; //输出数组值 sum+=*(p+i); //求和 } cout<<\ } 3.编写一个函数f,将传入此函数的直角坐标值转换为极坐标值,并返回主调函数中。求极坐标的公式是: c= q=arctan(y/x) 若要将两值返回主调函数,有多种方式可以完成,请试之: (1) (1) 两值均以指针形参带回。 void fun(double x,double y,double *c,double *q) { cout< (2)由指针形参带回一个值,函数值返回另一个值。 double fun(double x,double y,double *p) {double c; c=sqrt(x*x+y*y); *p=atan(y/x); return c; } (3)两值均以引用形参返回。 (提示:程序中可以使用C++库函数sprt、pow及atan,它们的头文件为math.h) void fun(double x,double y,double &a,double &b) { a=sqrt(x*x+y*y); b=atan(y/x);