循环结构程序设计

1、用while语句实现循环

1.1 while语句的一般形式如下

while( 表达式 ){ 语句 }

其中,“语句”是循环体,“表达式”也称为循环条件表达式,用于控制循环体的执行次数。while循环的特点是:先判断条件表达式,后执行循环体语句。

1.2 流程图如下

while循坏流程图

1.3 while循环举例

例:求1+2+3+4+…+100

int main()
{
	int i = 0;
	int sum = 0;
	while (i <= 100)
	{
		sum += i;
		i++;
	}
	printf("%d", sum);
	return 0;
}

运行结果:
在这里插入图片描述

2、用do-while语句实现循环

2.1 do-while语句的一般形式和执行过程

do-while循环语句的特点是:先无条件的执行一次语句,而后判断条件是否成立。它的一般表现形式为:

do { 循环体语句 } while( 表达式 );

do-while语句的执行过程为:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非0(真)时,返回重新执行循环体语句,如此反复,直到表达式的值为0(假)时,此时循环结束。

2.2 流程图如下

在这里插入图片描述

3、 for循坏

3.1 for语句的一般形式和执行过程

for语句的一般形式为:

for( 表达式1;表达式2;表达式3) { 语句 }

三个表达式的主要作用:
表达式1:设置初识条件,只执行一次。可以为零个、一个或多个变量设置初值。
表达式2:循环条件表达式,用来判断是否继续循坏。
表达式3:作为循环的调整,例如循环变量增值,它是在执行完循环体后才进行的。
这样,for语句可以理解为:

for( 循环变量初值 ; 循环条件表达式 ; 循环变量增值) { 语句 }

3.2 流程图如下

在这里插入图片描述

3.3 for循环语句举例

例如:用for语句求1+2+3+4+…+100的值

int main()
{
	int i, sum;
	for (i = 1; i <= 100; i++)
	{
		sum += i;
	}
	printf("%d", sum);
	return 0;
}

运行结果:
在这里插入图片描述

4、循环语句中的break和continue

4.1 break语句提前终止整个循环

break语句的一般形式为:

break;

其作用是使流程跳到循环体之外,接着执行循环体下面的语句。

4.2 continue语句提前结束本次循环

continue语句的一般形式为:

continue;

其作用是结束本次循环,跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定。

5、 练习

5.1 在一个有序数组中查找具体某个数字n (二分查找法)

int main() {
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0;
	int n = 0;
	scanf("%d", &n);
	int len = sizeof(arr) / sizeof(arr[0]);
	int right = len - 1;
	int mid = 0;
	while (left <= right)
	{
		mid = (left + right) / 2;           //当下标值较大,可能越界  mid = left + (right-left)/2;
		if (n > arr[mid])
			left = mid + 1;
		else if (n < arr[mid])
			right = mid - 1;
		else{
			printf("找到的数组下标为:%d", mid);
			break;
		}
	}
	if (left > right)
		printf("没有找到该数");

	return 0;
}

运行结果:
在这里插入图片描述

5.2 猜数字游戏

#include<stdio.h>
#include<stdlib.h>
//写一个猜数字游戏
//1、电脑自动生成1-100的随机数
//2、玩家猜数字,猜数字的过程中,根据猜测数字的大小给出大了或小了的反馈,直到猜对游戏结束。
//3、玩完一把不过瘾,还可以继续玩,不需要退出程序


void menu() {
	printf("*****   *************   *****\n");
	printf("*****   1、猜数字游戏   *****\n");
	printf("*****   0、退出游戏   *******\n");
	printf("*****   *************   *****\n");
}

void game() {
	int r = 0;
	int guess = 0;
	int count = 5;
	//随机数不需要循环生成
	//初识化随机数生成种子
	srand((unsigned int)time(NULL));     //通过时间戳可以生成不同的随机数生成准则
	//如果要生成100-200的随机数  -------->    100 + rand() % (200-100+1)
	//要生成a-b的随机数为   ------->   a + rand() % ( b - a +1 )
	r = rand()%100+1;                    //生成1-100的随机数
	system("cls");
	printf("猜数字游戏\n");
	//猜数字循环,假设只有5次猜的机会
	while(count)
	{
		printf("你还有%d次机会\n",count );
		printf("请输入数字:");
		scanf("%d", &guess);
		if (guess > r)
			printf("猜大了\n");
		else if (guess < r)
			printf("猜小了\n");
		else
		{
			printf("猜对了,数字是%d\n", r);
			break;
		}
		count--;
		
	}
	printf("你的猜测次数已用完,正确的数字是:%d\n", r);
	
}

int main() {
	int input = 0;
	do {
	menu();
	scanf("%d", &input);
	switch (input)
	{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束,退出游戏\n");
			break;
		default:
			printf("输入无效,请重新输入\n");
			break;
	}

	} while (input);
	
	return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值