《C++primerplus》第9章练习题
1.(未使用原书例题)练习多文件组织。在一个头文件中定义一种学生的结构体,存储姓名和年龄,声明三个函数分别用于询问有多少个学生,输入学生的信息和展示学生的信息。在另一个源文件中给出所有函数的定义。在主程序中使用new初始化结构指针,调用三个函数。
//main.cpp
#include<iostream>
#include"Extra.h"
using namespace std; int main()
{
set_student(); student * students_pt = new student[student_num]; input_student(students_pt); show_student(students_pt); delete []students_pt;
system("pause");
}
//Extra.h
#ifndef _EXTRA_H_
#define _EXTRA_H_ #include<iostream>
const int len = 30; struct student
{
char name[len];
int age;
}; extern int student_num; void set_student();
void input_student(student sdu[]);
void show_student(student sdu[]); #endif // !_EXTRA_H_
//DefineExtra.cpp
#include<iostream>
#include"Extra.h"
using namespace std; int student_num = 1; void set_student()
{
cout << "How many students: ";
if (!(cin >> student_num))
cout << "Bad input.";
else {};
cin.get(); //消除换行符,以便cin.get输入
} void input_student(student sdu_i[])
{
for (int i = 0; i < student_num; i++)
{
cout << "Enter student" << i + 1 << "'s name:\n";
cin.get(sdu_i[i].name, len);
cout << "Enter student" << i + 1 << "'s age:\n";
if(cin >> sdu_i[i].age)
cout << "Bad input.";
else {};
cin.get();
}
} void show_student(student sdu_o[])
{
for (int i = 0; i < student_num; i++)
{
cout << "Student " << i + 1 << " | " << sdu_o[i].name << ", age " << sdu_o[i].age;
cout << "\n";
}
}
2.(未使用原书例题,对应第四题)修改上题的程序,使用重载函数编写函数的其它版本,并使用命名空间包括和拓展。主程序的运行过程见注释。
//main.cpp
#include<iostream>
#include"Extra.h"
using namespace std;
using namespace STU; int main()
{
//先询问有几个学生,然后使用new动态创建相应数量的结构体
set_student();
student * students_pt = new student[student_num]; //输入学生的信息并展示
input_student(students_pt);
show_student(students_pt); //再定义一个student结构体,存储交换生的信息并展示
student stu_transfer;
char st[] = "Joseph";
input_student(stu_transfer, st, 18);
show_student(stu_transfer); delete []students_pt;
system("pause");
}
//Extra.h
#ifndef _EXTRA_H_
#define _EXTRA_H_ #include<iostream>
#include<cstring> namespace STU
{
const int len = 30; struct student
{
char name[len];
int age;
}; extern int student_num; void set_student();
void input_student(student stu_i_ar[]); //输入学生信息,交互式版本
void input_student(student & stu_i, char str[], int age); //输入学生信息,非交互式版本
void show_student(const student stu_o_ar[]); //展示结构体数组信息的版本
void show_student(const student & stu_o); //展示单个结构体信息的版本
}
#endif // !_EXTRA_H_
//DefineExtra.cpp
#include<iostream>
#include"Extra.h"
using namespace std; int STU::student_num = 1; void STU::set_student()
{
cout << "How many students: ";
if (!(cin >> STU::student_num))
cout << "Bad input.";
else {};
cin.get(); //消除换行符,以便cin.get输入
} void STU::input_student(student stu_i_ar[])
{
for (int i = 0; i < STU::student_num; i++)
{
cout << "Enter student" << i + 1 << "'s name:\n";
cin.get(stu_i_ar[i].name, STU::len);
cout << "Enter student" << i + 1 << "'s age:\n";
if(!(cin >> stu_i_ar[i].age))
cout << "Bad input.";
else {};
cin.get();
}
} void STU::input_student(student & stu_i, char str[], int age)
{
strcpy_s(stu_i.name, str); //编译器提示使用
stu_i.age = age;
} void STU::show_student(const student stu_o_ar[])
{
for (int i = 0; i < STU::student_num; i++)
{
cout << "Student " << i + 1 << " | " << stu_o_ar[i].name << ", age " << stu_o_ar[i].age;
cout << "\n";
}
} void STU::show_student(const student & stu_o)
{
cout << "Trasfer student | " << stu_o.name << ", age " << stu_o.age;
}
程序运行结果:

