分支和循环语句(2)

news2024/11/25 4:27:07

文章目录

      • 3.2 for循环
        • 3.2.1 for语句的语法
        • 3.2.2 for循环中的break和continue
        • 3.2.3 for语句的循环控制变量
        • 3.2.4 一些for循环的变种
        • 3.2.5 一道笔试题
      • 3.3 do while循环
        • 3.3.1 do语句的语法
        • 3.3.2 do语句的特点
        • 3.3.3 do while循环中的break和continue
      • 3.4 练习
        • 3.4.1 计算 n的阶乘
        • 3.4.2 计算 1!+2!+3!+……+10!
        • 3.4.3 在一个有序数组中查找具体的某个数字n
        • 3.4.4 多个字符从两端移动,向中间汇聚
        • 3.4.5 模拟用户登录情景
  • 附:

3.2 for循环

3.2.1 for语句的语法

for语句语法结构

使用for循环在屏幕上打印1-10的数字。

#include <stdio.h>

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


for语句的执行流程如下:
for语句执行流程


现在我们对比一下for循环和while循环:

#include <stdio.h>

int main()
{
	int i = 1;//1.初始化

	while (i <= 10)//2.判断
	{
		printf("%d ", i);
		i++;//3.调整
	}

	return 0;
}

可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹,for循环使用的频率也最高。

3.2.2 for循环中的break和continue

break:

#include <stdio.h>

int main()
{
	int i = 0;
	
	for (i = 1; i <= 10; i++)
	{		
		if (5 == i)
		{
			break;
		}

		printf("%d ", i);
	}
	
	return 0;
}

//1 2 3 4

continue:

#include <stdio.h>

int main()
{
	int i = 0;

	for (i = 1; i <= 10; i++)
	{
		if (5 == i)
		{
			continue;
		}

		printf("%d ", i);
	}

	return 0;
}

//1 2 3 4 6 7 8 9 10

3.2.3 for语句的循环控制变量

建议:

  1. 不可在for循环体内修改循环变量,防止for循环失去控制。
  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
#include <stdio.h>

int main()
{
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//              0  1  2  3  4  5  6  7  8  9
	int i = 0;//[0,10)

	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

3.2.4 一些for循环的变种

#include <stdio.h>

int main()
{
	//初始化和调整部分的省略就是啥都不做
	//判断部分省略了,意味着判断是恒为真的
	//建议不要随便省略
	for (;;)
	{
		printf("hehe\n");
	}

	return 0;
}

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;

	for (i = 0; i < 4; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("hehe\n");
		}
	}

	return 0;
}

//打印16个hehe

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;

	for (; i < 4; i++)
	{

		for (; j < 4; j++)
		{
			printf("hehe\n");
		}

	}

	return 0;
}

//打印4个hehe

//使用多余一个变量控制循环

#include <stdio.h>

int main()
{
    int x = 0;
    int y = 0;
    
    for (x=0, y=0; (x<2) && (y<5); ++x, y++)
    {
        printf("hehe\n");
    }
   
    return 0;
}

//打印2个hehe

3.2.5 一道笔试题

//请问循环要循环多少次?

#include <stdio.h>

int main()
{
	int i = 0;
	int k = 0;
	
	for (i = 0, k = 0; k = 0; i++, k++)
		k++;
	
	return 0;
}

//循环0次

3.3 do while循环

3.3.1 do语句的语法

do语句语法结构
那么do语句的执行流程是怎样的呢?
do语句执行流程

3.3.2 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

//使用do while语句打印1~10

#include <stdio.h>

int main()
{
	int i = 1;
	
	do
	{
		printf("%d ", i);
		i++;
	} while (i <= 10);

	return 0;
}

3.3.3 do while循环中的break和continue

break:

#include <stdio.h>

int main()
{
	int i = 1;
	
	do
	{
		if (5 == i)
		{
			break;
		}

		printf("%d ", i);
		i++;
	} while (i <= 10);

	return 0;
}

//1 2 3 4

continue:

#include <stdio.h>

int main()
{
	int i = 1;
	
	do
	{		
		if (5 == i)
		{
			continue;
		}

		printf("%d ", i);
		i++;
	} while (i <= 10);

	return 0;
}

