C++第二次作业
NO.1 为什么要使用函数?
函数编写好以后,可以被重复使用,使用时可以只关心函数的功能和使用方法而不必关心函数功能的具体实现。这样有利于代码重用,可以提高开发效率,增强程序的可靠性,也便于分工合作和修改维护。
- 设计实验
eg:(编写一个求X的n次方的函数)
#include<iostream>
using namespace std;
double fun(double x,double n){
double y=1.0;
while(n--)
y*=x;
return y;
}
int main(){
double a,b;
cout<<"Please enter x and n"<<endl;
cin>>a>>b;
cout<<"The answer is:"<<fun(a,b)<<endl;
return 0;
}
- 说明:此类反复调用(x)便可以节省大量工程。
NO.2 为什么要用函数重载?
Anser :C++允许功能相近的函数在相同的作用域内以相同函数名定义,从而形成重载。方便使用,便于记忆。
注意 :重载函数的形参必须不同:个数不同或者类型不同。
- 设计实验
eg:编写两个重载函数,分别求两整数的平方和以及两实数的平方和。
NO.3 什么是值传递,它的特性是什么?
- 答:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
- 示例
#include<iostream>
using namespace std;
void fun(int a){
a=10; //修改参数
}
int main(){
int a=20;
fun(a); //调用fun函数
cout<<a<<endl; //输出变量,变量的值没改变
return 0;
}
- 输出结果 :20
NO.4 什么是地址传递?
- eg:
#include<iostream>
using namespace std;
void changeNumber(int* x);
int main(void){
int a = 10;
cout << "a = " << a << endl;
changeNumber(&a);
cout << "Now a = " << a << endl;
return 0;
}
void changeNumber(int* x){
*x = *x + 5;
}
- 结果:a = 10
Now a = 15
NO.5
(1)什么是递归函数?
- 递归函数是数论函数的一种,其定义域与值域都是自然数集,只是由于构作函数方法的不同而有别于其他的函数。处处有定义的函数叫做全函数,未必处处有定义的函数叫做部分函数。最简单又最基本的函数有三个:零函数O(x)=0(其值恒为0);射影函数;后继函数S(x)=x+1。它们合称初始函数。要想由旧函数作出新函数,必须使用各种算子。
(2)如何编写递归函数?
- 实验示例:(用递归法计算1+2+.....N的值。)
#include<iostream>
using namespace std;
int fun(int i);
int main(){
int N;
cout<<"请输入一个正整数:"<<endl;
cin>>N;
cout<<"1+2+3+...+N的结果是"<<fun(N)<<endl;
return 0;
}
int fun(int i){
if(i==1)
return 1;
else
return i+fun(i-1);
}
- 运行结果:
NO.6 总结
- 人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程序员在设计一个复杂的应用程序时,往往也是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。 在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C语言程序。利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。