如何用C语言循环实现数组按指定数量展开?
用循环实现数组展开的解决方案
你可以通过嵌套循环来实现这个需求,外层循环遍历element数组的每个元素,内层循环根据quantity数组对应的次数重复填充结果数组。以下是完整的实现代码:
#include <stdio.h> int main() { int element[3] = {0, 1, 2}; int quantity[3] = {2, 3, 4}; // 计算结果数组的总长度 int total_length = 0; for (int i = 0; i < 3; i++) { total_length += quantity[i]; } // 初始化结果数组(这里使用变长数组,C99及以上支持) int result[total_length]; int current_pos = 0; // 记录结果数组当前填充的位置 // 外层循环遍历每个待填充的元素 for (int i = 0; i < 3; i++) { // 内层循环按指定次数重复填充当前元素 for (int j = 0; j < quantity[i]; j++) { result[current_pos++] = element[i]; } } // 验证输出结果 printf("结果数组:"); for (int i = 0; i < total_length; i++) { printf("%d ", result[i]); } printf("\n"); return 0; }
关键步骤说明
- 计算总长度:先遍历
quantity数组累加所有元素值,确定结果数组的大小,避免数组越界。 - 双循环填充:外层循环逐个取出
element中的元素,内层循环根据quantity对应的次数,将当前元素重复写入结果数组的对应位置,同时用current_pos变量跟踪填充的位置,确保每个元素都被放到正确的位置。 - 兼容性调整:如果你的编译器不支持变长数组(比如遵循C89标准),可以改用动态内存分配:
// 替换变长数组的定义 int *result = (int *)malloc(total_length * sizeof(int)); // 使用完成后记得释放内存 free(result);
内容的提问来源于stack exchange,提问作者Aaban Saad
相关产品推荐
相关产品推荐

