C语言中for循环与while循环怎么使用

一、单层for循环

引例:C语言实现求1到10的和(用for循环实现)

#include <stdio.h>int main(){	int i, sum = 0;		for (i = 1; i <= 10; i++)		sum = sum + i;		printf("sum = %dn", sum);		return 0;}

单层for循环执行的顺序:

C语言中for循环与while循环怎么使用

第一次循环先执行语句①,执行完语句①执行语句②,如果语句②成立则执行语句④,执行完语句④执行语句③,执行完语句③标志着第一次循环结束;第二次循环先执行语句②,如果语句②成立则执行语句④,执行完语句④执行语句③,执行完语句③标志着第二次循环执行结束,随后循环中语句的执行顺序与第二次循环一致。如果在循环过程中语句②不成立,则整个循环就结束了。直到整个循环结束后才会执行语句⑤,因为,for语句与if语句所能控制的范围相同,只能控制其接下来的第一条语句,言下之意是,语句⑤并不在for循环的内部。需要注意的是,语句①仅在第一次循环中执行,在其它循环过程中不执行。换句话说,语句①只会在整个循环过程中执行一次。语句①的作用其实是给变量进行初始化,所以它仅参与了第一次循环。还有值得注意的是,初学时容易在for (①; ②; ③)后加分号,这个情况我已经在《C语言if语句中常见的问题》这篇文章中的空语句问题中详细叙述了其中的道理,并且在for语句中依然适用,有兴趣的话可以一看。

练习

C语言实现求1到10中奇数的和

#include <stdio.h>int main(){	int i, sum = 0;		for (i = 1; i <= 10; i = i +2)		sum = sum + i;		printf("sum = %dn", sum);		return 0;}

C语言实现求1+1/2+1/3+&hellip;+1/99+1/100

初学时的错误代码:

#include <stdio.h>int main(){		int i;	float sum = 0; // 考虑到和是小数,所以定义sum为float类型		for (i = 1; i <= 100; i++)		sum = sum + 1/i;		printf("sum = %fn", sum); // float类型的变量用%f输出	return 0;}

错误原因:没有考虑到1/i的数据类型。在C语言中,整型除以整型得到的结果只有整数位。例如,16/3 = 5。上述程序中i是整型变量,所以1/i也是整型,故从i大于等于2时,1/i的值永远为0。

因此需要将1/i的值想办法变为浮点数才可以实现想要的功能。C语言规定,只要被除数与除数其中的一个为浮点数,则商为浮点数。故解决的办法有两种,第一种是将1/i写为1.0/i,第二种是将整型变量i强制类型转化为float类型,正确的代码如下:

#include <stdio.h>int main(){		int i;	float sum = 0;		for (i = 1; i <= 100; i++)		sum = sum + 1.0/i;// 或 sum = sum + 1/(float)(i);		printf("sum = %fn", sum);	return 0;}

思考1:如果将上述代码中的sum = sum + 1/(float)(i);改为sum = sum + (float)(1/i);后能否正确输出sum的值?

思考2:能否将i直接定义为浮点型变量?

答案是不能,因为浮点型数据是以IEEE754标准来存储的,但IEEE754标准无法确保精确存储每一个浮点数,例如,6.234在存储过程中很可能存的不是6.234而是6.23399999,这是IEEE754标准的缺陷。所以即便在该程序中将i定义为浮点型变量后输出的结果是正确的,也不能确保在其他程序中依然正确,因为i不一定是准确的数字。需要注意的是,我们一般不会把循环中不断发生更新的变量定义为浮点型变量,因为浮点型数据存储过程属于非精确存储。

二、for循环与if选择的嵌套

引例:C语言实现求1到100之间所有可以被3整除的数字之和

#include <stdio.h>int main(){	int i, sum = 0;	for (i = 1; i <= 100; i++)	{		if (i % 3 == 0)			sum = sum + i;	}	printf("sum = %dn", sum);	return 0;}

思考:下面的程序输出结果是什么?

#include <stdio.h>int main(){	int i, sum = 0;	for (i = 1; i <= 12; i++)	{		if (i % 3 == 0)			sum = sum + i;		printf("sum = %dn", sum);	}	return 0;}

练习(以下题目均要求使用for循环和if选择的嵌套来完成)

编写C语言程序求1到100之间的奇数之和

#include <stdio.h>int main(){	int i;	int sum = 0;	for (i = 1; i <= 100; i++)	{		if (i % 2 == 1)			sum += i;	}	printf("奇数之和为%dn", sum);	return 0;}

编写C语言程序求1到100之间的奇数的个数

