You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

修复说明

  1. 解决数组越界:将循环条件改为i < 999,确保array[i+1]最大访问到array[999],完全在数组内存范围内。
  2. 修正递推公式:替换为题目要求的2 * array[i] + 2,保证序列生成逻辑正确。
  3. 修复输出逻辑:打印时指定具体数组元素array[i],而非数组首地址,确保输出的是序列数值。
  4. 简化变量逻辑:直接通过数组元素递推,去掉冗余的a变量,避免同步错误。
  5. 序号对应准确:打印序号从1开始到1000,完全匹配题目中A₁到A₁₀₀₀的序列要求。

内容的提问来源于stack exchange,提问作者JoseMarchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:24:31