欢迎光临散文网 会员登陆 & 注册

第三、四讲

2021-01-28 21:47 作者:你算是哪块小饼干吖  | 我要投稿

第三讲  函数


一  函数声明与调用  

1  函数调用

主调(客户)函数与被调(服务器)函数 函数调用时的参数与返回值 例一: Swap( a, b ); 例二: n = Add( a, b );  

2  函数原型

函数的实现与调用格式说明:作为函数接口 一般出现在头文件中 格式: 函数返回值类型 函数名称( 形式参数列表 ); 例一: int Add( int x, int y ); 例二: void Swap( int x, int y ); 例三: void Compute();  


二  函数定义

1  函数实现

函数定义,使用编程语言给出函数的执行步骤

2  函数返回值

函数完成后带回来的结果 主调函数可以使用

3  谓词函数

返回 bool 类型值的函数 表达某项任务是否完成或某个条件是否满足

4  函数重载  

定义同名但参数不完全相同的函数

示 例:

 int Max( int x, int y );
 char Max( char x, char y );
 bool Max( bool x, bool y );


三  函数调用规  

1  参数传递机制

  • 值传递

  • 形式参数在函数调用时才分配存储空间,并接受实际参数的值

  • 实际参数可以为复杂的表达式,在函数调用前获得计算

  • 形式参数与实际参数可同名,也可不同名

  • 参数较多时,实际参数值逐一赋值,它们必须保持数目、类型、 顺序的一致

  • 值的复制过程是单向不可逆的,函数内部对形式参数值的修改 不会反映到实际参数中去

  • 函数参数一般为函数输入集的一部分,函数输出集一般使用返 回值表示,只有使用特殊的手段才可以将函数参数作为函数输 出集的一部分  

  • 引用传递


2  函数调用栈框架  


第四讲  算法


一  算法概念与特征

1  算法基本概念

  • 算法定义:解决问题的方法与步骤

  • 设计算法的目的:给出解决问题的逻辑描述,根据算法描述进行实际编程

2  算法特征

  • 有穷性:算法在每种情况下都可以在有限步后终止

  • 确定性:算法步骤的顺序和内容没有二义性

  • 输入:算法有零个或多个输入

  • 输出:算法至少具有一个输出

  • 有效性:所有操作具有明确含义,并能在有限时间内完成  


二  算法描述

  • 伪代码

  • 流程图(程序框图)


三  算法设计与实现

1  算法设计与实现

  • 构造算法解决问题

  • 按照自顶向下、逐步求精的方式进行

  • 使用程序设计语言编程实现  


四  递归算法

1  递归问题的引入

  • 递推公式:数学上非常常见 例一:阶乘函数: 1! = 1, n! = n × (n-1)! 例二:斐波那契数列函数: f(1) = f(2) = 1, f(n) = f(n-1) + f(n-2)

  • 递推函数一定是分段函数,具有初始表达式

  • 递推函数的计算逻辑:逐步简化问题规模

2  递归的工作步骤

  • 递推过程:逐步分解问题,使其更简单

  • 回归过程:根据简单情形组装最后的答案  

3  循环与递归的比较  

  • 循环使用显式的循环结构重复执行代码段,递归使用重复的函数调用执行代码段

  • 循环在满足其终止条件时终止执行,而递归则在问题简化到最简单情形时终止执行

  • 循环的重复是在当前迭代执行结束时进行,递归的重复则是在遇到对同名函数的调用时进行

五  容 错

1  定义

  • 允许错误的发生

2  错误的处理

  • 很少见的特殊情况或普通错误:忽略该错误不对程序运行结果产生影响

  • 用户输入错误:通知用户错误性质,提醒用户更正输入

  • 致命错误:通知用户错误的性质,停止执行

3  典型容错手段

  • 数据有效性检查

  • 程序流程的提前终止  


六  算法复杂度  

1  引入算法复杂度的目的

  • 度量算法的效率与性能

2  大 O 表达式

  • 算法效率与性能的近似表示(定性描述)

  • 算法执行时间与问题规模的关系

3  表示原则

  • 忽略所有对变化趋势影响较小的项,例如多项式忽略高阶项之外的所有项

  • 忽略所有与问题规模无关的常数,例如多项式的系数  

4  标准算法复杂度类型  

  • O(1):常数级,表示算法执行时间与问题规模无关

  • O(log(n)):对数级,表示算法执行时间与问题规模的对数成正比

  • O(sqrt(n)):平方根级,表示算法执行时间与问题规模的平方根成正比

  • O(n):线性级,表示算法执行时间与问题规模成正比

  • O(n*log(n)): nlog(n) 级,表示算法执行时间与问题规模的nlog(n) 成正比

  • O(n2):平方级,表示算法执行时间与问题规模的平方成正比


七  练习


 #include<iostream>
 #include<cmath>
 
 using namespace std;
 bool IsPrime( unsigned int n );
 
 int main()
 {
     int n,i;
     cout << "Please enter a number n(n > 1):";
     cin >> n;
     cout << n << " = ";
     for(i = 2;i <= n;i++)
     {
         while(n % i == 0)
         {
             if(IsPrime( i ))
             {
                 cout <<  i;
                 n /=i;
                 if(n != 1)
                 cout << "*";
             }
         }
     }
     cout << endl;
     return 0;
 }
 
 bool IsPrime( unsigned int n )
 {
     unsigned int i = 2, t = (unsigned int)sqrt(n) + 1;
     if(n == 2)
     return true;
     if( n % 2 == 0 )
     return false;
     while( i <= t )
     {
         if( n % i == 0 )
         return false;
         i += 2;
     }  
     return true;
 } #include<iostream>
 #include<cmath>
 
 using namespace std;
 
 int main()
 {
     int n,i;
     cout << "Please enter a number n(n > 1):";
     cin >> n;
     cout << n << " = ";
     for(i = 2;i <= n;i++)
     {
         while(n % i == 0)
         {
             
             cout <<  i;
             n /=i;
             if(n != 1)
             cout << "*";
         }
     }
     cout << endl;
     return 0;
 }
 //不用判断因数是否为素数也可以



第三、四讲的评论 (共 条)

分享到微博请遵守国家法律