鍍金池/ 教程/ C/ 一起talk C栗子吧(第七回:C語言實例--進(jìn)制轉(zhuǎn)換)
一起talk C栗子吧(第八回:C語言實例--素數(shù))
一起talk C栗子吧(第十八回:C語言實例--輸出十六進(jìn)制)
一起talk C栗子吧(第十七回:C語言實例--棧二)
一起talk C栗子吧(第十九回:C語言實例--位操作)
一起talk C栗子吧(第十六回:C語言實例--棧一)
一起talk C栗子吧(第五回:C語言實例--數(shù)組巧妙賦值)
一起talk C栗子吧(第十二回:C語言實例--單鏈表一)
一起talk C栗子吧(第九回:C語言實例--最大公約數(shù))
一起talk C栗子吧(第二回:C語言實例--判斷閏年)
一起talk C栗子吧(第六回:C語言實例--生成隨機(jī)數(shù))
一起talk C栗子吧(第四回:C語言實例--斐波那契數(shù)列)
一起talk C栗子吧(第十四回:C語言實例--循環(huán)鏈表)
一起talk C栗子吧(第十五回:C語言實例--雙向鏈表)
一起talk C栗子吧(第二十一回:C語言實例--表達(dá)式求值)
一起talk C栗子吧(第三回:C語言實例--求階乘)
一起talk C栗子吧(第七回:C語言實例--進(jìn)制轉(zhuǎn)換)
一起talk C栗子吧(第二十回:C語言實例--括號匹配)
一起talk C栗子吧(第一回:C語言實例概述)
一起talk C栗子吧(第十回:C語言實例--最小公倍數(shù))
一起talk C栗子吧(第十一回:C語言實例--文件組織結(jié)構(gòu))
一起talk C栗子吧(第十三回:C語言實例--單鏈表二)

一起talk C栗子吧(第七回:C語言實例--進(jìn)制轉(zhuǎn)換)

各位看官們,大家好,從今天開始,我們講大型章回體科技小說 :C栗子,也就是C語言實例。閑話休提, 言歸正轉(zhuǎn)。讓我們一起talk C栗子吧!

看官們,上一回中咱們說的是生成隨機(jī)數(shù)的例子,這一回咱們說的例子是:進(jìn)制轉(zhuǎn)換。說到進(jìn)制估計大家 都不陌生,計算機(jī)中的進(jìn)制有二進(jìn)制,八進(jìn)制,十進(jìn)制,十六進(jìn)制。

今天咱們將要說的是十進(jìn)制如何轉(zhuǎn)換成二進(jìn)制,八進(jìn)制和十六進(jìn)制。在這里我把寫程序的步驟和算法思路 寫出來供大家參考。

  • 1.獲取用戶想要轉(zhuǎn)換的數(shù)值和想到轉(zhuǎn)換的進(jìn)制。這里要檢查輸入是否正確。這是程序健壯性的體現(xiàn)。
  • 2.依據(jù)用戶輸入的不同進(jìn)制,進(jìn)行不同的轉(zhuǎn)換。在代碼中,我把轉(zhuǎn)換過程封裝成了一個函數(shù)。
  • 3.輸出轉(zhuǎn)換后的結(jié)果。輸出轉(zhuǎn)換后的結(jié)果也封裝成了一個函數(shù)。

看官們,咱們接下來說說如何進(jìn)行進(jìn)制轉(zhuǎn)換,也就是進(jìn)制轉(zhuǎn)換函數(shù)的內(nèi)容。

  • 1.使用被轉(zhuǎn)換的數(shù)值模轉(zhuǎn)換進(jìn)制,并且把模的結(jié)果保存起來。比如被轉(zhuǎn)換的數(shù)值為9,轉(zhuǎn)換進(jìn)制為2.那么模的 結(jié)果 =9%2.該步驟要執(zhí)行多次,具體的次數(shù)由步驟2決定。把每次執(zhí)行的結(jié)果從左到右排列成一排就是轉(zhuǎn)換 進(jìn)制的結(jié)果。在程序中使用一個數(shù)組來保存結(jié)果。
  • 2.使用被轉(zhuǎn)換的數(shù)值除以轉(zhuǎn)換進(jìn)制,并且判斷商是否為0.如果不為0重復(fù)步驟1和2,直到商等于0為止。

