while、do-while 和 for 循环结构

循环

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 (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件修改 */) 
{
    // 循环体
}

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. 
 ****#****
 ***#*#***
 **#***#**
 *#*****#*
 #*******#
 *#*****#*
 **#***#**
 ***#*#***
 ****#****

提示: 绝对值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值