西工大《C++程序设计》——(二)

文章目录

    • 第5讲:顺序结构
    • 第6讲:选择结构
    • 第7讲:循环结构
    • 第8讲:循环结构的设计
    • 第9讲:函数的定义和使用
    • 第10讲:函数的设计
    • 第11讲:函数的调用
    • 第12讲:作用域和生命周期

第5讲:顺序结构

  1. 程序对算法的实现体现为一定数量的语句和执行流程。
  2. 【C++语句】:分简单语句(表达式语句、函数调用语句、空语句)、复合语句、控制语句。
  3. 【输入输出】:C++的输入输出都是用流对象实现的。
  4. cin输入时可用空格、tab和回车分隔数据。【那如何将这三者赋值给字符变量呢?】

第6讲:选择结构

  1. 单路分支(if...)与多路分支(if...else...
  2. switch语句的执行流程。
  3. switch语句中的default分支不是必需的。
  4. 【举例】:if与else的匹配原则
// 比较1:
int x=5, y=0;
if(x)
	if(y)	cout << "1";
	else	cout << "2";
// 比较2:
int x=5, y=0;
if(x)
	{if(y)	cout << "1";}
	else	cout << "2";

第7讲:循环结构

  1. do...while...语句末尾必须有封号。
  2. 循环语句要注意避免死循环。
  3. 循环语句的附加控制语句:break,continue

第8讲:循环结构的设计

  1. 循环语句的选用:计数型、条件型(不定次数型)。
  2. 循环语句一般需要保证控制变量向终止情况变化。
  3. 【举例】:求pi的近似值
#include 
#include 
using namespace std;
int main(){
	double sgn=1, pi=0, denom=1, term=1;
	while(fabs(term)>1e-7){
		pi += term, denom += 2, sgn = -sgn, term = sgn/denom;
	}
	cout << pi*4 <<endl;
	return 0;
}
  1. 循环的应用:枚举算法,迭代算法(旧值推新值)。
  2. 【迭代法】:三要素为迭代变量、迭代关系式和迭代控制(前进与终止)。

第9讲:函数的定义和使用

  1. 函数的定义方法。
  2. 函数的返回值类型可以是C++中除数组外的任意内置数据类型或自定义类型。
  3. 函数定义又称为函数实现
  4. 【思考】:有返回值的函数被调用但返回值未被使用时,其返回值会存在内存中的某个地方吗?
  5. 函数的两种参数传递机制:值传递(形参作为函数内部变量,实参到形参的单向传递)与引用传递。
  6. C++中调用函数时,必须先有函数声明,且规定函数定义也是函数声明。
  7. 【函数原型说明】:返回类型 函数名(类型1 形参1, 类型2 形参2,...);返回类型 函数名(类型1, 类型2,...);
  8. 【函数调用形式】:函数表达式(y=max(a, b)),函数调用语句(max(a, b)),函数实参(m = max( max(a, b), c ))。
  9. 【内联函数】:C++提供一种高效实用函数的方法,在编译时即将被调函数的代码嵌入到主调函数中以取消函数调用,此时的被调函数称为内联函数。
  10. 【内联函数的声明】:在函数定义的类型前加修饰符inline

第10讲:函数的设计

  1. 【函数的默认参数】:
#include 
#include 
using namespace std;
int add(int x=5, int y=6){
    return x+y;
}
int main(){
    cout << add() << "," << add(1) << "," << add(1, 2) << endl;

	return 0;
}
  1. 默认参数不可重复设置,且必须从右向左设置,默认值可以是常量、全局变量或实参为常量或全局变量的函数调用返回值。
  2. 【函数重载】:在同一个域中同名函数间参数的类型、个数有异,调用时自适应调用相应定义的函数。
  3. 【函数重载注意点】:形参必须不同,编译程序自动进行最佳匹配,功能不同的函数避免重载。
  4. 【函数模板】:
// 模板形式:
template<模板形参表>
返回类型 函数名(形参列表){
	函数体
}
// 模板举例:
template<typename T>
T abs(T x){
	return x>0?:x:-x;
}

  1. 【模板形参表】:两种形式
// 类型1:
typename 类型参数名1, typename 类型参数名2,...
// 类型2:
class 类型参数名1, class 类型参数名2,...
  1. 【库函数】

第11讲:函数的调用

  1. 【函数的嵌套调用】:本质上还是顺序步骤执行。
  2. 【函数的递归调用】:直接递归调用和间接递归调用,需注意递归终止条件。

第12讲:作用域和生命周期

  1. 【局部变量】:函数内部或复合语句内定义的变量。
  2. 【全局变量】:函数内外可利用全局变量传递值,但增加了函数的耦合性,背离模块化设计原则。
  3. 同一个域内实体不可同名;同一个域内某一实体全域可见(包括该域内的子区域和嵌套层),但其子区域内同名实体可屏蔽它;使用extern修饰符可将实体(变量或函数)的声明向前延伸;static修饰符可将该域中的实体(变量、函数)对其他源文件屏蔽。
  4. 【动态存储】:程序自动存储和程序员自由存储。
  5. 【静态存储】:与程序同生命周期。
  6. 【自动对象】:存储方式为程序自动存储。
  7. 【寄存器变量】
  8. 【静态局部对象】:静态局部变量会保持其值。
#include 
using namespace std;
int fun(){
    static int cnt=0;
    cnt++;
    return cnt;
}
int main(){
    int i;
    for(i=0; i<10; i++){
        cout << fun() << endl;
    }

	return 0;
}
  1. 函数本质上是全局的(即外部函数,可用extern声明,一般缺省),在多文件程序中,连接时会检查函数在全局作用域内名字是否唯一,如果不唯一则出错。static修饰符可将函数声明为(文件)内部函数,文件外不可见。

你可能感兴趣的:(C++语言)