今天我们从do while的知识讲起
一
while 和 do..while
do-while 循环并不常用,所有情况,可以用内部的break来解决
但是肯定do while有他自己存在的道理,但是还是break好用,不止while,for也可以用break

好,现在我们开始说for循环
二
for(初始化循环变量; 循环保持条件; 循环变量变化){循环体}
这就是for循环在c++的做法
相当于:
for语句{循环变量 i ...{循环体内,可以有自己的局部变量}}
但是在for中做的变量属性默认肯定是局部变量,但是在for循环退出后都会没有掉
下面是示例
打印九九乘法表 可以用双层嵌套
for(int j=1; j<=9; j++){for(int i=1; i<=j; i++){int k = i * j;cout << j << "x" << i << "=" << k << " ";}cout << endl;}
100以内的素数 素数:就是不能再等分的数,比如:2,5,19…. 最小的素数是2 设计思路:
for(n 从 2 到 100){先标记:n 是素数for(从 2 开始到 n-1 试着除 n){如果能除尽 {标记:n 不是素数跳出循环;}}if(标记为素数) 输出 n;}
一些是python利用好循环题的示例 题目链接:https://gesp.ccf.org.cn/101/attach/1586016620118048.pdf
n=int(input())for i in range(1,n+1):if i==(n+1)//2:print("|","-"*(n-2),"|",sep='')else:print("|","a"*(n-2),"|",sep='')
请你对比一下和Gesp示例解法的区别 题目链接:https://ok.hn.cn/p/GESP2312C2B
所以无论是c++还是python只要利用好了for嵌套都可做出大事
好了,该讲函数了
三
函数用好了可以节省一些不必要的for循环
这是函数的格式:
返回值类型 函数名(输入参数列表 。。。){函数体return 返回值}
这就是定义函数的方式或者说是格式
这是示例:
int myadd(int a, int b){int t = a * 10 + b;return t;}
调用它的方法:int x = myadd(5, 8);
函数定义时的参数,称为:形式参数,简称:形参 调用函数时,传给它的参数,称为:实际参数,简称:实参
请记住下面的这几句话
一般的情况下,形参的改变不影响实参。
形参是局部变量,在栈中分配
形参的寿命小于实参
函数的用处
函数是重要的==抽象==手段
人类解决复杂问题的法宝:大问题分解为小问题 这就是著名的自顶向下的设计
避免重复做某件事,去掉冗余 (don’t repeat yourself) 重复是恶趣之始 拷贝是万恶之源
消除 if..else 的嵌套,增加可读性 【三数取中】的例子,再次函数版本的实现: 三个数居中 = 两两最大值的最小值
消除 循环嵌套,增加可读性 【九九乘法表】的例子,再次函数版实现
// 输出乘法表的某一项// row: 行号,i: 列号void t99_item(int row, int i){cout << i << "x" << row << "=" << row * i;}// 输出乘法表的一行// row: 行号void t99_row(int row){for(int i=1; i<=row; i++){t99_item(row,i);cout << " ";}}int main(){for(int i=1; i<=9; i++){t99_row(i);cout << endl;}return 0;}
返回值
返回值可以没有, 类型写 void 有返回值的时候,调用方也可以当作没有来用。 有返回值的时候,忘记了返回会怎样?
五
我们来说指针
指针就是存放其它变量地址的小盒子 所说的地址,是虚拟内存的地址,本质上就是整数,默认以十六进制表示

指针的定义
类型 * 指针名 初始化: 指针 = &某变量
通过指针,访问被指向的变量
可以读取 myxx = p; 也可以写入 p = … 要十分谨慎 通过指针写入是危险的,这是c++强大的原因,也是bug发源地
当然也是内存溢出发源地 关于细节请查阅:https://zhuanlan.zhihu.com/p/268796378
可以在参数中使用指针
形参是指针类型时,可以改变实参的值 我们可以利用这个特性,间接地实现多个返回值。
下面是示例
void swap(int* a, int* b){int t = *a;*a = *b;*b = t;}
交换连个变量
int mid(int a, int b, int c){// 我们心中的目标是: a <= b <= cif(a > b) 交换a,bif(b > c) 交换b,c...}
改写三数居中的例子,使用冒泡排序法 冒泡排序: 如果相邻的连个元素逆序,则交换它们 多次重复这个动作,伪代码如上
