这个预想结果跟我不太一样,是哪里出问题了吗

img


我预想的是,从一个数组12471就是每个数字之间的差距逐渐加一,然后再从中挑选出能够除三余一的数

题目是求什么? 初步来看,有两处地方需要修改:

第一是,for循环的结束条件需要改为i<50,因为此处数组下标最大为49,下标超过49就会数组越界;

第二个就是,for循环内的return 0 ;应该也是要去除的,否则判断第一个数后,就会退出程序。

修改如下:


#include <stdio.h>
#include <math.h>

int main(void){
    
    int n=0;
    int arr[50]={};
    
    // 这里数组下标最多到49,否则会数组越界 
    for(int i=1;i<50;i++){
        arr[0]=1;
        arr[i]=arr[i-1]+n;
        ++n;
        if(arr[i]%3==1){
            printf("%d",arr[i]);
        }else if(arr[i]%3!=1){
            printf(" ");
        }
        // 这个return 0; 应该也是需要去除的 
    //    return 0;
    }
    
}
 

【以下回答由 GPT 生成】

问题出现在for循环的条件中。数组arr有50个元素,下标范围是从0到49,然而循环条件写成了i <= 50,导致其中一个元素越界访问。这可能会导致程序崩溃或产生未定义的行为。

为了修复这个问题,你可以将for循环条件修改为i < 50。下面是修复后的代码:

#include<stdio.h>
#include<math.h>

int main() {
    int n = 0;
    int arr[50] = {0};

    for (int i = 1; i < 50; i++) {  // 修改循环条件
        arr[0] = 1;
        arr[i] = arr[i-1] + n;
        ++n;

        if (arr[i] % 3 == 1) {
            printf("%d, ", arr[i]);
        }
        else if (arr[i] % 3 != 1) {
            printf(" ");
        }
    }

    return 0;
}

这样修改后,代码应该按预期输出满足除以3余1的数。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

n初始值应该是1,然后for里面不该有return 0;
arr[0]=1; 可以放循环上面;

#include <stdio.h>
#include <math.h>
 
int main(void)
{
    
    int n=1;
    int arr[50]={};
    arr[0]=1;

    for(int i=1;i<50;i++){
       
        arr[i]=arr[i-1]+n;
        ++n;
        if(arr[i]%3==1){
            printf("%d",arr[i]);
        }else if(arr[i]%3!=1){
            printf(" ");
        }
        //return 0;
    }
    return 0;
}