//1 2 3 4 死循环

3.4 练习

3.4.1 计算 n的阶乘

//5! = 1*2*3*4*5
//n! = 1~n 累积相乘

//不考虑溢出
#include <stdio.h>

int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int ret = 1;

	for (i = 1; i <= n; i++)
	{
		ret = ret * i;
	}

	printf("%d\n", ret);

	return 0;
}

3.4.2 计算 1!+2!+3!+……+10!

#include <stdio.h>

int main()
{
	int i = 0;
	int n = 0;
	int sum = 0;

	for (n = 1; n <= 10; n++)
	{
		int ret = 1;

		for (i = 1; i <= n; i++)
		{
			ret = ret * i;
		}

		sum = sum + ret;
	}

	printf("%d\n", sum);

	return 0;
}

//以下方法更好

#include <stdio.h>

int main()
{
	int n = 0;
	int ret = 1;
	int sum = 0;
	//1!
	//2! = 1*2
	//3! = 1*2*3
	//4! = 1*2*3*4
    //每次在前面一次的基础上多乘了一个数,所以不需要每次都把ret改成1重来一遍
	for (n = 1; n <= 10; n++)
	{
		ret *= n;
		sum += ret;
	}

	printf("%d\n", sum);

	return 0;
}

3.4.3 在一个有序数组中查找具体的某个数字n

#include <stdio.h>

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//升序
	int k = 7;
	int i = 0;
	
	for (i = 0; i < 10; i++)
	{
		if (k == arr[i])
		{
			printf("找到了,下标是%d\n", i);
			break;
		}
	}

	if (10 == i)
	{
		printf("找不到了\n");
	}

	return 0;
}

//以下方法更好

#include <stdio.h>

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//升序
	//printf("%d\n", sizeof(arr));//计算数组的总大小,单位是字节
	//printf("%d\n", sizeof(arr[0]));//4
	//printf("%d\n", sizeof(arr) / sizeof(arr[0]));
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	
	//1
	int left = 0;
	int right = sz - 1;
	int flag = 0;//flag的作用是标志是否找到了
	//2
	while (left <= right)
	{
		int mid = (left + right) / 2;

		if (k == arr[mid])
		{
			printf("找到了,下标是:%d\n", mid);
			flag = 1;
			break;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}

	if (0 == flag)
	{
		printf("没找到\n");
	}

	return 0;
}

二分查找

3.4.4 多个字符从两端移动,向中间汇聚

//welcome to bit!!!!!
//###################
//w#################!
//we###############!!
//wel#############!!!
//...
//welcome to bit!!!!!


//welcome to bit!!!!!
//###################

#include <stdio.h>
#include <string.h>
#include <windows.h>//Sleep需要一个windows.h的头文件

int main()
{
	char arr1[] = "welcome to bit!!!!!";
	char arr2[] = "###################";
	int left = 0;
	int right = strlen(arr1) - 1;

	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//单位是毫秒
		system("cls");//system函数可以执行系统命令,cls是清理屏幕
		left++;
		right--;
	}
	
	printf("%s\n", arr2);
	
	return 0;
}

3.4.5 模拟用户登录情景

编写代码实现模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确,则提示登录成功;如果三次均输入错误,则退出程序。)

//假设密码是:"123456"

#include <stdio.h>
#include <string.h>

int main()
{
	int i = 0;
	char password[20] = { 0 };

	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", password);
		//判断密码是否正确
		//两个字符串比较相等是不能使用==的,应该使用strcmp库函数	
		//strcmp返回0表示2个字符串相等
		//strcmp返回>0的数字,表示第一个字符串大于第二个字符串
		//strcmp返回<0的数字,表示第一个字符串小于第二个字符串
		//字符串比较大小是比较对应位置上的ASCII码值
		//
		//abcd\0
		//abq\0
		//
		//abq大于abcd

		if (0 == strcmp(password, "123456"))
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}

	}

	if (3 == i)
	{
		printf("退出程序\n");
	}

	return 0;
}

//也可以这样写

#include <stdio.h>
 
