气泡排序与阵列和终止

时间:2014-03-02 18:44:46

标签: c arrays sorting

我想编写代码,用户输入5个输入并按升序排序,如果用户输入-1则终止。

我已经完成了冒泡排序,但我无法实现if结构。

  1. 我的语法有问题吗?

  2. 如果不是,那么我可以使用哪种结构使其有效?

  3. 当我运行它时,它会在“else”错误之前给出预期的主要表达。

  4. #include <stdio.h>
    
    #include <conio.h>
    
     main()
      {
         int n[10];
         int i,j,temp;
    
         for(i=0;i<5;i++)/*Wating to user */
             {
               printf("%d. Sayi giriniz(Enter NUmber)",i+1);
               scanf("%d",&n[i]);
                                 }
                 if(n[i] != -1) 
                   for(i=0;i<4;i++)   
                        for(j=i+1;j<5;j++)
                           if(n[i]>n[j])
                            {
                            temp=n[i];
                            n[i]=n[j];
                            n[j]=temp;
                            }                                                    
    
                         printf("\n");  
                         for(i=0;i<5;i++)
                          printf("%d. sayı(number):%d\n",i+1,n[i]);
    
                else
                   {
                      break; 
                  }                     
               getch();
               return 0;
    
         } 
    

    #include <stdio.h> #include <conio.h> main() { int n[10]; int i,j,temp; for(i=0;i<5;i++)/*Wating to user */ { printf("%d. Sayi giriniz(Enter NUmber)",i+1); scanf("%d",&n[i]); } if(n[i] != -1) for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(n[i]>n[j]) { temp=n[i]; n[i]=n[j]; n[j]=temp; } printf("\n"); for(i=0;i<5;i++) printf("%d. sayı(number):%d\n",i+1,n[i]); else { break; } getch(); return 0; }

3 个答案:

答案 0 :(得分:1)

我已经在编译器看到它时缩进了你的程序,并带有注释:

int main()
{
    int n[10];
    int i,j,temp;

    for(i=0;i<5;i++)/*Wating to user */
    {
        printf("%d. Sayi giriniz(Enter NUmber)",i+1);
        scanf("%d",&n[i]);
    }
    if(n[i] != -1) 
        for(i=0;i<4;i++)   
            for(j=i+1;j<5;j++)
                if(n[i]>n[j])
                {
                    temp=n[i];
                    n[i]=n[j];
                    n[j]=temp;
                }
            /* Loop ends */
        /* Loop ends */
    /* If ends */

    printf("\n");  
    for(i=0;i<5;i++)
        printf("%d. sayı(number):%d\n",i+1,n[i]);

    else  /* Else for what if? */
    {
        break; 
    }                     
    getch();
    return 0;
}

应该很容易看出这里的错误。

答案 1 :(得分:0)

你的初始for循环以i = 5结束。之后你测试n [i],所以n [5]没有初始化。你应该在循环中测试n [i]并在它是-1时断开。

在循环中定义变量可以避免这些错误:

for(int i = 0; i < 5; ++i) { 
  ...
}

额外提示:尝试正确缩进代码:

#include<stdio.h>
#include<conio.h>
main()
{
  int n[10];
  int i,j,temp;

  for(i=0;i<5;i++)/*Wating to user */
  {
    printf("%d. Sayi giriniz(Enter NUmber)",i+1);
    scanf("%d",&n[i]);
  }
  if(n[i] != -1) 
    for(i=0;i<4;i++)   
      for(j=i+1;j<5;j++)
        if(n[i]>n[j])
        {
          temp=n[i];
          n[i]=n[j];
          n[j]=temp;
        }                                                    

  printf("\n");  
  for(i=0;i<5;i++)
    printf("%d. say?(number):%d\n",i+1,n[i]);

  // I don't understand how this compiles, this else is not attached
  // to any if.
  else  
  {
    break; 
  }                     
  getch();
  return 0;
}

您可以这样修理:

#include<stdio.h>
#include<conio.h>
#define NUMBER_OF_NUMBERS 5
int main()
{
  int n[NUMBER_OF_NUMBERS];

  for(int i=0;i<NUMBER_OF_NUMBERS;i++)  // User enters 5 digits.
  {
    printf("%d. Sayi giriniz(Enter NUmber)",i+1);
    scanf("%d",&n[i]);
    if(n[i] == -1)
      return 1;
  }

  // Sort
  for(int i=0;i<NUMBER_OF_NUMBERS - 1;i++)   
    for(int j=i+1;j<NUMBER_OF_NUMBERS;j++)
      if(n[i]>n[j])
      {
        int temp=n[i];
        n[i]=n[j];
        n[j]=temp;
      }                                                    

  printf("\n");  
  for(int i=0;i<NUMBER_OF_NUMBERS;i++)
    printf("%d. say?(number):%d\n",i+1,n[i]);

  return 0;
}

答案 2 :(得分:0)

正确的代码如下。如果用户在五个输入之前输入-1,请参阅我已采用大小变量。

#include<conio.h>
#include<stdio.h>
main()
{
    int n[10];
    int i,j,temp;

    for(i=0; i<5; i++) /*Wating to user */
    {
        printf("%d. Sayi giriniz(Enter NUmber)",i+1);
        scanf("%d",&n[i]);
        if(n[i]==-1)
            break;
    }
    int size = i;
    for(i=0; i<size-1; i++)
        for(j=i+1; j<size; j++)
            if(n[i]>n[j])
            {
                temp=n[i];
                n[i]=n[j];
                n[j]=temp;
            }

    printf("\n");
    for(i=0; i<size; i++)
        printf("%d. sayı(number):%d\n",i+1,n[i]);

    return 0;
}

如果你想要5个输入,那么你不需要打破,因为循环会在五个输入后自行终止。