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

简介: 【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语言,读者可订阅专栏持续跟进。

目录
相关文章
|
3月前
|
算法 C语言
C语言------循环结构II
这篇文章是C语言循环结构II的实训教程,通过多个实例程序,教授如何综合运用选择结构和循环语句解决问题,体会算法在程序设计中的作用,并复习程序调试功能和技巧。
C语言------循环结构II
|
1月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
59 2
|
5月前
|
C语言
【C语言基础篇】结构控制(中)循环结构
【C语言基础篇】结构控制(中)循环结构
|
1月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
30 1
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
2月前
|
C语言
C语言程序设计核心详解 第四章&&第五章 选择结构程序设计&&循环结构程序设计
本章节介绍了C语言中的选择结构,包括关系表达式、逻辑表达式及其运算符的优先级,并通过示例详细解释了 `if` 语句的不同形式和 `switch` 语句的使用方法。此外,还概述了循环结构,包括 `while`、`do-while` 和 `for` 循环,并解释了 `break` 和 `continue` 控制语句的功能。最后,提供了两道例题以加深理解。
|
3月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
3月前
|
算法 C语言
C语言------循环结构
这篇文章是C语言循环结构I的实训教程,介绍了while、do-while和for循环的使用方法,循环程序设计中的常用算法,无条件控制语句在循环中的控制作用,以及循环嵌套的理解和执行过程,并通过多个实例代码演示了这些概念的应用。
|
4月前
|
存储 Java C语言
【C语言入门】初识C语言:掌握编程的基石
【C语言入门】初识C语言:掌握编程的基石
69 4
【C语言入门】初识C语言:掌握编程的基石
|
3月前
|
NoSQL Java 编译器
C语言从入门到精通该怎样学?
持续学习与实践:编程是一门需要不断学习和实践的技能,要保持对新技术和新知识的敏感性,并持续进行编程实践。
58 1
下一篇
无影云桌面