03、C语言的循环结构

03、C语言的循环结构

①基本的循环语句

1.1 while循环

while循环的基本模式:

while(表达式)    //当循环条件被满足,继续向下执行
{
    循环体;	  //若条件成立,则一直循环
    			//若想跳出循环,则需要改变循环条件,使条件不成立
}

来个例子①

#include<stdio.h>
int main()
{
    int count=0;//来个计数器
    while(count<3)
    {
        printf("I_LOVE_CODING\n");
        count++;//改变循环条件的计数器
    }
    return 0;
}
1.2 do while循环

do while循环的基本模式:

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

举个例子:

int count=0;
do
{
    printf("ILOVEYOU\n");
}while(count<3);//满足条件三次,所以打印三遍

此循环与while循环稍有不同之处在于:无论条件成立与否,循环至少执行一次

do
{

}while(0); //此循环就只执行一次,多用于宏里
1.3 for循环

for循环基本样式:

for(表达式1;表达式2;表达式3)
{
    循环体4;
}

表达式1:循环条件的初始化

表达式2:条件或逻辑表达式作为限制循环的条件

表达式3:改变循环的语句

循环的过程:1 {2 4 3} {2 4 3} {2 4 3}

再来个小栗子:

for(int count=0;count<3;count++)
{
    printf("CSDN\n");
}
//表达式1也可出来
int count=0;
for(;count<3;count++)
{
    printf("CSDN\n");
}

基本的循环语句看完了,了解下变异版循环——死循环,顾名思义,死循环就是走不出去的循环,即条件一直被满足

while的死循环在第二课的博客中用到过

while(1)
{
    printf("爱你一万年\n");
}

do while 循环类似

do
{
    printf("PPP\n");
}while(1);

for循环就很变态了

for(;1;);
for(;;);

感受一下被死循环支配的恐惧,for(;1;)亦是如此;

在这里插入图片描述

②作用域和生命周期

作用域:从变量产生的位置到最接近变量的大括号内

变量分为

全局变量:不被大括号包含的变量

局部变量:被大括号包含的变量

Talk is cheap , show you the code

#include<stdio.h>
int iNum=0;		//此为全局变量
int main()
{
    int iNum=0;//此为局部变量,即使重名也没毛病,因为并不在同一作用域内
    return 0;
}

在同一作用域下,变量不可重名;

不同作用域下同名问题的解决:就近原则;

静态变量:static 修饰的变量,定义时必须初始化,且每次执行保留上一次执行后的结果

for(int count=0;count<3;count++)
{
    int i_Count=0;
	static int s_Count=0;
    i_Count++;
    s_Count++;
    printf("i_Count=%d\n",i_Count);
    printf("s_Count=%d\n",s_Count);
}

上图片:简单明了(手动狗头)

在这里插入图片描述

③循环的基本使用

如何使用循环?
1、描述有规律的事

1.1 次数问题

1.2 名次问题

    int count = 0;
    while (count++ < 3)
    {
        printf("第%d名\n", count);
    }          //打印出来是 第1名(换行)第2名(换行)第3名(换行)
    count = 0;
    while(++count<3)
    {
        printf("第%d名\n", count);
    }		   //打印出来是 第1名(换行)第2名(换行)

2、做递推使用

2.1 求和问题

  //从1加到100
	int result = 0;
    for (int i = 1; i <= 100; i++)
    {
        result += i;
    }
    printf("result=%d\n", result);

2.2 公式求解问题

比如辗转相除法:

//最大公约数,正常人的写法
    int m = 0, n = 0;
    scanf("%d%d", &m, &n);
    int max = m > n ? m : n;
    int min = n < m ? n : m;
    for (int k = min; k > 0; k--)
    {
        if (max % k == 0 && min % k == 0)
        {
            printf("%d\n", k);
            break;
        }
    }    
//辗转相除法
    result = max;
    while (result != 0)
    {
        result = max % min;
        max = min;
        min = result;
    }
    printf("%d\n", max);
  

2.3 拆分整数

    int iNum = 1234;
    while (iNum)
    {
        printf("%d\n", iNum % 10);
        iNum /= 10;
    }
    printf("\n");

④、循环嵌套

用于描述1、行列关系
int i , j ;
	for (i = 0; i<3; i ++)		//外层循环
	{
		for (j = 0; j<3; j ++)  //内层循环
		{
			printf("%d%d\t", i, j);
		}
		printf("\n");
	}
2、行与数目关系
/*
     *
    *** 
   ***** 
  *******
*/
	for (int i = 0; i < 4; i++)
	{
		for (int k = 1; k < 4- i; k++)
		{
			printf(" ");
		}
		for (int j = 0; j <2*i+1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	
3、枚举出来筛选数据
			标记法

上才艺

	//求素数:只能被自身和1整除的数字就是素数
	//整除:取余等于0
	//标记法
	int num = 123;
	int flag = 0;
	for (int i = 2; i < num; i++)
	{
		if (num % i == 0)
		{
			flag = 1;
		}
	}
	if (flag == 1)
	{
		printf("不是素数\n");
	}
	//分析标记讨论结果
	else
	{
		printf("素数\n");
	}

⑤跳出语句

break: 跳出switch语句,跳出一次循环

for(int i=0;i<3;i++)
{
    for(int j=0;j<3;j++)
    {
        if(i==2&&j==2)
        {
            break;
        }
    }
    printf("在此处跳出!\n");//break 跳出一次循环
}

goto: 跳转到标识位置

for(int i=0;i<3;i++)
{
    for(int j=0;j<3;j++)
    {
        if(i==2&&j==2)
        {
            goto NEXT;
        }
    }
}
NEXT:		//跳到标识处
;

continue: 跳出(结束本次执行,继续下一次循环)

for(int i=0;i<10;i++)
{
    if(i%3==0)
    {
        continue;//当满足if语句条件时,无视本次满足if条件的打印任务,直接继续
    }
      printf("热爱工作\n");
}

i=3,6,9时跳过打印任务,因此只打印6次
在这里插入图片描述

⑥随机函数

1、rand():产生一个随机unsigned int数字
2、如何控制范围:取余

X % N —— [0,N-1]

rand() % X —— [0,X-1]

rand() % X + a —— [0,X-1+a]

rand() % X * 10 —— 随机产生的数字都能被10整除

3、设置随机函数种子:

设置随机函数范围:

srand(200);//范围是0—200

srand((unsigned int)time(0));//随机数根据时间而改变
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值