C语言中序列存入数组仅显示0的问题排查求助
问题分析与修复方案
代码中的核心错误
- 数组越界:定义的
array[1000]下标范围是0到999,但循环条件i <=1000会导致i=1000时访问array[1001],超出数组内存范围,引发非法访问。 - 序列公式错误:题目规定序列规则为
Aₙ₊₁=2*Aₙ+2,但代码中写的是2*a + (a+1)(等价于3a+1),完全不符合要求。 - 输出目标错误:
printf中传入array(数组首地址)而非具体元素,导致打印的是地址转换后的异常数值,不是数组存储的序列值。 - 变量同步缺失:循环中未更新变量
a的值,始终用初始值1计算,无法生成递增序列;同时数组初始化仅设置了array[0],后续元素未正确赋值。
修复后的代码
#include <stdio.h> #include <stdlib.h> int main() { int i; float array[1000]; // 初始化第一个元素,对应题目中的A₁=1 array[0] = 1.0; // 生成A₂到A₉₉₉的序列,避免数组越界 for (i = 0; i < 999; i++) { // 严格遵循题目给出的递推公式 array[i+1] = 2 * array[i] + 2; // 打印序号(对应Aₙ的n)和当前元素值 printf("Sequencia:%d - %.2f\n", i+1, array[i]); } // 单独打印最后一个元素A₁₀₀₀ printf("Sequencia:%d - %.2f\n", 1000, array[999]); system("pause"); return 0; }
修复说明
- 解决数组越界:将循环条件改为
i < 999,确保array[i+1]最大访问到array[999],完全在数组内存范围内。 - 修正递推公式:替换为题目要求的
2 * array[i] + 2,保证序列生成逻辑正确。 - 修复输出逻辑:打印时指定具体数组元素
array[i],而非数组首地址,确保输出的是序列数值。 - 简化变量逻辑:直接通过数组元素递推,去掉冗余的
a变量,避免同步错误。 - 序号对应准确:打印序号从1开始到1000,完全匹配题目中A₁到A₁₀₀₀的序列要求。
内容的提问来源于stack exchange,提问作者JoseMarchi
相关产品推荐
相关产品推荐

