为什么要用函数

在程序设计中,我们会发现一些程序段,在程序的不同地方反复出现,我们就可以写成函数,反复使用。体现“模块化编程”的思想。

函数的定义

  1. 数据类型 函数名(形式参数){
  2. 函数体
  3. }
  4. void f(){
  5. cout << "hello" << '\n';
  6. }
  7. void f(int x){
  8. cout << x << '\n';
  9. }
  10. int f(int a, int b){
  11. return a + b;
  12. }

函数的声明和调用

  1. #include <iostream>
  2. using namespace std;
  3. void f()
  4. {
  5. cout << "函数调用一次" << "\n";
  6. }
  7. int main()
  8. {
  9. f();
  10. f();
  11. return 0;
  12. }

函数的传值调用

  1. // 值传递
  2. void fun(int x)
  3. {
  4. x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加程序运行时间,降低了程序的效率
  5. }
  6. void main(void)
  7. {
  8. int y = 0;
  9. fun(y);
  10. cout<< "y = " << y << endl; //y = 0;
  11. }
  12. // 指针传递
  13. void fun(int *x)
  14. {
  15. *x += 5; //修改的是指针x指向的内存单元值
  16. }
  17. void main(void)
  18. {
  19. int y = 0;
  20. fun(&y);
  21. cout<<"y = "<<y<<endl; //y = 5;
  22. }
  23. // 引用传递
  24. void fun(int &x)
  25. {
  26. x += 5; //修改的是x引用的对象值 &x = y;
  27. }
  28. void main(void)
  29. {
  30. int y = 0; //引用的实参必须初始化
  31. fun(y);
  32. cout<<"y = "<<y<<endl; //y = 5;
  33. }
  1. // 关于&的举例
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. char a, b, c;
  5. int main()
  6. {
  7. a = 'a', b = 'b', c = 'c';
  8. cout << &a << '\n';
  9. return 0;
  10. }
  1. // 代码1
  2. #include <iostream>
  3. using namespace std;
  4. void swap(int a, int b)
  5. {
  6. int t = a;
  7. a = b;
  8. b = t;
  9. }
  10. int main()
  11. {
  12. int a = 1, b = 2;
  13. swap(a, b);
  14. cout << a << ' ' << b << '\n';
  15. return 0;
  16. }
  17. /*
  18. 1 2
  19. */
  1. // 代码2
  2. #include <iostream>
  3. using namespace std;
  4. void swap(int &a, int &b)
  5. {
  6. int t = a;
  7. a = b;
  8. b = t;
  9. }
  10. int main()
  11. {
  12. int a = 1, b = 2;
  13. swap(a, b);
  14. cout << a << ' ' << b << '\n';
  15. return 0;
  16. }
  17. /*
  18. 2 1
  19. */
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. void f(char *a, char *b)
  4. {
  5. a = b;
  6. (*a)++;
  7. }
  8. int main()
  9. {
  10. char c1, c2;
  11. char *p1, *p2;
  12. c1 = 'A', c2 = 'a';
  13. p1 = &c1, p2 = &c2;
  14. f(p1, p2);
  15. cout << c1 << ' ' << c2 << '\n';
  16. return 0;
  17. }

全局变量、局部变量、作用域

递归的概念

一本通习题

函数

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. void f(int x)
  4. {
  5. if (x == 0) return ;
  6. cout << x;
  7. f(x - 1);
  8. }
  9. int main()
  10. {
  11. int n, m;
  12. cin >> n; //10`
  13. f(n);
  14. puts("");
  15. return 0;
  16. }

求正整数2和n之间的完全数

  1. //

素数个数

  1. //

最大数max(x,y,z)

  1. //

绝对素数

  1. //

亲和数

  1. //

回文三位数

  1. //

求π的值

  1. //这个麻烦

哥德巴赫猜想

  1. //

简单算术表达式求值

  1. //

短信计费

  1. //

甲流病人初筛

  1. //

统计单词数

  1. //

机器翻译

  1. //

Vigenère密码

  1. //

素数对

  1. //

我家的门牌号

  1. //

质数的和与积

  1. //

单词替换

  1. //

笨小猴

  1. //

素数回文数的个数

  1. //

判决素数个数

  1. //

最大质因子序列

  1. //

区间内的真素数

  1. //

二进制分类

  1. //位运算
  2. for (int j = 0; (1 << j) <= x; j++)
  3. {
  4. if (x & (1 << j)) one++;
  5. sum++;
  6. }

确定进制

  1. //

递归算法

注意以下题目使用递归实现

求1+2+3+…

  1. //

斐波那契数列

  1. //

倒序数

  1. //

转进制

  1. //

字符串逆序

  1. //

阿克曼(Ackmann)函数

  1. //

digit函数

  1. //

Hermite多项式

  1. //

求f(x,n)

  1. //

再求f(x,n)

  1. //