C筑基——顺序结构
顺序结构
基于过程的程序设计和算法
程序(有限命令的有序集合)必须明确”做什么”,还要设计出具体的操作步骤,解决“怎么做”。
编程时需要给出计算机全部操作的具体过程,当程序执行完成,就实现了问题的求解。
在设计算法(解决某个问题的一组确定的有限的操作步骤)时间需要考虑:如何设计操作步骤,怎样保证正确性,怎样保证高效性。
一个基于过程的程序包括:
(1)对数据的描述:数据结构(指定数据的类型和数据的组织形式)
(2)对操作的描述:算法
程序 = 数据结构+算法
程序设计过程:具体问题→算法分析、设计→编写程序 【关键:算法设计&具体实现】
对于C++代码而言,一个源程序由三部分组成:预处理指令(如#include<>)+全局声明+函数(只能有一个main函数)
全局变量:变量在函数外进行声明(有效范围为全局)
局部变量:变量在函数内声明,仅在函数内部生效
C++语句
声明语句
声明变量/函数,对于变量的声明被认为一条语句,满足先定义后使用的原则;
执行语句
控制语句:
| if ~else | 条件选择语句 |
|---|---|
| switch | 多分支条件选择语句 |
| for() | 循环语句 |
| while() | 循环语句 |
| do~while() | 循环语句 |
| continue | 结束本次循环语句 |
| break | 中止执行switch语句 |
| goto | 转向语句 |
| return | 从函数返回语句 |
函数和流对象调用语句
1 | max(10,21); //调用函数 |
表达式语句
语句:表达式+分号【i=i+1是一个赋值表达式,但i=i+1;就是一个赋值语句】
空语句
只有一个分号,啥也不做(通常可直接省略)
复合语句
使用{}括起来的语句集合,也称块语句。
赋值操作
可通过=完成多个变量的同时赋值
1 | if ((b = a) > 0) t = a; //用于将a的值赋给b再判断是否大于c |
C++的输入与输出
定义时会在内存中开辟一个缓冲区,用于暂存;执行cout时会把数据先放在输出缓冲区,待输出缓冲区满或遇到endl则将缓冲区已有数据一起输出并清空缓冲区。
1 | cin>>a>>b; //输入流对象,>>流提取运算符,将输入内容提取到内存中,不得一次插入/输出多项 |
输入时可用空格分隔也可换行分割;通过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 | /*以编程求一元二次方程式ax2+bx+c=0的根为例*/ |
关系运算和逻辑运算
根据某个指定条件是否满足来决定执行的内容,C++通过if语句来实现条件选择。
1 | /*利用if条件选择语句来实现*/ |
在关系运算符中==和·!=的优先级相同,但次于其他的。
相较于C语言,C++增加了逻辑型数据即输出结果为true或false;其通过bool来定义;编译器在实际编译时会将false处理为0,ture处理为1.(存放时在内存中占1个字节),因此在处理过程中若bool型变量非0,则按照真(当成1)来处理。
其他的逻辑运算符有:&&(逻辑与)、||(逻辑或)和!(逻辑非,取反),运行时按照非→与→或的顺序来执行。
[!IMPORTANT]
而整体来看,!>算术运算符>关系运算符>&&和||>赋值运算符,不过书写时害死尽量加括号
1<=a<=5这样写报错的原因在于当程序从左至右顺序执行时,结果始终为真,失去了区间判断的意义。


