版权所有:东北大学计算中心
例
9-15
编写函数,输入一个整数,将其转换为字符串输出。例如,输入整数
86556
,
输出字符串
"86556"
。
首先确定函数头,函数输入一个
long
型整数,输出一个
char
型字符数组,因此可以定
为
void long2string(long lNum,char chWord[])
。
注意这里的整数可能比较大,
不要定为
int
型。
函数中,可以首先利用循环和
%
和
/
运算符,依次取得整数的每个位。思路如下:例如
86556
,我们可以将其对
10
取余,得到个位
6
;将
86556
除
10
余
8655
,继续对
10
取余,得
到十位
5
;…
…
以此类推,直到该数变为
0
为止。这样就可以将整数的每个位分离出来。
在上述的循环过程中,
将分离出的数字依次保存到字符数组中。
但是要注意,
字符数组
中保存的是字符,是数字的
ASCII
码,而不是数字本身的值。因为
ASCII
码表中阿拉伯数
字的码值是连续的,因此一个常用的技巧是,字符
0
加数字值即为该数字的
ASCII
码值。
上述过程结束后,
字符数组里存放了整数的每个位,
但是不符合题目的要求,
顺序正好
相反。
这可以用一个循环对数组进行转置:
字符串第一个元素和最后一个元素对换;
第二个
元素和倒数第二个元素对换;
…
…程序循环进行
字符串长度
/2
次
(如果字符串长度为奇数,
中间元素正好不用处理)
。
数据要求
问题中的常量:
无
问题的输入:
long lNum /*
输入的
long
型数据
*/
问题的输出:
char chWord[50] /*
转换后的字符串
*/
初始算法
1
.初始化变量
lNum
;
2
.调用函数得到字符串;
3
.程序输出结果后退出。
算法细化
步骤
2
的细化
2
.
1
初始化临时变量
2
.
2 lNum!=0
时,循环执行得到各个位的数字
2
.
2
.
1
转换数字
ASCII
码
2
.
2
.
2 i
变量增
1
2
.
2
.
3 lNum=lNum/10
,本步骤的目的有两个,一是结束循环,二是正确的
得到数字
2
.
3
字符串最后加标志
2
.
4
循环进行数组的逆序
2
.
5
结束
流程图