中国高校课件下载中心 》 教学资源 》 大学文库

《程序设计》课程教学资源(实验指导)C++语言习题集(南京航空航天大学:陈哲)

文档信息
资源类别:文库
文档格式:PDF
文档页数:41
文件大小:531.66KB
团购合买:点击进入团购
内容简介
第1章 C++程序设计基础 第2章 文件操作 第3章 类的基础部分 第4章 类的高级部分 第5章 继承、多态和虚函数 第6章 异常处理 第7章 模板
刷新页面文档预览

学习C/C++V感谢曾经努力的百己程序设计(二)实验指导书C++语言习题集作者:陈哲组织:南京航空航天大学计算机科学与技术学院时间:2022年2月20日The best way to learn a new programming language is by writing programs in it.DennisRitchie(C语言发明者)

程序设计(二)实验指导书 C++ 语言习题集 作者:陈哲 组织:南京航空航天大学 计算机科学与技术学院 时间:2022 年 2 月 20 日 The best way to learn a new programming language is by writing programs in it. —— Dennis Ritchie(C 语言发明者)

目录11C++程序设计基础11.1绪论21.2cout/cin和格式化输出/输入31.3布尔类型(bool)1.4引用类型(&)41.5函数的默认参数41.6函数重载51.7内存的动态分配和释放(new/delete)6第1章作业82文件操作82.1文件流类型(fstream)82.2打开文件和关闭文件(open、close)82.3读写文本文件(流操作符、成员函数)92.4读写二进制文件(read、write)92.5随机读写文件(seep、seekg)102.6流对象作为函数参数10第2章作业11类的基础部分3113.1类(成员变量、成员函数、私有公有)113.2对象(类的实例/变量)133.3内联函数133.4构造函数143.5析构函数163.6对象数组和对象指针第3章作业17194类的高级部分194.1静态成员(static)204.2友元(friend)4.3拷贝构造函数21234.4运算符重载274.5对象组合

目录 1 C++ 程序设计基础 1 1.1 绪论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 cout/cin 和格式化输出/输入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 布尔类型(bool) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 引用类型(&) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 函数的默认参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 函数重载 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.7 内存的动态分配和释放(new/delete) . . . . . . . . . . . . . . . . . . . . . . . . 5 第 1 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 文件操作 8 2.1 文件流类型(fstream) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2 打开文件和关闭文件(open、close) . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 读写文本文件(流操作符、成员函数) . . . . . . . . . . . . . . . . . . . . . . . 8 2.4 读写二进制文件(read、write) . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5 随机读写文件(seep、seekg) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.6 流对象作为函数参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 第 2 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 类的基础部分 11 3.1 类(成员变量、成员函数、私有公有) . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 对象(类的实例/变量) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3 内联函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.4 构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.5 析构函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.6 对象数组和对象指针 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 第 3 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4 类的高级部分 19 4.1 静态成员(static) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2 友元(friend) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.3 拷贝构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.4 运算符重载 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.5 对象组合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

目录作者:陈哲第4章作业28305继承、多态和虚函数305.1继承、多重继承305.2继承中的私有/保护/公有成员305.3继承中的构造函数和析构函数325.4覆盖基类的成员函数(静态绑定)5.5虚函数(动态绑定)3234多继承5.635第5章作业36异常处理66.1抛出异常(throw)36366.2处理异常(try-catch)36第6章作业7模板37377.1函数模板7.2类模板3738第7章作业:

作者:陈哲 目录 第 4 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5 继承、多态和虚函数 30 5.1 继承、多重继承 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.2 继承中的私有/保护/公有成员 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.3 继承中的构造函数和析构函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.4 覆盖基类的成员函数(静态绑定) . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.5 虚函数(动态绑定) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.6 多继承 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 第 5 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6 异常处理 36 6.1 抛出异常(throw) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.2 处理异常(try-catch) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 第 6 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 7 模板 37 7.1 函数模板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 7.2 类模板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 第 7 章作业 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 ii

