0%

1.C++输出与函数

前置:C语言


1.1 函数

C++完全兼容了 C语言结构化程序设计

  • 自顶向下:针对可能存在二义性的问题描述,转化为流程化、有限确定的算法描述,进而用无二义性的程序进行实现
  • 按功能划分模块
  • 每一模块都由顺序,选择,循环三种基本结构组成
  • 模块化实现的具体方法为子程序

1.1.1 基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*求x的n次方*/
# include<iostream>

using namespace std;

double mypower(int x,int n){
double val = 1.0;

while(n--)
val *= x;
return val;
}

int main(){
int x,n;

cin >> x >> n;
cout << x << "的" << n << "次幂是:" << mypower(x,n) << endl;

return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*二进制转十进制*/
# include<iostream>

using namespace std;

/*x的n次幂*/
double power(int x,int n){
double val = 1.0;

while(n--)
val *= x;

return val;
}

int main(){
int val = 0;
char ch;

/*每8位为一组*/
for(int i = 8;i >= 0;--i){
cin >> ch;
if('1' == ch)
val += static_cast<int>(power(2,i));
}

return 0;
}

随机数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*随机数的获取*/
# include<iostream>
# include<cstdlib>

using namespace std;

enum GameStatus{WIN,LOSE,PLAYING};

/*产生结果*/
int rollDice(){
int die1 = 1 + rand()%6;
int die2 = 1 + rand()%6;

cout << "payer rolled" << die1 << "+" << die2 << "=" << die1 + die2 << endl;

return die1 + die2;
}

int main(){
int sum,myPoint;
GameStatus status;

unsigned seed;
cin >> seed;//输入随机数种子,即为随机数序列设置初值,不同初值,产生的随机数序列不同
srand(seed);//产生随机数序列

sum = rollDice();
switch(sum){
case 7:
case 11:
status = WIN;
break;
case 2:
case 3:
case 12:
status = LOSE;
break;
default:
status = PLAYING;
myPoint = sum;
cout << "point is" << sum << endl;
}

while(PLAYING == status){
sum = rollDice();
if(sum == myPoint)
status == WIN;
else if(7 == sum)
status == LOSE;
}

if(WIN == status)
cout << "You win" << endl;
else
cout << "You lose" << endl;


return 0;
}

数学函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# include<iostream>
# include<cmath>

using namespace std;

const double TINY_VALUE = 1e-10;

double tsin(double x){
double g = 0;
double t = x;
int n = 1;

do{
g += t;
n++;
t = -t*x*x/(2*n-1)/(2*n-1);
}while(fabs(t) >= TINY_VALUE);//涉及精确度,添加精度变量

return g;
}

1.1.2 递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# include<iostream>

using namespacce std;

int c(int n,int k){
if(k > n)
return 0;
else if(n == k || k == 0)
return 1;
else
return c(n-1,k)+c(n-1,k-1);
}

int main(){
int n,k;

cin >> n >> k;
cout << "C(n,k)" << c(n,k) << endl;

return 0;
}

1.1.3 引用形参

一个变量的别名,指向同一块内存空间

声明引用时,必须对他初始化,使他指向已存在的对象

  • 只能初始化,不能修改

在作为函数参数时:执行主调函数中的 调用 时才会为变量分配内存,同时用实参来初始化形参

1.1.4 内联函数

内联函数不在调用时发生控制转移,只是将代码嵌入到调用处

适用于功能简单,规模小,经常使用的函数

1
2
3
inline 数据类型 函数名(形参列表){
/*函数体*/
}

1.1.5 带默认形参的函数

在函数声明时,声明默认值

带默认形参值的形参必须在参数列表的最后

不允许对同于函数的形参多次定义,默认形参只能声明一次,声明时初始化,定义是不需要再次初始化的

1.1.6 函数重载

两个以上的函数,具有相同的函数名,但是形参个数或数据类型不同,编译器根据不同的参数列表调用最佳匹配函数

  • 构造函数可以重载,析构函数不能重载

在C标准中

  • 求整数的绝对值 abs()labs() 应该包含 stdlib.h

  • 求浮点数的绝对值 fabs() 应该包含 math.h

在C++标准中

  • stdlib.h:

    int abs(int n);

    long int abs(long int n);

  • math.h:

    double abs(int n);

    float abs(float x);

    long double abs(long double x);

-------------本文结束-------------