C语言 循环结构(1)

目录

循环结构

循环定义

当型循环的实现

直到型循环的实现

循环的嵌套

循环的应用场景

基础算法模型
break与continue

循环结构

什么是循环结构

代码在满足某种条件的前提下,重复执行,就叫循环结构

循环的分类

无限循环:其实就是死循环,程序设计中要谨慎使用。

有限循环:循环限定蓄奴按次数(for)或者终止循环的条件(while、do...while)。

循环的构成

循环条件:如果循环数或者循环的出口。

循环体:需要重复执行的代码(也就是 { } 包裹的内容)

当型循环的实现

特点:先判断,后执行,如果条件不满足,循环体一次都不执行

代表;while、for

while循环

语法:

cpp 复制代码
[1] 循环变量
while ([2] 循环条件)
{
	[3] 循环语句;
	[4]更新循环变量;
}

/注意:如果循环语句是单语句,可以省略{}
while(循环条件) 循环单语句;
while(循环条件)
	循环单语句;
	
/注意:有些特殊场景下,循环体语句柔和到了循环条件,所以省略掉循环体
while(循环条件); 

/int i = 1; while(i++ <= 5); printf("%d\n",i);

说明:
1.循环条件的返回值必须是逻辑值(使用 非0 表示真,使用 0 表示假,C语言底层使 用 1 表示真)C99版本引入了一个 stdbool.h ,可以使用true或者false来表示真假,这里的true和false实际上就是定义的两个符号常量,true的值是1,false的值0。

  1. {} 包起来的内容整体称之为循环体。
  2. 我们要在循环体中控制循环条件的变化,也可以在循环条件中控制循环条件的变化、否则产生死循环

执行过程:

特点:先判断,后执行,循环体语句有可能一次都不执行。

案例

需求:求1~100的累加和(例如:1+2+3+4+..+100)

分析:

创建一个变量sum = 0,用来接收累加和

创建一个循环变量i,用来表示计算数,给一个默认值1,每次循环的时候 i++

在循环中,使用 sum += i(sum = sum + i),完成累加和运算

同时我们要限定循环的条件,也就是i的范围:i <= 100

第1次:sum += i = 0 + 1 = 1

第2次:sum += i = 1 + 2 = 3

第3次:sum += i = 3 + 3 = 6

......

代码:

cpp 复制代码
#include<stdio.h>
//累加和
int main()
{
	int sum = 0,i = 0;
	
	while(i <=100)
	{
		sum += i;
		i++;
	}
	printf("1-100 的累加和为:%d",sum);
	
	return 0;
}

运行结果:

案例

需求:求1~100以内的偶数和

分析:

创建一个变量sum = 0,用来存储累加的偶数和

创建一个循环变量i = 2,存储参与运算的自然数(最小的偶数是2)

创建一个循环,设置循环条件 i <= 100

在循环体内,需要用一个if校验i是否是偶数,如果满足条件,就实现偶数和的计算:sum += i

在循环体的最后一行,需要更新循环变量,作用是逐渐逼近循环的出口

循环结束后,才能输出sum。

代码:

cpp 复制代码
#include <stdio.h>