#include <stdio.h>int main(){	int i;	int count = 0;	for (i = 1; i <= 100; i++)	{		if (i % 2 == 1)			count++;	}	printf("个数为%dn", count);	return 0;}

编写C语言程序求1到100之间的奇数的平均值

#include <stdio.h>int main(){	int i;	int count = 0;	int sum = 0;	float average; // 考虑到平均值可能带有小数位,所以将平均值定义为float类型	for (i = 1; i <= 100; i++)	{		if (i % 2 == 1)		{			count++;			sum += i;		}	}	average = 1.0 * sum / count; //也可以运用强制类型转换写成average = (float)(sum)/count;	printf("平均数为%fn", average);	return 0;}

编写C语言程序求1到100之间的奇数之和与1到100之间的偶数之和

#include <stdio.h>int main(){	int i;	int sum1 = 0; // 奇数和	int sum2 = 0; // 偶数和	for (i = 1; i <= 100; i++)	{		if (i % 2 == 1)			sum1 += i;		else			sum2 += i;	}	printf("奇数之和为%d,偶数之和为%dn", sum1, sum2);	return 0;}

三、多层for循环的嵌套

多层for循环执行的顺序:

C语言中for循环与while循环怎么使用

第一次循环先执行语句①,执行完语句①执行语句②,如果语句②成立则跳入内部循环执行语句④,执行完语句④执行语句⑤,如果语句⑤成立则执行语句⑦,执行完语句⑦执行语句⑥,执行完语句⑥执行语句⑤,如果如果语句⑤不成立,则标志着内部循环执行完毕,接下来跳出内部循环执行语句③,执行完语句③标志着第一次整个循环结束;第二次循环先执行语句②,如果语句②成立,则再次跳入内部循环执行语句④,以此类推;如果语句②不成立,整个循环就结束了。由于⑧不属于任何一个for循环内部的语句,所以要在整个循环执行完毕后才会执行语句⑧。

换个方式:

C语言中for循环与while循环怎么使用

因为for语句与if语句所能控制的范围相同,只能控制其接下来的第一条语句,所以语句⑦属于内部for循环,而语句⑦与内部的for循环语句构成的语句整体是一个语句,也就是上图中的绿色方框部分,这个整体语句又是外层for循环内部的第一个语句,所以,外层for循环所控制的语句就是绿色方框部分,而外层for循环完整的结构就是上图中的橙色方框部分。所以按照for循环的大体执行顺序,首先会执行语句①,执行完语句①执行语句②,如果语句②成立则会执行绿色方框部分,绿色方框部分是单层for循环,所以执行过程按照单层for循环的执行循序执行,当内部的绿色方框部分执行完毕后,则会执行语句③,语句③执行完标志着整体一次循环结束,下一次循环又从判断语句②是否成立开始,如果成立,则执行绿色方框部分;如果不成立,则整个循环结束。整个循环结束后才会执行语句⑧,因为语句⑧并不属于这两层for循环中的任何一层。

思考1:下面的for循环的执行顺序是什么样的?

C语言中for循环与while循环怎么使用

思考2:下面的for循环的执行顺序是什么样的?

C语言中for循环与while循环怎么使用

思考3:下面的for循环的执行顺序是什么样的?

C语言中for循环与while循环怎么使用

思考4:下面的程序输出结果是什么?

#include <stdio.h>int main(){		int i, j;		for (i = 0; i <3; i++)		for (j = 2; j < 5; j++)			printf("AAAAn");		printf("BBBBn");	return 0;}

思考5:下面的程序输出结果是什么?

#include <stdio.h>int main(){		int i, j;		for (i = 0; i <3; i++)		printf("AAAAn");		for (j = 2; j < 5; j++)			printf("BBBBn");		printf("CCCCn");	return 0;}

思考6:下面的程序输出结果是什么?

#include <stdio.h>int main(){		int i, j;		for (i = 0; i <3; i++)	{		printf("AAAAn");		for (j = 2; j < 5; j++)			printf("BBBBn");		printf("CCCCn");	}	return 0;}

四、while循环

引例:C语言实现求1到10的和(用while循环实现)

#include <stdio.h>int main(){	int i, sum = 0;		i = 1;	while (i <= 10)	{		sum += i;		i++;	}		printf("sum = %dn", sum);		return 0;}

对比:C语言实现求1到10的和(用for循环实现)

#include <stdio.h>int main(){	int i, sum = 0;		for (i = 1; i <= 10; i++)		sum = sum + i;		printf("sum = %dn", sum);		return 0;}

while循环与for循环的相互转换:

