鱼C论坛

 找回密码
 立即注册
查看: 945|回复: 2

求助

[复制链接]
发表于 2023-4-21 15:17:34 | 显示全部楼层 |阅读模式
3鱼币
C语言初学小白,问题如图,数组环节为什么结果出来是这个呢,很疑惑,而且正确的代码怎么改
#include<stdio.h>
  void main()
{
  int i,j,min,s;
  int a[10];
  for(i=0;i<9;i++)
    scanf("%d",&a[i]);
for (i=0;i<9;i++)
{ for (min=i,j=i+1;j<10;j++)
   if(a[j]<a[min])
    min=j;
   s=a[min];
   a[min]=a[i];
   a[i]=s;
}
  for(i=0;i<9;i++)
    printf("%d",a[i]);
    printf("\n");
  }
   
   
   
  
   

QQ图片20230421151641.png
QQ图片20230421151647.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-21 15:23:14 | 显示全部楼层
首先,我看到你的代码中有一些小问题。根据题目描述,你需要对10个整数进行排序,但是你的for循环只遍历到9,因此数组的最后一个整数没有被包括在内。接下来,我会为你修改代码并解释我的修改。

修改后的代码如下:

  1. #include<stdio.h>
  2. void main()
  3. {
  4.     int i, j, min, s;
  5.     int a[10];
  6.     for (i = 0; i < 10; i++) // 修改此处,将9改为10
  7.         scanf("%d", &a[i]);
  8.     for (i = 0; i < 9; i++)
  9.     {
  10.         for (min = i, j = i + 1; j < 10; j++)
  11.             if (a[j] < a[min])
  12.                 min = j;
  13.         s = a[min];
  14.         a[min] = a[i];
  15.         a[i] = s;
  16.     }
  17.     for (i = 0; i < 10; i++) // 修改此处,将9改为10
  18.     {
  19.         printf("%d", a[i]);
  20.         if (i < 9) // 添加此处,用于在数字之间添加空格
  21.             printf(" ");
  22.     }
  23.     printf("\n");
  24. }
复制代码


这里的修改有:

1. 在输入和输出的循环中,将9改为10,以包括数组的最后一个元素。
2. 在输出循环中,添加了一个判断语句,用于在数字之间添加空格,使输出更加清晰。

现在,当你运行这个修改后的程序并输入题目给定的测试数据时,你应该能得到正确的结果:

  1. 程序输入参数如下
  2. 1 16 5 98 23 119 18 75 65 81
  3. 程序运行结果如下
  4. 1 5 16 18 23 65 75 81 98 119
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-22 10:00:38 | 显示全部楼层
根据你提供的代码,数组的元素数量应该是10而不是9,因为你在第一个 for 循环中只输入了9个元素,如果想要输入10个元素,可以将循环条件改为 i < 10。

另外,你在输出数组元素时,缺少了最后一个元素。应该将第一个 for 循环中的循环条件改为 i < 10,将第二个 for 循环中的循环条件改为 i < 9,这样就可以输出数组的所有元素了。

修改后的代码如下:
  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int i, j, min, s;
  5.     int a[10];

  6.     for (i = 0; i < 10; i++) {
  7.         scanf("%d", &a[i]);
  8.     }

  9.     for (i = 0; i < 9; i++) {
  10.         min = i;
  11.         for (j = i + 1; j < 10; j++) {
  12.             if (a[j] < a[min]) {
  13.                 min = j;
  14.             }
  15.         }
  16.         s = a[min];
  17.         a[min] = a[i];
  18.         a[i] = s;
  19.     }

  20.     for (i = 0; i < 10; i++) {
  21.         printf("%d ", a[i]);
  22.     }
  23.     printf("\n");

  24.     return 0;
  25. }
复制代码

修改后的代码可以正确地输出数组的所有元素,并按从小到大的顺序进行排序。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 19:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表