C语言不使用数组指针结构体如何返回多值?十进制转二/八进制作业求助
解决方案
实现思路
C语言原生仅支持单个返回值,在禁用数组、指针、结构体作为返回载体的前提下,可采用单值打包拆分方案:
- 使用64位无符号整数
unsigned long long作为函数返回值 - 高32位存储二进制转换结果,低32位存储八进制转换结果
- 主函数拿到返回值后按位拆分即可得到两个结果
如果你的编译环境不支持64位整数,也可以替换为全局变量方案:预先定义两个全局变量分别存储二进制、八进制结果,转换函数内部直接给全局变量赋值,主函数读取全局变量即可。
完整可运行代码
#include<stdio.h> // 转换函数:返回打包后的64位整数 unsigned long long Dec2BinOct(unsigned long n) { unsigned long g = n, place = 1, bin = 0, r, o = 0, place2 = 1; // 转换二进制 for(; g != 0; place = place * 10) { r = g % 2; bin = bin + (r * place); g = g / 2; } // 转换八进制 g = n; while (g != 0) { o = o + (g % 8) * place2; g = g / 8; place2 = place2 * 10; } // 打包两个结果返回 return ((unsigned long long)bin << 32) | o; } int main() { unsigned long n; printf("Conversion: Decimal to binary and octal.\n"); printf("Enter number: "); scanf("%lu", &n); unsigned long long res = Dec2BinOct(n); unsigned long bin = (res >> 32) & 0xFFFFFFFF; unsigned long oct = res & 0xFFFFFFFF; printf("%lu is %lu in Binary Form. \n", n, bin); printf("%lu is %lu in Octal Form.\n\n", n, oct); return 0; }
全局变量方案示例(备用)
#include<stdio.h> // 全局变量存储转换结果 unsigned long bin_res, oct_res; void Dec2BinOct(unsigned long n) { unsigned long g = n, place = 1, r, place2 = 1; bin_res = 0; oct_res = 0; // 转换二进制 for(; g != 0; place = place * 10) { r = g % 2; bin_res = bin_res + (r * place); g = g / 2; } // 转换八进制 g = n; while (g != 0) { oct_res = oct_res + (g % 8) * place2; g = g / 8; place2 = place2 * 10; } } int main() { unsigned long n; printf("Conversion: Decimal to binary and octal.\n"); printf("Enter number: "); scanf("%lu", &n); Dec2BinOct(n); printf("%lu is %lu in Binary Form. \n", n, bin_res); printf("%lu is %lu in Octal Form.\n\n", n, oct_res); return 0; }
内容的提问来源于stack exchange,提问作者Dexter1403
相关产品推荐
相关产品推荐

