帮帮我计算机软件技术基础(VC)
课程设计任务书
一、题目:自然数的进制转换(21题)
二、目的与要求
1. 目的:
通过编写对自然数进行不同进制转换程序,培养学生综合利用C++语言进行程序设计的能力,熟悉字符串的操作方法,加强函数的运用,提高软件系统分析能力和程序文档建立、归纳总结的能力。
2. 基本要求:
1)要求用C++语言编程,在Visual C++环境下调试完成;
2)要求按照程序功能分成几个功能模块来实现,各个功能模块分别使用函数来完成;
3)要求应用本课所讲授的程序设计语言知识来解决问题,使用教材前六章的内容来完成程序;
4)使用cin和cout来实现输入输出(使用scanf和printf的为不合格)。
三、设计方法和基本原理
1. 课题功能描述
本程序的功能,就是实现自然数的十进制、二进制、八进制、十六进制转换。即根据用户选择的进制和输入的数据,转换得到该数所对应的十进制、二进制、八进制和十六进制数。
2. 问题详细描述
程序运行时,首先由用户选择输入数据所使用的进制,如:
欢迎使用进制转换程序!
1. 十进制
2. 二进制
3. 八进制
4. 十六进制
0. 退出
请选择输入数据的进制:
用户选择后,再输入数据,如选择3(八进制),则显示:
请输入八进制数据:
输入数据后,程序进行转换,最后输出该数所对应的十进制、二进制、八进制和十六进制数。如输出:
转换结果:
十进制 21809
二进制 101010100110001
八进制 52461
十六进制 5531
3. 问题的解决方案
实际上,C++语言在输入输出时可直接输入或输出各种进制的数,本题目是为了提高学生的编程能力,所以要自己编程来实现数制的转换。根据问题的描述,使用字符数组来存放输入的数据,转换后的数据也存放到字符数组中,按字符串进行输入和输出。
注意:问题的解决方案有很多,下面给出的仅供同学们参考。
按照程序要求,每次要将数据转换成各种进制,因此将输入数据(字符数组中)先转换成十进制数(long),再将其转换成各种进制并存入相应的字符数组中,最后输出。
本程序应采用模块化设计方法,设计几个功能模块。例如(仅供参考):
l 检验输入数是否合法(例八进制数中只能出现0~7)
l 将数据(字符数组中)转换成十进制数(long)
l 将十进制数(long)转换成某种进制数据(字符数组中)
还可以把这几个模块中都使用的字符与数字之间的转换作为独立模块,供上面的模块调用。例如(仅供参考):
l 字符转数字
l 数字转字符
主函数中控制输入、函数调用和输出。
四、主要技术问题的描述
根据三的分析,主要问题在于:
1) 单个字符与数字的转换
在字符转数字时,'0'~'9'只需减去'0'即可,要考虑到'a'~'f'和'A'~'F'的转换(十六进制数)。同样的,数字转字符时,要考虑到10~15的转换与0~9不同。
2) 将数据(字符数组中)转换成十进制数(long)时,采用的算法是:按当前数制的位权进行多项式展开相加,即得到对应的十进制数。
3) 将十进制数(long)转换成某种进制数据(字符数组中)时,采用除留余数法:将十进制数除以转换进制的位权,保留余数(存到字符数组中),商继续除,直到商为零;然后将字符数组中的内容求头逆序,即得到转换数据。其中求逆序也可用一个独立模块来实现。
五、创新要求
实现程序功能后,可进行创新设计:
1) 使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明;
2) 本程序实现的是自然数的不同进制的转换,可进一步实现带小数的转换;
3) 实现负数的转换
万分火急!谢谢!
我的邮箱是
sunhainan1986@163.com
[此贴子已经被作者于2007-6-26 11:39:55编辑过]