*编译过程中报了好多个编译器运行之前检查不出来的错,总结如下:
1.使用string要注意,它是包含在标准命名空间内的,所以要么using namespace std,要么std::string。
2.注意检查不同文件里声明的函数和其定义,使用的参数类型是不是一致的。
3.strcpy()和strcpy_s()函数的使用注意事项:
https://blog.csdn.net/leowinbow/article/details/82380252
《C++primerplus》第9章练习题的更多相关文章
- 《C++ primerplus》第13章练习题
1.对CD类的派生练习.基类CD类存储作者和作品号等信息,派生类Classic额外增加一格"主要作品"的信息.主函数使用拷贝构造函数.按引用传递参数的函数和指针来测试基类和派生类的 ...
- 《C++primerplus》第12章练习题
做一下倒数两题,都是在队列模拟的程序基础上做点修改测试. 5.找出平均等候时间为1分钟时,每小时到达的客户数为多少(试验时间不少于100小时). 指定队伍最大长度10人,模拟100小时.粗略估计答案在 ...
- 《C++primerplus》第11章练习题
1.修改程序清单11.5(随机漫步),使之以特定的格式将结果写入文件中. //vector.h -- Vector Class #ifndef _VECTOR_H_ #define _VECTOR_H ...
- 《C++primerplus》第10章练习题
1.定义一个类表示银行账户.数据成员包括姓名,账号和存款.成员函数可以执行初始化数据.显示数据和取款存款的功能. //Bank.cpp #include<iostream> #includ ...
- 《C++primerplus》第8章练习题
1.(简单用一下引用变量,没有采用书中的题目)定义一个替身结构体,存储名字(char[])和力量值(int).使用结构体引用作为形参写两个函数,一个不加const,使得能对定义的结构体做修改,另一个加 ...
- 《C++primerplus》第7章练习题
1.用户不断输入两个数,计算调和平均数,直到其中一个数为0. #include<iostream> using namespace std; double harm_mean(double ...
- 《C++primerplus》第6章练习题
本来前面五题都做完了,写博客时没保存好草稿= =,写了个整合版的程序,实现前五题的关键部分. 1.定义一个叫jojo的结构,存储姓名.替身和力量值,使用动态结构数组初始化二乔.承太郎和乔鲁诺乔巴纳等人 ...
- 《C++primerplus》第4章练习题
注:略过部分题目,修改了题设要求,实现差不多的功能 1.使用字符数组.要求用户输入姓名,等第和年龄,输出其姓名和年龄,等第降一级(即字母高一级). #include<iostream> u ...
- python第一章练习题
本章总节 练习题 1.简述编译型与解释型语言的区别,且分别列出你知道的哪些语言属于编译型,哪些属于解释 编译型:把源代码编译成机器语言的可执行文件,程序执行的时候执行可执行文件即可. 优点:程序执行不 ...
随机推荐
- A Walk Through the Forest (最短路+记忆化搜索)
Jimmy experiences a lot of stress at work these days, especially since his accident made working dif ...
- P1164 小A点菜(动态规划背包问题)
题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...
- 详细分析链表中的递归性质(Java 实现)
目录 链表中的递归性质 前言 LeetCode 上关于链表的一道问题 203 号题目 移除链表中的元素 递归的基本概念与示例 链表天然的递归性 小结 链表中的递归性质 前言 在前面的 链表的数据结构的 ...
- 搭建好lnmp后,使用浏览器访问,出现404 Not Found
出现404 Not Found的原因是nginx指向页面不存在,编辑nginx配置文件,修改nginx指向页面路径 root html; 修改为 root /usr/share/nginx/html; ...
- 【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!
写在前面 相信大部分小伙伴在面试过程中,只会针对面试官提出的表面问题来进行回答.其实不然,面试官问的每一个问题都是经过深思熟虑的,面试的时间相对来说也是短暂的,面试官不可能在很短的时间内就对你非常了解 ...
- 19_Python算法
1.冒泡算法 list = [1, 5, 2, 6, 9, 3, 4, 0] print(len(list)) # conunt = 1 while conunt < len(list): fo ...
- 吴恩达《深度学习》-课后测验-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-Week1 Bird recognition in the city of Peacetopia (case study)( 和平之城中的鸟类识别(案例研究))
Week1 Bird recognition in the city of Peacetopia (case study)( 和平之城中的鸟类识别(案例研究)) 1.Problem Statement ...
- [LeetCode]1249. 移除无效的括号(字符串,栈)
题目 给你一个由 '('.')' 和小写字母组成的字符串 s. 你需要从字符串中删除最少数目的 '(' 或者 ')' (可以删除任意位置的括号),使得剩下的「括号字符串」有效. 请返回任意一个合法字符 ...
- asp.net中的日志添加和未处理异常的记录
1.第一次写博客如有错误欢迎纠正.邮箱:Jiangwenyuan0217@163.com: 2.此博客可能对初学者有些帮助,对哪些骨灰级的程序员来说都是分分钟的事了,所以就不用在这里费时间了. 环境说 ...
- react项目结合echarts,百度地图实现热力图
一.最近在一个react项目(antd pro)中需要展示一个热力地图.需求是: 1.热力地图可缩放: 2.鼠标点击可以展示该点地理坐标,及热力值. 3.初始化时候自适应展示所有的热力点. 4.展示热 ...