当前位置:文档之家› 第八讲:顺序结构程序设计举例

第八讲:顺序结构程序设计举例

第八讲:顺序结构程序设计举例
所谓的顺序结构就是从头到尾一步步按部就班的执行下去,不会中途出现放弃或者跳转的情况。

利用这样的思想实现的程序我们称之为顺序结构程序。

在前面学习了许多知识点之后我们就可以开始最基本的顺序结构程序的设计了。

8.1 顺序结构
所谓的顺序结构可以用一个成语形容叫“按部就班”。

任何事情都遵循着先做什么,再做什么的思想进行。

这样的结构是我们日常生活中最常见的结构。

在顺序结构中当一件事情开始后就再也不会停下,直到最后一步完成,整件事情做完为止,中途不会有放弃或者选择性放弃的过程。

8.2 经典算法—数据交换
很多语言的程序设计大多数都是从数据交换这个最经典的算法开始的,所谓的数据交换是将两个同等性质的物质进行对换,例如有两个整数a和b,a = 1,b = 2,在交换之后,使得a = 2,b = 1。

交换的算法是由于变量的性质所决定的,由于变量在同一时刻只能够存储一个数据,因此我们不能直接使用 a = b,b = a的方式对数据进行交换。

此时我们就需要想出一些方法,帮助程序实现最正确的交换。

对于任何的数据我们都可以采用“第三变量法”进行交换。

所谓的“第三变量法”即借助第三个变量实现对数据的交换,例如对a和b的数据交换,就有:
接下来我们将通过如下示意图对“第三变量法”进行简单的介绍:
b
在程序未执行交换前,a = 1,b = 2。

在执行交换算法的过程中,首先执行“t = a;”一句,将a中的值1转移到t中暂存,接下来执行“a = b;”一句,将b之中的值2存放到变量a中,a中原先的1被覆盖;最后执行“b = t;”一句,将t中所暂存的原先a的值1存放到变量b中,b中原有的2被覆盖。

此时 a = 2,b = 1,t = 1。

当然,读者也可以使用先暂存b的方式对a和b之中的数据进行交换。

下面给出该案例的完整代码:
[例] 使用“第三变量法”交换a和b之中的数据。

当然对于一些数值型的数据(所谓的数值型数据是指单纯的数字或者ASCII 码),我们也可以直接采用“算数交换法”进行交换。

所谓的算数交换法是指利用数值型数据可进行算术运算的特性进行交换。

以上例a与b的值交换为例,则有:
假设a = 1,b = 2。

首先执行“a = a + b;”,此时a = a + b = 1 +2 = 3,而b = 2;
接下来继续执行“b = a - b;”,此时b = a - b = 3 - 2 = 1而a = 3;最后执行“a = a - b;”,此时a = a - b = 3 - 1 = 2,而b = 1。

至此,数据交换完成。

使用算数交换法对数值型数据交换的完整代码如下:
8.3 学会使用公式解决问题
有些程序我们并不需要自己去想解决方案,我们可以通过一些既有的公式完成任务,这些公式是已经在数学学科之中进行推导而验证的真理,程序员只需要将这些公式利用程序设计语言进行表示即可完成相应的任务。

下面将举例说明。

[例] 已知有某一元二次方程ax2+bx+c = 0,请利用键盘输入a,b,c的值,并求出两个实数根x1与x2。

(默认△≥ 0)
deal = b * b - 4 * a * c;//求出△的值
x1 = ((-b) + sqrt(deal)) / (2 * a);//利用求根法求x1
x2 = ((-b) - sqrt(deal)) / (2 * a);//利用求根法求x2
cout << "x1 =" << x1 << ",x2 =" << x2 << endl;
}
程序运行效果如下:
上述程序中使用经典的一元二次方程求根法进行求解方程,这是一种最直观也是最容易理解的方法。

二元一次方程求根法公式为:
8.4 简单的字符处理
在前面的学习中,我们学习到了字符型数据,在C/C++语言中,字符型数据使用ASCII码存储,即每个字符都可以得到一个具体的整数。

在程序中我们通常可以利用这些ASCII码对字符进行简单的处理。

[例] 从键盘上输入一个字符,并输出其大写形式。

#include <iostream>
using namespace std;
void main()
{
char c;
char upper;
cout << "请输入一个字符:";
c = getchar();//可以使用getchar函数获取一个字符
upper = c - 32;//大写字母与小写字母之间相差32
cout << "字符" << c << "的大写形式为:" << upper << endl;
}
程序运行效果如下:
当然,上述的程序还是有一些问题的,上述的程序无论输入的是何种数据,都会进行减32的操作,而事实上倘若用户输入的为大写字母,就应该原封不动的输出,而该程序的运行结果则为:
因此我们需要对程序作出一些细微的修改,将其修改为若用户输入的是大写字母则原样输出,输出的是小写字母则进行转换操作。

这一点我们可以通过条件运算符实现,修改后的程序如下:
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
char c;
char upper;
cout << "请输入一个字符:";
c = getchar();
upper = isupper(c) == true ? c : c - 32;//此处改动
cout << "字符" << c << "的大写形式为:" << upper << endl;
}
程序中isupper函数用于判断参数中的字符是否为大写字母,该函数的声明位于conio.h中。

修改后的程序执行效果如下:。

相关主题