看官們,說完了轉(zhuǎn)換函數(shù),咱們接下來說說輸出進(jìn)制轉(zhuǎn)換結(jié)果的函數(shù)。

  • 1.輸出結(jié)果時與轉(zhuǎn)換轉(zhuǎn)換函數(shù)中保存結(jié)果的順序正好相反。保存是沿著數(shù)組頭到尾的方向,輸出時是沿著 數(shù)組尾到頭的方向。兩個方向正好相反。
  • 2.十六進(jìn)制的輸出結(jié)果中包含A-F這些字符,所以專門對它們進(jìn)行了轉(zhuǎn)換。

看官們,詳細(xì)的代碼如下,請大家參考:

     1  /* **************************
     2   * For Hex conversion
     3   * *************************/
     4  #include<stdio.h>
     5  
     6  /*convert function
     7   *Parameter a is used for saving converting result
     8   *Parameter iVal is a value ,which will be converted.
     9   *Parameter base is a base value ,
    10   */
    11  
    12  #define SUCCESS 0
    13  #define FALSE 1
    14  #define BIT 32
    15  
    16  int convert(int *a,int iVal,int base)
    17  {
    18      int index = 0;
    19      int res = 0;
    20  
    21  
    22      if(NULL == a)// check the pointer
    23      {
    24          printf("null pointer \n");
    25          return FALSE;
    26      }
    27      
    28      if( 0 == base) //check the base, 0 can't be used for division
    29      {
    30          printf("bad value of base \n");
    31          return FALSE;
    32      }
    33  
    34      res = iVal;
    35      //the main algorithm
    36      do
    37      {
    38          *(a+index) = res % base;
    39          res /= base;
    40          ++index;
    41      }while(res != 0);
    42  
    43      return SUCCESS;
    44  }
    45  
    46  int showConvertResult(int *a)
    47  {
    48      int index = 0;
    49  
    50      if(NULL == a)// check the pointer
    51      {
    52          printf("null pointer \n");
    53          return FALSE;
    54      }
    55  
    56      for(index=BIT; index>0; --index)
    57      {
    58          if(index %4 == 0)
    59              printf(" ");
    60  
    61          switch( *(a+index-1) ) // input hex character
    62          {
    63          case 10:
    64              printf("%c",'A');
    65              break;
    66          case 11:
    67              printf("%c",'B');
    68              break;
    69          case 12:
    70              printf("%c",'C');
    71              break;
    72          case 13:
    73              printf("%c",'D');
    74              break;
    75          case 14:
    76              printf("%c",'E');
    77              break;
    78          case 15:
    79              printf("%c",'F');
    80              break;
    81          default:
    82              printf("%d",a[index-1]);
    83              break;
    84          }
    85      }
    86  
    87      printf("\n");
    88  
    89      return SUCCESS;
    90  }
    91  
    92  int main()
    93  {
    94      int base = 0;
    95      int iVal =0;
    96      int result = 0;
    97      int hex[BIT] = {0}; // the max bit is 32
    98  
    99      printf("please input a number for conversion: \n");
   100      if(0 == scanf("%d",&iVal))
   101      {
   102          printf("Input number is not right \n");
   103          return FALSE;
   104      }
   105  
   106      printf("please select a char for conversion: \n");
   107      printf(" \t ->Decimal conver to  Binary:input 1 : \n");
   108      printf(" \t ->Decimal conver to  Octonary:input 2 : \n");
   109      printf(" \t ->Decimal conver to  Hex:input 3 : \n");
   110  
   111      if(0 == scanf("%d",&base))
   112      {
   113          printf("Input number for selecting is not right \n");
   114          return FALSE;
   115      }
   116  
   117      switch(base)
   118      {
   119      case 1:
   120          result = convert(hex,iVal,2);
   121          break;
   122  
   123      case 2:
   124          result = convert(hex,iVal,8);
   125          break;
   126  
   127      case 3:
   128          result = convert(hex,iVal,16);
   129          break;
   130  
   131      default:
   132          break;
   133  
   134      }
   135  
   136      if(result == FALSE)
   137          return FALSE;
   138      else 
   139      {
   140          showConvertResult(hex);
   141          return SUCCESS;
   142      }
   143  }

各位看官,關(guān)于進(jìn)制轉(zhuǎn)換的例子咱們就說到這里。欲知后面還有什么例子,且聽下回分解。