c -我怎么能返回多个值不使用数组或指针或结构?



我们得到了将十进制转换为二进制和八进制的源代码。这是我将要使用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*placeplace*=10代替bin=bin+(r*place)place=place*10
  • 取消r变量,因为它只使用一次(%周围也不需要括号,因为%运算符与*具有相同的优先级,并且从左到右计算)。
  • 使用,运算符将g=g/2移动到增量语句中。
  • 删除在循环中不再需要的花括号,将循环简化为单个语句。
  • 删除g,因为它是不必要创建的(你可以直接操作n,因为它已经是传递给函数的变量的副本)。
  • 有争议:n!=0替换为n,因为每个非零值都隐式地转换为逻辑真。

相关内容

  • 没有找到相关文章

最新更新