使用动态内存分配查找更大的数字

时间:2013-10-23 14:44:15

标签: c

使用动态内存分配编写程序以查找最大数字。我有     写下面的代码,在中有一些问题     排序部分我正在通过指针进行selectin排序。但     排序没有做得不好.....我们可以做选择     按指针排序我正确应用     进场?

         #include<stdio.h>
         #include<stdlib.h>  
         main()
         {

            int i,j,n,temp;
            int *data;
            printf("enter total no of elements:");
            scanf("%d",&n);
            data=(int*)calloc(n,sizeof(int));
            printf("\n");
            for(i=0;i<n;i++)
            {
                         printf("enter number %d:",i+1);
                         scanf("%d",data+i);
            }
           for(i=0;i<n;i++)
           {
                   printf("%d\t",*(data+i));
            }
           printf("\n");
           for(i=0;i<n;i++)
           {
                   for(j=i+1;j<n;j++)
               {
                       if(*(data)>*(data+j))
                   {
                        temp=*(data);
                        *(data)=*(data+j);
                        *(data+j)=temp;
                    }
               }


            }
            for(i=0;i<n;i++)
            {
                 printf("%d\t",*(data+i));
            } 
            printf("largest element is %d\t",*(data+n-1));
         } 

输出:

         enter total no of elements:5

         enter number 1:2
         enter number 2:10
         enter number 3:12
         enter number 4:1
         enter number 5:0
         2  10  12  1   0   
         0  10  12  2

6 个答案:

答案 0 :(得分:2)

您的代码几乎不需要修改

   for(i=0;i<n-1;i++) //change here
       {
               for(j=i+1;j<n;j++)
           {
                   if(*(data+i)>*(data+j)) //here
               {
                    temp=*(data+i);      //here
                    *(data+i)=*(data+j); //here
                    *(data+j)=temp;
                }
           }  

您始终将第一个元素(*data)与*(data+j)进行比较。您需要将*(data+i)*(data+j)

进行比较

答案 1 :(得分:1)

本节:

if(*(data)>*(data+j))
{
    temp=*(data);
    *(data)=*(data+j);
    *(data+j)=temp;
}

仅考虑第一个元素(data[0])和元素j(data[j])。

我认为你真的应该考虑data[i]data[j]

<小时/> 问自己的问题

  • 我为什么要写for(i)循环?
  • 实际使用变量i在哪里?

答案 2 :(得分:1)

这是因为您总是将它与第一个元素进行比较。它应该是

for(i=0;i<n;i++)
       {
               for(j=i+1;j<n;j++)
           {
                   if(*(data+i)>*(data+j))
               {
                    temp=*(data+i);
                    *(data+i)=*(data+j);
                    *(data+j)=temp;
                }
           }


        }

答案 3 :(得分:0)

请注意,在C语言中,您可以使用data[i]代替*(data + i)。此算法将找到最大(如果您的问题假定为此)数字。让data成为您的数组,n将是数组的大小,temp将是最大数组。

temp = data[0];
for(i = 1; i < n; ++i)
{
    if (data[i] > temp)
        temp = data[i];
}

或绝对

i = 0;
temp = data[i++];
while(i < n)
{
    if (data[i] > temp)
        temp = data[i];
}

您已实施排序算法。如果您只是想找到最大的数字,那么请使用我的代码段代替两个嵌套的for循环。

答案 4 :(得分:0)

       for(i=0;i<n;i++)
       {
               for(j=i+1;j<n;j++)
           {
                   if(*(data)>*(data+j))
               {
                    temp=*(data);
                    *(data)=*(data+j);
                    *(data+j)=temp;
                }
           }


        }

你通过运行到n-1的外部for循环实现了什么?

答案 5 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i, num;
    float *data;
    printf("Enter total number of elements(1 to 100): ");
    scanf("%d", &num);
    // Allocates the memory for 'num' elements.
    data = (float*) calloc(num, sizeof(float));
    if(data == NULL)
    {
        printf("Error!!! memory not allocated.");
        exit(0);
    }
    printf("\n");
    // Stores the number entered by the user.
    for(i = 0; i < num; ++i)
    {
       printf("Enter Number %d: ", i + 1);
       scanf("%f", data + i);
    }
    // Loop to store largest number at address data
    for(i = 1; i < num; ++i)
    {
       // Change < to > if you want to find the smallest number
       if(*data < *(data + i))
           *data = *(data + i);
    }
    printf("Largest element = %.2f", *data);
    return 0;
}