第1章C++程序设计基础内容提要口函数的默认参数口cout/cin和格式化输出/输入口布尔类型(bool)口函数重载口引用类型(&)口内存的动态分配和释放(new/delete)所有声称“兼容标准”的C/C++编译器都遵循同样的C/C++语言标准,因此任意C/C++编译器都能够编译书中的C/C++程序。常见的C/C++编译器和集成开发环境(IDE)包括:。Dev-C++5.11:Windows下基于GCC编译器的开源C/C++集成开发环境。(请到官网下载,原作者于Dev-C++4.9.9.2后停止更新,推荐使用OrwellDev-C++5.11或EmbarcaderoDev-C++)。VisualStudio2022Community:Windows下基于微软cl编译器的商业C/C++集成开发环境。(请到官网下载,社区版免费)。GCC或Clang:跨平台(Windows/Linux/MacOS)的开源C/C++编译器,可结合Emacs、Vim、VisualStudioCode等编辑器组装集成开发环境。常见的集成开发环境通常通过源文件的扩展名来判定所使用的编程语言,从而选择相应语言的编译器对源代码进行编译。因此,C程序源文件的扩展名必须为“.c”,而C++程序源文件的扩展名必须为“.cpp”,否则可能因语法不一致导致编译错误。1.1 绪论4练习1.1面向对象程序设计的三大特点是什么?提示:封装、继承、多态。练习12封装的含义是什么?有哪些具体的实现机制?七提示:封装是指将数据和操作数据的函数放到同一个类中。封装的实现机制主要包括类和访问权限。练习1.3多态的含义是什么?有哪些具体的实现机制?白提示:多态是指相同的行为可以产生不同形式的效果,具体而言,某个函数调用(根据类或类型)对不同的对象调用不同的函数、进行不同的计算。编译时多态的实现机制主要包括函数重载、操作符重载,运行时多态的实现机制主要是虚函数。练习1.4面向过程程序设计和面向对象程序设计的区别和优点分别是什么?提示:面向过程程序设计就是用“函数”把解决问题所需要的步骤逐一实现,并依次调用。。优点:比面向对象程序设计性能更好,因为面向对象特性的实现需要消耗额外的时间和空间资源。因此单片机/嵌入式软件、Linux/Unix等一般采用面向过程程序设计语言。。缺点:比面向对象程序设计更难于维护、复用、扩展

第 1 章 C++ 程序设计基础 内容提要 h cout/cin 和格式化输出/输入 h 布尔类型(bool) h 引用类型(&) h 函数的默认参数 h 函数重载 h 内存的动态分配和释放(new/delete) 所有声称“兼容标准”的 C/C++ 编译器都遵循同样的 C/C++ 语言标准,因此任意 C/C++ 编译器都能够编译书中的 C/C++ 程序。常见的 C/C++ 编译器和集成开发环境(IDE)包括: Dev-C++ 5.11:Windows 下基于 GCC 编译器的开源 C/C++ 集成开发环境。(请到官网下 载,原作者于 Dev-C++ 4.9.9.2 后停止更新,推荐使用 Orwell Dev-C++ 5.11或 Embarcadero Dev-C++) Visual Studio 2022 Community:Windows 下基于微软 cl 编译器的商业 C/C++ 集成开发环 境。(请到官网下载,社区版免费) GCC 或 Clang:跨平台(Windows/Linux/MacOS)的开源 C/C++ 编译器,可结合 Emacs、 Vim、Visual Studio Code 等编辑器组装集成开发环境。 常见的集成开发环境通常通过源文件的扩展名来判定所使用的编程语言,从而选择相应语言 的编译器对源代码进行编译。因此,C 程序源文件的扩展名必须为“.c”,而 C++ 程序源文件 的扩展名必须为“.cpp”,否则可能因语法不一致导致编译错误。 1.1 绪论  练习 1.1 面向对象程序设计的三大特点是什么? 提示: 封装、继承、多态。  练习 1.2 封装的含义是什么?有哪些具体的实现机制? 提示: 封装是指将数据和操作数据的函数放到同一个类中。封装的实现机制主要包括类和访 问权限。  练习 1.3 多态的含义是什么?有哪些具体的实现机制? 提示: 多态是指相同的行为可以产生不同形式的效果,具体而言,某个函数调用(根据类或 类型)对不同的对象调用不同的函数、进行不同的计算。编译时多态的实现机制主要包括函 数重载、操作符重载,运行时多态的实现机制主要是虚函数。  练习 1.4 面向过程程序设计和面向对象程序设计的区别和优点分别是什么? 提示: 面向过程程序设计就是用“函数”把解决问题所需要的步骤逐一实现,并依次调用。 优点:比面向对象程序设计性能更好,因为面向对象特性的实现需要消耗额外的时间和 空间资源。因此单片机/嵌入式软件、Linux/Unix 等一般采用面向过程程序设计语言。 缺点:比面向对象程序设计更难于维护、复用、扩展

