文章目录
循环
1. 循环
1.1 循环解决的问题
代码中会存在,相同的功能模块多次使用。如果按照基本的 CV 方式,会导致代码出现以下问题
- 代码冗余
- 代码阅读性差
- 代码维护性差
1.2 C/C++ 常用循环结构
初步的采用循环方式来解决以上问题!!!C 语言中有以下循环结构
- while 循环【场景较为固定,使用较多】
- do while 循环
- for 循环【重点】
1.2.1 while 循环结构
// 格式
while (/* 循环条件判断 要求提供真假关系 0 or 1 */)
{
// 循环体
// (循环条件修改)
}
/*
执行流程:
程序执行到 while 循环结构,首先判断 while 之后小括号中的数据内容是否为真(1 true),如果为真,执行对应的循环体内容,之后回到 while 循环条件判断,直到条件判断为假(0 false) 结束
*/
#include <stdio.h>
int main(int argc, char * argv[])
{
// 循环控制变量
int count = 10;
while (count > 0)
{
printf("打起精神,距离过年放假还有 30 天\n");
count -= 1; // count--; 循环条件修改,循环条件控制不到位会导致无限循环
}
}
1.2.2 do while 循环结构
// 格式
do
{
// 循环体
// 循环条件修改
} while (/* 循环条件判断 要求提供真假关系 0 or 1 */);
/*
执行流程:
程序执行到 do while 循环结构,首先执行循环体内容,执行完毕判断 while 之后小括号中的循环条件是否为真(1 true),如果为真继续执行循环体,直到 while 之后条件为假(0 false) 终止循环
*/
#include <stdio.h>
int main(int argc, char * argv[])
{
int count = 10;
do
{
printf("过年去玩\n");
count -= 1;
} while (count > 0);
}
1.2.3 for 循环结构
/* 格式 */
for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件修改 */)
{
// 循环体
}
#include <stdio.h>
int main(int argc, char * argv[])
{
// for 案例
/*
* 1. 循环变量使用顺序 i j k l m n
* 2. 建议使用规范化的循环结构,不要省略必要的条件,保证代码的阅读性
*/
for (int i = 0; i < 10; i++)
{
printf("困了站起来\n");
}
}#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
// for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件修改 */)
for (int i = 0; i < 10; i++)
{
cout << "老院子-红烧肉,烤鸭" << endl;
}
return 0;
}
1.3 循环操作关键字
1.3.1 break 终止循环 【重点】
break 关键字有两个作用
- 在循环结构中,跳出当前循环/跳出一层循环结构
- 在 switch - case 结构中,跳出 switch - case
通常情况下都是在 if 判断条件的约束下,break 操作跳出对应结构
#include <stdio.h>
int main(int argc, char * argv[])
{
for (int i = 0; i < 10; i++)
{
/*
* if 条件判断
*
* == 判断,原则上推荐常量在前,变量在后,尤其是 C 系列语言。
*
* 代码中:
* 5 == i 5 = i 少了 = 符号,语法报错
* i == 5 i = 5 少了 = 符号,语法没有任何问题
*/
if (5 == i)
{
// break 跳出对应的循环结构
break;
}
printf("i = %d\n", i);
}
}
1.3.2 continue 结束本次循环,进入下一次循环
主要作用:
- 结束当前次循环内容,直接进入下一次循环周期
- 要求: continue 关键字有且只在 for 循环结构中使用,不建议/不推荐在 while 和 do while 结构中使用,避免因为 continue 关键字和【循环条件修改】位置的前后关系,导致【无限循环】
- continue 存在的场景使用不多,一般用于较为特殊的算法结构。
#include <stdio.h>
int main(int argc, char * argv[])
{
int count = 10;
/*
while (count > 0)
{
if (5 == count)
{
// 结束当前次循环,直接进入下一个循环周期
printf("count 存储数据为 5\n");
// continue;
}
printf("count = %d\n", count);
count--;
}
// */
for (int i = 10; i > 0; i--)
{
if (5 == i)
{
continue;
}
printf("i = %d\n", i);
}
}
1.4 循环嵌套案例
while (true) {} 常用的无限循环结构,通常是用来解决循环次数不确定,但是有明确的循环终止条件,可以采用 while (true) + break 关键字操作限制循环内容。
【完成一个循环点菜操作】
#include <stdio.h>
int main(int argc, char * argv[])
{
int choose = 0;
int num = 1;
int sum = 0;
printf("1.胡辣汤\n");
printf("2.油条\n");
printf("3.灌汤包\n");
printf("4.小笼包\n");
printf("5.扁粉菜\n");
printf("6.结帐\n");
while (num)
{
printf("请输入您的选择:");
scanf("%d", &choose);
switch (choose)
{
case 1:
printf("消费 8 RMB\n");
sum += 8;
break;
case 2:
printf("消费 1 RMB\n");
sum += 1;
break;
case 3:
printf("消费 2 RMB\n");
sum += 2;
break;
case 4:
printf("消费 6 RMB\n");
sum += 6;
break;
case 5:
printf("消费 6 RMB\n");
sum += 6;
break;
case 6:
printf("总消费 %d\n", sum);
num = 0;
break;
default:
printf("选择错误,请重新选择\n");
break;
}
}
}
2. 作业
1. 用户输入一个年份,判断这个年份是不是一个闰年。
2. 用户输入一个整数,判断是不是偶数
3. 输入两个整数,打印两数之差的绝对值。
4. 多种方法打印26个小写字母
5. 例如:
输入 5 8;
计算 5 + 6 + 7 + 8;
输出 26.
6. 整数逆序输出, 例如输入一个整数12345,输出5 4 3 2 1
7. 1 - 3 + 5 - 7 + 9 - 11 ... - 99 + 101 的结果
8. 15的阶乘
9. 展示 100 以内所有的偶数
10. 展示 100 以内所有的奇数
11.
*****
*****
*****
*****
*****
12.
*
**
***
****
*****
13.
*
***
*****
*******
*********
14.
*
***
*****
*******
*********
*******
*****
***
*
15.
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A
16.
****#****
***#*#***
**#***#**
*#*****#*
#*******#
*#*****#*
**#***#**
***#*#***
****#****
提示: 绝对值