从上述两个程序可知,while循环和for循环可以进行互相转换,言下之意是,所有能用for循环实现的功能,就可以用while循环实现,反之同理。但是,while循环和for循环在写法上有一定的差别。

C语言中for循环与while循环怎么使用

读到这里,这篇“C语言中for循环与while循环怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

文章标题:C语言中for循环与while循环怎么使用,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/25599

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年9月15日 下午11:34
下一篇 2022年9月15日 下午11:35

相关推荐

  • windows ToDesk退出了怎么继续登录

    ToDesk退出了继续登录的方法: 1、退出后,重新打开ToDesk,然后点击右上角的“立即登录” 2、在其中选择上一次的登录方法进行登录就可以继续使用了。 3、还可以点击左上角的密码登录,使用账号密码来登录。 4、登录完成后,在设备列表中就可以重新连接之前连接过的设备了。 到此,相信大家对“win…

    2022年9月21日
    14700
  • 禁止SpringBoot在项目中使用Tomcat容器的原理是什么

    SpringBoot中的Tomcat容器 SpringBoot可以说是目前最火的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来…

    2022年9月19日
    8200
  • 怎么分析反射型XSS

    1、反射型 XSS 反射型 XSS 是指应用程序通过 Web 请求获取不可信赖的数据,在未检验数据是否存在恶意代码的情况下,便将其传送给了 Web 用户。反射型 XSS 一般由攻击者构造带有恶意代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行,它的特点是非持久…

    2022年9月20日
    10300
  • cad快速看图标注看不见怎么解决

    cad快速看图标注看不见解决方法: 1.把图纸上传到快看云盘,然后从云盘列表里打开这个图,点左侧的【同步标注】,第一次使用云盘的请先登录账号、创建项目; 2.提示同步成功后,点云盘右上角的【成员】按钮,把对方的CAD快速看图账号添加为成员; 3.添加完成后,再点图纸左侧功能里的【成员协作】&#821…

    2022年9月1日
    18000
  • windows驱动精灵drivergenius删不了如何解决

    解决方法: 1、右击桌面任务栏,点击“任务管理器”。 2、右击“drivergenius”,选择“结束任务”。 3、右击此电脑,选择“管理”。 4、点击“服务和应用程序”的下拉,选择“服务”。 5、在右侧文件中找到“Drivergenius core service”双击打开。 6、将“启动类型”改…

    2022年9月10日
    14200
  • NMAP的端口扫描技术是什么

    什么是端口? 将网络设备比作一间房子,那么端口就是进出该房子的出入口(奇怪的地方就是这个房子的出入口太多了,多达65535个),这些出入口供数据进出网络设备。 设置端口的目的,就是为了实现 “一机多用”,即在一台机器上运行多种不同的服务。那么当一台机器上运行着多个程序时,机器是如何区分不同程序的数据…

    2022年9月8日
    11700
  • windows KB4525245安装失败怎么解决

    根据情况可能不同,小编准备了五种解决方案 第一种方案: 1.查看【windows update】、【app readiness】、【Cryptographic Services】、【Background Intelligent Transfer Service】、【Windows Installer…

    2022年9月1日
    7400
  • word竖排文字如何设置居中

    word竖排文字设置居中的方法: 1、首先我们点击顶部“插入”工具栏。 2、然后选择下面的“文本框” 3、接着选择“绘制竖排文本框” 4、这样画一个文本框,在其中打字就是竖排的了。 5、输入完成后,右键文本框,选择“设置文本框格式” 6、最后在其中选择“居中”并保存即可设置竖排文字居中。 感谢各位的…

    2022年9月1日
    14000
  • Word首页不同怎么设置

    首页不同设置方法: 1、首先打开word,加入你的页眉。 2、之后去双击这个里面的“页眉”。 3、然后去选择菜单栏中的“页眉和页脚选项”。 4、最后就可以在工具模块里面的勾选“首页不同”了。 关于“Word首页不同怎么设置”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注…

    2022年8月31日
    19800
  • js前端如何实现图片文本文件预览功能

    实现方案 找了网上的实现方案,效果看起来不错,放在下面的表格里,里面有一些是可以直接通过npm在vue中引入使用。 文档格式 老的开源组件 替代开源组件 word(docx) mammoth docx-preview(npm) powerpoint(pptx) pptxjs pptxjs改造开发 e…

    2022年9月5日
    47500
联系我们
关注微信
关注微信
分享本页
返回顶部
PingCode 比 Jira 更好用的研发管理工具。免费试用         文章及站点合作,请添加微:All-FeiFei