Part 1 C++基本语法元素
1.1 介绍
本笔记基于Linux环境学习C++ 开发
C/C++ ,Unix/Linux之间的关系
C++由 C 设计开发
Linux 是和 Unix 学习开发的
Unix系统是由 C 开发的
1.2 什么是程序设计
就是一条条指令序列,按规则完成特定功能。
如何写?程序就是按照任务要求,设计数据结构和算法,得到运行结果。
算法:解决问题的方法和步骤,常用流程图来描述算法。语法和逻辑的设计都是一步步精益求精。通常解决一个问题的算法多种多样,但是性能差异也很大,需要时间和经验逐步累积。
数据&数据结构
数据:数据操作的对象
数据结构:数据之间的相互关系和构造方法。
与算法关系密切,良好的数据结构可使算法更简单,恰当的算法可使数据结构更易理解。
程序设计分类:结构化程序设计 面向对象程序设计 范型编程
结构化程序设计: 数据为中心,数据结构、程序流程控制、函数与算法、程序组织
面向对象程序设计 :对象为中心,考虑对象的行为。类与对象、对象构造、继承与派生
范型编程:标准模板库:迭代器、容器、抽象算法
1.3 初时C/C++程序
/// C程序 显示字符串“Hello World”
#include <stdio.h> /// 预编译指令,编译前封装进去,包含标准头文件
int main() ///主函数main(),全局唯一
{
printf( "Hello World!\n" ); /// 函数语句
return 0; /// 函数返回结果,结束执行,结果传递给操作系统
}
///标准库函数,在输出设备(一般为屏幕)上输出一行文本函数调用,需要了解该函数原型,即函数如何使用的细节信息;printf 函数原型位于"stdio.h"中,故需包含该头文件双引号内为字符串内容;‘\n’为转义字符,表示换行分号表示语句结束
/// C++ 程序 显示字符串“Hello World”
#include <iostream> /// 预编译指令,编译前封装进去,包含标准头文件
using namespace std; ///使用标准名空间,使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。
int main() ///主函数main(),全局唯一
{
cout << "Hello World!" << endl; /// 函数语句
return 0;
}
///标准输出对象,在输出设备(一般为屏幕)上输出一行文本;连续的双左尖括号表示向左侧输出对象提供右侧的信息;双引号内为字符串内容;‘\n’为转义字符,表示换行;分号表示语句结束
实例练习:编写程序,计算用户输入的两个整数之和
#include <iostream>
using namespace std;
int main()
{
int a,b,sum;
cout<<"a = "<<endl;
cin >> a;
cout<<"b = "<<endl;
cin>> b;
sum = a +b;
cout<< a << "+" << b << "=" << sum << endl;
return 0;
}
///运行结果
a =
1
b =
2
1+2=3
1.4 程序设计基本流程
- 编 辑
行文本编辑器:vi 编辑器或其他编辑器
窗口文本编辑器:gedit 编辑器或类似编辑器 - 编 译
gcc:编译 C 程序
g++:编译 C++程序
示例:g++ main.cpp - 执 行
缺省可执行文件:./a.out
g++ -o sum sum.cpp ///sum 可执行文件 sum.cpp 源文件
1.5 基本语法元素
数据类型
- 整数类型
使用 int 定义整数类型的数据对象
整数类型具有取值范围,仅能表示特定区间内整数值 - 浮点数类型
使用 double 或 float 表示小数
同样具有取值范围
首选 double,精度更高
整数类型
- 整数类型
定义 a 为整数:int a;
整数的符号:确定是否表示负数
signed、unsigned
定义 b 为无符号整数:unsigned int b;
整数的长短:确定整数取值范围的大小
long、short
定义 c 为短整数:short int c;
表达式
- 定义
操作数与操作符序列,表达运算过程 - 操作符:运算逻辑
- 操作数:文字、量、函数调用、括号
- 表达式值:运算结果
- 表达式求值:计算表达式值的过程
- 类比:按普通四则运算理解表达式求值过程,逐一计算表达式中所有操作符,直至完成
变量
- 先定义再使用
- 定义格式:
变量类型 变量名称[, 变量名称];
- 变量名称应既有惟一性:不允许重名
- 单独定义例:
int a;
- 同时定义例:
double b, c;
- 变量的四大基本特征(VANT)
1.变量总是具有值(value)
2.变量总是与内存中的地址(address)相对应
3.变量总是具有名称(name)
4.变量总是具有确定的类型(type)
文字
- 定义:程序中单独出现的值
例:3.14、100
等 - 类型:
1.整数类型文字:
十进制、十六进制、八进制
十进制表示:普通整数表示
以“0x”或“0X”开头的 0~9、A/a~F/f 序列
十六进制表示:逢十六进一,无正负号
例:0x55、0X1F、0x2a
0x5516 = 8510
八进制表示:逢八进一,无正负号
例:055
以“0”开头的 0~7 序列
0558 = 4510 (注意不要与十进制混淆)
2.浮点类型文字
一般形式:小数表示法
例:3.1416、–2.718281828
由整数部分、小数点与小数部分组成
指数形式:科学计数法
例:3.14e3 = 3.14×103、–2.7E–2 = –2.7×10–2
由尾数部分、字符‘E’/‘e’与指数部分组成
3.字符串类型文字
双引号引起来的字符序列
双引号是字符串文字的界定符,不是字符串的内容
例:“Programming in C++"
、"Hello World!\n"
转义序列
格式:使用反斜杠开始转义序列,后跟一个或多个字符
字符串不仅可以包含可打印字符,也可以包含表示特殊活动的特殊字符
转义序列整体作为单个字符进行处理,样式固定
例:"\n"
、"\\"
常量
-
常量的定义:程序执行期间其值不可改变的量
格式:const 数据类型 常量名称 = 初始值;
例:const int zero = 0;
-
常量的意义
解决直接出现的文字无法解释其意义的问题 -
常量与变量
常量不可改变值,其他与变量同
定义常量时必须进行初始化
常量初始值必须能够在编译期间计算出来
赋值与初始化
- 赋值表达式
格式:变量名称 = 表达式
例:a = 0 - 赋值语句:赋值表达式加分号
格式:变量名称 = 表达式;
例:a = b + c; - 变量的初始化
在定义变量时直接设定初始值
例:int a = 0;
操作符与操作数
- 操作符分类
一元操作符:只有单个操作数,例如负号
二元操作数:带有两个操作数,例如加减乘除等
三元操作数:带有三个操作数,例如条件表达式 - 操作符的优先级与结合性
优先级确定计算顺序,结合性确定计算方向
语句
- 简单语句
格式:表达式后跟分号
例一:sum = n + d;
例二: cout << “Hello, World!” << endl; - 复合语句
格式:花括号对括起来的语句序列
例:{ a = 1; b = a + 1; } - 空语句
格式:单独出现的分号
目的:满足程序特定语法规则的要求;作为未来添加程序代码的占位标记
基本输入输出
-
输出
输出目的地:cout
输出(插入)操作符:<<
输出数据对象
示例:cout << "Hello, World!" << endl;
-
输入
输入来源:cin
输入(提取)操作符:>>
输入数据对象
示例:cin >> a >> b;
1.6 程序设计风格
注释
- 注释的目的:增强程序的可读性、可维护性
- 注释的格式
格式一:“/”与“/”对,注释其中的部分,可出现在程序代码的任意地方
例一:int /* 此处内容为注释 */ a;
格式二:“//”
,注释从此字符序列开始直至本文本行结束
例二:int a; // 此处内容为注释
- 特别说明
同一种注释标记不可以嵌套
“//”不跨行,“/”与“/”对可跨行
命名规范
- 字符集:ASCII字符集
大小写英文字母、数字、部分特殊符号 - 标识符
以下划线或字母开头,由下划线、字母、数字组成,表示常量、变量、函数、类型等名称,区分大小写
关键字:系统专用的具有特定意义的标识符
预定义标识符:编译命令与库函数名,具有特定意义,一般不能重新定义
用户定义标识符:用户根据需要定义,主要是为了使程序容易阅读、理解与维护
宏与常量
- 宏定义
#define 指令:预处理命令
例:#define PI 3.14
一旦定义,可以代替常量使用
宏定义不是常量
程序中应优先使用常量而不是宏 - 目的与意义
增强程序可读性:使用有意义的名字命名
增强程序的可维护性:将值定义为符号常量,则程序中仅需要修改一次
赋值语句的简写形式
加赋:x += a
等价于 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 + b
等价于 x = x * (a + b)
源代码排版
- 递进层次应使用左缩进格式
- 每行代码不能过长,不超过80个字符
- 函数代码不超过60行
- 使用空行区分不同功能代码
- 复合语句书写格式要统一
- 除非特别必要,否则不要在一行上书写多条语句
- 命名规范要一致
- 无论采用什么标准,都一定要一直按照该标准执行
1.7 编程实践
1.1 编写程序,接受用户输入的10个整数,输出它们的和。
#include <iostream>
using namespace std;
int main()
{
int i;
int sum = 0;
int a;
cout << "Input 10 nums:" << endl;
for (i=0;i<10;i++)
{
cin >> a;
sum = sum + a;
}
cout << "sum is :" << sum << endl;
return 0;
}
结果:
Input 10 nums:
1
2
3
4
5
6
7
8
9
10
sum is :55
1.2 编制程序完成下述任务。接受两个数,一个为用户一年期定期存款金额,一个为按照百分比格式表示的一年期定期存款年利率。程序计算一年期满后本金与利息总额。
说明:
(1)存款金额以人民币元为单位,精确到分;
(2)输入利率时不需要输入百分号,例如一年期定
期存款年利率为2.52%,用户输入2.52即可;
(3)输出数据如何精确到分?
#include <iostream>
using namespace std;
int main(){
float money,rate;
float sum;
cout << "First year money(CNY): ";
cin >> money;
cout << "rate is : ";
cin >> rate;
sum = money*(rate/100.00)+money;
cout << "Second year: Total money is: " << sum << endl;
return 0;
}
Result
First year money(CNY): 10000
rate is : 2.55
Second year: Total money is: 10255