【C语言必知必会| 第七篇】循环结构入门,这一篇就够了

引言

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。它在编程语言中具有举足轻重的地位。
此文为【C语言必知必会】系列第七篇,介绍C语言的循环结构,结合专题优质题目,带领读者从0开始,深度掌握知识点。

在这里插入图片描述


1️⃣ 概念介绍

循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。

它由循环体中的条件,判断继续执行某个功能还是退出循环。

根据判断条件,循环结构又可细分为以下两种形式:

先判断后执行的循环结构先执行后判断的循环结构

在这里插入图片描述

举个例子:当我们计算阶乘3!时,可以看作初始值为1的i的自增再相乘,即i*(i+1)*(i+2)

如果计算2023!的时候,就不需要一直让程序直接计算1*2*3*4*5*6*......*2023

而这,就是循环结构的优势。


2️⃣代码过渡

在正式开始选择循环结构的代码实现之前,我们需要掌握一些运算符等的知识点。

自加、自减运算符
形式:前缀式 ++i, --i 后缀式 i++, i–
++i和i++都是自增,但a=++i表示先对i自增,再赋值给a
a=i++表示先将i赋值给a,i再自增

我们看以下代码

int  i=3,  j=3, x, y;
x=++i;     y=j--;     
printf(%d,%d;%d,%d\n", i, x, j,y); 

程序的结果是4,4,2,3

是因为x=++i中,i自增为4,再赋值给x,所以x也为4

y=–j中,j先赋值给y,所以y为3,j再自减,所以j最后为2

注意:仅当独立成句时,2者结果相同,即 i++ 与 ++i 得到的 i 是一样的

逗号运算符

形式与作用:

形式:表达式1 ,表达式2,…, 表达式n

作用:将多个表达式连接成一个表达式

求解顺序:式1->式2,最后求式n,以式n值为结果值。

如下

 int  i,  j;
 j=( i=2,  ++i );
 printf( "i=%d,j=%d\n",  i, j );

先计算i=2,即2,再计算++i,即3,所以最后j=3,程序输出3,3


3️⃣知识点讲解

这一节我们将细致讲讲while语句形式与执行过程、do while语句形式与执行过程、for语句形式与执行过程

while语句

基本形式:

while( 表达式 )  {  语句  }

举个例子:

 int  i=1;   /*循环变量初值*/ 
 while( i<=2 )  /*循环头,循环条件*/
 { 
   puts("$$$$");   //循环体
   puts("$$$$");   //循环体       
   i++;  /*使循环趋于结束的操作*/ 
 }

当while表达式为真时,执行循环体内的语句,否则结束while语句并执行其后的语句。

什么意思呢?我们看上面这个例子:
一开始i为1,由于满足i<=2这个条件,所以进入while语句,输出两行的$$$$ ,接着i自增,变为2。

i为2,满足i<=2这个条件,所以所以进入while语句,输出两行的$$$$ ,接着i自增,变为3。

而i=3不满足i<=2这个条件,所以结束循环。

于是整个程序输出:

$$$$
$$$$
$$$$
$$$$

do while 语句

基本形式:

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

do while 语句最大的一个特点就是,不管表达式,先执行一次循环语句。再通过表达式判断需不需要执行循环语句。

看下面这个例子:

int   i=1;
do
{ 
  puts("$$$$"); 
  puts("$$$$");    
  i++;
} while( i<=2 ); /*分号不能省*/ 

首先,不管怎样,都执行循环语句,所以输出$$$$,并且i变为2

然后由于i=2,是满足i<=2这个条件的,所以执行循环语句,输出$$$$,并且i变为3

接着,i=3不满足i<=2这个条件,所以结束循环。

注意: do-while循环1~n次,while通常循环 0~n次。

最后我们讲一下for循环

基本形式:

for( 表达式1;   表达式2;  表达式3 )    
  循环体语句

在这里插入图片描述
表达式1初始化->式2条件->循环体语句->式3结束->式2

我们看这个例子:

int  i;
for( i=1; i<=2; i++ )
{
  puts("$$$$");
  puts("$$$$");
}

for语句中,先将1赋值给i,然后判断i是否<=2,由于i满足该条件,所以执行循环体,输出两行的$$$$,并且使i自增

i自增后变为2,满足i<=2,所以执行循环体,输出两行的$$$$,并且使i自增。

i变为3,不满足循环条件,结束循环。

注意:for后的小括号内必须含2个分号


4️⃣编程实例

循环结构的主要形式、知识点、注意事项我们已讲解完毕。

接着我们通过编程实例,进行实战讲解。

1.题目要求:求1+2+…+100的值。

1.解题思路

我们对i初始化为1,并且对其自增,将每次自增的结果相加即可。

2.代码实现

int   i=1,  sum=0; /* i循环变量,sum累加结果*/
while( i<=100) /* 设定能进入循环的条件表达式*/
{ 
  sum=sum+i;   /* 或 sum +=i;*/
   i++; /* 使循环趋于结束的操作, 循环变量的步长=1*/
 }
printf("1+2+3+…+100=%d\n",  sum);

3.添加预处理命令等,将代码格式化

#include <stdio.h>

int main() {
  int   i=1,  sum=0; /* i循环变量,sum累加结果*/
while( i<=100) /* 设定能进入循环的条件表达式*/
{ 
  sum=sum+i;   /* 或 sum +=i;*/
   i++; /* 使循环趋于结束的操作, 循环变量的步长=1*/
 }
printf("1+2+3+…+100=%d\n",  sum);

    return 0;
}

编译运行结果:

在这里插入图片描述
注意:进行累加操作时,累加变量sum, i必须初始化,如果sum没有初始化,系统会自动将一个未知的值赋值给sum

2.题目要求:求999内的水仙花数

1.解题思路

我们先看看什么是水仙花数:

水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。

例如153=1^3 + 5^3 + 3^3

2.代码实现

int  x,  g,  s,  b; /*x表示三位整数,g表示个位,s表示十位   b表示百位*/
x=100;//保证x为三位数
while( x<=999 )
{  
 g=x%10;  //计算个位数
 s=(x/10)%10;  //计算十位数
 b=(x/100)%10;  //计算百位数
 if( x==g*g*g+s*s*s+b*b*b)
     printf("%6d", x);    /*输出满足水仙花条件的数*/
   x++;
}
printf("\n");

3.添加预处理命令等,将代码格式化

#include <stdio.h>

int main() {
int  x,  g,  s,  b; /*x表示三位整数,g表示个位,s表示十位   b表示百位*/
x=100; //保证x为三位数
while( x<=999 )
{  
 g=x%10;  //计算个位数
 s=(x/10)%10;  //计算十位数
 b=(x/100)%10;  //计算百位数
 if( x==g*g*g+s*s*s+b*b*b)
     printf("%6d", x);    /*输出满足水仙花条件的数*/
   x++;
}
printf("\n");
    return 0;
}

编译运行结果:

在这里插入图片描述

注意:%6d表示按指定格式显示数据:6是输出数据应占据的最少位数。
当要显示的数据不足6位时,数据左边补空格;当要显示的数据位数超6位时,显示实际位数。

3.输入一个数,判断这个数是否为素数

解题思路:

先看看什么是素数:只能被1和它本身整除的正整数(1不是素数,2是最小的素数)

因此对于某个数x,只要判定这个数不能被2到x-1整除,就能证明该数字是素数。

2.代码实现

#include <stdio.h>
int main()
{
	int x;
	scanf("%d",&x);
	for(int i=2;i<=x-1;i++)
	{
		if(x%i==0)  //一旦x能被其中一个数整除,就判断它不是素数
		{
			printf("%d不是素数",x);
		}
	
	}
	//当x不能被所有数整除,就判断它为素数
	printf("%d是素数",x);
}

但是这个代码块出现了一个问题:不管怎么样,都会输出x是素数

而且,如果输入的数为12,会连续输出4个“12不是素数”

在这里插入图片描述
该添加什么条件来避免这个错误呢?

一旦满足 x%i==0 ,则输出“x不是素数”并且跳出循环

当 i 自增到最后都不满足这个循环时, i 数值上变为x,以此来判断x为素数

	for(i=2;i<=x-1;i++)
	{
		if(x%i==0)  //一旦x能被其中一个数整除,就判断它不是素数
		{
			printf("%d不是素数\n",x);
			break;//break跳出for循环
		}
	
	}
	//当x不能被所有数整除,就判断它为素数
	if(x==i)
	{
	printf("%d是素数",x);
}

  }

