题解系笔者作业原稿,或有疏漏,还望海涵、不吝赐教。
因是文以肇非义者,责不在予,不任其咎。
第一次课后作业
上机目标:
1.熟悉VS2010等集成开发环境,能够独立地编辑,编译 、链接,生成正确的可执行程序
2.完成简单的输入-输出功能及数据运算功能
3.通过查找资料,自学掌握C++输入输出操纵符的基本使用方法
基础编程题:
1.学生个人信息显示
编写一个学生个人信息的屏幕显示程序。其中同学姓名学号为的真实信息。输出信息格式如下图所示。鼓励在此基础上进行界面改进。
1 |
|
2. 温度转换
通过键盘输入一个华氏温度,程序将其转化为相应的摄氏温度,转化公式为:C=5/9*(F-32). 输出的摄氏温度保留2位小数点。输出见下图。
1 |
|
3. 大写字母转换成小写字母
从键盘输入一个大写英文字母,输出相应的小写字母。
1 |
|
4. 求平方根
输入1 个实数x,计算并输出其平方根(保留1 位小数)。 提示:利用setprecision()设定输出精度。
1 |
|
5. 数制转换
输入1个10进制整数,输出其8进制和16进制的表示形式。提示:利用hex、oct、dec设定输出进制,showbase设置输出的进制标志。
1 |
|
设计类编程题:
6. 计算旅途时间
输入2 个整数time1 和time2分别表示火车的出发时间和到达时间,计算并输出旅途时间。有效的时间范围是0000 到2359,不需要考虑出发时间晚于到达时间的情况。
例:输入: 711 1410(出发时间是7:11,到达时间是14:10)
输出: The train journey time is 6 hrs 59 mins.
1 |
|
7. 数字加密
输入1 个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10 取余,做为该位上的新数字,最后将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。
例:输入: The original number is : 1257
输出: The encrypted number is 4601
1 |
|
第二次课后作业
作业目标
熟悉C/C++语言流程控制的相关指令的用法
设计适合的人机交互界面,熟练使用cin, cout,cin.get()等输入输出;
掌握编程的设计过程(数据和算法),锻炼独立调试程序的能力。
基础编程题
1. 输入两个正整数,求它们的最大公约数(使用辗转相除法)和最小公倍数(利用最大公约数的结果)
1 |
|
2. 输入一个任意正整数,求其中数字7出现的次数。
例:输入 47758796
输出 数据中7的出现的次数为3
1 |
|
计算类编程题:
3. 求1 + 1/2! +…+ 1/n!
输入正整数n(5<n<1000),计算上式前n 项的和 (保留4位小数)。
例:输入: 10
输出: 1 + 1/2! +…+ 1/10!=1.7183
1 |
|
4. 用二分法求方程2x3-4x2+3x-6=0在(a,b)之间的根(根的误差<1E-3)。
例:输入 Please input the lower and upper boundaries: 3 10
输出 No root in this region!
Please input the lower and upper boundaries: 1 5
The root is 2.00
1 |
|
设计类编程题:
5. 计算机自动出0-9之间的加法和减法(+ -)计算题;由用户输入结果,然后自动批改结果是否正确。(随机数方式,搜素rand()函数的使用)
例:自动生成 3+9= 12(用户输入结果后回车),
显示: Correct!
1 |
|
6. 日期显示:输入今天的日期,输出明天的日期。(需考虑所有可能)
例:输入 2024-12-31,
输出 2025-01-01,
输入 2000-02-28,
输出 2000-02-29
1 |
|
7. 实现一个简单的二级菜单,用户可以选择不同的操作(使用system(“cls”) 指令可以清屏,程序功能参考下面的表格)。
1 |
|
第三次作业
作业目标
熟练掌握函数和数组编程(形参为基本数据类型和数组)
每道题需提供包括主函数和自定义函数的完整程序
1.编写函数,计算表达式 $$ \sum_{k=0}^{n} k! $$ 的值($$ n \lessgtr b $$),形参n的值由主程序输入并传递,函数返回值为s.
1 |
|
2. 编写数字加密和解密函数。测试值由主程序输入。
2.1 编写数字加密函数 int encrypt(int n). 其输入为一个四位数,返回为加密后的数。其加密方法为:
将该数每一位上的数字加9,然后除以10 取余,作为该位上的新数字,
将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。
例:输入 1257
输出 The encrypted number is 4601
2.2 编写数字解密函数 int decrypt(int n), 其输入为一个使用2.1 encrypt 函数加密后的四位数,返回为解密后的数
例:输入 4601
输出 The decrypted number is 1257
1 |
|
3. 数组元素的和
分别编写基于迭代的arrsumi(a,n)和递归的arrsumr(a,n)函数,返回值为数组所有元素的和,其中a是在主函数定义的数组,n为数组的长度。
1 |
|
4.数组转置
在主函数中定义一个n(1<=n<=6)维方阵,并从键盘读入数组元素;编写函数transpose(a,n)实现数组a转置;在主函数中输出转置后的方阵。
1 | 例:输入 |
1 |
|
5.移动数组中的零
编写一个函数,给定一个数组,将所有的零移到数组的末尾,同时保持其他非零元素的相对顺序不变。
例:输入 4 2 3 0 5 0 1
输出 4 2 3 5 1 0 0
1 |
|
6.分数四则运算:输入两个分数进行加、减、乘、除运算,编写一个分数四则运算函数输出计算结果。
输入:
分数1 操作符 分数2 (操作符为 + - * /)
输出:
计算结果
要求:
计算结果使用分数表示,并且为最简形式。例如结果为2/6,则被简化为1/3
1 | 例: 输入: 1/6 + 1/3 |
1 |
|
7.学生信息输入与处理
编写4个函数实现下列功能(通过参数传递实现):
(1)函数input( )—输入20个学生姓名和高考总分;
(2)函数sort( ) —按高考总分从高到低的顺序排序,姓名顺序也随之调整;
(3)函数display( )—显示所有学生姓名及其高考总分;
(4)函数search( ) —根据姓名用顺序查找方法找出该学生,查找成功返回学生下标,否则返回-1;
(5)主函数——①调用input( )输入学生姓名及成绩;②调用函数sort( )进行排序;③调用display( )输入排序后的学生姓名及成绩;④输入一个姓名,调用函数search( ),根据返回值判定是否查找成功,若查找成功,输出该学生姓名及高考总分,否则显示查找失败。
提示:高考分数储存于一维整形数组,学生姓名为储存为二维字符数组。
1 |
|
8.基于菜单驱动的字符串处理
定义两个CPP源程序文件:fmain.cpp 和 fstring.cpp。
fmain.cpp中包含主函数,实现字符串处理功能的菜单选项和字符串的输入与结果的输出(将第二次作业中的菜单修改为基于函数进行菜单驱动,字符串处理在二级菜单)。
fstring.cpp中包含两个函数delchar(s,c)和strreverse (s),实现删除字符和字符串反转功能。
delchar(s,c):输入字符串s和要删除的字符c,此函数将字符串s中出现的所有c字符删除;返回删除c后的字符串。
strreverse (s):此函数实现将字符串s反转;并返回反转后的字符串。
1 | fmain.cpp |
第四次作业
作业目标
理解指针的概念,掌握一维指针,指针数组,多级指针。
掌握地址(指针)传递时的函数形参的正确定义和动态内存分配的方法。
掌握结构体的定义与使用,能够对结构体数组进行数据的查询与排序。
1.编写函数update(),将具有N个元素的一维字符型数组从下标为k的元素开始全部设置为“*”, 如果k>=N,返回NULL,否则返回字符数组首地址。在主函数根据返回值输出更新后的结果或更新失败的提示。
1 |
|
2. 基于字符数组的字符串排序:在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数sort()利用指针数组对其排序,在主函数中输出排好序的字符串。
函数原型为:void sort(char *s [ ],int n);
1 |
|
3. 动态数组的内存管理:编写一个程序,在main()函数中使用 new 为一个包含 n 个整数的数组分配内存,并使用 delete[] 释放该数组的内存。
输入一个整数n,表示数组的大小。
使用 new 创建一个包含n个整数的动态数组。
从用户处输入 n 个整数,并将其存储到动态数组中。
输出动态数组中的所有元素。
使用 delete[] 释放分配的内存。
在完成上面程序的基础上,对以上程序的部分功能运用函数实现:
设计函数createarray(), 使用引用传递方式,创建一个包含n个整数的动态数组;
设计函数inputarray(), 从用户处输入 n 个整数,并将其存储到动态数组中。
1 |
|
4. 考研初试成绩包括外语、政治、数学和专业课四科成绩(其中,外语和政治满分100分,数学和专业课满分150分)。某校复试分数要求是同时满足:外语、政治不低于50分;数学和专业课不低于90分;总分不低于350分。
编程实现5名考生考研成绩统计功能。
① 定义结构体类型StuInfo记录每个考生信息,包括:考号(1~5)、姓名、各科成绩、初试总分和是否满足复试要求标记;
② 编写函数Cal_Mark(),计算每个考生的初试总分,并将不满足复试要求的考生标记为‘F’ ,满足复试要求的考生标记为‘P’;
③ 编写函数SelectionSort(),用简单选择排序法按初试总分从高到低排序;
④ 编写主函数,在主函数中从键盘输入所有考生的考号、姓名和四科成绩,通过参数传递调用上述两个函数,最后在主函数中按初试总分从高到低顺序输出满足复试要求的考生信息组成的复试名单。
1 |
|
5. 定义一个 Student 结构体,包含姓名和成绩(整型)。创建一个动态数组来存储5个学生的信息,编写一个排序函数sort(),首先根据成绩进行降序排序,如果成绩相同,则按姓名升序排序,在main()函数中进行结构体信息的输入与输出。
1 | #include <cstring> |
第五次作业
作业目标
理解类的基本语法,包括类的定义、成员变量、成员函数等,培养初步的面向对象设计思维
理解构造函数的作用,学会通过构造函数进行对象的初始化,并理解析构函数在对象销毁时释放资源的作用
了解类的封装性,通过访问控制符(public、private、protected)来控制数据的访问权限。
1.编写一个 Book 类,用于表示书籍。
要求如下:
类的私有成员变量包括书名 (title)、作者 (author) 和页数 (pages)。
提供一个构造函数,接受书名、作者和页数三个参数,并初始化相应的成员变量。
提供一个成员函数 display(),输出书籍的详细信息(书名、作者和页数)。
在 main() 函数中,创建一个 Book 对象,使用构造函数初始化对象,并调用 display() 函数输出书籍的信息。
例:
1 | 输入:请输入书名: C++程序设计 |
1 |
|
2.编写一个 Rectangle 类,用于表示矩形。
要求如下:
类的私有成员变量包括矩形的宽度 (width) 和高度 (height)。
提供两个重载的构造函数:
第一个构造函数接受两个参数,分别表示宽度和高度,并初始化相应的成员变量。
第二个构造函数只接受一个参数,表示边长,初始化为正方形(宽度和高度相等)。
提供成员函数 area(),计算并返回矩形的面积。
在 main() 函数中创建 Rectangle 对象,使用不同的构造函数,并输出矩形的面积。
例:
1 | 输入:请输入矩形的宽度: 3 |
1 |
|
3. 编写一个 Point 类,用于表示二维平面上的点。要求如下:
类的私有成员变量包括 x 和 y,表示点的坐标。
提供一个构造函数,接受两个参数(x 和 y)来初始化点的坐标。
提供一个拷贝构造函数,用于复制另一个 Point 对象,拷贝构造函数中输出提示信息,例如:“拷贝构造函数被调用”。
提供一个成员函数 display(),输出点的坐标。
在 main() 函数中,提示用户输入点的坐标,创建一个 Point 对象,使用拷贝构造函数创建另一个对象,并调用 display() 函数输出两个对象的坐标。
例:
1 | 输入:请输入点的 x 坐标: 5 |
1 |
|
4.编写一个 Circle 类,用于表示一个圆。
类应具备以下功能:
一个私有的 double 类型数据成员radius,用于存储圆的半径。
友元函数:实现一个名为 calculateArea 的友元函数,该函数接受一个 Circle 类型的对象,并返回该圆的面积。面积的计算公式为:面积 = π × radius²,其中 π 取值为 3.14159。
在 main 函数中: 创建一个 Circle 对象,半径由用户输入。调用 calculateArea 函数计算该圆的面积,并输出结果。
例:
输入:请输入圆的半径: 3
输出:圆的面积是: 28.2743
1 |
|
5.设计一个 Temperature 类,表示温度。
实现以下功能:
包含成员变量 celsius(摄氏温度)。
提供构造函数初始化摄氏温度。
提供一个常成员函数 getCelsius(),返回摄氏温度。
提供一个常成员函数 toFahrenheit(),将摄氏温度转换为华氏温度并返回。
在 main() 函数中,输入摄氏温度,输出摄氏温度和对应的华氏温度。
例:
1 | 输入:请输入摄氏温度: 32 |
1 |
|
6.设计一个 Library 类,用于管理图书馆的图书数量。
该类包含静态成员变量 bookCount,用于记录图书数量,以及静态成员函数 getBookCount(),返回当前图书数量。实现以下功能:
提供构造函数,每次创建 Library 对象时将图书数量初始化。
提供静态成员函数 addBooks(int count),用于增加图书数量。
提供静态成员函数 removeBooks(int count),用于减少图书数量(确保数量不会为负)。
提供静态成员函数 getBookCount(),返回当前的图书数量。
在 main() 函数中通过用户输入进行图书数量的增加和减少,输出图书数量的变化。
例:
1 | 输入:请输入要增加的图书数量: 5 |
1 |
|
第六次作业
- 定义一个平面上的点类Point 包含私有的两个浮点型数据成员x和y。定义一个圆类Circle,包括一个Point类的圆心和圆的半径r。定义一个三角形类Triangle, 包含三个Point类对象a,b,c为其顶点。
设计 Point,Circle类和Triangle显示信息的成员函数display;Circle类和Triangle类包括计算周长的perimeter的成员函数;根据需求设计实现其它成员函数。
主函数中定义一个圆心为(0,0)半径为5的圆和顶点为(0,0),(1,1),(2,0)的三角形。并输出它们的信息。
1 |
|
- 定义抽象基类Shape,从Shape派生长方形类Rectangle和圆类Circle,实现每个派生类的具体方法getArea()和getPerim()求出其面积和周长。程序输出如下图所示。
1 |
|
- 虚基类Person的定义如下:
1 | class Person { |
从Person派生出Teacher(增加:教授科目)和Student类(增加:专业),再从 Teacher
和 Student
派生出TA类(没有新增数据成员) ,分别实现不同的信息显示,写出这三个类的实现。
当使用以下主函数时:
1 | // 主函数 |
- 编写程序实现将一个文本文件的内容复制到另一个文本文件。
1 |
|
- 创建一个名为student的结构体,包含学号number,姓名name,三门课程的成绩score [3] 和平均成绩,编写两个互为独立的程序,一个程序实现将结构体数组元素以二进制形式整体写入文件,另一个程序实现将文件中的结构体数据逐个读入并输出到屏幕。
1 | //stu_file1.cpp |
- 建立一个文件,用来存放前20个自然数及其平方根,然后输入1~20的任意一整数,查寻其平方根并显示在屏幕上。
1 |
|