C语言--循环结构1.

C语言--循环结构1.,第1张

C语言--循环结构1. 来看第一个问题: 一、统计一个整数的位数

首先我们想到了使用算数运算符“分割”这个整数,同时还需要一个变量来存储整数的位数,然后就可以使用一个循环来解决这个问题,那么要用什么循环去解决呢?由于我们需要处理的数据有待输入,事先不能确定循环次数,所以我们最好的方式是采用do-while循环(使用while循环时遇到输入数据为0时不方便处理)。代码如下:

#include
int main(void)
{
	int num;
	int a=0;
	scanf("%d",&num);
	do
	{
		a++;
		num/=10;
	}while(num);
	printf("%d",a);
}
二、逆序输出一个整数的各位数字

现在我们需要将一串数字逆序输出,如何做到呢?一个办法是将这个数字的每一位数字都保存下来然后逆序打印,利用求余的算数运算符来实现这波 *** 作。代码如下:

#include
int main(void)
{
	int num;
	int a=0;
	scanf("%d",&num);
	do
	{	
	    a=num%10;
	    num/=10;
	    printf("%d",a);
	}while(num);
	return 0;
}

但是这个程序并不完整,比如当我们输入除了最高位其余位均为0的数字时,打印出现的就会是以0开头的数字,在我们看来这并不是一个正确的整数,那么我们又该如何去做呢?直接上代码!

#include
int main(void)
{
	int num;
	int a=0;
	scanf("%d",&num);
	do
	{	
	    a=num%10;
	    num/=10;
	    if(a!=0)
	    printf("%d",a);
	}while(num);
	return 0;
}

现在我们的程序依旧有问题,那就是:如果0处于整数最高位和最低位之间时,那么将无法输出0这个数字,我们换个思路重新去解决这个问题,这种方式只需要一个while循环即可;

#include
int main(void)
{
	int num,t=0;//注意变量的初始化,要保持好习惯
	scanf("%d",&num);
	while(num!=0)//循环条件依旧
	{
		t=t*10+num%10;//这样写的原因是使得到的数字进位,这样就不用一位一位那么麻烦地输出了
		num/=10;
	}
	printf("%d",t);
}

三、正序输出整数的各位数字,先试一下两次逆序能不能实现,代码如下

#include
int main(void)
{
	int num,t=0,x;
	scanf("%d",&num);
	while(num!=0)
	{
		t=t*10+num%10;
		num/=10;
	}
	x=0;
	while(t)
	{
		x=x*10+t%10;
		t/=10;
	}
	printf("%d",x);
}

很明显不完全可以,为什么呢,因为如果输入的数个位为0的话,在第一次循环的时候我们的变量t就不会发生任何改变,相当于位数少了一次;同理,如果输入的数为70000的话,我们只能够得到7这个数字。我们不妨利用再添加一个变量,此题正解代码如下,含注释!!!

#include
int main(void)
{
	int num,pow=1,x;
	scanf("%d",&num);
	int t=num;
	while(t>9)//这里要注意循环条件不能是t!=0 否则会出现问题 
	{
		t/=10;
		pow*=10;
	}
	do
	{
		x= num/pow;
		printf("%d ",x);
		num%=pow;//每次循环后整数要去掉最高位 
		pow/=10;//使pow与整数的位数一致 
	}while(pow>0);
	return 0;
}

此题的另一种写法是:

#include
int main(void)
{
	int num,pow=1,x;
	scanf("%d",&num);
	int t=num;
	while(t>9)//这里要注意循环条件不能是t!=0 否则会出现问题 
	{
		t/=10;
		pow*=10;
	}
	while(pow>=1)
	{
		x=num/pow;
		printf("%d ",x);
		num %= pow;
		pow/=10;
	}
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691614.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存