大纲要求
•【2】函数定义与调用,形参与实参
•【3】传值参数与传引用参数
•【2】常量与变量的作用范围
•【2】递归函数的概念、定义与调用
为什么要用函数
在程序设计中,我们会发现一些程序段,在程序的不同地方反复出现,我们就可以写成函数,反复使用。体现“模块化编程”的思想。
函数的定义
数据类型 函数名(形式参数){函数体}void f(){cout << "hello" << '\n';}void f(int x){cout << x << '\n';}int f(int a, int b){return a + b;}
函数的声明、定义和调用
函数声明告诉编译器函数的名称、返回类型和参数。
函数定义提供了函数的实际主体。
函数调用
#include <iostream>using namespace std;void f(){cout << "函数调用一次" << "\n";}int main(){f();f();return 0;}
函数的传值调用
// 值传递void fun(int x){x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加程序运行时间,降低了程序的效率}void main(void){int y = 0;fun(y);cout<< "y = " << y << endl; //y = 0;}// 指针传递void fun(int *x){*x += 5; //修改的是指针x指向的内存单元值}void main(void){int y = 0;fun(&y);cout<<"y = "<<y<<endl; //y = 5;}// 引用传递void fun(int &x){x += 5; //修改的是x引用的对象值 &x = y;}void main(void){int y = 0; //引用的实参必须初始化fun(y);cout<<"y = "<<y<<endl; //y = 5;}
// 关于&的举例#include <bits/stdc++.h>using namespace std;char a, b, c;int main(){a = 'a', b = 'b', c = 'c';cout << &a << '\n';return 0;}
// 代码1#include <iostream>using namespace std;void swap(int a, int b){int t = a;a = b;b = t;}int main(){int a = 1, b = 2;swap(a, b);cout << a << ' ' << b << '\n';return 0;}/*1 2*/
// 代码2#include <iostream>using namespace std;void swap(int &a, int &b){int t = a;a = b;b = t;}int main(){int a = 1, b = 2;swap(a, b);cout << a << ' ' << b << '\n';return 0;}/*2 1*/
#include <bits/stdc++.h>using namespace std;void f(char *a, char *b){a = b;(*a)++;}int main(){char c1, c2;char *p1, *p2;c1 = 'A', c2 = 'a';p1 = &c1, p2 = &c2;f(p1, p2);cout << c1 << ' ' << c2 << '\n';return 0;}
全局变量、局部变量、作用域
// 概念性的东西,前面代码中已经涉及很多// 强调一下作用域的概念// 大括号的作用{int x, y;}{int x, y;}以上代码,不冲突
例题,素数个数
// is_prime()模板bool is_prime(int x){if (x < 2) return false;for (int i = 2; i <= x / i; i++)if (x % i == 0) return false;return true;}// i <= sqrt(n)// i * i <= n
例题,素数回文数的个数
// 一个函数判断素数,一个函数判断回文
例题,二进制分类
// 位运算for (int j = 0; (1 << j) <= x; j++){if (x & (1 << j)) one++;sum++;}
例题,确定进制
// 进制方面的问题,是数学基础知识
递归的概念
例题,求1+2+3+…
//
例题,斐波那契数列
//