3.添加预处理命令等,将代码格式化

#include <stdio.h>
int main()
{
	int x,i;
	scanf("%d",&x);
	for(i=2;i<=x-1;i++)
	{
		if(x%i==0)  //一旦x能被其中一个数整除,就判断它不是素数
		{
			printf("%d不是素数\n",x);
			break;//break跳出for循环
		}
	
	}
	//当x不能被所有数整除,就判断它为素数
	if(x==i)
	{
	printf("%d是素数",x);
}

  }

编译运行结果:

在这里插入图片描述

至此,循环结构的编程实例已讲解完成,读者需要躬身实践来掌握C语言循环结构相关知识点。


5️⃣总结

此文为 【C语言必知必会】系列第七篇 ,带领读者掌握C语言的循环结构,带领读者从0开始,深度掌握知识点。

以题代练对于C语言的学习是十分重要的,所以专栏将提供优质C语言编程题,带领读者全方位掌握C语言,读者可订阅专栏持续跟进。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 非常感谢您的建议,我们尽快为大家准备一篇关于C语言入门的学习笔记,帮助大家更好地掌握这门编程语言。我们尽可能详细地介绍C语言的基本语法、数据类型、运算符、流程控制语句等内容,同时也提供一些实例代码和练习题,帮助大家更好地理解和掌握C语言编程。希望我们的学习笔记能对大家有所帮助,让大家更快地入门C语言编程。 ### 回答2: C语言是一门广泛应用于系统编程、嵌入式系统、游戏开发等领域的高级程序设计语言入门C语言对于软件开发工程师和计算机科学爱好者来说非常重要。 在C语言学习笔记中,我们首先需要熟悉C语言的基础识,如数据类型、变量、运算符、流程控制语句和函数等。了解基础识将帮助我们更好地理解后续学习内容。 其次,学习C语言需要掌握一些编程基本技巧,如程序的模块化设计、调试和测试、程序的优化等。这些技巧可以帮助我们提高代码质量和效率。 同时,我们还需要了解C语言的高级编程特性,如指针、动态内存分配、结构体、文件操作等。掌握这些编程特性可以让我们更加灵活地进行编程。 最后,想要成为一名优秀的C语言程序员,我们需要不断实践和探索,不断完善自己的编程技能、提高编程水平。需要经常练习编写代码,加入开源社区进行开源项目的贡献和参与,与其他程序员交流经验,扩展自己的技术视野。 总之,学习C语言需要投入大量的时间和精力,需要不断地学习、实践和交流。但是,在通过不断地学习和实践后,C语言将成为你的强大工具,可以开发出各种高效、可靠的应用程序,实现自己的编程理想和目标。 ### 回答3: C语言是一门非常基础但又非常重要的编程语言,这门语言被广泛应用于各个领域,如嵌入式系统,操作系统开发等。C语言入门,是每个程序员经的过程,通过学习C语言,我们掌握了基本的编程思想和方法,同时也为我们日后学习其他高级语言奠定了扎实的基础。 在这篇学习笔记中,我们可以学到C语言的各种基础识点,例如数据类型、运算符、控制语句、函数等。这些识点是C语言编程的基础,掌握它们非常重要。在学习的过程中,需要认真阅读教材,并且要动手实践,自己编写一些小程序,才能真正理解和掌握识点。 除此之外,我们还可以通过学习C语言的标准库函数来扩展语言的使用范围,这些标准库函数非常常用,不仅可以方便快捷地实现某些功能,而且也是日后学习其他语言用到的识点。 在学习C语言过程中,需要有一个良好的学习态度,要不断地做笔记、做练习,不断地复习、总结,才能真正掌握这门语言,更好的为日后的编程生涯打好基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏,祝你平安喜乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值