《C++primerplus》第9章练习题
发布时间:2020-12-16 09:19:08 所属栏目:百科 来源:网络整理
导读:? 1.(未使用原书例题)练习多文件组织。在一个头文件中定义一种学生的结构体,存储姓名和年龄,声明三个函数分别用于询问有多少个学生,输入学生的信息和展示学生的信息。在另一个源文件中给出所有函数的定义。在主程序中使用new初始化结构指针,调用三个函
?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,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- 【转】SQLite3源码在Windows及WinCE平台下的编译
- 服务器端编程心得(二)—— Reactor模式
- ruby-on-rails – 如何检查导轨中的过滤链(3.0.8
- c# – 无法让自己的主机在NServiceBus上工作
- c – 每次我使用struct而不是class时,我会杀死一
- 如何传递和访问C向量到OpenCL内核?
- cocos2dx3.5 中listview item里面有ControlButto
- ruby-on-rails-3 – 适用于ruby 1.9.x的metric_f
- 获取C#类中的屏幕分辨率(无表格/ wpf / aps.net
- JSON.stringify可以输出格式化的JSON字符串
热点阅读