int main()
{
	int i = 0;
	char password[20] = { 0 };
	int flag = 0;

	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", password);
		
		if (0 == strcmp(password, "123456"))
		{
			printf("登录成功\n");
			flag = 1;
			break;
		}
		else
		{
			printf("密码错误\n");
		}

	}

	if (0 == flag)
	{
		printf("退出程序\n");
	}

	return 0;
}

附:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据可视化工具汇总:数字孪生产品的得力助手

数字孪生技术是一项快速发展的新兴技术&#xff0c;已经在许多领域得到广泛应用。数字孪生技术不仅可以提供完整的虚拟模型&#xff0c;还可以模拟物理系统的行为。在数字孪生技术的推动下&#xff0c;越来越多的数字孪生产品开始涌现出来&#xff0c;为不同的领域提供支持和解…

2023年保理产品研究报告

第一章 行业概况 1.1 概述 保理&#xff08;Factoring&#xff09;&#xff0c;全称保付代理&#xff0c;又称托收保付&#xff0c;是一种通过将企业的应收账款出售给专业金融机构&#xff08;保理公司&#xff09;来获得资金的融资方式。保理业务通常包括两种类型&#xff1…

数据治理:解决一物多码,多品牌食品集团主数据管理实践

浙江顶誉集团是一家知名的食品加工集团&#xff0c;拥有久久丫、留夫鸭等多个品牌。一直重视企业信息化建设&#xff0c;更是把数字化作为集团的一大发展方向&#xff0c;立志不断加大数字化投入和建设&#xff0c;成为一个数字化的企业。因此&#xff0c;该企业与亿信华辰合作…

如何通过FAQ页面减轻客户支持压力,提高工作效率?

作为现代企业不可或缺的一部分&#xff0c;客户支持服务是为客户提供解决方案、回答问题和解决技术难题的关键部分。无论是产品管理还是销售环节&#xff0c;客户支持都是重要的一环。然而&#xff0c;有效地处理技术支持问题和客户请求并不容易。卓越的客户支持需要组织结构&a…

CCFC22102B 时钟分析

CCFC2012BC基于国芯科技自主PowerPC架构C*Core CPU内核研发&#xff0c;是一款汽车电子中高端车身及网关控制芯片&#xff0c;可广泛应用于车身控制和网关以及新能源车的整车控制&#xff0c;实现对国外产品如NXP&#xff08;恩智浦&#xff09;MPC5604BC、MPC5607B系列以及ST的…

Seurat -- variable features select

brief seurat提供的教学里面包含了Standard pre-processing workflow,workflow包括QC&#xff0c;normalization&#xff0c;scale data &#xff0c;detection of highly variable features。其中 normalization就有蛮多方法的&#xff0c;seurat自己就提供了两种&#xff0c…

OpenGL入门教程之 坐标系统

原文文章 原文链接  本文仅对有代码的地方做讨论。 投影矩阵 创建一个正射投影矩阵 glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);第一二个参数指定了平截头体的左右坐标&#xff0c;第三四个参数指定了平截头体的底部和上部&#xff0c;第五六个参数指定了近平面…

idea基于docker插件部署docker服务

IDEA开发完项目&#xff0c;直接部署至docker上镜像运行&#xff0c;接下来开始体验吧 注意&#xff1a;假定您的项目开发完了&#xff0c;假定你准备好了docker服务哈 没安装docker的来抄作业&#xff08;docker的安装&#xff09; 我的docker所在宿主机的内网ip&#xff1a;1…

银行卡识别OCR:解放金融业务处理效率的黑科技

引言 随着移动支付和电子商务的快速发展&#xff0c;人们越来越依赖银行卡进行交易。而银行卡信息的识别和处理也变得越来越重要。传统的手动输入银行卡信息方式效率低下且容易出错&#xff0c;而采用银行卡识别OCR 技术可以实现快速自动识别银行卡信息&#xff0c;极大地提高…

git把一个分支上的某次修改同步到另一个分支上,并解决git cherry-pick 冲突

背景 我们在工作中经常会碰到好几个同事共同在一个分支上开发&#xff0c;一个项目同时会有好几个分支&#xff0c;我们在feature上开发的功能时&#xff0c;有可能某个需求需要提前发布&#xff0c;这个时候我们已经在feature A上开发完成&#xff0c;但是需要在master上发布…

