当前位置:文档之家› C语言课程设计--进制转换

C语言课程设计--进制转换

C 语言课程设计报告设计题目:进制转换学生姓名:学生学号:20101010110专业班级:数学与应用数学一班学院名称:数学与计量经济学院同组人姓名:指导老师:2011年6 月16 日目录1.需求分析........................................................1 1.1问题描述....................................................1 1.2输入数据的要求..............................................1 1.3输出数据的要求..............................................1 1.4开发环境和工具..............................................1 1。

.5成员分工...................................................1 2.总体设计........................................................2 2.1设计思路...................................................3 2。

.2模块结构图...............................................4 3.详细设计........................................................7 3.1数据类型的定义...............................................7 3.2总的实现......................................................8 4.系统测试........................................................9 5.总结...........................................................·10 6.参考文献及附录............................................111 需求分析1.1问题描述设计一个程序,将命令中的数字串转换为指定进制的数字串,并输出。

当输入BD时将数字串从二进制转换成十进制,当输入DB时将数字串从十进制转换成二进制,当输入BO 时将二进制转换成八进制,当输入OB时将八进制转换成二进制。

转换前转换后的数字串都必须用字符数组存放,且不能直接用%d,%o输出,用命令提示符去运行程序。

1.2输入数据要求以命令行方式运行程序时所带参数,用户从键盘输入要转换的数据。

输入两个个字符,并且字符之间必须用空格隔开,输入第一个字符之前应先空格。

第一个是字符是表示转换的类型,第三个字符是需要转换的数字串。

如BD 10101010是将二进制数转换成十进制数。

1.3输出数据要求根据输入数据,输出转换后的数字。

若输入正确,则如图1所示。

当输入数据之前没有空格的话,如图2,界面会提示“不是内部或外部命令,也不是可运行的程序或批处理文件”如果没有区分大小写,,界面会显示“Iuput Error!”,如图3所示。

1231.4开发环境和工具开发环境:windows2007.开发工具:c-free 5.01.5成员分工凌语蓉:总体设计、查询模块、排序模块、……黄子珊:系统测试、主调模块、更新模块、……2总体设计2.1.总体设计思路1.设计思路实现数制转换,将数值在二进制与十进制,二进制与八进制之间实现相互转换。

根据进制转换的特点,以是十进制作为进制转换的中介站。

无论哪种转换形式,先转换成十进制,再利用数学方法转换成相应的进制。

所以,二进制与十进制之间直接通过一个算法能进行转换,二进制与八进制之间需要先转换成十进制再进行转换。

因此设计了两个算法,一个是将原来的进制转换成十进制,一个是将转换成十进制后得到的数转换成目标进制。

主函数里有两个形式参数,运行程序时操作系统将命令行参数传给mian函数的形式参数。

并且,十进制以上的进制中会出现字母,为了以后程序的改进,我们考虑了将字符转换成数字。

2.数据存储所有的数字存放在字符类型的数组里面。

有两个字符数组,一个接受进制转换类型,一个储存数字串。

例如,如果储存的是BD,则将后面字符储存的数字从二进制转换成十进制;如果储存的是DB,则将后面字符储存的数字从十进制转换成二进制;如果储存的是BO,则将后面字符储存的数字从二进制转换成八进制;如果储存的是OB,则将后面字符储存的数字从八进制转换成二进制。

2.2模块结构图1)source_to_decimal:将数字串转换成十进制的。

2)decimal_to_object:将十进制的数字串转换成目标进制。

3)output:将转换后的数字串输出。

4)其中source_to_decimal,decimal_to_object模块划分为如下两个子模块。

1)num_to_char:将数字转换成字符。

2)char_to_num:将字符转换成数字。

2.3模块说明1.source_to_decimal:函数原型:long source_to_decimal(char temp[],int source)功能:将数字串转换成十进制的输入参数:temp[]——字符数组,暂时存放输入的数字串。

source——整型类型,表示存放的数字串是几进制的。

输出参数:decimal_num——长整型,表示是转换成十进制的数字串。

2.decimal_to_object函数原型:int decimal_to_object(char temp[],long decimal_num,int object)功能:将十进制的数字转换成目标进制输入参数:temp[]——字符数组,转换后的数字存放在temp[]数组中。

decimal_num——长整型,判断循环是否结束。

Object——整型,目标进制。

输出参数:i——转换后目标进制数的长度。

3.Output函数原型:void output(char temp[],int length)功能:输出字符输入参数:temp[]——字符数组,存放转换后数字串。

Length——整型,字符的长度。

输出参数:temp[]——转换后的数字串。

4.num_to_char函数原型char num_to_char(int num)功能:将数字转换为字符输入参数:num——整型,代表字符数组元素。

输出参数:num——字符,转换后的字符5.char_to_num函数原型char_to_num(char ch)功能:将字符转换为数字输入参数:char——字符,代表字符数组元素。

输出参数:char——数字,转换后的数字。

3.详细设计3.1数据类型的定义。

int main(int argc,char *argv[]){int length;//转换后的数字的长度long decimal_num;//转化为十进制后的数int flag=1;//是否再次运行标识}int char_to_num(char ch){char ch; //将字符转换成数字。

十进制以上的进制中会出现字母。

}char num_to_char(int num){Int num; //将数字转换成字符。

十进制以上的进制中会出现字母。

}long source_to_decimal(char temp[],int source){long decimal_num=0; //转换成十进制后的数值。

int length; //获得原数字的长度。

int i; //控制循环。

char temp[];//暂时存放转换前的数字串。

int source; //用户输入的数字。

}int decimal_to_object(char temp[],long decimal_num,int object){int i=0;char temp[];//转换计算,转换后的数字存放在temp[]数组中i++;long decimal_num; //转换计算的中介数。

int object; //表示目标进制数}3.2总的实现1.source_to_decimal模块的实现算法思想:1。

用一个char型的temp[]来暂时存放输入的数字串。

利用循环结构用i作下标,根据循环停止条件,得出数字串的长度,并且存储在int型的length中。

2.由数学知识可知,将一个m进制的数转换成十进制的数,要从最后一位开始算,依次列为第0、1、2...位第n位的数(0或1)乘以m的n次方,得到的结果相加就是答案。

所以我们先读取第一个数字利用循环机构将其连续乘以 m (length-1)次,以此类推,最后一个数字直接加上。

如二进制01101011=十进制107具体实现:long source_to_decimal(char temp[],int source){for(i=0;temp[i]!='\0';i++);length=i; //获得数字的长度for(i=0;i<=length-1;i++)decimal_num=(decimal_num*source)+char_to_num(temp[i]);//转换计算return decimal_num;//返回转换成十进制后的数值}2.decimal_to_object模块的实现算法思想:1。

将转换后的数字串暂时存放在temp[i]中。

2.十进制转化成n进制,就是把十进制数除以n取余,再除以n取余,直到商为0。

然后把所有的余数倒着取过来,就是对应的n进制数比如十进制数9090/2=45 045/2=22 (1)22/2=11 011/2=5 (1)5/2=2 (1)2/2=1 01/2=0 (1)所以十进制数90=二进制数1011010具体实现:int decimal_to_object(char temp[],long decimal_num,int object) while(decimal_num){temp[i]=num_to_char(decimal_num%object);decimal_num=decimal_num/object;//转换计算,转换后的数字存放在temp[]数组中i++;}3.output模块的实现算法思想:利用循环结构将字符数组元素从后至前逐个输出具体实现:void output(char temp[],int length){int i;for(i=length-1;i>=0;i--)printf("%c",temp[i]);printf("\n");}.4。

相关主题