作者:陈哲1.2cout/cin和格式化输出/输入面向对象程序设计就是用“类”把问题相关的事物及其操作逐一实现,并通过构造类的对象来解决问题。其中,建立类和对象的目的不是为了实现一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。。优点:比面向过程程序设计更易于维护、复用、扩展,因为面向对象的封装、继承、多态的特性可以设计出低耦合的系统。因此大型软件一般采用面向对象程序设计语言。。缺点:比面向过程程序设计性能更低。1.2cout/cin和格式化输出/输入练习1.5熟悉C/C++编译器和集成开发环境,编辑、编译并运行以下程序,并分析结果。#includeusing namespace std;int mainO (int x = 6, y;cout >x; y = x++;cout >x; y = --x;cout <<"x ="<<x <<" y ="<<y <<endl;return o;练习1.6(求平均值)编写一个程序,提示用户输入3个数,然后在屏幕上输出这3个数以及它们的平均值。练习1.7(求中值)编写一个程序求一组整数的中值。如果这组整数的个数为奇数,那么中值就是排序后的中间那个数:如果这组整数的个数为偶数,那么中值就是排序后的中间两个数的平均值。编写一个函数接受如下两个参数:整型数组、代表该数组元素个数的一个整数。该函数应当返回数组的中值。注:为了练习指针的使用,请采用指针访问数组。练习1.8(口令检验)在许多软件中,都需要有口令。一个口令至少需要如下几个原则:(1)口令至少由6个字符构成:(2)口令中至少包含一个大写字母:(3)口令中至少包含一个小写字母;(4)口令中至少包含一个数字。编写一个口令检验程序,验证用户输入的口令是否

作者:陈哲 1.2 cout/cin 和格式化输出/输入 面向对象程序设计就是用“类”把问题相关的事物及其操作逐一实现,并通过构造类的 对象来解决问题。其中,建立类和对象的目的不是为了实现一个步骤,而是为了描述某个事 物在整个解决问题的步骤中的行为。 优点:比面向过程程序设计更易于维护、复用、扩展,因为面向对象的封装、继承、多 态的特性可以设计出低耦合的系统。因此大型软件一般采用面向对象程序设计语言。 缺点:比面向过程程序设计性能更低。 1.2 cout/cin 和格式化输出/输入  练习 1.5 熟悉 C/C++ 编译器和集成开发环境,编辑、编译并运行以下程序,并分析结果。 #include using namespace std; int main() { int x = 6, y; cout > x; y = x++; cout > x; y = −−x; cout << "x = " << x << " y = " << y << endl; return 0; }  练习 1.6(求平均值)编写一个程序,提示用户输入 3 个数,然后在屏幕上输出这 3 个数以及 它们的平均值。  练习 1.7(求中值)编写一个程序求一组整数的中值。如果这组整数的个数为奇数,那么中值 就是排序后的中间那个数;如果这组整数的个数为偶数,那么中值就是排序后的中间两个数 的平均值。编写一个函数接受如下两个参数:整型数组、代表该数组元素个数的一个整数。该 函数应当返回数组的中值。注:为了练习指针的使用,请采用指针访问数组。  练习 1.8(口令检验) 在许多软件中,都需要有口令。一个口令至少需要如下几个原则:(1) 口令至少由 6 个字符构成;(2)口令中至少包含一个大写字母;(3)口令中至少包含一个小 写字母;(4)口令中至少包含一个数字。编写一个口令检验程序,验证用户输入的口令是否 2

