白小彦 发表于 2023-4-21 15:17:34

求助

C语言初学小白,问题如图,数组环节为什么结果出来是这个呢,很疑惑,而且正确的代码怎么改
#include<stdio.h>
void main()
{
int i,j,min,s;
int a;
for(i=0;i<9;i++)
    scanf("%d",&a);
for (i=0;i<9;i++)
{ for (min=i,j=i+1;j<10;j++)
   if(a<a)
    min=j;
   s=a;
   a=a;
   a=s;
}
for(i=0;i<9;i++)
    printf("%d",a);
    printf("\n");
}
   
   
   

   

isdkz 发表于 2023-4-21 15:23:14

首先,我看到你的代码中有一些小问题。根据题目描述,你需要对10个整数进行排序,但是你的for循环只遍历到9,因此数组的最后一个整数没有被包括在内。接下来,我会为你修改代码并解释我的修改。

修改后的代码如下:

#include<stdio.h>
void main()
{
    int i, j, min, s;
    int a;
    for (i = 0; i < 10; i++) // 修改此处,将9改为10
      scanf("%d", &a);
    for (i = 0; i < 9; i++)
    {
      for (min = i, j = i + 1; j < 10; j++)
            if (a < a)
                min = j;
      s = a;
      a = a;
      a = s;
    }
    for (i = 0; i < 10; i++) // 修改此处,将9改为10
    {
      printf("%d", a);
      if (i < 9) // 添加此处,用于在数字之间添加空格
            printf(" ");
    }
    printf("\n");
}


这里的修改有:

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

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

程序输入参数如下
1 16 5 98 23 119 18 75 65 81
程序运行结果如下
1 5 16 18 23 65 75 81 98 119

陶远航 发表于 2023-4-22 10:00:38

根据你提供的代码,数组的元素数量应该是10而不是9,因为你在第一个 for 循环中只输入了9个元素,如果想要输入10个元素,可以将循环条件改为 i < 10。

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

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

int main()
{
    int i, j, min, s;
    int a;

    for (i = 0; i < 10; i++) {
      scanf("%d", &a);
    }

    for (i = 0; i < 9; i++) {
      min = i;
      for (j = i + 1; j < 10; j++) {
            if (a < a) {
                min = j;
            }
      }
      s = a;
      a = a;
      a = s;
    }

    for (i = 0; i < 10; i++) {
      printf("%d ", a);
    }
    printf("\n");

    return 0;
}
修改后的代码可以正确地输出数组的所有元素,并按从小到大的顺序进行排序。
页: [1]
查看完整版本: 求助