C/C++ 基本语法元素
I. 程序设计基本概念
1.程序
- 一系列遵循一定规则并且能正确完成特定功能的代码或者指令序列
- 通常包括数据结构和算法
2.程序设计
- 按照任务需要,设计数据结构和算法,编写代码,并测试正确性,得到正确运行结果的过程
3.程序设计语言
- 语法: 编写程序代码的规范, 具有特定的语法规则
- 语义: 具有特定的语法意义
- 语用: 具有特定的语法使用环境
4.算法
- 问题的求解方法与步骤
- 不允许存在二义性
- 用流程图或者伪代码描述
- 算法设计过程是逐步求精的
5.数据与数据结构
- 数据: 程序操作的对象
- 数据结构: 数据对象之间的相互关系及构造方法
- 与算法关系密切
6.结构化程序设计
- 数据结构
- 程序流程控制
- 函数与算法
- 程序组织
7.面向对象程序设计
数据中心 转向 算法中心主义, 再转向对象主义
- 对象:行为与属性的集合
- 类与对象、对象构造、继承与派生
8.范型编程
- 标准模版库: 迭代器、容器、抽象算法
II. 简单C/C++ 程序
1.C 程序
#include<stdio.h> //预编译指令,包含标准头文件
// 新版可以写成 <cstdio>
int main() //主函数的函数头, 全局唯一
{ //函数体
printf("hello world!\n");
// printf 标准库函数,位于stdio.h 中, \n 换行
return 0;
// 返回值是传给操作系统,操作系统根据返回值判断程序是否正确执行
}
2.C++ 程序
#include<iostream>
using namespace std; //标准命名空间
int main()
{
cout << "Hello World!" << endl;
return 0;
}
<<
表示数据流动的方向, 数据从右向左流动endl
: endline- 命名空间 namespace, 使用来解决函数名太多而导致的重名, 可以用 namespace 去解析函数
- 如果上述代码不写
using namespace std
, 则要加上名解析操作符::
,cout
和endl
要写成std::cout
````std::endl```
3. C++,计算两个整数之和
#include<iostream>
using namespace std;
int main()
{
int a, b, sum;
cout << "a=";
cin >> a;
cout << "b=";
cin >> b;
sum = a + b;
cout << a << " + " << b << " = " << sum << endl;
return 0;
}
4.总结
- 由一个或多个函数组成
- 有唯一的主函数 main
- 程序执行由主函数开始,其他函数由主函数调用或者间接调用
- 程序执行流程与函数定义顺序无关
- 每个函数包含函数头和函数体两个部分组成
- C/C++ 包含大量库函数和算法,可以直接使用
III. 程序设计基本流程
1.流程
- 编辑源代码 => 源文件(.cpp/.c)和头文件(.h)
- 编译 => 目标文件(二进制代码)
- 链接(目标文件 + 函数库文件) => 可执行文件
- 测试
2.编辑与编译
- 编辑: 编辑器 vim emacs
- 编译: - c: gcc - cpp: g++
- 执行:
./a.out
IV. 基本语法元素
1.数据类型
- 整数类型:
- 使用int 定义整数类型的数据对象
int a;
, 整数类型具有取值范围,仅能表示特定区间内整数值 - 整数符号:确定是否表示负数- signed:
- unsigned: 无符号, 表示0+,
unsigned int b;
- 整数长短: 确定 整数取值范围大小 - long:
long int c;
- short:
short int c;
- 浮点数类型: - double: 精度更高 - float: 有效只有6,7位, 精度不够高,不推荐
2.量和表达式
表达式:
- 操作数与操作符序列, 表达运算过程
- 操作数:文字,量,函数调用,括号
- 操作符:运算逻辑
- 表达式值:运算结果
- 表达式求值: 计算表达式值的过程
变量:
-
程序运行期间,存储的值可以改变的量
-
格式:
变量类型 变量名[,变量名称];
, 如int a;
,double a, b
-
C/C++中,变量应该先声明,再使用
-
变量名称具有唯一性,不允许重名
-
变量基本特征(VANT) - 变量总是具有值(value) - 变量总是与内存中地址(address)相对应 - 变量总是具有名称(name) - 变量总是具有特定的类型(type)
整数类型文字
- 十进制
- 十六进制:
- 逢十六进一, 无正负号
- 以
0x
或0X
开头的0-9, A/a~F/f序列 - 八进制
- 逢八进一,无正负号
- 以
0
开头的0~7序列 - 二进制
浮点数类型文字
- 小数形式
- 指数形式:科学记数法, 由尾数部分,字符E/e
字符串类型文字
- 双引号引起的字符序列:
"hello world!"
- 转义序列: 用\来转义表达自身的序列
\n
换行\t
制表键\\
反斜杠字符本身\"
双引号 etc
常量
- 程序执行期间值不变的量
const 数据类型 常量名称 = 初始值
, 如const int zero = 0
- 用来解决程序中单独出现的数据
赋值与初始化
- 赋值:
变量名称 = 表达式
- 变量初始化: 定义变量的时候设定初始值,定义的瞬间只能做一次初始化
操作数与操作符
- 一元操作符: 单个操作数, 如负号
- 二元操作符: 两个操作数, 如加减乘除
- 三元操作符: 三个操作数, 如条件表达式
- 操作符的优先级与结合性: 优先级确定计算顺序, 结合性确定计算方向
3.语句
简单语句
- 表达式后跟分号
复合语句
- 花括号括起来的语句序列
- 如
{ a = 1; b = a + 1;}
空语句
- 单独的一个分号
- 目的: 满足程序特定语法规则要求, 作为未来添加程序代码的占位标记
4.基本输入输出
- 输出:
cout
, 插入操作符>>
- 输入:
cin
, 输出操作符<<
V. 程序设计风格
1.注释
- 目的:增强程序可读性和可维护性
- 格式:
-
/* this is comment */
-// this is a comment line
- 同一种注释标记不能嵌套
2.命名规范
- 字符集:ASCII字符集, 大小写英文字母,数字,部分特殊符号等
- 标识符:以下划线、字母、开头, 由下划线,字母,数字组成,表示常量,变量,函数,类型等名称, 区分大小写 - 关键字:系统专用的具有特定意义的标识符 - 预定义标识符:编译命令与库函数名,具有特定意义 - 用户定义标识符: 用户根据需要定义,主要为了使程序容易维护
3.宏于常量
宏定义
#define
指令: 预处理命令, 如#define PI 3.14
- 后面无分号!!
- 一旦定义,可以代替常量使用
- 宏定义不是常量, 是文本, 程序编译时,是使用定义的宏中的文本替换量
- 程序优先使用常量而不是宏
目的与意义
- 增强程序可读性: 使用具有意义的名字命名
- 增强程序的可维护性: 将值定义为符号常量, 则程序中只需要修改一次
4.赋值语句简写形式
x = x + a
–>x += a
x = x - a
–>x -= a
x = x * a
–>x *= a
-
x = x / a
–>x /= a
, 除法用于整数则结果也为整数, 用于浮点数则结果也为浮点数 x = x % a
–>x %= a
, %: 两个整数进行整数除法, 结果为余数x *= a + b
–>x = x * (a + b)
5.代码排版
- 左缩进递进层次
- 一行不超过80个字符
- 一个函数代码不超过60行
- 复合语句书写格式要统一
- 命名规范一致
- 风格要保持统一
Share this on