流程控制的定义
程序代码执行的顺序
流程控制的分类
顺序
自上而下的依次执行
选择
某些代码可能执行,也可能不执行,有选择的执行某些代码
if
1.if的简单用法
格式:
if(表达式)
语句
功能:
如果表达式为真,执行语句
如果表达式为假,不执行语句
2.if的范围问题
if(表达式)
语句A;
语句B;
解释:if只能控制语句A的执行或不执行
if不能控制语句B的执行或不执行
或者讲语句B一定会执行
if(表达式)
{
语句A;
语句B;
}
此时if可以控制语句A和语句B
由此可见:if默认只能控制一个语句的执行或不执行
如果想控制多个语句的执行或不执行就必须把这些语句用{}括起来
举例
//2023.4.13
//目的:了解if的作用范围
#include<stdio.h>
int main()
{
if (3 > 2)
printf("AAAAA\n");
printf("BBBBB\n");
if (3 < 2)
printf("DDDDD\n");
printf("EEEEE\n");//D未运行出,而E运行出可以看出if的作用范围只有第一条语句printf("DDDDD");
if (4 > 2)
{
printf("FFFFF\n");
printf("GGGGG\n");
}
if (4 < 2)
{
printf("HHHHH\n");
printf("KKKKK\n");
}
return 0;
}
/*
* ---------------------------------------------------
运行结果:
AAAAA
BBBBB
EEEEE
FFFFF
GGGGG
D:\vs\郝斌c\if的范围问题\x64\Debug\if的范围问题.exe (进程 8320)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
------------------------------------------------------
*/
3. if else的用法
//2023.4.13
//目的:了解if...else的用法
#include<stdio.h>
int main()
{
if (3 > 2)
printf("AAAAA\n");
else
printf("BBBBB\n");
printf("CCCCC\n");
return 0;
}
/*
运行结果:
-------------------------------
AAAAA
CCCCC
D:\vs\郝斌c\if else的用法\x64\Debug\if else的用法.exe (进程 19676)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
--------------------------------
*/
//总结:可见else和if一样也只控制一条语句
4.if... else if.... else...的用法
//2023年4月29日
//目的:
//1.学习if... else if.... else...的用法
//2.了解加上哈哈后为什么出错
#include<stdio.h>
int main()
{
double delta = -1;
if (delta > 0)
printf("有两个解\n");
//printf("哈哈\n");
// 出现错误: error C2181: 没有匹配 if 的非法 else
//如果此处输入本语句,程序会报错,因为下面的else 会找不到对应的if,就相当于哈哈语句把if截断了
else if (delta == 0)
printf("只有唯一的一个解\n");
else
printf("无解\n");
return 0;
}
/*
总结:
1.常见格式:
if(1)
A;
else if(2)
B;
else if(3)
C;
else
D;
*/
个人理解else if也是相当于if,在第一个if不成立过后还有几个其他情况就用else if来假设
举例
***重要的点(注意)
1.
90<=score<=100这样的写法是错误的
错误的原因:这样写运行出来永远是真,程序从左往右执行,90<=score的结果只有0或1,而0或1都小于100,所以执行结果永远为真
必须要写成90<=score&&score<100
2.C语言对真假的处理
在c语言中,非零表示真,零表示假,0---假,1---真
//2023年4月29日
//目的:
//1.了解c语言真假的用法
//2.知道90<=score<=100这样的写法是错误的
#include<stdio.h>
int main()
{
float score;
printf("请输入你的分数:");
scanf_s("%f", &score);
if (score > 100)
printf("你在做梦!\n");
else if (90 <= score && score < 100)
//错误写法90<=score<100
//这样写运行出来永远是真,程序从左往右执行,90<=score的结果只有0或1,而0或1都小于100,所以执行结果永远为真
printf("优秀");
else if (60 <= score && score < 80)
printf("合格");
else if (0 <= score && score < 60)
printf("未及格,继续努力");
else
printf("输入数据格式不对");
return 0;
}
/*
总结:
1.在c语言中,非零表示真,零表示假,0---假,1---真
2.了解数值在两数之间正确的写法,如90<=score<=100错误,90<=score&&score<=100
*/
//注意:
//1.最后的else里面不需要加语句,这是我经常犯的错误,if语句后面没有;
5.if常见例子
5.1用fi互换两个数字
//2023年4月29日
//目的学会用if互换两个数字
#include<stdio.h>
int main()
{
int i = 3;
int j = 6;
int t;//t的意思是temporary暂时就是临时变量
printf("------------变换前----------\n");
printf("i=%d j=%d\n",i,j);
t = i;
i = j;
j = t;
printf("------------变换后-----------\n");
printf("i=%d j=%d\n",i,j);
return 0;
}
/*
总结:
1.互换两数要学会加入另一个变量,做临时变量
*/
/*
运行结果:
------------变换前----------
i=3 j=6
------------变换后-----------
i=6 j=3
D:\vs\郝斌c\if互换\x64\Debug\if互换.exe (进程 8696)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
5.2 if实现三数排序
我们仔细观察代码,会发现我们最终的排序是a,b,c,我们说这是降序,那么当前面的数比后面的数小时就要交换位置
简单分析一下,我们这里用if 不是 else if的原因是 if 和else if是只有一个会被执行,而都是if的话就都会被执行。
//2023年4月29日
//目的:学会用if进行排序,程序=算法+语言,其中数据结构与算法中还有许多优秀的算法不要忘记学习
#include<stdio.h>
int main()
{
int a, b, c, t;
printf("请输入三个整数:(以空格隔开)");
scanf_s("%d %d %d",&a,&b,&c);
if (a < b)
{
t = a;
a = b;
b = t;
}
if (a < c)
{
t = a;
a = c;
c = t;
}
if (b < c)
{
t = b;
b = c;
c = t;
}
printf("按降序排序为:");
printf("%d>%d>%d",a,b,c);
return 0;
}
/*
总结:
1.在完成程序时,算法的选择很重要
2.
--------------------------
小算法程序:
判断一个数字 是否是素数
判断一个数字是否是回文数,即1221这种倒过来也是一样
编程实现求一个十进制数字的二进制形式
求一个数字的每位是奇数的数字取出来组合形成的新数字
求一个数字倒过来的数字
--------------------------
如何看懂一个程序,分三步:
1.流程
2.每个语句的功能
3.试数
----------------------------
如何学习一些小算法的程序
1.尝试自己去编程解决它,大部分人都无法自己解决它
2.如果解决不了,就看答案
3.关键是把答案看懂,这个是重点
4.看懂之后自己修改程序,知道修改之后程序不同的输出结果
5.照着答案敲一遍
6.调试错误
7.不看答案,自己独立敲出代码
*/
/*
注意:
1.单个if语句也是正确的,if不是必须匹配else
2.if的空语句问题
eg. if(3>2);
printf("AAAAAA\n");
printf("BBBBBB\n");
这样相当于有三个语句,会输出AAAAAA BBBBBB。
if(3>2);
相当于if(3>2)
;
执行了一个空语句
*/
/*
运行结果:
请输入三个整数:(以空格隔开)2 16 88
按降序排序为:88>16>2
D:\vs\郝斌c\if三数排序\x64\Debug\if三数排序.exe (进程 5136)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
由此,我们也可以简单的写出升序排列
#include<stdio.h>
int main()
{
int a, b, c, t;
printf("请输入三个整数:(以空格隔开)");
scanf_s("%d %d %d",&a,&b,&c);
if (a < b)
{
t = a;
a = b;
b = t;
}
if (a < c)
{
t = a;
a = c;
c = t;
}
if (b < c)
{
t = b;
b = c;
c = t;
}
printf("按降序排序为:");
printf("%d>%d>%d\n",a,b,c);
//后加的
printf("按升序排列为:");
printf("%d<%d<%d\n",c,b,a);
return 0;
}
/*
请输入三个整数:(以空格隔开)16 2 88
按降序排序为:88>16>2
按升序排列为:2<16<88
D:\vs\郝斌c\if三数排序\x64\Debug\if三数排序.exe (进程 2212)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
5.3判断一个数字是否是素数
注意:注意写代码时,把if(i == a)写成了 if(i=a)是非常错误的,我们要记住用if时是判断,==就是判断, =是赋值
/*
2024.1.25
目的:写一个程序判断数字是否是素数
*/
#include<stdio.h>
int main()
{
int a;
int i;
printf("请输入一个数,我们帮你判断是否是素数\n");
scanf_s("%d",&a);
for (i=2; i <= a; i++)
//for循环里面是;
{
if (a % i == 0)
break;
}
if (i == a)
printf("是素数\n");
else
printf("不是素数\n");
return 0;
}
/*
注意:
1.for里面是由;隔开
2.
for (i; i < a; i++)
//for循环里面是;
{
if (a % i == 0)
printf("a是素数\n");
}
这样写是可以判断是否是素数,但是我们仔细思考一下发现,这样的结构不好表达不是素数的情况
我们可以i<=a ,这样如果中间没有数可以整除i的话,那么通过判断i=a我们就知道他是素数,i不等于a,他不是素数
3.注意写代码时,把if(i == a)写成了 if(i=a)是非常错误的,我们要记住用if时是判断,==就是判断, =是赋值
*/
/*
运行结果:
---------------------------------------------------------------------------------
请输入一个数,我们帮你判断是否是素数
29
是素数
D:\vs\郝斌c\if判断素数\x64\Debug\if判断素数.exe (进程 9084)已退出,代码为 0。
按任意键关闭此窗口. . .
----------------------------------------------------------------------------------
----------------------------------------------------------------------------------
*/
5.4判断一个数字是否是回文数(还实现了求一个数倒过来的数)
回文数就是该数字从左边读和从右边读的结果是一样的,如1221,12321
原理:任何一个数除以10的余数就是该数的最后一位,任何一个数除以10的商就是排除最后一位的数,如12321, 12321/10=1232......1 1232/10=123......2 123/10=12......3 12/10=1......2 1/10=0......1
除到商为0,新数=新数*10+每次对应的余数
/*
2024.1.26
目的:判断一个数是否是回文数
*/
#include<stdio.h>
int main()
{
int y = 0;
int num;
int s;
printf("请输入你要判断的数,即判断其是否是回文数\n");
scanf_s("%d",&num);
s = num;
/*
这句话很重要,刚开始我没有这句话for里写的是s = num / 10 求商,
乍看没错,但是忽略了我们需要的商是要改变的,我们需要进行除法后的商
所以起初不改for里的s=num/10 和y=y*10+num%10是错误的
*/
for (s; s > 0; s = s / 10)
{
y = y * 10 + s % 10;
printf("%d\n",y);
}
if (y == num)
{
printf("该数是一个回文数\n");
}
else
{
printf("该数不是回文数\n");
}
return 0;
}
5.5实现求一个十进制数的二进制数
假如1234这样一个十进制数转化为二进制
1234/2=617.....0 617/2=308.....1 308/2=154......0 154/2=77......0 77/2=38......1
38/2=19......0 19/2=9......1 9/2=4......1 4/2=2......0 2/2=1......0
1/2=0......1
除二直到商为0,再从下到上
有问题,暂时没做出来
switch
switch(表达式)
{
case 常量表达式1: 语句1
case 常量表达式2: 语句2
default: 语句3
case 常量表达式3: 语句4
}
注意:
1.所有case后面的常量表达式为便于描述我们姑且称之为标签,这些标签都只能是:
(1)枚举常量
(2)数值常量
(3)字符常量
(4)常变量
(5)宏名中的一种,注意 普通变量,枚举变量是不能作为标签使用的。
2.执行完一个case语句后,流程控制就转移到写一个case语句继续执行。case 常量表达式只是起语句标号的作用,并不是在该处进行条件判断。在执行switch语句时,根据switch()中表达式的值找到与之匹配的case子句,自此case子句开始执行下去,不再进行判断。
当i==1时,从case 1处开始往下一个不落的执行。
当i==2时,从case 2处开始往下一个不落的执行。
当i==3时,只执行case 3一句。
当i==4时,从default处开始往下一个不落的执行。
当i==0时,执行情况同i==4。
3.switch是选择不是循环,如果在switch中出现了break语句,该语句的功能只是退出switch语句转去执行它下面的语句 。在switch中出现continue是错误的,除非switch本身就属于for或while循环的一部分。
循环
循环的定义:
某些代码会被重复执行
循环的分类:
for while do...while
for
1.for格式:
for(1;2;3)
A;
2.for执行流程
1 -> 2 -> A(2满足才执行A) -> 3 -> 2 -> A -> 3......
举例
//2023年4月30日
//目的:学习for循环的基础知识
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for (i = 1; i <= 10; i++)
//语句1 语句2 语句3
sum = sum + i;
//语句4
//printf("%d以内的累加和",i-1);
printf("sum=%d",sum);
//语句5
return 0;
}
/*
总结:
1.循环的定义:某些代码会被重复执行
2.循环的分类:for while do...while
3.***********此程序的执行顺序:1-2-4-3-2-4-3 ...直到3执行后2不成立就执行5
4.++i和i++的区别
i++和++i对于i来说都一样,都是i = i + 1;
如果用于赋值语句,作用有所差别,x = ++i,是先i=i+1,然后把i的值赋给x
x = i++, 是先把i的值赋给x,然后 i = i+1
*/
/*
运行结果:
sum=55
D:\vs\郝斌c\for循环\x64\Debug\for循环.exe (进程 2612)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
3.多层for的嵌套使用
总结:
(1)
for(1;2;3) //1
for(4;5;6) //2
A; //3
B; //4
总共两个语句,123是一个语句,4是单独的一个语句
(2)
for(1;2;3) //1
for(4;5;6) //2
{
A; //3
B; //4
}
总共一个语句,1234是一个语句
(3)
for(1;2;3) //1
for(4;5;6) //2
{
A; //3
B; //4
for(4;5;6) //5
C; //6
}
总共一个语句
4.for的常见例子
for求10以内所有被奇数和
//2023年5月1日
//目的:求10以内的奇数和
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for (i = 1; i < 10; i += 2)
{
sum = sum + i;
printf("输出几次就代表循环了几次\n");
}
printf("循环结束i=%d\n",i);
printf("最后结果sum=%d\n",sum);
return 0;
}
/*
运行结果
------------------------------
输出几次就代表循环了几次
输出几次就代表循环了几次
输出几次就代表循环了几次
输出几次就代表循环了几次
输出几次就代表循环了几次
循环结束i=11
最后结果sum=25
D:\vs\郝斌c\if举例求10以内所有奇数和\x64\Debug\if举例求10以内所有奇数和.exe (进程 13996)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
----------------------------
运行过程
i=1------i<10------sum=0+1-----------i=i+2=1+2=3------i<10-------sum=0+1+3---------i=i+2=3+2=5----------i<10
---------sum=0+1+3+5---------i=i+2=5+2=7-------sum=0+1+2+3+5+7---------i=i+2=7+2=9---------i<10---------sum=0+1+3+5+7+9
---------i=i+2=9+2=11---------i<10不成立
所以最终输出i的值为11,sum的值为25
*/
for和if嵌套使用求3-10能被3整除的数之和
//2023年5月1日
//目的:学会在for内嵌套if,并了解流程控制,此程序是计算出3-10能被3整除的数
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for (i = 3; i < 10;++i )
// 1 2 3
{
if(i%3==0)
//4
sum = sum + i;
//5
printf("sum=%d\n", sum);
//6
}
//如果没有中括号,那么只有sum=sum+i一直循环执行
return 0;
}
/*
运行结果
--------------------------
sum=3
sum=3
sum=3
sum=9
sum=9
sum=9
sum=18
D:\vs\郝斌c\for里嵌套if\x64\Debug\for里嵌套if.exe (进程 20960)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
-------------------------
流程控制:
1--2---4--5--6--3--2--4--5--6--3--2.....直到不满足2
6语句不是由if控制是由for控制,所以不管if成不成立,6语句都会执行
i=3---i<10--if成立--sum=0+3---6成立sum=3---i=i+1=4----i<10----if不成立---sum不执行----6成立sum=3......
i----3--4--5--6--7--8--9--10
sum--3--3--3--9--9--9--18--i=10时for中i<10不成立,所以接下来的语句都不成立
*/
/*
注意:
1.不要忘记换行符\n,有了换行符查看结果更简洁明了
2.注意if和for语句没有中括号时作用的范围只有接下来的一句
*/
for求1/1+1/2+1/3+1/4+1/5+......1/99+1/100的和
//2023年5月1日
//熟悉for操作
#include<stdio.h>
int main()
{
int i;
float sum = 0;
//因为算了很多分数的和,所以用float更合适
for ( i= 1; i <= 100; i++)
{
//sum = sum + 1/i;这样运行出来sum=1,就相当于分数部分都被化为0
sum = sum + 1.0 / i;//推荐使用
//sum=sum+1/(float)i 也可以但是用上面那个更方便简便
}
printf("sum=%f",sum);
//因为是float 所以用%f更好
return 0;
}
/*
1.运行结果
--------------------------
sum=5.187378
D:\vs\郝斌c\for举例\x64\Debug\for举例.exe (进程 17256)已退出,代码为 0。
按任意键关闭此窗口. . .
----------------------------
2.自己写程序多思考,不需要再引入一个未知数,就算我引入了该怎样写对
*/
/*
注意:
1.浮点数存错带来的问题
float 和double都不能保证可以精确的存储一个小数
举例:
有一个浮点型变量x,如何判断x的值是否是零
if(|x-0.0000001|<0.0000001)
是零;
else
不是零;
原因:
如for(i=0;i<=5;i++)
i--0--1--2--3--4--5
而设成小数如
for(i=0.1;i<=5;i++)
i--0.1--1.1--2.1--3.1--4.1--5.1(不成立)
*/
for求1到100的奇数和
/*
目的:求1到100的奇数和
*/
#include<stdio.h>
int main()
{
int i;
int sum = 0;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 1)//判断i是奇数
sum += i;//sum=sum+i
}
printf("sum=%d",sum);
return 0;
}
/*
运行结果:
sum=2500
D:\vs\郝斌c\for求1到100奇数和\x64\Debug\for求1到100奇数和.exe (进程 3388)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
for求1到100的奇数个数
//2023年5月2日
//目的:学会for的一些用法运用
#include<stdio.h>
int main()
{
int i;
int cnt = 0;
for (i=1;i<=100;i++)
{
if (i % 2 == 1)
cnt++;
}
printf("1到100的奇数个数为%d", cnt);
return 0;
}
/*
运行结果:
---------------------------------
1到100的奇数个数为50
D:\vs\郝斌c\for求1到100奇数个数\x64\Debug\for求1到100奇数个数.exe (进程 9736)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
----------------------------------
*/
for求1到100的奇数平均值
//2023年5月2日
//目的:运用for计算1到100奇数平均值
#include<stdio.h>
int main()
{
int i;
int sum = 0;
int cnt = 0;
float avg;
for (i = 1; i <= 100; i++)
{
if (i % 2 == 1)
{
sum = sum += i;
cnt++;
}
}
avg = 1.0*sum / cnt;//这里最好写成1.0*sum/cnt而不是sum/cnt的原因是avg是float型的浮点数
printf("sum=%d\n",sum);
printf("奇数个数(cnt)为%d\n", cnt);
printf("1到100奇数平均值为:%f\n",avg);
return 0;
}
/*
运行结果:
sum=2500
奇数个数(cnt)为50
1到100奇数平均值为:50.000000
D:\vs\郝斌c\求1到100奇数的平均值\x64\Debug\求1到100奇数的平均值.exe (进程 7992)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
for求1到100的偶数和
//2023年5月2日
//目的:运用for求1到100的奇数和,偶数和,奇数个数,偶数个数
#include<stdio.h>
int main()
{
int i;
int sum1 = 0;//奇数和
int sum2 = 0;//偶数和
int cnt1 = 0;//奇数个数
int cnt2 = 0;//偶数个数
for (i = 1; i <= 100; i++)
{
if (i % 2 == 1)
{
sum1 += i;
cnt1++;
}
else
{
sum2 += i;
cnt2++;
}
}
printf("奇数和为%d,奇数个数为%d\n", sum1, cnt1);
printf("偶数和为%d,偶数个数为%d\n", sum2, cnt2);
return 0;
}
/*
运行结果:
-------------------------------
奇数和为2500,奇数个数为50
偶数和为2550,偶数个数为50
D:\vs\郝斌c\求1到100奇数和偶数和\x64\Debug\求1到100奇数和偶数和.exe (进程 22896)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
-------------------------------
*/
/*
注意:
1.每个语句都只能控制接下来的一个语句,不要忘记中括号的作用
2.注意使用\n换行,不然运行结果超级难看
*/
5.i++和++i的区别
//2023年4月29日
//目的:学习i++和++i的区别
#include<stdio.h>
int main()
{
int a = 1;
int b = 1;
int c = 1;
int d = 1;
int x = 0, y = 0;
x = a++;
y = ++b;
c = c++;
d = ++d;
printf("(由a++变换的x)x=%d (由++b变换的y)y=%d\n",x,y);
printf("c=%d d=%d",c,d);
return 0;
}
/*
总结:
1. i++和++i对自身的值没有影响,相当于都是i=i+1
2.如果将i++或者++i赋值给其它未知数,如x=i++或x=++i,那么值就会有所不同
i++会先把i的值赋给x再加1 ++i会先加1在赋值
*/
/*
运行结果:
(由a++变换的x)x=1 (由++b变换的y)y=2
c=2 d=2
D:\vs\郝斌c\i++和++i的区别\x64\Debug\i++和++i的区别.exe (进程 7072)已退出,代码为 0。
按任意键关闭此窗口. . .
*/
while
1.while的格式
while(表达式)
语句;
2.for和while相互转换
for(1;2;3)
A;
等价于
1;
while(2)
{
A;
3;
}
3.while执行顺序
格式:
while(表达式)
语句;
先执行表达式,再执行语句,语句执行完以后执行表达式(看表达式是否成立),表达式成立再执行语句......直到表达式不成立退出循环
4.while举例
while求1到100的整数和
//2023年5月3日
//目的:了解while并求1到100的整数和
#include<stdio.h>
int main()
{
int i;
int sum = 0;
/*
for(i=1;i<=100;i++)
sum=sum+i;
*/
i = 1;
while (i <= 100)
{
sum = sum + i;
i++;
}
printf("sun=%d",sum);
return 0;
}
/*
运行结果:
-----------------------------
sun=5050
D:\vs\郝斌c\while\x64\Debug\while.exe (进程 23200)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
------------------------------
*/
/*
总结:
1.学习while以下方面
(1)执行顺序
格式:
while(表达式)
语句;
先执行表达式,再执行语句,语句执行完以后执行表达式(看表达式是否成立),表达式成立再执行语句......直到表达式不成立退出循环
(2)与for的互相比较
(3)举例
(4)什么时候使用while
2.while和for 可以互换
但for的逻辑性更强,更不容易出错,推荐使用for
for(1;2;3)
A;
等价于
1;
while(2)
{ A;
3;
}
3.while后面没有;
4
*/
while求回文数
原理:任何一个数除以10的余数就是该数的最后一位,任何一个数除以10的商就是排除最后一位的数,如12321, 12321/10=1232......1 1232/10=123......2 123/10=12......3 12/10=1......2 1/10=0......1
除到商为0,新数=新数*10+每次对应的余数