作者:陈哲1.3布尔类型(bool)满足以上几个原则。如果不满足,显示一个信息,告诉用户为什么不满足。练习1.9(支票输出)编写一个程序模拟支票输出。程序要求用户输入日期、姓名和支票的金白额,然后模拟支票的形式输出这些信息。假设输入的金额中,最多只有两位小数。程序需进行输入有效性检验:输入的金额不能大于10000。例如:日期:2017年12月26日姓名:张三RMB1920.68人民币:壹仟玖佰贰拾元陆角捌分1.3布尔类型(bool)练习1.10读程序,写输出结果。思考为什么会有这样的输出结果。$#includeusing namespace std;struct stb ( bool a,b,c,d; I;struct stc { char c[8]; ];int mainOint a; bool b = O; char c; double d;cout << sizeof(a) <<" "<< sizeof(b)<<endl;cout << sizeof (c) <<" " << sizeof (d) << endl;b = b + 1; cout <<"b =" <<b << endl;b=b+l:cout<<"b="<<b<<endlcout << sizeof(stb) <<"" << sizeof(stc) << endl ;return O;→练习1.11(身高预测)据有关生理卫生知识与数理统计分析表明,影响成人身高的因素包括遗传、饮食习惯与体育锻炼等。首先,成人的身高与其父母的身高和自身的性别密切相关,设faHeight为其父身高,moHeight为其母身高,身高预测公式为:男性成人时身高=(faHeight+moHeight)×0.54女性成人时身高=(faHeight×0.923+moHeight)/2此外,如果有良好的卫生饮食习惯,那么可增加身高1.5%;如果喜爱体育锻炼,那么可增加身高2%。编写一个程序,提示用户从键盘输入用户的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否有良好的饮食习惯等条件(用布尔型变量diet存储,输入1表示良好,输入0表示不好)、是否喜爱体育锻炼(用布尔型变量sports存储,输入1表示喜爱,输入0表示不喜爱),利用给定公式和身高预测方法对身高进行预测

作者:陈哲 1.3 布尔类型(bool) 满足以上几个原则。如果不满足,显示一个信息,告诉用户为什么不满足。  练习 1.9(支票输出)编写一个程序模拟支票输出。程序要求用户输入日期、姓名和支票的金 额,然后模拟支票的形式输出这些信息。假设输入的金额中,最多只有两位小数。程序需进 行输入有效性检验:输入的金额不能大于 10000。例如: 日期:2017年12月26日 姓名:张三 RMB1920.68 人民币:壹仟玖佰贰拾元陆角捌分 1.3 布尔类型(bool)  练习 1.10 读程序,写输出结果。思考为什么会有这样的输出结果。 #include using namespace std; struct stb { bool a, b,c, d; }; struct stc { char c [8]; }; int main() { int a; bool b = 0; char c; double d; cout << sizeof (a) << " " << sizeof (b) << endl; cout << sizeof (c) << " " << sizeof (d) << endl; b = b + 1; cout << "b = " << b << endl; b = b + 1; cout << "b = " << b << endl; cout << sizeof ( stb ) << " " << sizeof ( stc ) << endl; return 0; }  练习 1.11(身高预测) 据有关生理卫生知识与数理统计分析表明,影响成人身高的因素包括 遗传、饮食习惯与体育锻炼等。首先,成人的身高与其父母的身高和自身的性别密切相关,设 faHeight 为其父身高,moHeight 为其母身高,身高预测公式为: 男性成人时身高 = (faHeight + moHeight) × 0.54 女性成人时身高 = (faHeight × 0.923 + moHeight)/2 此外,如果有良好的卫生饮食习惯,那么可增加身高 1.5%;如果喜爱体育锻炼,那么可增加 身高 2%。编写一个程序,提示用户从键盘输入用户的性别(用字符型变量 sex 存储,输入字 符 F 表示女性,输入字符 M 表示男性)、父母身高(用实型变量存储,faHeight 为其父身高, moHeight 为其母身高)、是否有良好的饮食习惯等条件(用布尔型变量 diet 存储,输入 1 表 示良好,输入 0 表示不好)、是否喜爱体育锻炼(用布尔型变量 sports 存储,输入 1 表示喜爱, 输入 0 表示不喜爱),利用给定公式和身高预测方法对身高进行预测。 3

作者:陈哲1.4引用类型(&)1.4引用类型(&)练习1.12读程序,写输出结果。t#includeusing namespace std;int mainOint x = 2, y = 4;int &z=x;z++;cout #includeusing namespace std;int foo(int a, int n)( return a+n;int foo(int *a, int n)return a[n]; ]int mainOYint a[9] = (1,2,3,4,5,6,7,8,9];for (int i=0; i<4; i++)

