我们得到了将十进制转换为二进制和八进制的源代码。这是我将要使用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.nn", o);
return 0;
}
我们的任务是为我们的作业申请函数,并被要求使用函数Dec2BinOct(),正如前面所说的,但我们的老师告诉我们,这是最小需要的函数。试了这么多次之后,我似乎还是没有找到正确的程序。我只是需要一些帮助,这个明天就要交了。我非常感谢你的帮助。
如果您想要多个值,但不是一次,您可以将这两个操作一般化并提供一个数字应该转换为的基数:
unsigned long Dec2AnotherBase(unsigned long n, int base){
unsigned long place=1, result=0;
for(; n; place*=10, n/=base)
result += n % base * place;
return result;
}
在你的main函数中,你可以用下面的语句替换你的循环:
bin=Dec2AnotherBase(n, 2);
o=Dec2AnotherBase(n, 8);
我还稍微简化了您的代码。我是这样做的:
- 用较短的
bin+=r*place
和place*=10
代替bin=bin+(r*place)
和place=place*10
。 - 取消
r
变量,因为它只使用一次(%
周围也不需要括号,因为%
运算符与*
具有相同的优先级,并且从左到右计算)。 - 使用
,
运算符将g=g/2
移动到增量语句中。 - 删除在循环中不再需要的花括号,将循环简化为单个语句。
- 删除
g
,因为它是不必要创建的(你可以直接操作n
,因为它已经是传递给函数的变量的副本)。 - 有争议:将
n!=0
替换为n
,因为每个非零值都隐式地转换为逻辑真。