這個問題在這里已經有了答案: 如何從 C 中的函式回傳多個值? (8 個回答) 昨天關閉。
我們得到了一個將十進制轉換為二進制和八進制的源代碼。這是我將使用函式 Dec2BinOct() 回傳轉換后的十進制值的源代碼。
#include<stdio.h>
int main()
{
unsigned long n, place=1, bin=0, r, o=0, place2=place;
printf("Conversion: Decimal to binary and octal.\n");
printf("Enter number: ");
scanf("%lu", &n);
printf("%lu is ", n);
for(unsigned long g = n; g != 0; place = place * 10) {
r = g % 2;
bin = bin (r * place);
g = g / 2;
}
printf("%lu in Binary Form. \n", bin);
printf("%lu is ", n);
while (n != 0) {
o = o (n % 8) * place2;
n = n / 8;
place2 = place2 * 10;
}
printf("%lu in Octal Form.\n\n", o);
return 0;
}
我們的任務是為我們的作業應用函式,并被要求使用函式 Dec2BinOct() 如前所述,但我們的老師告訴我們這是最低要求的函式。經過這么多次嘗試,我似乎沒有得到正確的程式。我只是需要一些幫助,這將在明天到期。我感謝您的所有幫助
uj5u.com熱心網友回復:
如果您想要多個值但不是一次,您可以概括這兩個操作并提供數字應轉換為的基數:
unsigned long Dec2AnotherBase(unsigned long n, int base){
unsigned long place=1, result=0;
for(unsigned long g=n; g; place*=10, g/=base)
result = g % base * place;
return result;
}
在您的主要功能中,您將回圈替換為:
bin=Dec2AnotherBase(n, 2);
o=Dec2AnotherBase(n, 8);
我還稍微簡化了您的代碼。這是我所做的:
- 更換
bin=bin (r*place)和place=place*10更短bin =r*place和place*=10。 - 消除了
r變數,因為它只使用一次(也不%需要括號,因為%運算子的優先級*與從左到右計算的優先級相同)。 g=g/2使用,運算子在增量陳述句內移動。- 洗掉了回圈中不再需要的大括號,減少到單個陳述句。
- 代替
g!=0在條件與g作為每個非零值被隱式轉換為邏輯真。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/329406.html
上一篇:箭頭在這個函式中做什么?
