C语言一维数组按规则修改及文件读写功能实现求助
C语言数组处理任务实现
原代码错误点
- 未按需求读取
input.txt文件数据,错误使用随机数生成数组元素 - 文件操作逻辑混乱:未打开输入文件,写入
output.txt后指针未复位直接读取,导致读取失败 - 仅完成了前后元素最后一位乘积的计算,未实现数组元素修改、修改后结果输出的核心逻辑
- 未处理边界场景:首尾元素无前置/后置元素、乘积为0导致除0错误的问题
前置约定
针对需求未明确的边界场景做如下统一处理:
- 数组第一个元素没有前置元素、最后一个元素没有后置元素,保持原值不变
- 若前后元素最后一位的乘积为0,为避免除0异常,对应元素保持原值不变
- 元素最后一位取绝对值计算,避免负数取模得到负数值的问题
完整实现代码
#include <stdio.h> #include <stdlib.h> #define N 20 int main(void) { FILE *in_fp, *out_fp; int array[N]; int i; // 打开输入文件读取原始数组 in_fp = fopen("input.txt", "r"); if (in_fp == NULL) { printf("无法打开input.txt文件,请检查文件是否存在\n"); return 1; } for (i = 0; i < N; i++) { if (fscanf(in_fp, "%d", &array[i]) != 1) { printf("input.txt中元素不足20个,请检查文件内容\n"); fclose(in_fp); return 1; } } fclose(in_fp); // 打印原始数组到屏幕 printf("原始数组:\n"); for (i = 0; i < N; i++) { printf("%d ", array[i]); } printf("\n\n"); // 修改数组元素 for (i = 1; i < N - 1; i++) { // 取前后元素最后一位的绝对值,避免负数问题 int prev_last = abs(array[i-1] % 10); int next_last = abs(array[i+1] % 10); int product = prev_last * next_last; // 乘积不为0才做除法,需要浮点数结果可把array定义为double类型 if (product != 0) { array[i] = array[i] / product; } } // 输出修改后的数组到屏幕和文件 out_fp = fopen("output.txt", "w"); if (out_fp == NULL) { printf("无法打开output.txt文件\n"); return 1; } printf("修改后的数组:\n"); for (i = 0; i < N; i++) { printf("%d\n", array[i]); fprintf(out_fp, "%d\n", array[i]); } fclose(out_fp); return 0; }
使用说明
- 提前在程序同目录下创建
input.txt文件,写入20个整数,用空格/换行分隔即可 - 程序运行后会先在控制台打印原始数组,再逐行打印修改后的数组
- 修改后的数组会同步写入同目录下的
output.txt文件 - 如果需要除法结果保留小数,可将
array数组的类型从int改为double,对应修改输出格式符为%lf即可
内容的提问来源于stack exchange,提问作者Дмитрий Благодер
相关产品推荐
相关产品推荐

