几道C++习题
一、填空1.假定p所指对象的值为28,p+1所指对象的值为62,则*p++的值为( )
2. 假定p所指对象的值为28,p+1所指对象的值为62,则*++p的值为( )
3. 假定p所指对象的值为25,p+1所指对象的值为50,则执行“(*p)++;”语句后,p所指对象的值为( )
4. 假定p所指对象的值为25,p+1所指对象的值为50,则执行“*(p++);”语句后,p所指对象的值为( )。
5.假定a是一个指针数组,则a+i所指对象的地址比a的地址大( )字节。
6. 假定a是一个一维数组,则a[i]的指针访问方式为( )。
7. 假定a是一个二维数组,则a[i][j]的指针访问方式为( )。
8. 假定a是一个一维数组,则a[i]对应的存储地址(以字节为单位)为( )。
9.假定一个二维数组为a[m][n],则a[i][j]对应的存储地址(以字节为点位)为( )。
10.假定一个二维数组为a[m][n],则a[i]的地址值(以字节为点位)为( )。
11.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大( )字节。
12.假定a为一个字符数组名,则元素a[8]的字节地址为( )。
13.假定a为一个整型数组名,则元素a[4]的字节地址为( )。
14.假定一个结构类型的定义为“struct A{int a,b;short c;A*d;};”,则该类型的大小为( )字节。
15假定一个结构类型的定义为“struct B{int a[8];char *b;};”,则该类型的大小为( )。
16.假定结构类型的定义为“struct D{int a;union{int b;double c;};D * d[3];};”则该类型的大小为( )字节。
17.假定动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句为( )。
18.假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为( )。
19.假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为( )。
二、给出下列程序运行后的结果
1.#include<iomanip.h>
Void main(){
int a[8]={7,9,11,13,3,8,15,17}
int *p=a;
for(int i=0;i<8;i++){
cout<<sew(5)<<*p++;
if((i+1)%4==0)cout<<endl;
}
}
2. #include<iomanip.h>
void main(){
int a[5]={3,6,15,7,20};
int *p=a;
for(int i=0;i<5;i++)
cout<<setw(5)<<*p++;
cout<<endl;
for(i=0;i<5;i++)
cout<<setw(5)<<*--p;
cout<<endl;
}
3. #include< iomanip.h >
void main(){
int a[8]={4,8,12,16,20,24,28,32};,
int *p=a;
do{
cout<<*p<<’’;
p+=3;
}while(p<a+8);
cout <<endl;
}
4. #include< iomanip.h >
void main(){
int x=20,y=40,*p;
p=&x;cout<<*p<<’’;
*p=x+10 ;
p=&y ;cout<<*p<<endl ;
*p=y+20 ;cout<<x<<’’<<y<<endl ;
}
5. #include< iomanip.h >
int LA(int*a,int n){
int s=0;
for(int i=0;i<n;i++)
s+=a[i];
return s;
}
void main(){
char a[]={5,10,15,20,25,30};
int b=LA(a,5);
int c=LA(a+3,2);
cout<<b<<’’<<c<<’’<<b+2*c<<endl;
}
6. #include< iomanip.h >
void LC(int a,int b){
int x=a;
a=b;b=x;
cout<<a<<’’<<b<<endl;
}
void main(){
int x=15,y=36;
LC(x,y);cout<<x<<’’<<y<<endl;
}
7. #include< iomanip.h >
void LF(int& x,int y){
x=x+y ;
y=x+y ;
cout<< “x=”<<x<< “y=”<<y<<endl ;
}
void main(){
int x=5,y=8 ;
cout<< “x= “<<x<< ” y =“<<y <<endl ;
}
8. #include< iomanip.h >
Void LG(int *&a,int & m){
a=new int[m];
int *p=a;
for(int i=0;i<m;i++)
*p++=2*i+1;
}
void main(){
int *p,n=5;
LG(p,n);
for(int i=0;i<n;i++)
cout<<p[i]<<’’;
cout<<endl;
delete []p;
}
9. #include< iomanip.h >
Void LH(int *a,int n){
int *p=a+n-1;
while(a<p){
int x=*a;
*a=*p;
*p=x;
a++;p--;
}
}
void main(){
int *d=new int[5];
int I;
for(i=0;i<5;i++){
d[i]=2*i+3;
cout<<setw(5)<<d[i]<<’’;
}
cout<<endl;
LH(d,5);
for(i=0;i<5;i++){
Cout<<setw(5)<<d[i]<<’’;
}
cout<<endl;
delete[]d;
}
10.#include<iostream.h>
srruct Worker{
char name[15];//姓名
int age;//年龄
float pay;//工资
};
Void mian(){
Worker x={“weirong”,55,540};
Worker y,*p;
y=x;p=&x;
cout<<y.name<<’’<<y.age<<’’<<y.pay<<endl;
cout<<p->name<<’’<< p->age+5<<’’<< p->pay-10<<endl;
}
11. #include<iostream.h>
srruct Worker{
char name[15];//姓名
int age;//年龄
float pay;//工资
};
Void mian(){
Worker x;
char*t=”liouting”;
int d=46;float f=725;
srtcpy(x.name,t);
x.age=d;x.pay=f;
cout<<x.name<<’’<<x.age<<’’<<x.pay<<endl;
}
三、写出下列每个函数的功能
1. #include<iostream.h>
int LI(int n){
int*a=new int[n],*p=a+n;
for(int i=0;i<n;i++)cin>>a[i];
for(i=n-1;i>=0;i--)cout<<*(--p)<<’’;
cout<<’\n’;
delete[]a;
}
2. #include<iostream.h>
void LK(int a[],int n,int *&b,int&m){
float s=0;int I;
for(i=0;i<n;i++)
s+=a[i];
s/=n;
m=0;
for(int i=01;i<n;i++)
if(a[i]>=s)m++
b=new int[m];
int*p=b;
for(i=0;i<n;i++)
if(a[i]>=s)*p++=a[i];
}
3. srruct Worker{
char name[15];//姓名
int age;//年龄
float pay;//工资
};
istream&operator>>(istream& istr, Worker &x){
cout<<”请输入一个职工的记录:姓名、年龄、工资“<<endl;
istr>>x.name>>x.age>>x.pay;
resturn istr;
}
4. //srtuct StrNode{
//char name[15];//字符串域
//StrNode *next;//指针域
//};
Void QB(StrNode*&f,int n){
if(n==0){f=NULL;return;}
f=new StrNode;
cin>>f->name;
StrNode*p=f;
while(--n){
p=p->next=new StrNode;
cin>>p->name;
}
p->next=NULL;
}
5.. //srtuct StrNode{
//Char name[15];//字符串域
//StrNode *next;//指针域
//};
Void QC(StrNode*f){
while(f){
cout<<f->name<<’’;
f=f->next;
}
}