C语言学习笔记(3)循环

创作不易,欢迎关注博主,本人数学系在读,研究神经网络的应用

从一个问题开始

判断给定数字的位数。

问题:
给定一个四位以下的数字(包含四位数),判断给定数字的位数。
例如:
输入:132
输出:3

首先,因为我们知道了数字的最大位数,所以完全可以用条件语句来完成判断。
如果数字在[100,999]之间,就是三位数。

#include<stdio.h>
int main()
{
	int num,i;
	scanf("%d",&num);
	
	if (num>999)
	{
		i = 4;
	}
	else if (num>=100)
	{
		i = 3;
	}
	else if (num>=10)
	{
		i = 2;
	}
	else
	{
		i = 1;
	}
	printf("输入的数字有 %d 位",i);
	
	return 0;
}

因为知道最大输入位数,所以先判单是否是四位数,然后再往下判断。

当然,如果代码中不使用else,而是全是用if,那么程序在逻辑上会出错。错误示例:

#include<stdio.h>
int main()
{
	int num,i;
	scanf("%d",&num);
	
	if (num>999)
	{
		i = 4;
	}
	if (num>=100)
	{
		i = 3;
	}
	if (num>=10)
	{
		i = 2;
	}
	if (num >= 0)
	{
		i = 1;
	}
	printf("输入的数字有 %d 位",i);
	
	return 0;
}

错误原因:输入num=100后,会逐个通过if判断,最终在通过最后一个if判断后,i=1被输出。


这个问题中,因为限制了位数不大于四位,所以有所简化。如果是任意位,则需要更换思路
通过整除以10,来逐个判断一共有多少位。如果是1位,整除以一次10之后,就得到了0;如果两位,整除两次10之后,就得到了0。

//输入四位以下的数字,判断输入的位数
# include<stdio.h>
int main()
{
	int num;
	int mod,result;
	int i = 0;
	printf("请输入数字:");
	scanf("%d",&num);
	
	// 循环判断位数
	i += 1;
	num /= 10; //在循环前,首先进行一次整除,是为了当num=0时,也可以正常运行。
	while (num > 0)
	{
		i += 1;
		num = num / 10; 
	 } 
	 
	printf("\n数字位数是:%d",i);
	 return 0;
 } 

while

while循环和if循环一样,只要条件满足,就执行后面的语句。
它会首先判断一个条件是否满足,如果条件满足,则执行后面紧跟着的语句或语句括号,然后再次判断条件是否满足,如果条件满足则再次执行,直到条件不满足为止。后面紧跟的语句或语句括号,就是循环体。

当型循环:当条件满足时,执行循环。

do…while

do-while循环和while循环很像,唯一的区别是我们在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。

语法:
do
{
循环体
}
while( 循环条件 ) ; //最后结束一定要有分号

用 do…while语句重新编写开头的问题

//输入四位以下的数字,判断输入的位数
# include<stdio.h>
int main()
{
	int num;
	int mod,result;
	int i = 0;
	printf("请输入数字:");
	scanf("%d",&num);
	
	// 循环判断位数
	do
	{
		i += 1;
		num /= 10;
	}
	while(num > 0);
	 
	printf("\n数字位数是:%d",i);
	 return 0;
 } 

for

语法格式:
for( 初始化 ; 判断条件 ; 递增或者递减等使得循环退出语句 )
其中,每个内容都可以省略,但是分号不可以省略。


  • for循环的执行顺序
    1. 初始化条件
    1. 进行条件判断
    1. 如果条件满足,执行{ } 中的语句;否则退出执行
    1. 最后,执行循环退出语句

对于一个求阶乘的问题: 求 n!的值。

  1. 用 while 语句来解决
// 求阶乘
#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int i = 1,num=1;
	
	while (i <= n )
	{
		num *= i;
		i ++;
	}
	printf("%d!的结果是:%d",n,num);
 } 
  1. 用 for 语句来解决
// 求阶乘
#include <stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	int num=1;
	int i; //在初始化 i 之前,i 需要先声名。 
	
	for(i=1;i<=n;i++)
	{
		num *= i;
	}
	printf("%d!的结果是:%d",n,num);
 } 

可见,for 循环和 while 循环是等价的,可以互相改写。

while 、do…while、for 循环的选择

  1. 循环有固定次数,使用 for 循环
  2. 循环必须被执行一次,使用 do…while 循环
  3. 其余使用 while 循环

其他博文链接
C语言学习笔记(1)常量和变量
C语言学习笔记(2)条件判断 if语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值