没有合适的资源?快使用搜索试试~ 我知道了~
首页数据结构课后习题答案详解与编程风格示例
数据结构课后习题答案详解与编程风格示例
需积分: 10 0 下载量 105 浏览量
更新于2024-08-02
收藏 3.51MB PDF 举报
在这个数据结构的课后参考答案文档中,包含了编程原理课程的一些习题解答,主要针对生命游戏(Conway's Game of Life)和编程风格的实践问题。生命游戏部分要求学生手动计算一系列初始配置在五代内的变化,给出结果表明哪些图形会保持稳定、重复或者出现其他行为。具体题目给出了几个不同的图形编号,例如(a)到(j),要求分析它们在游戏规则下每一代的变化。 生命游戏是一种简单的零和游戏,每个细胞根据周围邻居的数量决定生死。稳定图形(如(a)和(d))不会有任何变化,图形重复((e)至(i))则意味着存在周期性的模式,而(f)可能指的是一个无限循环的模式。解答这部分习题需要理解基本的邻接矩阵和状态转移规则。 另一部分是关于编程风格的练习,涉及到设计类和方法来实现特定功能。例如,对于存储电话号码的程序,建议定义Phone_book类和Person类。Phone_book类可能包含方法如lookup_name(查找名字)、add_person(添加联系人)和remove_person(移除联系人)。Person类则可能有lookup_number(查找电话号码)方法。初始化和打印对象的方法也是必要的,以确保数据的正确存储和展示。 通过这些题目,学生可以巩固对数据结构(如数组或矩阵)的理解,同时锻炼面向对象编程的思维方式,如何组织和设计类与方法来解决问题。这些知识点对于理解和实践编程基础至关重要,尤其是在处理动态数据结构和算法时。这份参考答案有助于学生在有限时间内复习和准备期末考试,特别是对于需要临时突击学习的同学来说。
资源详情
资源推荐
16 Chapter 1 • Programming Principles
{
Life configuration;
instructions();
configuration.initialize();
configuration.print(cout);
bool command;
do {
configuration.update();
configuration.print(cout);
cout << "Continue viewing without changes? " << endl;
if (!(command = user_says_yes())) {
cout << "Do you want to quit? " << flush;
if (user_says_yes()) command = false;
else {
cout << "Do you want help? " << flush;
if (user_says_yes()) instructions();
cout << "Do you want to make any changes? " << flush;
if (user_says_yes()) configuration.edit();
command = true;
}
}
} while (command);
cout << "Do you want to save the final position to file? " << flush;
if (user_says_yes()) {
char name[1000];
cout << "Give the save file name: " << flush;
cin >> name;
ofstream f(name);
configuration.print(f);
}
}
const int maxrow = 20, maxcol = 60; // grid dimensions
class Life {
public:
void initialize();
void print(ostream &f);
void update();
void edit();
private:
int grid[maxrow + 2][maxcol + 2]; // Allow two extra rows and columns.
int neighbor_count(int row, int col);
bool step_mode;
};
void Life::edit()
/* Post: User has edited configuration, and/or step mode */
{
cout << "Do you want to switch the step mode? " << flush;
if (user_says_yes()) step_mode = !step_mode;
cout << "Do you want to change the configuration? " << flush;
if (!user_says_yes()) return;
Section 1.5 • Program Maintenance 17
int row, col;
cout << "List the coordinates for cells to change." << endl;
cout << "Terminate the list with the the special pair -1 -1" << endl;
cin >> row >> col;
while (row != -1 || col != -1) {
if (row >= 1 && row <= maxrow)
if (col >= 1 && col <= maxcol)
grid[row][col]=1-grid[row][col];
else
cout << "Column " << col << " is out of range." << endl;
else
cout << "Row " << row << " is out of range." << endl;
cin >> row >> col;
}
}
void Life::print(ostream &f)
/*
Pre: The Life object contains a configuration.
Post: The configuration is written to stream f for the user.
*/
{
int row, col;
f << "The current Life configuration is:" << endl;
for (row = 1; row <= maxrow; row++) {
for (col = 1; col <= maxcol; col++)
if (grid[row][col] == 1) f << ’*’;
elsef<<’’;
f << endl;
}
f << endl;
}
int Life::neighbor_count(int row, int col)
/*
Pre: The Life object contains a configuration, and the coordinates
row and col define a cell inside its hedge.
Post: The number of living neighbors of the specified cell is returned.
*/
{
int i, j;
int count = 0;
for (i = row - 1; i <= row + 1; i++)
for (j = col - 1; j <= col + 1; j++)
count += grid[i][j]; // Increase the count if neighbor is alive.
count -= grid[row][col]; // A cell is not its own neighbor.
return count;
}
void Life::update()
/*
Pre: The Life object contains a configuration.
Post: The Life object contains the next generation of configuration.
*/
{
int row, col;
int new_grid[maxrow + 2][maxcol + 2];
18 Chapter 1 • Programming Principles
for (row = 1; row <= maxrow; row++)
for (col = 1; col <= maxcol; col++)
switch (neighbor_count(row, col)) {
case 2:
new_grid[row][col] = grid[row][col]; // Status stays the same.
break;
case 3:
if (step_mode &&grid[row][col] == 0)
cout << "Vivify cell " << row <<""<<col<<endl;
new_grid[row][col] = 1; // Cell is now alive.
break;
default:
if (step_mode && grid[row][col] == 1)
cout << "Kill cell " << row <<""<<col<<endl;
new_grid[row][col] = 0; // Cell is now dead.
}
for (row = 1; row <= maxrow; row++)
for (col = 1; col <= maxcol; col++)
grid[row][col] = new_grid[row][col];
}
void Life::initialize()
/*
Pre: None.
Post: The Life object contains a configuration specified by the user.
*/
{
step_mode = false;
int row, col;
char c;
bool from_file = false;
ifstream f;
for (row = 0; row <= maxrow+1; row++)
for (col = 0; col <= maxcol+1; col++)
grid[row][col] = 0;
cout << "Do you want to read input from a prepared file? " << flush;
if (user_says_yes()) {
cout << "Enter input file name: " << flush;
char name[1000];
cin >> name;
f.open(name);
from_file = true;
while (f.get() != ’\n’);
}
else {
while (cin.get() != ’\n’);
cout << "Enter a picture of the initial configuration." << endl;
cout << "Please enter nonblanks to signify living cells,\n";
cout << "and blanks to signify empty cells.\n";
cout << "Enter a return (newline) to terminate a row of input.\n";
cout << "Enter a character $ if all input is complete before the "
<< "last row." << endl;
}
Section 1.5 • Program Maintenance 19
for (row = 1; row <= maxrow; row++) {
if (!from_file) cout << row <<":"<<flush;
for (col = 1; col <= maxcol; col++) {
if (from_file) f.get(c);
else cin.get(c);
if (c == ’\n’ || c == ’$’) break;
if (c != ’ ’) grid[row][col] = 1;
else grid[row][col] = 0;
}
if (c == ’$’) break;
if (from_file) while (c != ’\n’) f.get(c);
else while (c != ’\n’) cin.get(c);
}
}
void instructions()
/*
Pre: None.
Post: Instructions for using the Life program have been printed.
*/
{
cout << "Welcome to Conway’s game of Life." << endl;
cout << "This game uses a grid of size "
<< maxrow << " by " << maxcol << " in which" << endl;
cout << "each cell can either be occupied by an organism or not." << endl;
cout << "The occupied cells change from generation to generation" << endl;
cout << "according to the number of neighboring cells which are alive."
<< endl;
}
P2. Addafeaturetothefunctioninitializesothatitcan,attheuser’soption,eitherreaditsinitialconfiguration
from the keyboard or from a file. The first line of the file will be a comment giving the name of the
configuration. Each remaining line of the file will correspond to a row of the configuration. Each line
will contain
x in each living position and a blank in each dead position.
Answer
See project P1.
P3.
Add a feature to the Life program so that, at termination, it can write the final configuration to a file in a
format that can be edited by the user and that can be read in to restart the program (using the feature of
Project P2).
Answer
See project P1. The program subdirectories contain a file of test data called FILE.
P4.
Add a feature to the Life program so, at any generation, the user can edit the current configuration by
inserting new living cells or by deleting living cells.
Answer
See project P1.
P5.
Add a feature to the Life program so, if the user wishes at any generation, it will display a help screen
giving the rules for the Life game and explaining how to use the program.
Answer
See project P1.
P6.
Add a step mode to the Life program, so it will explain every change it makes while going from one
generation to the next.
Answer
See project P1.
20 Chapter 1 • Programming Principles
P7.
Use direct cursor addressing (a system-dependent feature) to make the Life method print update the
configuration instead of completely rewriting it at each generation.
Answer
The changes required are system dependent and have not been implemented.
P8.
Use different colors in the Life output to show which cells have changed in the current generation and
which have not.
Answer
The changes required are system dependent and have not been implemented.
1.6 CONCLUSIONS AND PREVIEW
Programming Projects 1.6
P1. A magic square is a square array of integers such that the sum of every row, the sum of every column,
and sum of each of the two diagonals are all equal.
(a) Write a program that reads a square array of integers and determines whether or not it is a magic square.
(b) Write a program that generates a magic square by the following method. This method works only when
the size of the square is an odd number. Start by placing 1 in the middle of the top row. Write down
successive integers 2, 3,
...along a diagonal going upward and to the right. When you reach the top row
(as you do immediately since 1 is in the top row), continue to the bottom row as though the bottom row
were immediately above the top row. When you reach the rightmost column, continue to the leftmost
column as though it were immediately to the right of the rightmost one. When you reach a position that
is already occupied, instead drop straight down one position from the previous number to insert the new
one.
Answer
#include "../../c/utility.h"
#include "../../c/utility.cpp"
#include "square.h"
#include "square.cpp"
int main()
{
cout << "Magic Square Program" << endl << endl;
cout << "Enter a square of integers:" << endl;
Square s;
s.read();
if (s.is_magic()) cout << "That square is magic!" << endl;
else cout << "That square is not magic." << endl;
cout << endl << endl << "Generatinga5x5magic square:" << endl;
cout << "--------------------------------" << endl << endl;
s.generate(5);
s.print();
cout << endl << endl << "Generatinga7x7magic square:" << endl;
cout << "--------------------------------" << endl << endl;
s.generate(7);
s.print();
}
const int max_size = 9;
class Square {
public:
void read();
void print();
bool is_magic();
void generate(int n);
剩余675页未读,继续阅读
yo2_yo2
- 粉丝: 0
- 资源: 24
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功