}
A.5B.10C.15D.20
14以下程序的输出结果是(C)。
#include
voidfun(intx,inty,int*cp,int*dp)
{cp=x+y;//*cp=30+50=80
dp=x-y;//*dp=30-50=-20
}
voidmain()
{inta,b,c,d;
a=30,b=50;
fun(a,b,&c,&d);
cout<}
A.50,30B.30,50C.80,-20D.80,20
15要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。
能正确执行此功能的函数是(A)。
A.funa(int*x,int*y)B.funb(intx,inty)
{int*p=newint;{intt;
p=*x;t=x;
*x=*y;x=y;
*y=*p;}y=t;}
C.func(int*x,int*y)D.fund(intx,inty)
{*x=*y;{*x=*x+*y;
*y=*x;*y=*x-*y;
}*x=*x-*y;}
16以下程序的输出结果是(C)。
#include
voidmain()
{char*s="12134211";
intv1=0,v2=0,v3=0,v4=0;
for(intk=0;s[k];k++)
switch(s[k])
{default:
v4++;
case'1':
v1++;
case'3':
v3++;
case'2':
v2++;
}
cout<}
A.4,2,1,1B.4,9,3,1C.5,8,6,1D.8,8,8,8
答案:
C
分析:
C++语言中的switch语句中,如果没有break语句,一旦满足某一条件进入,就一直运行到switch的结束,如在本题s[1]=’1’,除v1加1之外,v2和v3都要加1。
故运行结果是“5,,8,6,1”,选择C。
如果程序做下面修改:
switch(s[k])
{default:
v4++;break;
case'1':
v1++;break;
case'3':
v3++;break;
case'2':
v2++;break;
}
运行结果是“4,2,1,1”,选择A。
二、读下列程序结果
1:
写出下列程序运行结果:
#include
voidmain()
{int*pn,n=10,m=20;
float*pf,px=3.14159,py=2.71828;
pn=&n;
*pn+=m;
cout<<”n现在的值是:
”<<*pn<pf=&px;
py+=5*(*pf);
cout<<”py现在的值是:
”<}
运行结果是:
n现在的值是:
30
pf现在的值是:
18.42623
分析:
指针是通过在变量前加一个“*”来定义,使用用“*”加变量名存取指针所指的值,用运算“&”取变量的地址,但是不能存取无指向的指针所指向内容,这样会导致系统故障。
2:
写出下列程序运行结果:
#include
voidmain()
{intI,*p,a[]={10,20,30,40,50,60};
p=a;
for(I=0;I<5;I++)
cout<<”a[“<
<<’\t’<<”*(p+”<
}
运行结果:
a[0]=10*(a+0)=10*(p+0)=10p[0]=10
a[1]=20*(a+1)=20*(p+1)=20p[1]=20
a[2]=30*(a+2)=30*(p+2)=30p[2]=30
a[3]=40*(a+3)=40*(p+3)=40p[3]=40
a[4]=50*(a+4)=50*(p+4)=50p[4]=50
a[5]=60*(a+5)=60*(p+5)=60p[5]=60
3:
voidgrt(int*x,int*y,int*z)
{cout<<++*x<<‘,’<<++*y<<‘,’<<*(z++)<inta=10,b=40,c=20;
voidmain()
{prt(&a,&b,&c);
prt(&a,&b,&c);
}
答案:
11,41,20,
12,42,20
4staticinta[]={1,3,5,7,11,13};
main()
{int*p;
p=a+3;
cout<<*p<<'\t'<<(*p++)<cout<<*(p-2)<<'\t'<<*(a+4)<}
答案11,7
5,11
三;填空题
1.下列函数change的功能是,将字符串中的小写字母转成大写字母,请填空。
#include
#include
voidchange()//1
{inti=0;
for(i=0;;i++)//2
if(a[i]>='a'&&a[i]<='z')
;//3
}
voidmain()
{charp[80];
cout<<"\n";
cin.getline(p,80);//读一行字符,中间可以有空格
change(p);
cout<
}
如程序运行时得到以下结果:
请输入一行字符:
Thisisabook..
THISISABOOK.
答案:
(1)char*a或chara[80]
(2)a[i]或a[i]!
=’\0’
(3)a[i]=a[i]–32
分析:
(1) 由指针和字符串关系知:
当实参是数组,形参可以是字符串变量,也可以是字符指针变量。
(2)循环语句结束条件是字符标记’\0’。
(3)大写字母的ASCII码比小室字母的ASCII码小32。
例题12:
下列函数swap实现数据交换功能功能,请填空。
#include
voids*p,int*q)
{inttemp;
temp=*p;
;//1
;//2
}
voidmain()
{inta,b;
int*p1,*p2;
cout<<"请输入两个正数:
";
cin>>a>>b;
p1=&a;
p2=&b;
s);
cout<<"结果a和b的值:
"<}
如程序运行时得到以下结果:
请输入两个正数:
1020
结果a和b的值:
20,10
答案:
(1) *p=*q
(2) *q=temp;
分析:
实参和形参都是指针变量,所以指针变量p1和p指向同一个地址,同样p2和q也指向同一个地址。
函数swap()是交换两个数,故应填写语句*p=*q、*q=temp。
3:
下列函数sort实现对字符串按字典顺序由小到大排序,请填空。
#include
#include
voidsort()//1
{char;//2
inti,j;
for(i=0;ifor(j=0;jif(strcmp()//3
{temp=p[j];
;//4
p[j+1]=temp;
}
}
voidmain(){
char*a[5]={"student","worker","cadre","soldier","apen"};
sort(a,5);
for(inti=0;i<5;i++)
cout<}
程序运行结果如下:
apen
cadre
soldier
student
worker
答案:
(1)char*p[],intn
(2)*temp
(3)p[j],p[j+1])>0
(4)p[j]=p[j+1]
分析:
(1)由实参得知函数sort()有两个形参,根据上题得char*p[],intn。
(2)有下面语句temp=p[j]可以得到temp是字符中指针。
(3)根据冒泡排序方法和字符串比较函数得到p[j],p[j+1])>0。
(4)字符串指针可以通过赋值语句传递值,字符串变量不能够使用赋值语句传递值。