解锁阿迪达斯营销姿势,分析阿迪达斯成功背后的营销策略

阿迪达斯品牌在1920年创立于德国的运动品牌制造商——著名企业家阿道夫达斯勒&#xff0c;并且当年就开始生产该品牌的鞋类。如今&#xff0c;阿迪达斯已经象征着运动时尚的潮流品牌&#xff0c;在世界的舞台上大放异彩。因此阿迪达斯的营销策略一直备受关注&#xff0c;今天我…

乌合之众再次上演,打工人将被AI一键淘汰?

ChatGPT&#xff0c;是一场以硅谷为圆心&#xff0c;辐射至全球的人工智能竞赛&#xff0c;人们关于人工智能的担忧与思考从未停歇。一起来看看这篇文章&#xff0c;了解一下——大浪来袭&#xff0c;要怎么做才能保证自己不会溺水&#xff1f; 上个月底&#xff0c;千余名科技…

盛元广通病原微生物保藏信息管理系统

目前现状 微生物菌种是宝贵的生物资源&#xff0c;对微生物学研究和微生物资源开发与利用具有非常重要的价值。所以菌种的分类及保藏非常重要。当前&#xff0c;大部分实验室仍采用传统人工方式来管理和保藏病原微生物样本信息&#xff0c;不仅效率低下&#xff0c;且耗费大量人…

回溯/DFS算法专题

回溯/DFS算法专题 框架篇全排列问题N 皇后问题如果只需要一个合法答案&#xff0c;怎么办&#xff1f; 排列组合问题子集&#xff08;元素无重不可复选&#xff09;LeetCode 78. 子集解题思路代码实现 组合&#xff08;元素无重不可复选&#xff09;LeetCode 77. 组合解题思路代…

迅为iTOP-i.MX6ULL开发板I2C驱动程序实现 I2C通信

在第 67.1 章节学习 i2c 的时候&#xff0c;我们是在应用层操作设备节点对 i2c 设备进行读写的&#xff0c;那么如果我们在 驱动里面对 i2c 设备进行读写要怎么办呢&#xff1f;本章节我们将来学习。 我们复制第 67.3 章节的代码&#xff0c;在此基础上进行修改。我们在应用里…

gis几种常用插值介绍

反距离权重法&#xff08;距离加权法&#xff09;简称IDW&#xff1a; 这个方法的原理简单来说就是插值点距离已知点的距离越远受影响的程度越低&#xff0c;下图中的黄点为已知点&#xff0c;红点为插值点&#xff0c;那这个距离是如何控制的&#xff1f; 反距离权重法主要依…

基于SGM431的电路设计问题分析

本案例中,采用SGM431芯片设计了一个过压保护电路。 这个电路初次设计,有很多的问题,下面逐一分析 1.当输入24V,测得Vref=1.59V。Vout为1.15V;,mos管关断 2。经过多次测量发现,临界值在10V到10.5之间; 当输入10.5V时,测量Vref=1.69V。vout=1.15V;mos管关断 当输入1…

存储过程批量修改数据库中部分表中的ip信息

一、背景 项目中涉及到环境迁移&#xff0c;迁移过程中&#xff0c;原来的数据库&#xff08;oracle&#xff09;中应用ip和数据库ip地址均未变更&#xff0c;每次都是手动修改&#xff0c;想通过存储过程快捷执行 二、修改目标&#xff1a; 把相关几个表格的ip地址变更为其…

flink日志实时采集写入Kafka/ElasticSearch

目录 背景注意点自定义Appenderlog4j配置文件启动脚本实现效果 背景 由于公司想要基于flink的日志做实时预警功能&#xff0c;故需要实时接入&#xff0c;并刷入es进行分析。 注意点 日志接入必须异步&#xff0c;不能影响服务性能 kafka集群宕机&#xff0c;依旧能够提交f…

我们公司的面试,有点不一样!

我们公司的面试&#xff0c;有点不一样&#xff01; 朋友们周末愉快&#xff0c;我是鱼皮。因为我很屑&#xff0c;所以大家也可以叫我屑老板。 自从我发了自己创业的文章和视频后&#xff0c;收到了很多小伙伴们的祝福&#xff0c;真心非常感谢&#xff01; 不得不说&#…