1_2_3章基础_函数
C++程序设计基础
来自学堂在线-清华大学
第1章 绪论
计算机语言的级别
- 二进制代码构成的机器语言
- 汇编语言
- 高级语言
C++为面向对象的高级语言
C++程序开发过程
- 算法设计
- 源代码编辑
- 编译
- 连接
计算机系统组成
- CPU
- 内存储器
- 外存储器
- 输入设备
- 输出设备
C++特性
- 抽象:抽象出共同的属性形成类,实例成对象
- 封装:隐蔽对象的内部细节
- 继承:类的复用
- 多态:同样的消息作用在不同对象上引起不同的行为
信息的存储
- 位:bit, b
- 字节:byte, B 1 byte = 8 bit
- 千字节:1KB = 1024B
- 兆字节:1MB = 1024K
- 吉字节:1GB = 1024M
十进制整数转换为R进制:除R取余,先产生低位,后产生高位
十进制小数转换为R进制:乘R取整,先产生高位,再产生低位
数据的编码表示:
- 原码:首位表示正负,0为+,1为-,缺点是零的表示不唯一
- 反码:正数的反码为其原码,负数的反码为符号位不变,其余按位取反
- 补码
- 0的表示唯一
- 符号位可以直接参加运算
- 求补码:正数的补码为其原码,负数的补码为反码+1
- 补码运算的结果仍为补码
- 求原码:对补码再求补码就得到原码
第2章 C++简单程序设计(一)
一个简单的例子
-
每个语句后带分号 ;
-
include表明将后面的文件直接复制展开到当前文件
#include <iostream>
using namespace std;
int main(){
cout<<"hello world"<<endl;
return 0;
}
基本数据类型
类型名 | 字节数 | 取值范围 |
---|---|---|
bool | 1 | false, true |
char | 1 | -128~127 |
short | 2 | -32768~32767 |
int | 4 | -2^31 ~ 2^31-1 |
long | 4 | -2^31 ~ 2^31-1 |
float | 4 | 绝对值3.4x10^-38 ~ 3.4x10^38 |
double | 8 | 绝对值1.7x10^-308 ~ 1.7x10^308 |
字符串
- C风格的字符串:char数组,末尾有一个'\0'
- string
常量const
- const float PI=3.14, const必须初始化,而且初始化之后不能更改
自增自减运算符
- i=1
- i++:i保持原有值参与其他运算,然后执行+1运算,最后i=i+1
- ++i:首先执行+1运算,i变成i+1参与其他运算,最后i=i+1
逻辑运算符
- !表示非
- && 表示与
- || 表示或
条件运算符
- x = a > b ? a : b; 选取较大值
sizeof:求字节数 sizeof(int) sizeof(a)
第2章 C++简单程序设计(二)
数据的输入与输出
-
标准输入输出流:
cout<<a<<endl; cin>>a;
int a=15; int b=9; cout<<hex<<a<<oct<<b<<dec<<a<<endl; //十六进制、八进制、十进制输出 cout<<setw(5)<<setprecision(3)<<3.14159; //设定域宽、浮点数的小数位(包括小数点),要#include <iomanip>
选择结构
-
if-else:
int main(){ int x, y; cin>>x>>y; if (x>y){ cout<<"x is larger"<<endl; } else if(x<y){ cout<<"y is larger"<<endl; } else{ cout<<"x and y is equal"<<endl; } return 0; }
-
switch语句
int main(){ int x; cin>>x; switch(x){ case 0: cout<<"Sunday"<<endl; break; case 1: cout<<"Monday"<<endl; break; default: cout<<"default"<<endl; break; } return 0; }
循环语句
-
while:
int main(){ int i=1, sum=0; while(i<=10){ sum += i; i++; } cout<<"sum of 1 to 10 is "<<sum<<endl; return 0; }
-
do-while
int main(){ int n, i; cin>>n; do{ i = n%10; cout<<i; n = n/10; }while(n>0); return 0; }
-
for
int main(){ int sum; for(int i=1;i<=10;i++){ sum += i; } cout<<"Sum of 1 to 10 is "<<sum<<endl; return 0; }
-
break与continue:break直接终止循环,continue则跳过当前循环,直接进入下一次循环
自定义类型
为类型起别名
-
typedef double Area
-
using Vloume = double 必须是C++11标准才行,改devc++标准 参考
#include <iostream> typedef double Area; using std::cout; using std::endl; int main(){ Area a = 3.14; double b = 2.79; cout<<"a is "<<a<<endl; cout<<"b is "<<b<<endl; return 0; }
-
枚举类型:enum Day {mon=1, tue, wed, thu, fri, sat, sun}, 默认从0开始,也可以自己指定
enum Weekday {mon=1, tue, wed, thu, fri, sat, sun}; int main(){ Weekday day; day = wed; cout<<"Wed is "<<day<<endl; return 0; }
-
auto :自动推断变量的类型
auto val = val1 + val2
-
decltype :定义 j 以2为初始值,类型却与i一致
decltype(i) j=2
#include <iostream> using namespace std; typedef double Area; using Size=double; int main(){ Area a=3.15; Size b = 2.79; int i = 0; auto c = a+b; decltype(i) j=3; cout<<"type of c is "<<sizeof(a)<<endl; cout<<"size of j is "<<sizeof(j)<<endl; return 0; }
-
结构体
#include <iostream> using namespace std; struct complex{ double real; double image; }; int main(){ complex a={2,1}; cout<<"real of a is "<<a.real<<endl; cout<<"image of a is "<<a.image<<endl; return 0; }
第3章 函数
函数本质上为一个功能模块,先定义后调用
函数的定义
类型标识符 函数名(形式参数表)
{
语句序列
}
函数声明
如果函数定义出现在函数调用后,需要先进行声明
类型标识符 被调用函数名 (含类型说明的形参表)
函数调用
函数名 (实参列表)
嵌套与递归
- 嵌套是多个函数相互调用
- 递归是函数调用函数本身
参数传递
单向传递:实参的值用来初始化形参,形参的改变不影响实参
双向传递:引用, 形参改变影响实参;在return需要返回多个值时有用,因为默认return只能返回一个值
引用
int i=1;
int &r = i; # i等价于r
内联函数
在调用简单函数时,节省时间;不是用栈保存现场,而是直接复制代码
inline double are(int r){
return pi * r * r;
}
constexpr函数
常量表达式constexpr,constexpr函数返回的依然是constexpr
constexpr int get_size(){
return 20;
}
constexpr int foo = get_size();
默认参数值
- 有函数声明时,默认参数值在声明中体现,在函数定义时不要体现
- 无函数声明时,需要在函数定义的时候体现
int three_add(int x, int y=1, int z=2);
函数重载
函数名相同,具有相似功能的函数
- 参数类型不同
- 参数个数不同
int add(int a, int b){
return a+b;
}
double add(double a, double b){
return a+b;
}
int add(int a, int b, int c){
return a+b+c;
}
系统函数
-
sin, cos
-
sqrt, abs
-
需要包含相应头文件
#include <cmath>