2.编程实现课本每一个编程习题。
习题1
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[10],i;
for(i=0;i<10;i++)
*(a+i)=2*(i+1);
for(int *p=a;p<a+10;p++)
cout<<setw(4)<<*p;
cout<<endl;
return 0;
}
习题2
#include<iostream>
using namespace std;
void str(char *);
int main()
{
char STR[20];
cout<<"请输入一个大写字符串:";
cin.get(STR,20);
str(STR);
cout<<"转换为小写字符串:"<<STR<<endl;
return 0;
}
void str(char *p)
{
for(;*p!='\0';p++)
if(*p>='A'&&*p<='Z')
*p+='a'-'A';
}
习题3
#include<iostream>
using namespace std;
int main()
{
char str[100],*p;
cin.get(str,100);
p=str;
for(;*p!='\0';p++)
{
if(*p!=' ')
cout<<*p;
}
cout<<endl;
return 0;
}
习题4
#include<iostream>
using namespace std;
int main()
{
char *week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int i;
while(1) //while(1)表示无限循环?还有其他while(0),while(2),while(3).... 吗?
{
cout<<"please input week No.:";
cin>>i;
if(i<0||i>6)
break;
cout<<"week No."<<i<<" is "<<week[i]<<endl;
}
return 0;
}
习题5
#include<iostream>
using namespace std;
int main()
{
int *p[2],**pp,i,j;
int a[2][3]={7,2,5,4,3,6};
p[0]=a[0];
p[1]=a[1];
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
cout<<*(p[i]+j)<<'\t';
cout<<endl;
}
pp=p;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
cout<<*(*(pp+i)+j)<<'\0';
cout<<endl;
}
return 0;
}
习题6
#include<iostream>
using namespace std;
int max(int *s);
int main()
{
int *p[3],i,j,a[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
cin>>a[i][j];
p[0]=a[0];
p[1]=a[1];
p[2]=a[2];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
cout<<*(p[i]+j)<<'\t';
cout<<endl;
}
cout<<"最大元素为:"<<max(*p)<<endl;
return 0;
}
int max(int *s)
{
int max,i,j;
max=*s;
for(i=0;i<12;i++)
{
if(s[i]>max)
max=(s[i]);
}
return max;
}
3. 有n个人围成一个圆圈,从第一个人开始报数,从1到3循环,凡是报3的退出圈子,问最后退出圈子的人是原来的几号。
#include<iostream>
using namespace std;
int baoshu(int);
int main()
{
int n,hao;
cout<<"请输入人数:"<<endl;
cin>>n;
hao=baoshu(n);
cout<<"最后退出的是第"<<hao<<"号"<<endl;
return 0;
}
int baoshu(int m)
{
int *p,a[100],i,j=0,count=m;
for(i=0;i<m;i++)
a[i]=i+1; //排序号
do
{
for(i=0;i<m;i++,j++)
{
*(p+j)=a[i];
if(j%3!=0)
count--;
}
m=count; //剩下的人数
} while(count>0);
return *(p+j); //最后一个地址就是最后一个人
}
一个数组只能用一个指针
4.一个班有5个学生,每一个学生有几门成绩(到底是几门自已定,或3或4或5或6),定义函数来完成下面功能:
计算第2门课成的平均分;
找出有2门以上成绩不及格的学生,并输出其学号和全部课程成绩;
找出平均成绩在90以上或者全部课程在85分以上的学生。
#include<iostream>
using namespace std;
int a[3][5];
int*p[3];
void avg_2();
void failure();
void good();
int main()
{
p[0]=a[0];
p[1]=a[1];
p[2]=a[2];
for(int j=0;j<5;j++)
{
cout<<"请按顺序输入第"<<j+1<<"位学生的语文,数学,英语三科成绩:";
for(int i=0;i<3;i++)
cin>>a[i][j];
}
cout<<"1号\t2号\t3号\t4号\t5号"<<endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<5;j++)
cout<<a[i][j]<<'\t';
cout<<endl;
}
avg_2();
failure();
cout<<"平均成绩在90以上或者全部课程在85分以上的学生有:";
good();
return 0;
}
void avg_2()
{
double sum=0;
double avg;
for(int j=0;j<5;j++)
sum+=a[1][j];
avg=sum/5;
cout<<"第二门课成绩的平均分为:"<<avg<<endl;
}
void failure()
{
for(int j=0;j<5;j++)
if((*(p[0]+j)<60&&*(p[1]+j)<60)||
(*(p[1]+j)<60&&*(p[2]+j)<60)||
(*(p[0]+j)<60&&*(p[2]+j)<60))
{
cout<<"2门以上成绩不及格的学生是:"<<j+1<<"号,"<<endl;
cout<<"他的全部课程成绩为:"<<endl;
cout<<"语文:"<<*(p[0]+j)<<"\t数学:"<<*(p[1]+j)<<"\t英语"<<*(p[2]+j)<<endl;
}
}
void good()
{
for(int j=0;j<5;j++)
if((*(p[0]+j)+*(p[1]+j)+*(p[2]+j))/3>=90||
(*(p[0]+j)>=85&&*(p[1]+j)>=85&&*(p[2]+j)>=85))
cout<<j+1<<"号"<<endl;
}