宏宇邓 2021-10-21 00:21 采纳率: 100%
浏览 29
已结题

对一个与结果无关的变量进行运算后打印的结果不一致是什么原因,QAQ

在输出前进行了一个循环并且赋值,这个值与输出结果无关但是却导致了输出结果不一致

img

img

#include<stdio.h>

int main()

{

    int n,a[30],b[30],c[30],d=0,ans;
    a[1]=0;
    b[1]=1;
    c[1]=1;
    for(int i=2;i<=30;i++)
    {
        a[i]=0;
        b[i]=0;
        c[i]=0;
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {

        for(int j=1;j<=30;j++)
        {
            c[j]=a[j]+b[j];
            c[j]=c[j]+d;
            if(c[j]>9)
            {
                d=c[j]/10;
                c[j]=c[j]%10;
            }
            else d=0;
        }
        for(int j=1;j<=30;j++)
        {
            a[j]=b[j];
        }
        for(int j=1;j<=30;j++)
            {b[j]=c[j];
            }
        }
    for(int p=20;p>0;p--)
    {
        ans++;
    }
    for(int i=30;i>0;i--)
    {
        printf("%d",c[i]);
    }
            return 0;

}


#include<stdio.h>

int main()

{

    int n,a[30],b[30],c[30],d=0,ans;
    a[1]=0;
    b[1]=1;
    c[1]=1;
    for(int i=2;i<=30;i++)
    {
        a[i]=0;
        b[i]=0;
        c[i]=0;
    }
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {

        for(int j=1;j<=30;j++)
        {
            c[j]=a[j]+b[j];
            c[j]=c[j]+d;
            if(c[j]>9)
            {
                d=c[j]/10;
                c[j]=c[j]%10;
            }
            else d=0;
        }
        for(int j=1;j<=30;j++)
        {
            a[j]=b[j];
        }
        for(int j=1;j<=30;j++)
            {b[j]=c[j];
            }
        }
    for(int p=20;p>0;p--)
    {
     //   ans++;
    }
    for(int i=30;i>0;i--)
    {
        printf("%d",c[i]);
    }
            return 0;

}

两段代码仅有42行的ans++是否被注释不一致
所用软件为最新官网下载的code blocks
编译器位GNU GCC

  • 写回答

1条回答 默认 最新

  • 关注

    数组下标是从0开始的,
    你int a[30]设置数组长度30,这样数组分配空间是30个,数组下标是a[0]到a[29],没有a[30]。
    你 for(int i=2;i<=30;i++) 这样 i 循环到30会造成数组下标越界。
    数组下标越界会把数据写入到数组分配空间之后的未知空间中,
    可能其他变量的空间地址就处于这块未知空间中,这样其他变量的值就被意外的改变了。

    你可以设置a,b,c数组长度为31
    int n,a[31],b[31],c[31],d=0,ans;
    或者让数组下标 从 0循环到29.不要访问数组的30下标

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月29日
  • 已采纳回答 10月21日
  • 修改了问题 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了