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

相关推荐

  • 数据库加密有什么用

    数据库加密的主要用途包括:保护数据的安全性、防止未经授权的访问、满足法规要求、防止数据泄露、保证数据的完整性和可靠性。数据库加密是一种安全策略,它可以确保存储在数据库中的敏感信息不被未经授权的用户访问。如果没有正确的密钥,即使数据被盗,也无法解读加密的信息,从而极大地增强了数据的安全性。此外,数据库…

    2024年7月16日
    500
  • 数据库跳板是什么意思

    数据库跳板是一种在网络安全领域常见的术语,是指黑客通过某个已经被控制的数据库,跳转到其他的数据库或系统,以此进行进一步的攻击行为。具体来说,数据库跳板包括以下几个步骤:一、黑客首先找到一个安全漏洞较多、比较容易攻击的数据库,然后利用各种手段将其控制;二、控制后,黑客会在此数据库中植入恶意代码,使其成…

    2024年7月16日
    500
  • 数据库实现了些什么功能

    数据库实现了数据存储、数据检索、数据管理、数据完整性、数据安全、并发控制、备份与恢复等功能。在这些功能中,数据存储是最基础的功能,因为所有的数据操作都依赖于数据存储这一核心功能。数据存储确保了数据的持久化,能够在需要时进行读取和操作,而不会因为系统关闭或故障而丢失数据。数据库系统通过高效的数据存储机…

    2024年7月16日
    300
  • 电信数据库都做些什么工作

    电信数据库的主要工作包括数据存储、数据管理、数据分析、数据安全、数据备份和恢复、数据集成和数据挖掘。数据存储是其核心功能之一,确保大量用户信息、通话记录、账单数据等能够高效、安全地存储。数据管理涉及对这些数据的组织和维护,确保数据的准确性和一致性。数据分析则通过大数据技术对存储的信息进行深度挖掘,帮…

    2024年7月16日
    300
  • 启动数据库用什么软件好

    启动数据库,我们可以选择多种不同的软件,比如MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、SQLite等。每种数据库软件都有其独特的特性和适应的应用场景。例如,MySQL是最受欢迎的关系数据库管理系统,它具有开源、性能高效、成本低、可扩展性好等优点,被广泛应用…

    2024年7月16日
    300
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部