C任意进制转换程序
来源:优易学  2010-1-14 11:08:17   【优易学:中国教育考试门户网】   资料下载   IT书店

  以前做C培训时写的一个任意进制转换的程序,不使用库提供的转换函数,现贴出来做一下记录。
  / scale.cpp : 定义控制台应用程序的入口点。
  //
  #include "stdafx.h"
  #include <stdio.h>
  #include <stdlib.h>
  #include <ctype.h>
  #include <string.h>
  #include <math.h>
  #define WIDTH 10
  #define DATAWIDTH 50
  #define MAX 4294967295
  #define CONST_2 2
  #define CONST_3 3
  #define CONST_8 8
  #define CONST_9 9
  #define CONST_10 10
  #define CONST_16 16
  #define CHAR_0 '0'
  #define CHAR_9 '9'
  #define CHAR_A 'A'
  #define CHAR_a 'a'
  #define CHAR_Z 'Z'
  #define CHAR_SPACE ' '
  #define STRING_0 "0"
  #define STRING_Z "Z"
  bool Scale();
  bool GetSourceScale(int * scale_in);
  bool GetObjectScale(int * scale_out);
  double OtherToDeci(int scale_in,char inputdata[]);
  void DeciToOther(unsigned long deci,int scale_out,char outputdata[]);
  bool GetData(char data[],int CONCOUNT,int flg);
  bool GetScale(char temp[]);
  bool GetSource(int in_scale,char inputdata[]);
  void ScaleChange(int scale_in,char inputdata[],int scale_out,char outputdata[]);
  void CleanScreen();
  int _tmain(int argc, _TCHAR* argv[])
  {
  int flg = 0;
  char cs[WIDTH];
  memset(cs,0x00,sizeof(cs));
  while(1)
  {
  printf("-----------------------------------------------------------------\n");
  printf(" Data Transform Between Two Scales \n");
  printf(" ----------------------------------------\n");
  /*进制转换主函数*/
  if(!Scale())
  {
  break;
  }
  printf("-----------------------------------------------------------------\n");
  printf("input any key and press 'Enter' key to continue, 'Z' for exit:");
  if(!GetData(cs,WIDTH,flg)) /*判断是否继续执行下一次转换*/
  {
  break;
  }
  system("cls"); /*清屏*/
  }
  return 0;
  }
  bool Scale()
  {
  int scale_in,scale_out;
  char inputdata[DATAWIDTH];
  char outputdata[DATAWIDTH];
  /*输入源数据进制*/
  if(!GetSourceScale(&scale_in))
  {
  return false;
  }
  /*输入源数据*/
  if(!GetSource(scale_in,inputdata))
  {
  return false;
  }
  /*输入目标数据进制*/
  if(!GetObjectScale(&scale_out))
  {
  return false;
  }
  /*进行进制转换*/
  ScaleChange(scale_in,inputdata,scale_out,outputdata);
  return true;
  }
  bool GetSourceScale(int * scale_in) /*输入源数据进制*/
  {
  char temparray[WIDTH];
  memset(temparray,0x00,sizeof(temparray));
  printf("Input source data scale and press 'Enter' key(one of 2,8,10,16. 'Z' for exit): \n");
  if(!GetScale(temparray))
  {
  return false;
  }
  *scale_in = atoi(temparray);
  return true;
  }
  bool GetObjectScale(int * scale_out) /*输入目标数据进制*/
  {
  char temparray[WIDTH];
  memset(temparray,0x00,sizeof(temparray));
  printf("Input object data scale and press 'Enter' key(one of 2,8,10,16. 'Z' for exit): \n");
  if(!GetScale(temparray))
  {
  return false;
  }

[1] [2] [3] [4] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训