当前位置:   article > 正文

5/11后面部分:+顺序排序+元素交换+计算每门课程的各种成绩+存放规律的数据 注意:一味的复制肯定要出问题,第2个的最后一部分有修改,注意观察

5/11后面部分:+顺序排序+元素交换+计算每门课程的各种成绩+存放规律的数据 注意:一味的复制肯定要出问题,第2个的最后一部分有修改,注意观察

目录

第一个已经输出过一次:

第二个:

编程实现:程序功能是用起泡法对数组中n个元素按从大到小的顺序进行排序。

​编辑的确出现了一些问题哦:

 ​编辑目前是可以运行,但AI不给我们通过:

 最后还是我的代码获胜:

进行一些注释: 

第三个:

编程实现:将a所指4×3矩阵中第k(k=2)行的元素与第0行元素交换。

第四个:

编程实现,输入5位学生的三门课程的考试成绩,将成绩存放在5行三列的二维数组中,计算每门课程的平均成绩、最高分与最低分。

排了最大值:

排了最小值:

好吧,报错才是常态 ;

第5个:

两个循环模块中间只是操作不同。弄得看了一大会。​编辑

给一下解释:

 最后得到这样的结果:代码

 运行结果:

进行一波解释吧,AI写的有点复杂

变量声明:

用户输入:

输入验证:

填充二维数组:


第一个已经输出过一次:

插入排序,搞起来,一路狂奔,数组插入-CSDN博客

第二个:

编程实现:程序功能是用起泡法对数组中n个元素按从大到小的顺序进行排序。

程序运行结果:排序前的数据:   12 34 4 7 9 6 8 3 53 -1

排序后的数据:   53 34 12 9 8 7 6 4 3 -1

 使用起泡排序算法对数组中的元素进行从大到小的排序,可以遵循以下步骤:

  1. 遍历数组,比较相邻的两个元素。
  2. 如果前一个元素小于后一个元素,则交换它们的位置。
  3. 重复上述步骤,直到没有更多的元素需要交换为止。

 void bubbleSort(int arr[], int n) {  
    int i, j, temp;  
    for (i = 0; i < n - 1; i++) {  
        for (j = 0; j < n - i - 1; j++) {  
            if (arr[j] < arr[j + 1]) {  
                // 交换 arr[j] 和 arr[j + 1]  
                temp = arr[j];  
                arr[j] = arr[j + 1];  
                arr[j + 1] = temp;  
            }  
        }  
    }  
}  

 有些复杂,还是慢慢来:

的确出现了一些问题哦:

