{ 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);