C语言新手求助:使用decimate_by3函数处理数组元素提取与打印
C语言数组处理:打印每第三个元素 + 用指定函数提取元素
嘿,作为C语言新手,这两个数组任务正好用来练手熟悉数组和函数调用的基础!我会帮你写出完整的代码,严格按照你的要求来,包括那个不能修改的decimate_by3函数~
任务1:打印数组的每第三个元素
首先咱们先搞定第一个任务:写个函数接收用户输入的数组,然后打印每第三个元素。这里要先明确一下“每第三个元素”的定义——我默认是从第一个元素开始数,第1、4、7...个元素(对应数组的索引0、3、6...),如果你需要的是第3、6、9...个元素(索引2、5、8...),后面我会告诉你怎么调整。
直接上代码:
#include <stdio.h> // 负责打印每第三个元素的函数 void print_every_third(int a[], int n) { printf("数组的每第三个元素:"); // 从索引0开始,每次跳3个位置 for (int i = 0; i < n; i += 3) { printf("%d ", a[i]); } printf("\n"); } int main() { int n; printf("请输入数组长度n:"); scanf("%d", &n); // 用变长数组存储输入(C99及以上支持,不支持的话可以用malloc动态分配) int a1[n]; printf("请输入数组的%d个元素:", n); for (int i = 0; i < n; i++) { scanf("%d", &a1[i]); } // 调用打印函数 print_every_third(a1, n); return 0; }
如果要改成从第3个元素开始打印,只需要把循环里的i = 0改成i = 2就行啦!
任务2:用指定函数提取每第三个元素到新数组
接下来是第二个任务,必须严格使用给定的void decimate_by3(int a1[], int n, int a2[])函数,不能改它的定义。咱们一步步来:
- 主函数要先让用户输入数组长度和元素;
- 计算输出数组a2的长度——因为每3个元素取1个,所以长度是
(n + 2) / 3(整数除法自动帮我们向上取整,比如n=7时,(7+2)/3=3,正好对应3个元素); - 声明a2数组,然后调用指定函数;
- 最后打印a2数组。
完整代码如下:
#include <stdio.h> // 严格按照要求的函数定义,完全不能修改哦 void decimate_by3(int a1[], int n, int a2[]) { int a2_index = 0; // 把a1中每第三个元素(索引0、3、6...)复制到a2 for (int i = 0; i < n; i += 3) { a2[a2_index++] = a1[i]; } // 如果需要提取第3、6、9...个元素,把i的初始值改成2就行 // for (int i = 2; i < n; i += 3) { ... } } int main() { int n; printf("请输入数组长度n:"); scanf("%d", &n); int a1[n]; printf("请输入数组的%d个元素:", n); for (int i = 0; i < n; i++) { scanf("%d", &a1[i]); } // 计算输出数组的长度,向上取整n/3 int len_a2 = (n + 2) / 3; int a2[len_a2]; // 调用指定的decimate_by3函数 decimate_by3(a1, n, a2); // 展示提取后的数组 printf("提取后的数组a2:"); for (int i = 0; i < len_a2; i++) { printf("%d ", a2[i]); } printf("\n"); return 0; }
小提醒
- 如果你的编译器不支持变长数组(比如老版本的VC),可以换成动态内存分配的方式,用
malloc和free:
// 替换数组声明部分 int *a1 = (int*)malloc(n * sizeof(int)); int *a2 = (int*)malloc(len_a2 * sizeof(int)); // 使用完数组后记得释放内存 free(a1); free(a2);
- 关于“每第三个元素”的定义,如果你的需求是提取第3、6、9...个元素,除了修改
decimate_by3里的循环起始索引为2,还要调整a2的长度计算:int len_a2 = n >= 3 ? n / 3 : 0;(比如n=6时,6/3=2,正好提取索引2和5的两个元素)。
内容的提问来源于stack exchange,提问作者user18
相关产品推荐
相关产品推荐

