当前位置:文档之家› 进制转换、翻转小游戏

进制转换、翻转小游戏

河北工业大学计算机软件技术基础(VC)2012年课程设计报告
一、题目:
进制转换、翻转小游戏(28)
二、设计思路
1、总体设计
1) 分析程序的功能:
总体为十进制与十六进制之间的转换、翻转:将某一十进制整数转换为十六进制,将其翻转后再转换为十进制整数,而后将该十进制整数翻转并输出。将此过程运行5次,输出结果。
2) 系统总体结构:
系统由一个主函数构成,其中包括数据的输入,x的y次幂运算,十进制的翻转,字符数组的翻转,打印十六进制数,十进制转换为十六进制,十六进制转换为十进制。
2、各功能模块的设计:说明各功能模块的实现方法
1)x的y次幂中通过调用math.h中的pow函数的方法计算。
代码参加_pow(int x, int y)函数。
2)tenToSixteen模块
该函数使用了商余法,通过对int型整数进行商余法计算,求得十六进制各位对应的数。
代码参见tenToSixteen函数。
3)sixteenToTen模块
该函数通过调用math.h中的pow函数进行计算,并使用了if,for循环函数。
代码参见sixteenToTen函数。
4)reverse(char* a, int digit)模块
通过调用if,while函数,用数组指针将字符数组翻转。
代码参见reverse(char* a, int digit)函数。
5)reverse(int & number)模块
使用for循环,并调用tenToSixteen函数、reverse(a,digit)函数、sixteenToTen函数。
代码参见reverse(int & number)函数。
3、设计中的主要困难及解决方案
设计中多次用到指针,而且有翻转函数,不是太熟悉。该程序逻辑性很强,做起来有难度,经过请教同学、网络查询的得出结果。
4、你所设计的程序最终完成的功能
1) 说明你编制的程序能完成的功能
给定一个10进制数据如:1234,将其转换为十六进制数据4D2;4D2翻转后为2D4;2D4的十进制数据为724;724翻转为427。如果从1234变换为427计为一个周期。
计算10000以内的一个数据经过5个周期变换后的数据。
2) 准备的测试数据及运行结果

三、程序清单
#include
#include
void reverse(char* a, int digit);
void Sixteen(char* a, int digit);
void tenToSixteen(char* a , int number,int& digit, int radix);
void sixteenToTen(char* a, int & number , int& digit,int radix);
void _reverse(int & number);
int _pow(int x, int y);
int main(){
int n;
cout<<"请输入一个10000以内的整数: ";
cin>>n;
int MAX_LEN = 50;
char* a = new char[MAX_LEN];
for (int k=0 ; k < MAX_LEN; k++)
{
a[k] = NULL;
}
int digit = 0;
_reverse(n);
for (int i = 0 ; i < 5; i++)
{
digit = 0;
_reverse(n);
cout<tenToSixteen(a,n,digit,16);
Sixteen(a,digit);
cout<<"\t";
reverse(a,digit);
Sixteen(a,digit);
sixteenToTen(a,n,digit,16);
cout<<"\t"<}
return 0;
}


/************************************************************************/
/* x的y次幂 */
/************************************************************************/
int _pow(int x, int y){
int n = pow(static_cast(x),y);
return n;
}
/************************************************************************/
/* 将十进制数反转 123 --> 321 */
/************************************************************************/
void _reverse(int & number){
int LEN = 15;
char* a = new char[LEN];
for (int i=0; i{
a[i] = NULL;
}
int digit = 0;
tenToSixteen(a,number,digit,10); //先将十进制数转换为字符数组
reverse(a,digit); //翻转
sixteenToTen(a,number,digit,10);
}
/************************************************************************/
/* 将字符数组翻转 */
/************************************************************************/
void reverse(char* a, int digit){
int i = 0;
int j = digit -1;
if ( a != NULL && digit > 0)
{
while ( i < j)
{
char temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
}
/************************************************************************/
/* 打印十六进制数 */
/************************************************************************/
void Sixteen(char* a, int digit){
if( a != NULL && digit >0){
for(int i= digit ;i >0 ;i--){
cout<}
}
}
/************************************************************************/
/* 将十进制转换为十六进制 */
/************************************************************************/
void tenToSixteen(char* a , int number,int& digit, int radix){
while (number!=0)
{
int r = number%radix;
if ( r >= 10)
{
r+= 'A'-10;
}
else
{
r+= '0';
}
a[digit++] = r;
number /= radix;
}
}
/************************************************************************/
/* 将十六进制转换为十进制 */
/************************************************************************/
void sixteenToTen(char* a, int & number , int& digit,int radix){
number = 0;
if( a != NULL && digit >=0){
for (int i = digit; i > 0; i--)
{
char c = a[i-1];
int temp = c - '0';
if(c >= 'A'){
temp = c -'A'+10;
}
number += _pow(radix,i-1)*temp;
}
}
}
四、对该设计题目有何更完善的方案
1、对自己完成程序进行自我评价。
我的程序正确使用了指针、翻转函数等其他函数,较好的完成了任务中规定的设计内容,运行正确。
2、对课题提出更完善的方案
次程序

涉及到十进制与十六进制之间的转换,对于基础要求简单,可通过增加十进制和八进制、二进制的转化,从而增加同学们对于指针、函数、多个cpp文件的使用技能。
五、收获及心得体会
三天的课程设计中,通过编写复杂的程序,让自己能够较熟练的运用指针、reverse等函数并运用整型数组进行取整取余从而进行进制间的转化运算,提高了自己对于程序总体思路的把握以及对程序机构的分析和理解,把书本上学的知识用于了实践。
编写程序时一定要思路开阔,并灵活运用各章知识,这就是实践带给我的启示。
日期:

相关主题
文本预览
相关文档 最新文档