作者:陈哲 1.4 引用类型(&) 1.4 引用类型(&)  练习 1.12 读程序,写输出结果。 #include using namespace std; int main() { int x = 2, y = 4; int &z = x; z++; cout #include using namespace std; int foo ( int a, int n) { return a+n; } int foo ( int ∗a, int n) { return a[n ]; } int main() { int a [9] = { 1,2,3,4,5,6,7,8,9 }; for ( int i = 0; i < 4; i++) 4

作者:陈哲1.7内存的动态分配和释放(new/delete)cout << setw(2) << foo(a[i], i);if(i%3==2)cout << setw(2) <<foo(a, i);1return 0;1.7内存的动态分配和释放(new/delete)常见错误解析:1.返回指向栈空间的指针,导致释放后使用错误(在函数返回后,访问已释放的空间)。char *fOchar arr [200];.return arr;int mainO1char *str = fO;str [0] = str [1];return 0;2.只有new,没有delete,导致内存泄漏。3.分配多余的内存空间,释放不彻底,导致内存泄漏。char *merge(char *strl ,char *str2)Ychar *strx =new char[200];...return strx;7int mainOchar *str3=newchar[100];

作者:陈哲 1.7 内存的动态分配和释放(new/delete) { cout << setw(2) << foo(a[ i ], i ) ; if ( i % 3 == 2) cout << setw(2) << foo(a, i ) ; } return 0; } 1.7 内存的动态分配和释放(new/delete) 常见错误解析: 1. 返回指向栈空间的指针,导致释放后使用错误(在函数返回后,访问已释放的空间)。 char ∗f () { char arr [200]; . return arr ; } int main() { char ∗ str = f () ; str [0] = str [1]; return 0; } 2. 只有 new,没有 delete,导致内存泄漏。 3. 分配多余的内存空间,释放不彻底,导致内存泄漏。 char ∗merge(char ∗str1 , char ∗str2 ) { char ∗strx = new char[200]; . return strx ; } int main() { . char ∗str3 = new char[100]; 5

作者:陈哲第1章作业str3 = merge(strl , str2);delete str3;return 0;4.释放栈空间的数组,导致内存错误;同时,申请的堆空间未使用也未释放。char* merge(char * strl, char * str2)return strl;}int mainO1char s[100],t[100],*c;c = new char[length ];c =merge(s, t);delete c;练习1.15(字符串合并)编写一个程序,提示用户输入两个已经按从小到大顺序排列好的字符串,将两个字符串合并为一个新的字符串。要求:编写一个合并两个字符串的函数char*merge(char*strl,char*str2),用new分配新的字符数组(大小为str1和str2的长度之和+1),然后将str1和str2合并存入该字符数组,使合并后的字符串仍然从小到大排列,并返回该字符数组。在主函数中调用该函数输出合并后的字符串,并用delete释放分配的字符数组。必须用指针方式逐个访问字符数组元素,不得使用字符串库函数。输入:1223aabcc233abbdkm运行结果输出:1222333aaabbbccdkm第1章作业1.邮件地址检验:邮件地址需要满足格式“x@y.z”,其中,x、y、z的长度均不超过20个字符,且只能由字母、数字和下划线构成,但是z可以包含2个点号。编写一个邮件地址检验程序,验证用户输入的邮件地址是否满足以上格式。如果不满足,显示一个信息,告诉用户为什么不满足。2.学生成绩统计:编写一个程序,提示用户输入一个班每个学生的姓名和一门课的成绩(最多不超过10人),存入一个结构体数组中,当输入成绩为负值时,输入结束,使用函数分别实现以下功能(不使用全局变量):(a).统计不及格人数并打印不及格学生名单;(b).统计成绩在全班平均分之上的学生人数,并打印这些学生的名单;(c).将成绩分为六个分数段,60分以下为第1段,60-69为第2段,70-79为第3段,80-89为第4段,90-99为第5段,100分为第6段,统计各分数段的人数。编写主函数测试以上函数的正确性

