1.(简单用一下引用变量,没有采用书中的题目)定义一个替身结构体,存储名字(char[])和力量值(int)。使用结构体引用作为形参写两个函数,一个不加const,使得能对定义的结构体做修改,另一个加上const不变动它的内容。第一个函数设置替身的名字和力量值,第二个函数输出结构的信息。

#include<iostream>
using namespace std; struct stand
{
int power;
char name[15];
}; void show_stand(const stand & temp_show);
void set_stand(stand & temp_set); int main()
{
stand new_stand; set_stand(new_stand);
show_stand(new_stand); system("pause");
} void show_stand(const stand & temp_show)
{
cout << "name:" << temp_show.name << endl;
cout << "power:" << temp_show.power << endl;
} void set_stand(stand & temp_set)
{
cout << "Enter stand's name:";
cin .get(temp_set.name,15);
cin.get();
cout << "Enter stand's power:";
cin >> temp_set.power;
cout << "\n";
}

2.编写一个函数,接受一个指向string对象的引用作为参数,并将该string对象的内容转换为大写,使用toupper函数。通过循环提示输入。

#include<iostream>
#include<cctype>
#include<string>
using namespace std; void upper_string(string & string_temp); int main()
{
string input_string; cout << "Enter a string (q to quit): "; getline(cin,input_string); while (input_string != "q")
{
upper_string(input_string);
cout << input_string;
cout << "\nNext string (q to quit): ";
getline(cin, input_string);
} cout << "Bye.\n";
system("pause");
} void upper_string(string & string_temp)
{
for (int i = 0; string_temp[i] != '\0'; i++)
{
string_temp[i] = toupper(string_temp[i]);
}
}

3.完成书上的例程,编写一个set函数,接受一个结构体引用和一个字符串,使用new为结构体内的字符指针动态分配空间以存储该字符串。利用函数重载编写两个show函数,都使用默认参数,一个使用上面定义的结构体,输出它存储的字符串,另一个直接输出传入的字符串。

#include<iostream>
#include<cstring>
using namespace std; struct stringy {
char * str;
int ct;
}; void set(stringy & st_ref, string str_set_temp);
void show(const stringy st_show_temp, int times = 1);
void show(const string str_show_temp, int times = 1); int main()
{
stringy beany;
char testing[] = "Reality isn't it used to be."; set(beany,testing);
show(beany);
show(beany, 2);
testing[0] = 'D';
testing[1] = 'u';
show(testing, 3);
show("Done!"); system("pause");
} void set(stringy & st_ref, string str_set_temp)
{
st_ref.ct = str_set_temp.length(); //获取字符串的长度
st_ref.str = new char[st_ref.ct]; //为结构体引用里面的字符数组分配空间
for (int i = 0; i < st_ref.ct; i++)
{
st_ref.str[i] = str_set_temp[i];
}
} void show(const stringy st_show_temp, int times = 1)
{
for (int t = 0; t < times; t++)
{
for (int i = 0; i < st_show_temp.ct; i++)
{
cout << st_show_temp.str[i];
}
cout << "\n";
}
} void show(const string str_show_temp, int times = 1)
{
for (int t = 0; t < times; t++)
{
for (int i = 0; i < str_show_temp.length(); i++)
{
cout << str_show_temp[i];
}
cout << "\n";
}
}

4.简单使用模板函数。编写模板函数,接受不同类型的数组和其大小,输出其中的最大值。先使用int数组测试,再使用double数组测试。

#include<iostream>
using namespace std; template <typename T>
T maxn(T * t_ptr, int n); template <typename T>
void input_num(T * temp, int n); int main()
{
int array_size; //先使用int数组测试
cout << "How many numbers:(int) ";
cin >> array_size; int * int_array = new int [array_size];
input_num(int_array,array_size);
cout << "Max number: " << maxn(int_array, array_size) << endl; //再使用double数组测试
cout << "How many numbers:(double) ";
cin >> array_size; double * double_array = new double[array_size];
input_num(double_array, array_size);
cout << "Max number: " << maxn(double_array, array_size) << endl; delete[]int_array;
delete[]double_array;
system("pause");
} template <typename T>
T maxn(T * t_ptr, int n)
{
T max = t_ptr[0];
for (int i = 0; i < n; i++)
{
if (t_ptr[i] > max)
max = t_ptr[i];
else {};
}
return max;
} template <typename T>
void input_num(T * temp, int n)
{
cout << "Enter the numbers:" << endl;
for (int i = 0; i < n; i++)
{
cin >> temp[i];
}
}

*需要注意模板函数每次函数原型和函数的实现之前,都要加上template<typename ...>

