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)
---恢复内容结束---