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>

posted @ 2020-07-16 00:36  happy_fan  阅读(120)  评论(0编辑  收藏  举报