使用动态内存分配编写程序以查找最大数字。我有 写下面的代码,在中有一些问题 排序部分我正在通过指针进行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
答案 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;
}