《C++primerplus》第8章练习题的更多相关文章

  1. 《C++ primerplus》第13章练习题

    1.对CD类的派生练习.基类CD类存储作者和作品号等信息,派生类Classic额外增加一格"主要作品"的信息.主函数使用拷贝构造函数.按引用传递参数的函数和指针来测试基类和派生类的 ...

  2. 《C++primerplus》第12章练习题

    做一下倒数两题,都是在队列模拟的程序基础上做点修改测试. 5.找出平均等候时间为1分钟时,每小时到达的客户数为多少(试验时间不少于100小时). 指定队伍最大长度10人,模拟100小时.粗略估计答案在 ...

  3. 《C++primerplus》第11章练习题

    1.修改程序清单11.5(随机漫步),使之以特定的格式将结果写入文件中. //vector.h -- Vector Class #ifndef _VECTOR_H_ #define _VECTOR_H ...

  4. 《C++primerplus》第10章练习题

    1.定义一个类表示银行账户.数据成员包括姓名,账号和存款.成员函数可以执行初始化数据.显示数据和取款存款的功能. //Bank.cpp #include<iostream> #includ ...

  5. 《C++primerplus》第9章练习题

    1.(未使用原书例题)练习多文件组织.在一个头文件中定义一种学生的结构体,存储姓名和年龄,声明三个函数分别用于询问有多少个学生,输入学生的信息和展示学生的信息.在另一个源文件中给出所有函数的定义.在主 ...

  6. 《C++primerplus》第7章练习题

    1.用户不断输入两个数,计算调和平均数,直到其中一个数为0. #include<iostream> using namespace std; double harm_mean(double ...

  7. 《C++primerplus》第6章练习题

    本来前面五题都做完了,写博客时没保存好草稿= =,写了个整合版的程序,实现前五题的关键部分. 1.定义一个叫jojo的结构,存储姓名.替身和力量值,使用动态结构数组初始化二乔.承太郎和乔鲁诺乔巴纳等人 ...

  8. 《C++primerplus》第4章练习题

    注:略过部分题目,修改了题设要求,实现差不多的功能 1.使用字符数组.要求用户输入姓名,等第和年龄,输出其姓名和年龄,等第降一级(即字母高一级). #include<iostream> u ...

  9. python第一章练习题

    本章总节 练习题 1.简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释 编译型:把源代码编译成机器语言的可执行文件,程序执行的时候执行可执行文件即可. 优点:程序执行不 ...

随机推荐

  1. Collection/Map关系图

  2. python小白入门基础(一:注释)

    # 注释:就是对代码的解释,方便大家阅读代码.注释后的代码程序不会执行.# 注释的分类:单行注释和多行注释# (1)单行注释# 在代码前面加个#字符print("hello world&qu ...

  3. Web测试和前端技术

    Html Form表单 用户需要输入内容的地方一般有一个表单元素 method:GET/POST action:要打开/提交的目文件 Table表格 检查表格数据和数据库的一致性 表格的布局检测:填满 ...

  4. 利用负margin-bottom去除列表最后一个li元素的border-bottom

    负margin-bottom不会影响元素的实际大小,只会使得后面的元素上移 以第二个里为例,由于第一个li的margin-bottom导致第二个li被上拉1px,第二个li最上面的1px高度覆盖在第一 ...

  5. three.js尝试(二)模拟游戏开发:3D人物在地图上行走

    本次尝试,模拟了一个小人物在场景中行走,使用简单模型建立了森林,图片纹理模拟草地,加载3D模型呈现人物,使用按键asdw模拟人物的行走,行走和站立时人物的切换等. 主要用到点:3D模型的加载,模型的动 ...

  6. Java反射(一)

    什么是反射? 在程序的运行过程中,可以动态的创建对象. 反射的基石是什么? 字节码对象是反射的基石.字节码对象:Java类文件通过javac进行编译后生成的xxx.class文件,此文件由jvm加载至 ...

  7. 小程序开发-block组件的使用

    微信小程序中,block不是一个组件,而是一个包装元素,不会在页面中做任何渲染. 使用情况:条件渲染 wx:if 因为 wx:if 是一个控制属性,需要将它添加到一个标签/组件上,用于控制隐藏与显示. ...

  8. JVM学习第三天(JVM的执行子系统)之字节码指令

    早上看了Class类文件结构,晚上继续来看字节码指令,毕竟谁也不是一步登天的(说白了还是穷); 字节码指令 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode ...

  9. [转载] 微软发布 SURFACE DUO ANDROID SDK 和模拟器

    模拟器截图 微软今天发布了双屏折叠设备 Surface Duo Android 开发工具(SDK 和模拟器),Windows 10X 开发工具和模拟器之后 2 月 11 日发布,并宣布了新的针对双屏体 ...

  10. CSS 常见样式 特殊用法 贯穿线&徽章&箭头

    ### 贯穿渐变线,中间插值- 如图: > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190427200554843.png) ![在这里插入图片描述 ...