本文目錄一覽:
- 1、C語言中如何用演算法實現進位間的轉化?
- 2、C語言的進位轉換程序
- 3、C語言中的各進位的轉換方法
- 4、C語言轉換進位
- 5、c語言中各種進位的轉換規矩 詳細些 最好是計算過程寫出來
- 6、C語言進位轉換
C語言中如何用演算法實現進位間的轉化?
C語言中實現10進位轉換為任意進位的過程為:
定義數組int rs[32],保存轉換後的數據,整數的轉換結果最多32位(4位元組*8位)
定義一個數組char map[]={‘0′,’1′,’2′,’3′,…,’9′,’A’,’B’,…’F’},完成相應數值對應的轉換後的字元
輸入10進位數(整數)num
轉入轉換進位基數(2-16)ind
循環對num進行模ind運算,得到餘數存儲到數組rs中
num縮小ind倍
當num為0時結束循環
反向輸出數組rs中對應的各元素對應的map字元,得到轉換結果
參考代碼:
#include stdio.h
int main()
{
char map[16]={‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’A’,’B’,’C’,’D’,’E’,’F’};
int i,c[32],num,ind;
do {printf(“input num: “);scanf(“%d”, num );}while(num0 );
do {printf(“input ind: “);scanf(“%d”, ind );} while( ind16||ind2);
i=0;
do {
c[i++]=num%ind;
num/=ind;
} while(num!=0) ;
for(i–;i=0;i–)
printf(“%c”,map[c[i]] );
printf(“\n”);
return 0;
}
運行結果:
input num: 100
input ind: 2
1100100
input num: 100
input ind: 8
144
input num: 100
input ind: 16
64
C語言的進位轉換程序
在這裡獻醜了!
1.將你輸入的數通過字元串的方式存儲是方便一下的計算的
正如你舉得例子,輸入137 數組中存入的是 字元型的137 要將
裡面的每個字元型的數字轉換成數值型的數字就得 *p-‘0’,因為
字元存儲時實際存儲的是字元的ASC碼, 例如 輸入 1(字元型)ASCII碼為
49 若不減去0的ASC碼 就會以49去參加運算
這個while循環是用於數制轉換的.將八進位轉換成10進位,其實就是將8進位數碼按權展開,137=1*8^2+3*8^1+7*8^0
2這個while就是這個用處,一步一步看下去,加入輸入為137存儲為字元137
第一次是將字元型的1減去0的asc碼就得到了數值型的1 1本來是最高位應該是但是這裡得到的只有係數(姑且叫做係數吧而權為8^0=1),由於後面還有兩個數,這樣通過循環n=n*8+*p-‘0’;將1的權值提升到了8^2,對第二位也類似.
3.要進行浮點數的進位轉換就得找准小數點的位置.然後按照類似的方法就可以了
C語言中的各進位的轉換方法
C++的,如果要TC的將中文改為English就行了
#includestdio.h
#includemath.h
void ten_two()
{
int num, i;
int arr[20];
printf(“請輸入一個十進位數:”);
scanf(“%d”,num);
for( i = 0 ; 1 ; i++)
{ //轉換為二進位並存入數組
arr[i] = num % 2;
num = num / 2;
if(num == 0)
{
break;
}
}
printf(“轉換為二進位:”); //列印
for(; i = 0 ; i– ){
printf(“%d”,arr[i]);
}
printf(“\n”);
}
void ten_eight()
{
int num, i;
int arr[20];
printf(“請輸入一個十進位數:”);
scanf(“%d”,num);
for( i = 0 ; 1 ; i++){//轉換為八進位並存入數組
arr[i] = num % 8;
num = num / 8;
if(num == 0){
break;
}
}
printf(“轉換為八進位:”); //列印
for(; i = 0 ; i– ){
printf(“%d”,arr[i]);
}
printf(“\n”);
}
void ten_sixteen()
{
int num, i;
int arr[20];
printf(“請輸入一個十進位數:”);
scanf(“%d”,num);
for( i = 0 ; 1 ; i++){ //轉換為二進位並存入數組
arr[i] = num % 16;
num = num / 16;
if(num == 0){
break;
}
}
printf(“轉換為十六進位:”); //列印
for(; i = 0 ; i– ){
switch(arr[i]){
case 10 : printf(“A”);break;
case 11 :printf(“B”);break;
case 12 :printf(“C”);break;
case 13 :printf(“D”);break;
case 14 :printf(“E”);break;
case 15 :printf(“F”);break;
default :printf(“%d”,arr[i]);
}
}
printf(“\n”);
}
void two_ten()
{
long num;
int b,TheTen=0,Total=0;
printf(“請輸入一個二進位數(只包含0或1):”);
scanf(“%ld”,num);
while(num)
{
b=num-(int)(num/10)*10;
TheTen+=b*pow(2,Total);;
Total++;
num=(int)(num/10);
}
printf(“轉換為十進位:”); //列印
printf(“%d”,TheTen);
printf(“\n”);
}
void eight_ten()
{
int num, i;
int arr[20];
printf(“請輸入一個八進位數(只由0~7之前的數組成):”);
scanf(“%o”,num);
printf(“轉換為十進位:”); //列印
printf(“%d”,num);
printf(“\n”);
}
void sixteen_ten()
{
int num, i;
int arr[20];
printf(“請輸入一個十六進位數(只由0~9和A~F之前的數組成):”);
scanf(“%X”,num);
printf(“轉換為十進位:”); //列印
printf(“%d”,num);
printf(“\n”);
}
void main()
{
int select;
do{
printf(“0 – 退出,1 – 十進位轉二進位,2 – 十進位轉八進位,3 – 十進位轉十六進位,4 – 二進位轉十進位,5 – 八進位轉十進位,6 – 十六進位轉十進位\n”);
scanf(“%d”,select);
switch(select){
case 1 : ten_two(); break; //十進位轉二進位
case 2 : ten_eight(); break; //十進位轉八進位
case 3 : ten_sixteen(); break; //十進位轉十六進位
case 4 : two_ten(); break; //二進位轉十進位
case 5 : eight_ten(); break; //八進位轉十進位
case 6 : sixteen_ten(); break; //六十進位轉十進位
default : printf(“您的輸入有誤,請重新輸入!”); break;
}
if(select == 0)
{break;}
}while(1);
}
C語言轉換進位
#includeintmain(void){inta8,b10,c16;/*a8,b10,c16分別代表八進位數,十進位數和十六進位數*/scanf(“%o%d%x”,a8,b10,c16);printf(“%o,%d,%x\n”,a8,a8,a8);printf(“%o,%d,%x\n”,b10,b10,b10);printf(“%o,%d,%x\n”,c16,c16,c16);}要重複,添加循環就OK了。這裡簡單的實現你的輸入和輸出功能,並沒有真正從運算規則上去進行轉換,你也沒做這樣的要求,不知道是不是你想要的結果。
c語言中各種進位的轉換規矩 詳細些 最好是計算過程寫出來
代碼如下:(可以輸出20位數)#includestdio.h
void transfer(int m,int change)
{
int aa[20],j,saveM=m;
for(j=0;m!=0;j++)
{
aa[j]=m%change;
m=m/change;
}
printf(“十進位數%d的%d進位形式是:\n”,saveM,change);
for(;j!=0;j–)
printf(“%d “,aa[j-1]); //注意這空是填aa[j-1],而不是aa[j],因為上面那個循環進行到最後一步時,j++還是會運行一次,但是此時並沒有給aa[j]賦值,因為循環結束
}
main()
{
int n,c;
printf(“請輸入一個整數\n”);
scanf(“%d”,n);
printf(“該整數是十進位數,你想將它轉化成幾進位數呢?\n”);
getchar();
scanf(“%d”,c);
transfer(n,c);
} 功能說明:該函數可以將任意的十進位數轉化成任意的N進位數。轉化後的結果,每兩位數之間用一個空格隔開。
希望可以幫到您,謝謝!
C語言進位轉換
計算機中常用的數的進位主要有:二進位、八進位、十進位、十六進位。
2進位,用兩個阿拉伯數字:0、1;
8進位,用八個阿拉伯數字:0、1、2、3、4、5、6、7;
10進位,用十個阿拉伯數字:0到9;
16進位就是逢16進1,但我們只有0~9這十個數字,所以我們用A,B,C,D,E,F這五個字母來分別表示10,11,12,13,14,15。字母不區分大小寫。
下面用餘數短除法把十進位數轉化為二進位數為例進行說明
1、明確問題。舉個例子,我們現在是要將一個十進位數字156轉換成二進位數字。先將這個十進位數作為被除數寫在一個倒著的「長除法」的符號里。把目標數系的基數(在這裡二進位是「2」)作為除數寫在這個除法符號的外面。用這個方法將計算過程可視化會更方便理解,因為整個計算過程只需將數字一直除以2。
2、進行除法運算。把結果的整數部分(商數)寫在長除法符號的下面,然後把它的餘數(0 或 1)寫在被除數的右邊。
我們現在是以2為除數,因此得出的商為偶數,則餘數為0;如果得出商為奇數,則餘數記為1。
3、一直往下繼續除,直到商為0為止。把每一個新的商數除以二,然後把餘數寫在被除數的右邊。直到商數為0為止。
4、寫出新的二進位數字。從最下面的餘數開始,按順序讀到最上面。本例中,你會得到10011100。這就是十進位數字156的二進位形式。或者,我們可以以腳註等式的形式表達,即:15610 = 100111002
活用這個方法可以將所有十進位數字轉換成任何進位表達。除數為2是因為我們最終想得到的以2為基數的數(即二進位數值) 。如果最終想得到其他數系的數字,用目標數系的基數代替這個方法里二進位的基數2 就可以了。例如,要得到基數為9的數,就用9來代替2作為除數 。最終的結果就是目標數系的數字表達。
擴展資料:
十進位—二進位
對於整數部分,用被除數反覆除以2,除第一次外,每次除以2均取前一次商的整數部分作被除數並依次記下每次的餘數。另外,所得到的商的最後一位餘數是所求二進位數的最高位。
對於小數部分,採用連續乘以基數2,並依次取出的整數部分,直至結果的小數部分為0為止。故該法稱「乘基取整法」
十進位—八進位
10進位數轉換成8進位的方法,和轉換為2進位的方法類似,唯一變化:除數由2變成8。
參考資料:百度百科——進位轉換
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/258621.html