int main()
{
	int sum = 0;
	int i = 0;
	
	while(i <= 100)
	{
		if(i % 2 == 0)
		{
			sum += i;
		}
		i++;
	}
	printf("1-100的偶数和为:%d",sum);
	
	return 0;

运行结果:

案例:

需求:通过键盘录入一个整数,判断这个整数是否是水仙花数。

分析:

拆分一个n位的数,比如拆分为如:个位、十位、百位...

要求这个n位数的每一位的n次幂相加等于这个数本身:

比如一个三位数:

个位的3次幂 + 十位的3次幂 + 百位的3次幂 = 这个数本身

代码:

cpp 复制代码
#include <stdio.h>
#include <math.h>
//什么是水仙花数
int main()
{
	//定义一个数
	int num ,i = 0 , sum, narcissus,digit;
	while(1)
	{
	//控制台输入
	printf("输入一个数:");
	while(1)
	{
		if(scanf("%d",&num) == 1)
			break;
		else
			printf("错误,重新输入!\n");
		//清除缓存
		while(getchar() == '\n');
	}
	narcissus = num;
	//计算位数
	while(num != 0)
	{
		num /= 10;
		i++;
	}
	
	//恢复原值
	num = narcissus;
	
	//计算位数的次方和
	while( num != 0)
	{
		digit = num % 10;
		sum  += pow(digit,i);
		// 将需要拆除的位保留在个位
		num /= 10;
	}
	
	if(sum == narcissus)
		printf("%d是水仙花数\n",narcissus);
	else
		printf("%d不是水仙花数\n",narcissus);
	}
	return 0;
	
	
}

运行结果:

while特殊写法:

while(1)//死循环

直到型循环

特点: 先执行、后判断,不管条件是否满足,至少执行一次。

代表:do...while

do ... while 循环

语法:

cpp 复制代码
[1]循环变量;
do
{
    [2]循环体语句;
    [3] 更新循环变量;
}while([4]循环条件);

说明

循环条件的返回值必须是逻辑值(0和非0(计算机返回1))

②{ }包括起来的内容称之为循环体

③ 我们要在 循环体 中控制 循环条件 的变化,否则会产生死循环。

执行过程:

**特点:**先执行,后判断、不管条件是否满足、循环体语句至少执行一次。

案例:

需求:求1~100 以内的偶数和

分析:

创建一个变量,用来存储偶数和sum = 0

创建一个循环变量,i = 2

创建一个do..while循环,在循环体中,校验 i % 2 == 0,如果满足,就实现偶数和计算 sum += i

计算完成,在do..while循环体的末行,更新循环变量,使其逼近出口

限制性循环的出口:i <= 100 (i > 100 ,循环结束)

循环结束,打印输出sum的值

代码:

cpp 复制代码
#include<stdio.h>
//do ... while() 实现偶数和
int main()
{
	//定义一个变量,进行存储
	int i = 0,sum = 0;
	
	//循环体进求偶数和
	do
	{
		//先执行,再循环
		//就是先执行if,在执行while(i<100)
		
		if(i % 2 == 0)
		{
			sum += i;
		}
		i++;
	}while(i <= 100);
	
	printf("1-100的偶数和为:%d",sum);

	return 0;
}

案例

需求:用C语言编写简单猜数字游戏代码。游戏规则是程序随机生成一个1到100之间

的数字,玩家通过输入猜测数字,程序会提示猜测是太大还是太小,直到玩家猜中为

止。

代码:

cpp 复制代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	//创建一个number(随机数),guess(用户猜测的数字),count(计数)
	int number,guess,count = 0;
	
	//设计随机数种子
	srand(time(NULL));
	
	//生成随机数1-100之间的随机数 
	number = rand() % 10 + 1;
	
	//开始猜测
	do{
		printf("请输入你猜测的数字:");
		while(1)
		{
			if(scanf("%d",&guess) == 1)
				break;
			else
				printf("输入错误,请重新输入!");
			while(getchar() != '\n');
		}
			count++;
		if(number > guess)
		{
			printf("你猜测的数字小了!\n");
		}
		else if(number < guess)
		{
			printf("你猜测的数字大了!\n");
		}	
		else
		{
			printf("猜测正确,恭喜恭喜!\n");
			printf("你一共猜测了%d次",count);
		}
		
	}while(guess != number);
	
	return 0;
}

运行结果:

相关推荐
Evand J5 小时前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl
朱嘉鼎5 小时前
状态机的介绍
c语言·单片机
寂静山林6 小时前
UVa 10228 A Star not a Tree?
算法
爱喝白开水a6 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway6 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康6 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
一碗绿豆汤6 小时前
c语言-流程控制语句
c语言
杰克尼6 小时前
JavaWeb_p165部门管理
java·开发语言·前端
一成码农6 小时前
JavaSE面向对象(下)
java·开发语言