概述
第八章 编程练习
1.编写通常接受一个参数(地址),并打印该字符串的函数。然而,如果提供了第二个参数(不为0),则该函数打印字符串的次数将为该函数被调用的次数。次数不等于第二个参数的值,而等于函数被调用的次数。
//编写通常接受一个参数(地址),并打印该字符串的函数。然而,如果提供了第二个参数(不为0),则该函数打印字符串的次数将为该函数被调用的次数
//次数不等于第二个参数的值,而等于函数被调用的次数。
#include<iostream>
void print(char * str ,int n=0);
int main()
{
using namespace std;
char str[20];
int n;
cout<<"Enter string:"<<endl;
cin.get(str,20).get();
cout<<"Enter a int(int !=0):"<<endl;
if (cin>>n)
{
cout<<"Enter string or int:"<<endl;
print(str,n);
}
else
{
cout<<"Only enter string:"<<endl;
print(str);
}
cin.get();
cin.get();
return 0;
}
void print(char *str,int n)
{
using namespace std;
if (n !=0)
{
print(str,n-1);
}
cout<<"第 "<<n+1<<" 次调用print函数:"<<"t"<<str<<endl;
}
2.CandyBar结构包含3个成员。第一个成员存储品牌名称;第二个存储重量(可能有小数点);第三个存储热量(整数)。编写一个程序,它使用一个这样的函数,即将CandyBar的引用、char指针、double和int作为参数,并用最后三个值设置相应的结构成员。最后三个参数的默认值分别为“Millennium Munch”、2.85和350.另外,该程序还包含一个以CandyBar的引用为参数,并显示结构内容的函数。请尽可能使用const。
//CandyBar结构包含3个成员。第一个成员存储品牌名称;第二个存储重量(可能有小数点);第三个存储热量(整数)。
//编写一个程序,它使用一个这样的函数,即将CandyBar的引用、char指针、double和int作为参数,并用最后三个值设置相应的结构成员。
//最后三个参数的默认值分别为“Millennium Munch”、2.85和350.另外,该程序还包含一个以CandyBar的引用为参数,并显示结构内容的函数。
//请尽可能使用const。
#include<iostream>
#include<cstring>
using namespace std;
struct CandyBar
{
char band[25];
double weight;
int calorie;
};
char init_band[25] = "Millennium Munch";
void setting(CandyBar & cb,const char * band=init_band,const double weight=2.85,int calorie=350);
void show(const CandyBar & cb);
int main()
{
CandyBar cb;
char input_band[25];
double input_weight;
int input_calorie;
setting(cb);
cout<<"设置默认值为:n";
show(cb);
cout<<"请输入品牌名称:";
cin.get(input_band,25).get();
cout<<"请输入品牌重量:";
cin>>input_weight;
cout<<"请输入品牌热量:";
cin>>input_calorie;
setting(cb,input_band,input_weight,input_calorie);
show(cb);
setting(cb);
cout<<"再次设置默认值为:n";
show(cb);
cin.get();
cin.get();
return 0;
}
void setting(CandyBar & cb,const char * band,const double weight,int calorie)
{
strcpy(cb.band,band);
cb.weight=weight;
cb.calorie=calorie;
}
void show(const CandyBar & cb)
{
cout<<"当前品牌的名称为:"<<cb.band<<endl;
cout<<"当前品牌的重量为:"<<cb.weight<<endl;
cout<<"当前品牌的热量为:"<<cb.calorie<<endl;
}
3.编写一个程序,它接受一个指向string对象的引用作为参数,并将该string对象的内容转换为大写(可以使用toupper函数)。编写一个程序,它通过使用一个循环让您能够用不同的输入来测试这个函数。
//编写一个程序,它接受一个指向string对象的引用作为参数,并将该string对象的内容转换为大写(可以使用toupper函数)
//编写一个程序,它通过使用一个循环让您能够用不同的输入来测试这个函数。
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
void upper(string & str);
int main()
{
string str;
cout<<"Enter a string (q to quit):";
getline(cin,str);
while(((str[0] !='q')&&(str.size()==1)) || (str.size()!=1))
{
upper(str);
cout<<str<<endl;
cout<<"Next string (q to quit):";
getline(cin,str);
}
cout<<"Byb.";
cin.get();
return 0;
}
void upper(string & ttt)
{
for (int i=0;i<ttt.size();i++)
ttt[i]=toupper(ttt[i]);
}
4.给了一个框架,提供这个框架描述的函数和原型。应用两个show()函数,每个都使用默认参数。尽可能使用const参数。set()使用new分配足够的空间来存储指定的字符串。这里使用的技术与设计和实现类时使用的相似。
//给了一个框架,提供这个框架描述的函数和原型。
//应用两个show()函数,每个都使用默认参数。尽可能使用const参数。
//set()使用new分配足够的空间来存储指定的字符串。这里使用的技术与设计和实现类时使用的相似。
#include<iostream>
using namespace std;
#include<cstring> //for strlen(),strcpy
struct stringy{
char * str; //points to a string
int ct; //length of string (not counting '