IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言--循环结构1. -> 正文阅读

[C++知识库]C语言--循环结构1.

来看第一个问题:

一、统计一个整数的位数

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

#include<stdio.h>
int main(void)
{
	int num;
	int a=0;
	scanf("%d",&num);
	do
	{
		a++;
		num/=10;
	}while(num);
	printf("%d",a);
}

二、逆序输出一个整数的各位数字

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

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

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

#include<stdio.h>
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<stdio.h>
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<stdio.h>
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;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 15:53:52  更:2022-01-03 15:55:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/8 23:45:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码