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的任务管理器如何打开

    打开任务管理器的多种方式 方法一:使用Ctrl+Shift+Esc组合键调出任务管理器。 方法二:用鼠标右键点击任务栏选择“任务管理器”, 方法三:使用组合键“Win+R”键打开运行对话框,输入taskmgr,回车,即打开 方法四:按顺序连续按住Ctrl、Alt和Delete键 方法五:直接找到Ta…

    2022年9月6日
    49100
  • powerpoint的主要功能有哪些

    powerpoint的主要功能是创建演示文稿;用户还可以在投影仪或者计算机上进行演示,也可以将演示文稿打印出来,PPT适用于工作汇报、企业宣传、产品推介、婚礼庆典、项目竞标、管理咨询、教育培训等领域,并具有相册制作、文稿合并、运用母板、图片运动、动画控制等功能。 本教程操作环境:windows10系…

    2022年9月15日
    2.6K00
  • python如何找到列表中出现最频繁的数

    找到列表中出现最频繁的数 test= [1,2,3,4,2,2,3,1,4,4,4]print(max(set(test),key=test.count))#-> 4 python有哪些常用库 python常用的库:1.requesuts;2.scrapy;3.pillow;4.twisted…

    2022年8月30日
    34200
  • windows ddu卡在清理注册表如何解决

    解决方法: 1、其实卡在清理注册表是因为win10系统版本不兼容导致的无法正常显示问题。 2、虽然软件没有提示清理成功,但是显卡驱动程序其实已经完成清理或卸载了。 3、所以大家不需要担心,卡在清理注册表一段时间后,直接关闭或推出软件即可。 4、如果我们不确定的话,可以打开“设备管理器” 5、然后在显…

    2022年9月20日
    58100
  • windows移动光标到文件末尾的快捷键是什么

    移动光标到文件末尾的快捷键组合是“CTRL+END”;CTRL的全称是control,是键盘中的控制键,编辑文本时,若光标不在最后,按下END键,光标会定位到最后面;如果是一篇文档,按“CTRL+END”,光标会定位到文档的最后。 本教程操作环境:windows10系统、DELL G3电脑。 移动光…

    2022年9月15日
    1.3K00
  • css选择器可以是标签的名字吗

    可以是;元素选择器就是使用HTML标签名的。在css中,元素选择器就是通过HTML页面的元素(标签)名定位具体HTML元素,语法结构为“元素名 {属性:属性值;}”;如果元素选择器单独使用的话,会定位当前HTML页面中所有该元素名的元素。 本教程操作环境:windows7系统、CSS3&&a…

    2022年9月22日
    56700
  • windows ventoy怎么使用

    ventoy使用教程: 1、首先我们下载ventoy。 2、下载完成会得到一个压缩包,将它解压出来。 3、解压完成后,双击运行“ventoy2disk.exe”打开它。 4、在上方选择我们想要制作成系统盘的u盘。(如果没有说明没插u盘) 5、接着点击图示位置修改配置版本。 (基本新电脑和系统都设置g…

    2022年8月27日
    1.2K00
  • Mysql怎么查看执行计划

    使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 explain执行计划包含的信息 其中最重要的字段为:id、type、key、rows、Extra 各字段详解 id select查询的序列号,包含一组数字…

    2022年8月30日
    63800
  • windows todesk远程软件安全吗

    todesk远程软件安全吗: 答:todesk远程软件非常安全。 1、客户端与中心服务器和高速通道集群通讯都采用高强度AEAD(Authenticated Encryption with Additional Data) xchacha20-ietf-poly1305算法。 2、在用户完成远程连接后…

    2022年9月20日
    1.2K00
  • windows edge浏览器弹窗如何关闭

    edge浏览器关闭弹窗的方法: 1、在浏览器中点击右上角三个点,选择“设置”。 2、在左侧任务栏选择“隐私和安全性”。 3、下拉找到“安全性”将“阻止弹出窗口”的开关打开。 以上就是“windows edge浏览器弹窗如何关闭”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获…

    2022年9月8日
    73700
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部