C++第二次作业

1.为什么要用函数(设计实验、教案说明)

函数是编程的经典用法,为什么使用函数呢:

(1)函数可以使功能模块化,让程序的功能简单明了;

使用函数,让程序的目的和功能变得一目了然,

#include<stdio.h>
//求最大值 int max(int a,int b){ if(a>b)return a; return b; } int main() { int a,b; int p=max(a,b); return 0; }

(2)使用函数可以使某些重复且复杂的功能得到封装,代码更加简洁

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<string>
using namespace std;
//计算阶乘 int jech(int k){ int sum=1; for(int i=1;i<=k;i++) sum*=k; return sum; } int main(){ cout<<jech(2)<<endl; cout<<jech(3)<<endl; return 0; }

 解释:上面代码中,阶乘被反复计算,这时如果不使用函数,代码会非常冗余,使用函数后看着代码更加简洁。

2.为什么要用函数重载(设计实验教案说明)

函数重载可以使函数的功能更加鲜明,话不多说,先上代码

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<string>
using namespace std;
//完成加法运算,3个函数重载
int add(int x,int y){ return x+y; } int add(int x,int y,int z){ return x+y+z; } double add(double x,double y){ return x+y; } int main(){ cout<<add(3,5)<<endl; cout<<add(4,5,6)<<endl; cout<<add(3.5,4.7)<<endl; return 0; }

解释:不同数量的数据和不同类型的数据都可以使用add方法,深刻体现出重载的优越性,让使用者方便,不易混淆。

3.什么是值传递(设计实验和教案说明其过程,分析其特性)

值传递是指传递的是数值,是由内存重新分配的变量在函数中使用(注意:此时函数中的变量和实际的变量并不是同一个东西)

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<string>
using namespace std;
//交换数值的操作
void swapm(int a,int b){ int tmp; tmp=a; a=b; b=tmp; } int main(){ int a=3; int b=5; cout<<a<<" "<<b<<endl; swapm(a,b); cout<<a<<" "<<b<<endl; return 0; }

我们可以看到,在函数使用前和使用后,变量的值并未发生交换

4.什么是地址传递(设计实验和教案说明其过程,分析其特性)

地址传参的意思是:使用者需要在函数中直接使用该变量进行一些操作(增,改)

通常使用指针。

 

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<string>
using namespace std;
//改变数组内容
void pisi(int a[]){
    a[0]=1;
    a[1]=2;
    a[2]=3;

}
int main(){
    int a[3];
    a[0]=a[1]=a[2]=0;
    cout<<a[0] <<a[1] <<a[2]<<endl;
    pisi(a);
    cout<<a[0]<<a[1]<<a[2]<<endl;
    return 0;
}

 

可以看到,传入数组的地址(指针)结果会因为函数的调用而发生改变

 

5.设计实验和教案,分析如何编写递归函数

递归主要注意两点:

(1)出口:

递归的出口是结束的条件,同时也是边界。值得注意的是出口一定要考虑完整,否则出现未知错误

(2)递归体:

递归体是递归的主要部分,我们首先搞清楚什么时候开始递归,什么时候就不递归,在每个递归体中还会完成关键的计算操作。

(3)参数变化:

递归一个鲜明的特征就是在递归时,经常出现参数变化(比如汉诺塔) 因此这些应该提前考虑。‘’

 

#include <iostream>
using namespace std;

//计算n!
int jiech(int n)
{
    int f;
    if(n==0)出口
        f=1;
    else 
        f=jiech(n-1)*n;//调用自身
    return f;
}

int main()
{
    int n;
    cout<<"Enter an integer:";
    cin>>n;
    int y=jiech(n);
    cout<<y<<endl;
    return 0;
}

参数变化(n->n-1),出口(n==0)

 

---恢复内容结束---

posted @ 2019-09-16 17:22  ****l****  阅读(251)  评论(0编辑  收藏  举报