1樓:兜裡有兩塊糖
因為你的輸入是%c,也就是字元型的『1』『0』
不是數字1,0
計算中用到的是數字,不是字元,所以需要把字元轉化為數字,ascii碼"1" 是49,「0」是48
ch - '0'
若ch = 『1』,則49-48 = 1
即轉化為數字1
2樓:匿名使用者
ch - '0'由於題意可知ch值不是字元'0'就是字元'1',也就導致了表示式ch - '0'值不是0就是1
另外你的疑問很簡單,從低位開始一一計算,不足的用0補就行了啊
另外,這個**是有問題,你輸入的應該是一個字串,而不是個字元啊
3樓:篤俠
ch - '0'——是將ch中的字元'0'或'1'轉換為數字0或1
sum + '0'——是將sum中的0-7之間數字轉換為對應的字元'0'-'7'
二進位制數轉換為對應的十進位制、八進位制和十六進位制數,c語言?
4樓:問下問題
#include
#include
char s[128];
int main()
else
}printf("the number is %d in decimal.\n",n);
printf("the number is %o in octal.\n",n);
printf("the number is %x in octal.\n",n);}
5樓:沙裡波特
樓主自己做一些吧。
什麼地方有不會的,再來求助。
用c語言編寫八進位制轉換二進位制程式
6樓:測繪二哈
現在提供一個從2到16之間的互相轉換程式,可以實現小數,整數,負數,正數等之間的互相轉換,樓主可以根據自己的需要稍作修改即可滿足你自己的需要,o(∩_∩)o~
源程式如下:
#include
#include
#include
#include
void main()
if(a[k]=='.')//如果其中再次遇到「.」證明輸入有誤,終止程式
}//注意:前面兩個for()迴圈可以合併成一個迴圈,這樣就可以節約很多的**的,但是相對而言,兩段程式的時間複雜度一樣,修改後的**如下:
/*i=0;
j=0;
for(k=0;k1||j>1)
}*/for(j=x-1;j>=0;j--)
else
r=a[j]-'0';//將字元轉換成數字
if(r>=t)
p=p+r*pow((double)t,(double)(x-j-1));//計算結果
}if(a[x]=='.')
else
r=a[j]-'0';//將字元轉換成數字
if(r>=t)
p=p+r*pow((double)t,(double)(x-j));}}
if(n==10)//選擇性計算,如果是整數就不用進行這一步的計算了,這樣可以節約程式的執行時間
printf("%f",p);
}else
c=0;
//if(p!=(int)p)//選擇性計算,如果是整數就不用進行這一步的計算了,這樣可以節約程式的執行時間//}
printf("轉換結果為:");
if(a[0]=='-')
printf("-");
for(j=i-1;j>=0;j--)//反序輸出,大於10的數字進行相應的變化
if(p!=(int)p)//選擇性輸出,這樣可以節約輸出時間和程式的執行時間
printf("\n");//輸出換行,以使程式的輸出結果美觀}
怎樣寫一個c語言程式 將八進位制數轉換為二進位制數啊? 幫忙寫一下程式,最好有註釋。謝謝各位啦。
7樓:邵素潔伏全
//我剛寫了一個十進位制轉化為八進位制的,比你要求的多一步,希望你自己好好看看啊
//你看程式時,自己手動的算一下十進位制轉化為二進位制,以及二進位制轉化為八進位制,這樣就可以理解裡面的意思了
#include
inta[100];//十進位制數轉化為八進位制數要先把十進位制數轉化為二進位制
在把二進位制轉化為八進位制
void
fun2(int
k)//二進位制轉化為八進位制數
if(i==k
-2)//最後二進位制還有三位沒有算
else
if(i==k
-1)//最後還有兩位沒算
else
if(i
==k)//只有一位沒算了
printf("八進位制數為:
");for(top;
top>=
0;top--)//棧,
先進入陣列
printf("\n");
}void
fun(int
k)//轉化為二進位制數
fun2(top
-1);
}int
main()
//其實棧就是陣列倒著的,別把它寫的太複雜了
8樓:仍夢菲海英
#include
intmain()
//轉10、16進位制更簡單,直接printf("%x;%d\n",i,i);
//沒有樓上幾位講的那麼複雜,你們都陷入了進位制的怪圈去了。在計算機裡的數就是數,只有整形、實型等等的分別,根本沒有進位制那麼一說,進位制只是顯示格式而已。
請問用c語言編寫一個十進位制轉換成二進位制或八進位制或十六進位制的程式需要怎麼打?
9樓:會飛的小兔子
#include
voidmain()
inttransfer(intx)
}returny;
}擴充套件資料c語言:整數轉換十六進位制數和八進位制
#include
voidmain()
10樓:匿名使用者
int main()
while(b!=1);
c[j]=1;
printf("二進位制為: ");
for(i=j;i>=0;i--)
printf("%d",c[i]);
break;
case 8:
printf("請輸入一個十進位制:b= ");
scanf("%d",&b);
dowhile(b!=0);
printf("八進位制為: ");
for(i=j-1;i>=0;i--)
printf("%d",c[i]);
break;
case 16:
printf("請輸入一個十進位制:b= ");
scanf("%d",&b);
dowhile (b!=0);
printf("十六進位制為: ");
for(i=j-1;i>=0;i--)
printf("%d",c[i]);break;
default:printf("錯誤\n");}}修改過的,望採納
c語言程式設計題:從鍵盤輸入一個十進位制數,將其轉換為二進位制、八進位制和十六進位制數,並同時輸出。
11樓:釋夕楊歌
十進位制數
轉二進位制、八進位制、十六進位制的經典程式
程式源**:
copy
code#include
//十進位制數轉換成二進位制數字
void
fun_1(intn)}
c語言中將二進位制數(001101101110.110101)b轉換成八進位制數怎麼算
12樓:風若遠去何人留
三位二進位制對應一位8進位制。
所以 以小數點分隔,然後轉換就行了
001 101 101 110.110 101每三個對應一個
就是1 5 5 6 . 6 5
結果就是
1556.65
13樓:
從小數點開始左右每3位隔開——001'101'101'110.110'101。
前後不足3位的用0補齊——001'101'101'110.110'101。
用對應的八進位制符號將每個3位二進位制表示的數直接依次寫下來——1556.65。
結果就——(001101101110.110101)b==(1556.65)o。
14樓:匿名使用者
001101101110.110101=0011-0110-1110.1101-0100=36e.
d4你寫的0100=100-96真是有意思哦。我也不明白。不過2進位制轉16進位制很簡單,4位2進位制對應一個16進位制,整理成表如下:
0000000011001020011301004010150110601117100081001
15樓:匿名使用者
首先把二進位制轉化稱十進位制的數,然後十進位制在轉化成八進位制的數
二進位制(10012轉八進位制,二進位制(10011100 01)2轉八進位制
二進位制 10011100 01 2轉八進位制為 234 2 8。二進位制化為八進位制整數部份從最低有效位開始,以3位一組,最高有效位不足3位時以0補齊,每一組均可轉換成一個八進位制的值,轉換完畢就是八進位制的整數。因此10011100 010 011 100 234。小數部份從最高有效位開始,以3...
怎樣把十進位制的數轉換成二進位制 八進位制 16進位制?
1 十進位制整數轉換成二進位制整數。連續用該整數除以2,取餘數,直到商等於0為止。再把得到的各個餘數按相反的順序排列。簡稱 除2取餘法 如 221十進位制轉二進位制。商110,餘1 商55,餘0 商27,餘1 商13,餘1 商6,餘1商3,餘0商1,餘1 商0,餘1自下而上讀餘數。十進位制小數轉換成...
八進位制334轉二進位制,八進位制轉換成二進位制
3 011 3 011 4 100 再拼接起來,去掉最高位的0,就是11 011 100 常規的演算法就是統統轉10進位制再轉成對應的,只不過整數部分是一直除,小數部分是一直乘。但是對於2 8 16進位制之間互相轉化不需要這麼麻煩,不管是小數還是整數部分,說一個快速轉化的方法。8,16要轉成二進位制...