课本习题
1.
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int i,a[10],*p=a;
for(i=0;i<10;i++)
a[i]=2*(i+1);
cout<<"该数组各元素的值:";
for(i=0;i<10;i++)
cout<<setw(4)<<*(p+i);
cout<<endl;
for(i=0;i<10;i++)
*(a+i)=2*(i+1);
cout<<"该数组各元素的值:";
for(i=0;i<10;i++)
cout<<setw(4)<<*(p+i);
cout<<endl;
return 0;
}
2.
#include<iostream>
using namespace std;
void lower(char *);
int main()
{
char s[50],*ptrl=s;
cout<<"请输入一个字符串:";
cin.getline(s,50);
lower(ptrl);
cout<<"变换后的数组为:"<<endl;
for(int i=0;ptrl[i]!='\0';i++)
cout<<ptrl[i];
cout<<endl;
return 0;
}
void lower(char *p)
{
for(;*p!='\0';p++)
if(*p>='A'&&*p<='Z')
*p +='a'-'A';
}
#include<iostream>
using namespace std;
void lower(char *);
int main()
{
char s[50],*ptrl=s;
cout<<"请输入一个字符串:";
cin.getline(s,50);
lower(ptrl);
cout<<"变换后的数组为:"<<endl;
for(;*ptrl!='\0';ptrl++)
cout<<*ptrl;
cout<<endl;
return 0;
}
void lower(char *p)
{
for(;*p!='\0';p++)
if(*p>='A'&&*p<='Z')
*p +='a'-'A';
}
#include<iostream>
using namespace std;
void lower(char *);
int main()
{
char s[50];
cout<<"请输入一个字符串:";
cin.getline(s,50);
lower(s);
cout<<"变换后的数组为:"<<endl;
for(int i=0;s[i]!='\0';i++)
cout<<s[i];
cout<<endl;
return 0;
}
void lower(char *p)
{
for(;*p!='\0';p++)
if(*p>='A'&&*p<='Z')
*p +='a'-'A';
}
#include<iostream>
using namespace std;
void lower(char *);
int main()
{
char s[50];
cout<<"请输入一个字符串:";
cin.getline(s,50);
lower(s);
cout<<"变换后的数组为:"<<s<<endl;
return 0;
}
void lower(char *p)
{
for(;*p!='\0';p++)
if(*p>='A'&&*p<='Z')
*p +='a'-'A';
}
3.
#include<iostream>
using namespace std;
int main()
{
char *month[]={"January","February","March","April","May","June",
"JUly","August","September","October","Novermber","December"};
cout<<"please input the month no:";
int i;
while(1)
{
cin>>i
if(i<=0||i>12)
break;
cout<<"the month no"<<i<< "->"<<month[i-1]<<endl;
}
return 0;
}
4.
#include<iostream>
using namespace std;
int main()
{
int a[3][4],*p[3];
p[0]=a[0];
p[1]=a[1];
p[2]=a[2];
int i,j;
for(i=0;i<3;i++) //利用指针数组给数组赋值
for(j=0;j<4;j++)
*(p[i]+j)=i+j;
for( i=0;i<3;i++) //利用指针数组输出二维数组
for(j=0;j<4;j++)
{
cout<<'\t'<<*(p[i]+j);
if(j==3)
cout<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a[3][4],**pp,*p[3];
int i,j;
p[0]=a[0];
p[1]=a[1];
p[2]=a[2];
pp=p;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
*((*pp+i)+j)=i+j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
cout<<'\t'<<*((*pp+i)+j);
if(j==3)
cout<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a[3][4],**pp;
int i,j;
*pp=a[0];
*(pp+1)=a[1];
*(pp+2)=a[2];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
*((*pp+i)+j)=i+j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
{
cout<<'\t'<<*((*pp+1)+j);
if(j==3)
cout<<endl;
}
return 0;
}
老师请问上面那个程序用二级指针来处理二维数组,为什么*pp=a[0];,*(pp+1)=a[1];,*(pp+2)=a[2];这三个式子不相当与给二级指针赋初值,而要加入一个指针数组才可以呢?
5.
#include<iostream>
using namespace std;
int main()
{
char str[20],*p=str;
cout<<"请输入一个在字符串:";
cin.getline(str,20);
for(int i=0;p[i]!='\0';i++)
{
if(p[i]==' ')
continue;
cout<<p[i];
}
cout<<endl;
return 0;
}
#include<iostream>
using namespace std;
void aver(int **);
void lower(int **);
void upper(int **);
int main()
{
int a[5][4]={85,90,85,86,87,92,90,94,
70,54,50,60,90,87,82,90,61,53,50,70};
int *p[5],**pp;
p[0]=a[0];
p[1]=a[1];
p[2]=a[2];
p[3]=a[3];
p[4]=a[4];
pp=p;
aver(pp);
lower(pp);
upper(pp);
return 0;
}
void aver(int **qq)
{
double aver=0;
for(int i=0;i<5;i++)
aver +=*(*(qq+i)+1)/5.0;
cout<<"第二门课程的平均成绩为:"<<'\t'<<aver<<endl;
cout<<endl;
}
void lower(int **qq)
{
int i=0;
while(i<5)
{
int k=0;
for(int j=0;j<4;j++)
{
if(*(*(qq+i)+j)<60)
k++;
if(k>=2)
{
cout<<"两门以上成绩低于60分的学生的学号是:"<<i+1<<endl;
cout<<"各科目的成绩为:";
for(j=0;j<4;j++)
cout<<*(*(qq+i)+j)<<'\t';
cout<<endl;
cout<<endl;
}
}
i++;
}
cout<<endl;
}
void upper(int **qq)
{
int i=0,k=0;
cout<<"全部课程在85分以上或者平均成绩在90分以上的学生学号为:";
while(i<5)
{
double aver=0.0;
for(int j=0;j<4;j++)
{
if(*(*(qq+i)+j)>=85)
k++;
aver +=*(*(qq+i)+j)/4.0;
if(k==4||aver>=90.0)
cout<<i+1<<'\t';
}
i++;
}
cout<<endl;
}