作者:陈哲 第 1 章作业 str3 = merge( str1 , str2 ) ; delete [] str3 ; return 0; } 4. 释放栈空间的数组,导致内存错误;同时,申请的堆空间未使用也未释放。 char∗ merge(char ∗str1 , char ∗str2 ) { return str1 ; } int main() { char s [100], t [100], ∗c; c = new char[ length ]; c = merge(s, t ) ; delete [] c; }  练习 1.15(字符串合并) 编写一个程序,提示用户输入两个已经按从小到大顺序排列好的 字符串,将两个字符串合并为一个新的字符串。要求:编写一个合并两个字符串的函数 char *merge(char *str1, char *str2),用 new 分配新的字符数组(大小为 str1 和 str2 的长度之和 +1), 然后将 str1 和 str2 合并存入该字符数组,使合并后的字符串仍然从小到大排列,并返回该字 符数组。在主函数中调用该函数输出合并后的字符串,并用 delete 释放分配的字符数组。必 须用指针方式逐个访问字符数组元素,不得使用字符串库函数。 运行结果 输入: 1223aabcc 233abbdkm 输出: 1222333aaabbbccdkm K第 1 章作业k 1. 邮件地址检验:邮件地址需要满足格式“x@y.z”,其中,x、y、z 的长度均不超过 20 个 字符,且只能由字母、数字和下划线构成,但是 z 可以包含 2 个点号。编写一个邮件地 址检验程序,验证用户输入的邮件地址是否满足以上格式。如果不满足,显示一个信息, 告诉用户为什么不满足。 2. 学生成绩统计:编写一个程序,提示用户输入一个班每个学生的姓名和一门课的成绩 (最多不超过 10 人),存入一个结构体数组中,当输入成绩为负值时,输入结束,使用函 数分别实现以下功能(不使用全局变量): (a). 统计不及格人数并打印不及格学生名单; (b). 统计成绩在全班平均分之上的学生人数,并打印这些学生的名单; (c). 将成绩分为六个分数段,60 分以下为第 1 段,60–69 为第 2 段,70–79 为第 3 段, 80–89 为第 4 段,90–99 为第 5 段,100 分为第 6 段,统计各分数段的人数。 编写主函数测试以上函数的正确性。 6

作者:陈哲第1章作业3.加法函数重载:利用函数重载实现十进制(int)、字符串(char*)、无符号二进制(structBinNum)的加法。加法函数格式为:TYPEaddTYPEn1,TYPEn2),其中TYPE为各种不同的类型。要求:(1)字符串的加法是将char*n2追加到char*n1的尾部,该功能不得使用C++的string类;(2)二进制的类型为结构体BinNum(其中包含一个字符数组),加法用BinNumadd(BinNumnl,BinNumn2)实现。编写主函数,调用这些加法并在屏幕上输出结果。例如输入:11222211abcab0011000010输出:3333,abcab,010004.字符串删除:编写一个程序,提示用户输入两个字符串,将第二个字符串中包含的字符从第一个字符串中删除。要求:编写一个字符删除函数char*remove(char*str,char*chars),用new分配新的字符数组(大小为str的长度+1),将chars中包含的字符从str中删除后存入该字符数组,并返回该字符数组。在主函数中调用该函数输出结果,并用delete释放分配的字符数组。必须用指针方式逐个访问字符数组元素,不得使用字符串库函数。例如输入:fjejfpifhjg933pakpjajf3输出:epihg9pkp

作者:陈哲 第 1 章作业 3. 加法函数重载:利用函数重载实现十进制(int)、字符串(char *)、无符号二进制(struct BinNum)的加法。加法函数格式为:TYPE add(TYPE n1, TYPE n2),其中 TYPE 为各 种不同的类型。要求:(1)字符串的加法是将 char *n2 追加到 char *n1 的尾部,该功能 不得使用 C++ 的 string 类;(2)二进制的类型为结构体 BinNum(其中包含一个字符数 组),加法用 BinNum add(BinNum n1, BinNum n2) 实现。编写主函数,调用这些加法并 在屏幕上输出结果。 例如输入:1122 2211 abc ab 00110 00010 输出:3333, abcab, 01000 4. 字符串删除:编写一个程序,提示用户输入两个字符串,将第二个字符串中包含的字符从 第一个字符串中删除。要求:编写一个字符删除函数 char *remove(char *str, char *chars), 用 new 分配新的字符数组(大小为 str 的长度 +1),将 chars 中包含的字符从 str 中删除后 存入该字符数组,并返回该字符数组。在主函数中调用该函数输出结果,并用 delete 释 放分配的字符数组。必须用指针方式逐个访问字符数组元素,不得使用字符串库函数。 例如输入:fjejfpifhjg933pakpj ajf3 输出:epihg9pkp 7

刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档