AMiniHoH 2024-12-08 14:44 采纳率: 25%
浏览 5

数组使用随机数逆序输出

随机生成N个数然后逆序输出这些数演示随机数生成方法数组用法。我只能输出printf("%d-" ,temp)的值,却不能输出printf("%d",list[i])的值,如果把temp改成手写输入之后,会输出十个1.这是为什么?


 int main(int argc, char** argv) {
    int list[10];
    int temp;
    srand(time(0));//时间作为种子。
    int i;{
    for (i=0;i<10;i++){
        temp=rand() ;
        printf("%d-",temp);
        list[i]=temp;
            }
    }
      for (i=0;i<5;i++){
          temp=list[i];
       list[i]=list[9-i];
       list[9-i]=list[i];
       
       
      }
      for(i=9;i>=0;i--)
      printf("%d",list[i]);

    return 0;
}
  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码中存在一些问题,我会为你解释为什么你无法输出数组的每个元素值,并给出修正后的代码。

    首先,你的代码逻辑有些混乱。在第二个循环中,你试图交换数组元素的顺序,但这种交换方式是错误的。你需要使用一个临时变量来进行元素交换。而且,交换的范围不应该从数组的开始到中间,而应该从数组的中间到末尾或从末尾到开始,这样才能实现逆序输出。以下是修正后的代码:

    #include <iostream> // 包含输入输出流的头文件
    #include <cstdlib> // 包含rand和srand函数的头文件
    #include <ctime> // 包含time函数的头文件
    
    int main() {
        const int N = 10; // 定义数组的大小为10
        int list[N]; // 定义数组
        int temp; // 定义临时变量用于交换元素
        std::srand(std::time(nullptr)); // 使用当前时间作为随机数种子
    
        // 生成随机数并存储在数组中
        for (int i = 0; i < N; ++i) {
            list[i] = std::rand(); // 生成随机数并存储在数组中
            std::printf("%d-", list[i]); // 输出随机数(注意这里使用std::printf而不是printf)
        }
        std::cout << std::endl; // 输出换行符以分隔随机数输出和逆序输出
    
        // 将数组逆序输出
        for (int i = N - 1; i >= 0; --i) { // 从数组最后一个元素开始输出,一直到第一个元素
            std::printf("%d ", list[i]); // 输出数组中的每个元素(注意这里使用std::printf而不是printf)
        }
        std::cout << std::endl; // 输出换行符以结束输出
    
        return 0;
    }
    

    在这个修正后的代码中,我使用了std::printf而不是printf来确保在编译时不会遇到关于printf函数的警告或错误。此外,我使用了常量N来定义数组的大小,这样可以使代码更加清晰和可维护。最后,我使用了正确的循环和临时变量来将数组逆序输出。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月8日