前面几章大体上和C差不多,就从函数开始吧。
第三章 函数
1 .函数的定义与使用
函数定义的语法形式:
类型标识符 函数名(形式参数表)
{
语句序列
}
- 若无返回值,类型标识符写void
- 形式参数表:是被初始化的内部变量,寿命和可见性仅限于函数内部
函数的调用
调用前先声明函数:
- 若函数定义在调用点之前,则无需另外声明;
- 若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型:
类型标识符 被调用函数名(含类型说明的形参表);
调用形式:
函数名(实参列表)
- 嵌套调用: 在一个函数的函数体中,可以调用另一函数,称为嵌套调用。
- 递归调用: 函数直接或间接调用自身。
//1.编写一个求x的n次方的函数
#include <iostream>
using namespace std;
//计算x的n次方
double power(double x,int n)
{
double val=1.0;
while(n--)
val*=x;
return val;
}
int main()
{
cout << "5 to the power 2 is :"<< power(5, 2) << endl;
return 0;
}
//2.数制转换
//输入一个8位二进制数,将其转换为十进制数输出。
//例如:11012=1(23)+1(22)+0(21)+1(20)=1310
//所以,如果输入1101,则应输出13
#include <iostream>
using namespace std;
double power (double x,int n); //计算x的n次方
int main()
{
int value=0;
cout <<"Enter an 8 bit binary number ";
for (int i=7;i>=0;i--)
{
char ch;
cin>>ch;
if (ch =='1')
value+=static_cast<int>(power(2, i));
}
cout<<"Decimal value is "<<value<<endl;
return 0;
}
double power(double x,int n)
{
double val=1.0;
while(n--)
val*=x;
return val;
}
/*3.编写程序求π的值
π=16arctan(1/5)-4arctan(1/239)
其中arctan用如下形式的级数计算:
arctanx=x-x^3/3+x^/5-x^7/7+...
直到级数某项绝对值不大于10-15为止;π和x均为double型。*/
#include <iostream>
using namespace std;
double arctan(double x)
{
double sqr = x * x;
double e = x;
double r = 0;
int i = 1;
while (e / i > 1e-15) {
double f = e / i;
r = (i % 4 == 1) ? r + f : r - f;
e = e * sqr;
i += 2;
}
return r;
}
int main()
{
double a = 16.0 * arctan(1 / 5.0);
double b = 4.0 * arctan(1 / 239.0);
/* 注意:因为整数相除结果取整,如果参数写1/5,1/239,结果就都是0 */
cout << "PI = " << a - b << endl;
return 0;
}
/*4.寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。
回文:各位数字左右对称的整数。
例如:11满足上述条件
112=121,113=1331。
分析:
10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。*/
#include <iostream>
using namespace std;
//判断n是否为回文数
bool symm(unsigned n)
{
unsigned i = n;
unsigned m = 0;
while (i > 0) {
m = m*10+i%10;
i/=10;
}
return m==n;
}
int main()
{
for(unsigned m = 11; m < 1000; m++)
if (symm(m) && symm(m * m) &&
symm(m * m * m)) {
cout << "m = " << m;
cout << " m * m = " << m * m;
cout << " m * m * m = "
<< m * m * m << endl;
}
return 0;
}
/5.计算如下公式,并输出结果: $$ k = begin{cases} sqrt{sin^2r+