在内层循环的条件中,j < i - 1 应该是 j < 9(或j < i) 因为想在每次外层循环迭代时,都检查当前元素arr1[i]与它前面的所有元素。使用j < i - 1实际上会导致最后一次外层循环时内层循环不执行,虽然在这个特定情况下不影响最终结果,但这是一个逻辑上的不一致。

 目前是可以运行,但AI不给我们通过:

 内层循环应该是 j < i - 1 而不是 j < i。当进行起泡排序时,我们需要将当前元素 arr1[i] 与它前面的所有元素 arr1[j](其中 j 从 0 到 i - 1)进行比较。如果 arr1[i] 比 arr1[j] 小,则交换它们的位置。使用 j < i 会导致不必要的比较,并且当 i 是最后一个元素时,会产生数组越界的错误。

   for (int i = 1; i < 10; i++) { // 外层循环从第二个元素开始  
        for (int j = 0; j < i; j++) { // 内层循环比较当前元素与它前面包括它自己的所有元素

 最后还是我的代码获胜:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int arr1[10] = { 12,34,4,7,9,6,8,3,53,-1 };
  5. for (int i = 1; i <10; i++)
  6. for (int j = 0; j < i ; j++)
  7. {
  8. if (arr1[i]<arr1[j])
  9. {
  10. int t = arr1[i]; arr1[i] = arr1[j]; arr1[j] = t;
  11. }
  12. }
  13. printf("排序完成的数组为:");
  14. for (int i = 0; i < 10; i++)
  15. {
  16. printf("%d ", arr1[i]);
  17. }
  18. return 0;
  19. }

进行一些注释: 

  1. 提供的代码的中文注释:
  2. c
  3. #include<stdio.h> // 引入标准输入输出库,用于printf等函数
  4. int main() // 主函数入口
  5. {
  6. int arr1[10] = { 12,34,4,7,9,6,8,3,53,-1 }; // 定义一个包含10个整数的数组arr1,并初始化
  7. // 外层循环,从数组的第二个元素开始(i=1),到最后一个元素的前一个位置(i<10)
  8. for (int i = 1; i < 10; i++)
  9. {
  10. // 内层循环,从数组的第一个元素开始(j=0),到当前外层循环元素的前一个位置(j<i)
  11. for (int j = 0; j < i; j++)
  12. {
  13. // 如果当前外层循环的元素arr1[i]小于内层循环的元素arr1[j]
  14. if (arr1[i] < arr1[j])
  15. {
  16. // 交换arr1[i]和arr1[j]的值,确保大的数在前面,小的数在后面
  17. int t = arr1[i]; // 使用临时变量t保存arr1[i]的值
  18. arr1[i] = arr1[j]; // 将arr1[j]的值赋给arr1[i]
  19. arr1[j] = t; // 将保存在t中的arr1[i]的原值赋给arr1[j]
  20. }
  21. }
  22. }
  23. // 打印排序完成的数组
  24. printf("排序完成的数组为:");
  25. // 遍历数组并打印每个元素
  26. for (int i = 0; i < 10; i++)
  27. {
  28. printf("%d ", arr1[i]); // 打印数组元素,并在每个元素后添加一个空格
  29. }
  30. return 0; // 主函数返回0,表示程序正常结束
  31. }
  32. 这段代码实现了起泡排序算法,用于对数组arr1进行从大到小的排序。外层循环遍历数组的每个元素,内层循环则用于比较当前元素与其前面的所有元素,并根据比较结果交换位置。最终,数组将以从大到小的顺序排列,并通过循环打印出排序后的结果。

注意⚠️注意⚠️注意⚠️注意⚠️

今天早上打开来才发现有问题, 真实情况,还好,当时没有发进去,排序的顺序排反了:】

以下是修正过的:

 改了一下符号,换了一下赋值顺序;⬆️

第三个:

编程实现:将a所指4×3矩阵中第k(k=2)行的元素与第0行元素交换。

测试数据: 1   2   3

           4   5   6

           7   8   9

          10  11  12

程序运行结果:

The array before moving:

    1   2   3

    4   5   6

    7   8   9

    10  11  12

The array after moving:

    7   8   9

    4   5   6

    1   2   3

    10  11  12

第3个的一部分

第1阶段的输出:

用一个简单的交换:

  1. for ( j = 0; j < 3; j++)
  2. {
  3. int t= arr1[0][j];
  4. arr1[0][j] = arr1[2][j];
  5. arr1[2][j] = t;
  6. }

for (int j = 0; j < 3; j++) { int t = arr1[0][j]; // 保存第0行的元素 arr1[0][j] = arr1[2][j]; // 第0行元素替换为第k行(第3行)对应元素 arr1[2][j] = t; // 第k行(第3行)元素替换为之前第0行的元素 }

 代码如下

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int arr1[4][3] = { {1,2,3},{4,5,6},{7,8,9},{10,11,12} };
  5. printf("The array before moving:\n");
  6. int i=0, j=0;
  7. for (int i = 0; i <4; i++)
  8. {
  9. for (int j = 0; j <3; j++)
  10. printf("%5d", arr1[i][j]);
  11. printf("\n");
  12. }
  13. for ( j = 0; j < 3; j++)
  14. {
  15. int t= arr1[0][j];
  16. arr1[0][j] = arr1[2][j];
  17. arr1[2][j] = t;
  18. }
  19. printf("The array after moving:\n");
  20. for (int i = 0; i < 4; i++)
  21. {
  22. for (int j = 0; j < 3; j++)
  23. printf("%5d", arr1[i][j]);
  24. printf("\n");
  25. }
  26. return 0;
  27. }

第四个:

编程实现,输入5位学生的三门课程的考试成绩,将成绩存放在5行三列的二维数组中,计算每门课程的平均成绩、最高分与最低分。

输入测试数据: 45  87  90

76  84  84

71  85  97

56  67  89

82  65  56

程序运行结果:每门课程的最高分

   82.00   87.00   97.00

每门课程的最低分

   45.00   65.00   56.00

每门课程的平均成绩

   66.00   77.60   83.20

进行一个数组排序,先来一个列排序:

排了最大值

  1. for (int j = 0; j < 3; j++)
  2. {
  3. max[j] = arr1[0][j];
  4. }
  5. for (int i = 1; i < 5; i++)
  6. {
  7. for (int j = 0; j < 3; j++)
  8. {
  9. if (max[j] < arr1[i][j])
  10. {
  11. max[j] = arr1[i][j];
  12. }
  13. }
  14. }

排了最小值

  1. for (int j = 0; j < 3; j++)
  2. {
  3. min[j] = arr1[0][j];
  4. }
  5. for (int i = 1; i < 5; i++)
  6. {
  7. for (int j = 0; j < 3; j++)
  8. {
  9. if (min[j] > arr1[i][j])
  10. {
  11. min[j] = arr1[i][j];
  12. }
  13. }
  14. }

 OK,干了半个小时,也没搞出多少东西来;

后面再加一个平均。

然后这里现先一个补充,求数组列的平均值⬇️

   for (int col = 0; col < COLS; col++) {  
        double sum = 0.0;  
        for (int row = 0; row < ROWS; row++) {  
            sum += matrix[row][col]; // 累加当前列的所有元素  
        }  
        averages[col] = sum / ROWS; // 计算当前列的平均值并存储  
    }  

 为啥子都能报错?我那个乖乖。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/558373
推荐阅读
相关标签