顺序结构

基于过程的程序设计和算法

程序(有限命令的有序集合)必须明确”做什么”,还要设计出具体的操作步骤,解决“怎么做”。

编程时需要给出计算机全部操作的具体过程,当程序执行完成,就实现了问题的求解。

在设计算法(解决某个问题的一组确定的有限的操作步骤)时间需要考虑:如何设计操作步骤,怎样保证正确性,怎样保证高效性。

一个基于过程的程序包括:

(1)对数据的描述:数据结构(指定数据的类型和数据的组织形式)

(2)对操作的描述:算法

​ 程序 = 数据结构+算法

程序设计过程:具体问题→算法分析、设计→编写程序 【关键:算法设计&具体实现】

对于C++代码而言,一个源程序由三部分组成:预处理指令(如#include<>)+全局声明+函数(只能有一个main函数)

  • 全局变量:变量在函数外进行声明(有效范围为全局)

  • 局部变量:变量在函数内声明,仅在函数内部生效

C++语句

声明语句

声明变量/函数,对于变量的声明被认为一条语句,满足先定义后使用的原则;

执行语句

控制语句:

if ~else 条件选择语句
switch 多分支条件选择语句
for() 循环语句
while() 循环语句
do~while() 循环语句
continue 结束本次循环语句
break 中止执行switch语句
goto 转向语句
return 从函数返回语句

函数和流对象调用语句

1
2
max(10,21);      //调用函数
cout<<x<<endl; //流对象调用语句

表达式语句

语句:表达式+分号【i=i+1是一个赋值表达式,但i=i+1;就是一个赋值语句】

空语句

只有一个分号,啥也不做(通常可直接省略)

复合语句

使用{}括起来的语句集合,也称块语句。

赋值操作

可通过=完成多个变量的同时赋值

1
2
3
4
if ((b = a) > 0) t = a;    //用于将a的值赋给b再判断是否大于c

int a=b=c=1; //错误,b和c变量未被声明,赋值符号是右结合
int a=1,b=1,c=1; //正确,用逗号声明三条语句的等价关系

C++的输入与输出

定义时会在内存中开辟一个缓冲区,用于暂存;执行cout时会把数据先放在输出缓冲区,待输出缓冲区满或遇到endl则将缓冲区已有数据一起输出并清空缓冲区。

1
2
3
4
5
6
7
8
9
10
11
cin>>a>>b;   //输入流对象,>>流提取运算符,将输入内容提取到内存中,不得一次插入/输出多项
cout<<a
<<b<<endl; //输出流对象,<<是流插入运算符,将内容插入到输出流程中;分行写时不用分号,换行用endl
/*C语言中用的是printf和scanf,换行是\n*/
printf("%d\n", a); //例如输出1
printf("%5d\n", a); //例如输出 1 ,因为宽度要求5个字符,右对齐,要是-5就是左对齐

char c1,c2;
int a;
float b;
cin>>c1>>c2>>a>>b; //输入1234 56.78 会输出 1 2 34 56.78,因为系统会根据变量类型提取

输入时可用空格分隔也可换行分割;通过setprecision控制精度,但需要提前引入include<iomanip>头文件,【另外的也可通过setfill填充空格,而setiosflags(ios:fixed):用于指定浮点数显示,setiosflags(ios:scientific):用于固定指数表示,也可进制转换,比如hex就是换成16进制输出,oct就是换成8进制输出】,当然我们也可以用C语言中的putchar和getchar函数来进行输入和输出字符。

对于scanf(若指定分割符号,必须在格式控制那输入)和printf函数的格式控制符号有%m.nf(浮点型数据,m控制宽度,n控制小数位数),%u输出无符号数,具体可参考上一章内容。

至此算是对上一章节内容的补充。


编写顺序结构的程序

从上到下的顺序执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*以编程求一元二次方程式ax2+bx+c=0的根为例*/
#include <iostream>
#include <cmath> //记得做算术运算引入cmath库
using namespace std; //记得写C++要声明使用空间

int main(){
int a,b,c;
float x1,x2;
cin>>a>>b>>c;
x1 = (-b+sqrt(b*b-4*a*c))/(2*a);
x2 = (-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;

return 0;
}

关系运算和逻辑运算

根据某个指定条件是否满足来决定执行的内容,C++通过if语句来实现条件选择。

1
2
3
4
5
6
/*利用if条件选择语句来实现*/
if(amount<1000) // < 被成为关系运算符
tax = 0.95;
else
tax = 0.9;
pay = amount*tax;

在关系运算符中==和·!=的优先级相同,但次于其他的。

相较于C语言,C++增加了逻辑型数据即输出结果为truefalse;其通过bool来定义;编译器在实际编译时会将false处理为0,ture处理为1.(存放时在内存中占1个字节),因此在处理过程中若bool型变量非0,则按照真(当成1)来处理。

其他的逻辑运算符有:&&(逻辑与)、||(逻辑或)和(逻辑非,取反),运行时按照非→与→或的顺序来执行。

[!IMPORTANT]

而整体来看,!>算术运算符>关系运算符>&&和||>赋值运算符,不过书写时害死尽量加括号

1<=a<=5这样写报错的原因在于当程序从左至右顺序执行时,结果始终为真,失去了区间判断的意义。