第7章
7.13-1调和平均数
//7.13-1 excise.cpp 调和平均数
#include <iostream>
double calculate(double a,double b);
using namespace std;
main()
{
double x,y,z;
cout<<"please input x and y value: ";
cin>>x>>y;
while(x!=0&&y!=0)
{
z=calculate(x,y);
cout<<"调和平均数是"<<z<<endl;
cout<<"please input x and y value again: ";
cin>>x>>y;
}
cout<<"输入的值不符合要求,退出";
return 0;
}
double calculate(double a,double b)
{
double z;
z=2.0*a*b/(a+b);
return z;
}
7.13-2.cpp 高尔夫 数组求值
//7.13-2 excise golf
#include <iostream>
int set(double * pa,int size);
void show(const double * pa ,int real_size);
void average(const double * pa ,int real_size);
using namespace std;
int main()
{
int size=10;
double score[10]={0};
int real_size;
real_size=set(score,size);
cout<<"数组设置已经完成!"<<endl;
cout<<real_size;
show(score,real_size);
cout<<endl;
cout<<"以上数组的平均值是: "<<endl;
average(score,real_size);
cout<<endl;
return 0;
}
int set(double * pa ,int size)
{
int i;
cout<<"please golf score:";
for(i=0;i<size;i++)
{
cin>>pa[i];
if(!cin)
break;
}
return i;
}
void show(const double * pa,int real_size)
{
for(int i=0;i<real_size;i++)
{
cout<<"数组score["<<i<<"]= "<<pa[i]<<";";
cout<<endl;}
}
void average(const double * pa,int real_size)
{
double sum=0.0;
double ave;
for(int i=0;i<real_size;i++)
{
sum+=pa[i];
}
ave=sum/real_size;
cout<<"数组的平均值是: "<<ave;
}
7.13-3excise cpp 结构体计算体积
//7.13-3 结构
#include <iostream>
struct box{
char maker[40];
float height;
float width;
float length;
float volume;
};
using namespace std;
//prototype
void showa(struct box box1);
void set_volume(struct box * box2);
int main()
{
struct box boxtemp;
int a;
cout<<"please input struct's members maker:";
cin>>boxtemp.maker;
cout<<"please input struct's members height:";
cin>>boxtemp.height;
cout<<"please input struct's members length:";
cin>>boxtemp.length;
cout<<"please input struct's members width:";
cin>>boxtemp.width;
cout<<"please input struct's members volume:";
cin>>boxtemp.volume;
cout<<"输入已经完成"<<endl;
showa(boxtemp);
set_volume(&boxtemp);
cout<<"再次显示结构成员"<<endl;
showa(boxtemp);
return 0;
}
void showa(struct box box1)
{
cout<<box1.maker<<endl;
cout<<box1.height<<endl;
cout<<box1.length<<endl;
cout<<box1.width<<endl;
cout<<box1.volume<<endl;
}
void set_volume(struct box * box2)
{
box2->volume=(box2->height)*(box2->width)*(box2->length);
}
//7.13-5 excise 递归算阶乘
#include <iostream>
int jiecheng(int n);
using namespace std;
int main()
{
int a;
cout<<"please input value: ";
cin>>a;
while(a)
{
if(a==0)
cout<<a<<"的阶乘1";
else
//cout<<"adf";
cout<<a<<"的阶乘为"<<jiecheng(a)<<endl;
cin>>a;
}
return 0;
}
int jiecheng(int n)
{
int m;
if(n>0)
m=n*jiecheng(n-1);
else return 1;
return m;
}
//7.13-6 excise cpp 填写数组 显示并反转数组
#include <iostream>
using namespace std;
int fill_array(double (* pa),int size);
void show_array(double (* pa),int size);
void reverse_array(double (* pa),int size);
main()
{
int size=10;
double array[size];
int count=0;
count=fill_array(array,size);
show_array(array,count);
reverse_array(array,count);
cout<<"反转之后的数组为:"<<endl;
show_array(array,count);
return 0;
}
int fill_array(double (* pa),int size)
{
double a;
int count=0;
for(int i=0;i<size;i++)
{
cout<<"请输入数组的第"<<i+1<<"个元素: ";
cin>>a;
if(cin)
{
pa[i]=a;
count++;
}
else break;
}
return count;
}
void show_array(double (* pa),int size)
{
for(int i=0;i<size;i++)
{
cout<<"数组中的第"<<i+1<<"值为:"<<pa[i]<<endl;
}
}
void reverse_array(double (* pa),int size)
{
double m;
int i=0;
int j=size-1;
for(;i<=j/2;i++,j--)
{
m=pa[i];
pa[i]=pa[j];
pa[j]=m;
}
}
//7.13.6.cpp 指针表示区间的数组设置值,显示值,重新赋值
#include <iostream>
using namespace std;
const int Max=10;
double * fill_array(double * begin,double * end);//原型 fill_array
void show_array(const double * begin,const double * end);//原型 show_array
void revalue(double * begin,double * end,double r);//原型 revalue
int main(){
double properties[Max]={0};
double * pa;
double r=3.5;
int i,j;
cout<<"请输入数组开始位置:";
cin>>i;
cout<<"请输入数组结束位置:";
cin>>j;
if(0<=i<j<=Max)
{
cout<<sizeof(double)<<endl;
cout<<& properties[i]<<":"<<& properties[j]<<endl;
pa=fill_array(& properties[i],& properties[j]);//调用填充函数 注意参数
cout<<pa;
show_array(properties,pa);//调用显示函数
cout<<"重新赋值之后的数组为:"<<endl;
revalue(& properties[i],& properties[j],r);
show_array(properties,pa);
}
else return 1;
return 0;
}
double * fill_array(double * begin,double * end)//填充数组的实现
{
double temp;
cout<<end-begin+1<<endl;
for(;begin<=end;begin++)
{
cout<<"please input a double value: ";
cin>>temp;
if(!cin)
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"bad input;input process terminated .\n";
break;
}
else if(temp<0)//输入的是负值则跳出循环
break;
*begin=temp;//数组赋值
}
return --begin;
}
void show_array(const double * begin,const double * end)//显示数组中各个元素的值 这里的const 用来保证不会修改原始的数组;
{
int i=0;
for(begin;begin<=end;begin++)
{
cout<<"protery #"<<i++<<"="<<*begin<<endl;
}
}
void revalue(double * begin,double * end,double r)//重新赋值
{
for(begin;begin<=end;begin++)
*begin*=r;
}
//arrobj.cpp 7.13.8-a excise const char * 类型四季字符存储及double数组的写入和读出
#include <iostream>
using namespace std;
void fill(double * pa);
void show(const double * pa);
const char arr[4][6]={{'s','p','r','i','n','g'},{'s','u','m','m','e','r'},{'f','a','l','l'},{'w','i','n','t','e','r'}};
const char (*p)[6]=arr;
main()
{
double expenses[4];
fill(expenses);
show(expenses);
return 0;
}
void fill(double * pa)
{
for(int i=0;i<4;i++)
{
cout<<"please enter ";
for(int j=0;j<6;j++)
cout<<p[i][j];
cout<<" expenses: ";
cin>>pa[i];
}
}
void show(const double * pa)
{
double total=0.0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
cout<<p[i][j];
cout<<" :$ "<<pa[i]<<endl;
total+=pa[i];
}
cout<<"total expenses: $ " <<total<<endl;
}
//arrobj.cpp 7.13.8-a excise const char * 类型四季字符存储及结构体成员的写入和读出
#include <iostream>
using namespace std;
struct array{
double expenses[4];
};
void fill(array * pa);//prototype
void show(const array * pa);
const char arr[4][6]={{'s','p','r','i','n','g'},{'s','u','m','m','e','r'},{'f','a','l','l'},{'w','i','n','t','e','r'}};
const char (*p)[6]=arr;
main()
{
struct array output;
fill(&output);
show(&output);
return 0;
}
void fill(array * pa)
{
for(int i=0;i<4;i++)
{
cout<<"please enter ";
for(int j=0;j<6;j++)
cout<<p[i][j];
cout<<" expenses: ";
cin>>pa->expenses[i];
}
}
void show(const array * pa)
{
double total=0.0;
for(int i=0;i<4;i++)
{
for(int j=0;j<6;j++)
cout<<p[i][j];
cout<<" :$ "<<pa->expenses[i]<<endl;
total+=pa->expenses[i];
}
cout<<"total expenses: $ " <<total<<endl;
}
//7.13.9 excise 框架
#include <iostream>
using namespace std;
const int SLEN=30;
struct student{
char fullname[SLEN];
char hobby[SLEN];
int ooplevel;
};
int getinfo(student pa[],int n);
/*
void display1(student st);
void display2(const student * ps);
void display3(const student pa[],int n);
*/
void show(student pa[],int n);
int main()
{
cout<<"enter class size: ";
int class_size;
cin>>class_size;
while(cin.get()!='\n')
continue;
student * ptr_stu=new student[class_size];
int entered=getinfo(ptr_stu,class_size);
show(ptr_stu,entered);
/*
for(int i=0;i<entered;i++)
{
display1(ptr_stu[i]);
display2(&ptr_tu[i]);
}
display3(ptr_stu,entered);
*/
delete [] ptr_stu;
cout<<"Done\n";
return 0;
}
int getinfo(student pa[],int n)
{
int count=0;
for(int i=0;i<n;i++)
{
cout<<"enter student fullname: ";
cin>>pa[i].fullname;
if(!cin) break;
cout<<"enter student hobby: ";
cin>>pa[i].hobby;
if(!cin) break;
cout<<"enter student ooplevel: ";
cin>>pa[i].ooplevel;
if(!cin) break;
count++;
}
return count;
}
void show(student pa[],int n)
{
for(int i=0;i<n;i++)
{
cout<<pa[i].fullname<<pa[i].hobby<<pa[i].ooplevel<<endl;
}
}
第8章
8.8.2 结构体
//8.8.2 excise cpp
#include <iostream>
using namespace std;
struct candybar{
char name[15];
double weight;
int fat;
};
//prototype
int set_candybar(candybar & pc,const char * pn,double pw,int pf);
void show_candybar(const candybar & pc);
int main()
{
candybar c1;
set_candybar(c1,"MACOS PC DONG",2.85,350);
cout<<"设置成功!"<<endl;
show_candybar(c1);
return 0;
}
int set_candybar(candybar & pc, const char * pn,double pw,int pf)
{
const char * temp=pn;
if(!pn)
{
cout<<"pn=null";
return -1;
}
int i=0;
while((*pn)!='\0')
{
pn++;
i++;
}
if(i>32)
{
cout<<"超出name元素的最大长度"<<endl;
return -2;
}
pn=temp;
for(int j=0;j<i;j++)
{
pc.name[j]=*pn;
pn++;
}
pc.weight=pw;
pc.fat=pf;
}
void show_candybar(const candybar & pc)
{
cout<<pc.name<<endl;
cout<<pc.weight<<endl;
cout<<pc.fat<<endl;
}
8.8.3
//8.8.3 excise string
#include <iostream>
#include <cctype>
#include <string>
using namespace std;
void str_to_upper(string & str);
int main()
{
string str1;
cout<<"enter a string :";
while(getline(cin,str1)&&str1!="q"&&str1!="Q")
{
str_to_upper(str1);
cout<<str1<<endl;
cout<<"next enter string: ";
}
cout<<"bye!"<<endl;
return 0;
}
void str_to_upper(string & str)
{
int n=str.size();
for(int i=0;i<n;i++)
{
str[i]=toupper(str[i]);
}
}
8.8.4 (一) 程序框架
//8.8.4 excise .cpp
#include <iostream>
using namespace std;
#include <cstring> //for strlen(), strcpy()
struct stringy
{
char *str;
int ct;
};
//prototypes for set(),show(),and show() go here
void show(const stringy & ps,int i=1);//prototype
void show(const char * str,int i=1);
void set(stringy &ps,const char * str);
int main()
{
stringy beany;
char testing[]="reality isn't what it used to be.";
set(beany,testing);
cout<<beany.str<<endl;
show(beany);
show(beany,2);
testing[0]='D';
testing[1]='u';
show(testing);
show(testing,3);
show("Done!");
return 0;
}
void show(const stringy & ps,int i)//结构体
{if(i=1)
{
cout<<ps.str<<":";
cout<<ps.ct<<endl;}
else{
for(int j=0;j<i;j++)
{
cout<<ps.str<<":";
cout<<ps.ct<<endl;
}
}
}
void show(const char * str,int i)//字符串
{
if(i=1)
{
cout<<str<<endl;
}
else
{
for(int j=0;j<i;j++)
{
cout<<str<<endl;
}
}
}
void set(stringy & ps,const char * str)
{
ps.ct=strlen(str);
ps.str=new char[ps.ct+1];
strcpy(ps.str,str);
}
//8.8.5 excise cpp
#include <iostream>
using namespace std;
template <typename T>
T max5(T ar[]);
int main(void)
{
int array1[5]={0};
double array2[5]={0};
for(int i=0;i<5;i++)
{
cout<<"please enter list "<<i+1<<" int value:"<<endl;
cin>>array1[i];
}
int maxint=max5(array1);
cout<<"maxint: "<<maxint<<endl;
for(int i=0;i<5;i++)
{
cout<<"please enter list "<<i+1<<" double value:"<<endl;
cin>>array2[i];
}
double maxdouble=max5(array2);
cout<<"maxdouble:"<<maxdouble<<endl;
return 0;
}
template <typename T>
T max5(T ar[])
{
T temp;
temp=ar[0];
for(int i=0;i<5;i++)
{
if(temp<ar[i+1])
temp=ar[i+1];
}
return temp;
}
//8.8.6 excise cpp
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
template <typename T>
T maxn(T ar[],int n);
template <> const char * maxn(const char * ar[],int n);
int main(void)
{
int array1[6];
double array2[4];
const char * array3[5]={
"asdf","asdfasdf","asdfasdfasdfasdf","adsfdf","aa"
};
for(int i=0;i<6;i++)
{
cout<<"int value: "<<i+1<<"=";
cin>> array1[i];
}
int a1=maxn(array1,6);
cout<<a1<<endl;
for(int i=0;i<4;i++)
{
cout<<"double value: "<<i+1<<"=";
cin>> array2[i];
}
double a2=maxn(array2,6);
cout<<a2<<endl;
const char * a3=maxn(array3,5);
cout<<&a3<<endl;
return 0;
}
template <typename T>
T maxn(T ar[],int n)
{
T temp;
temp=ar[0];
for(int i=0;i<n;i++)
{
if(temp<ar[i])
temp=ar[i];
}
return temp;
}
template <> const char * maxn(const char * ar[],int n)
{
const char * temp=ar[0];
for(int i=0;i<n;i++)
{
if(strlen(temp)<strlen(ar[i]))
temp=ar[i];
}
return temp;
}