注册 登录
编程论坛 C++教室

编写一个输入N个数,输出第K大的数的程序时出错,大家帮忙看看,谢谢啦

梦铭 发布于 2016-04-13 20:58, 5188 次点击
错误提示为error: invalid conversion from 'void*' to 'int*' [-fpermissive]
下面为写的程序
//用户输入n个无序数字中找第k大的数
#include <iostream>
#include <algorithm>
using namespace std;
void select(int arry[],int n);
int main()
{
    int n,k,i;//n为数组的长度,k为用户输入的第K大的值
    cout<<"请输入你想输入的数字的总个数"<<endl;
    cin>>n;
    int *a;
    a=malloc(n*sizeof(int));
    cout<<"请输入您输入k的值"<<endl;
    cin>>k;
    cout<<"请开始输入无序数字"<<endl;
    for(i=0;i<n;i++)
        cin>>*(a+i);
    select(a,n);
    cout<<a[k]<<endl;
    free(a);
    return 0;
}
void select(int array[],int num)
{
    int i,j;
    for(i=0;i<num-1;i++)
        {
            for(j=i+1;j<num;j++)
                {if(array[i]<array[j])
            {swap(array[i],array[j]);}}
        }
}
7 回复
#2
yangfrancis2016-04-13 21:25
不知道你打算对一样大的元素怎么排?如果数组是{1,2,3,3,2,5,6,9},第4大的应该是第三个元素还是第四个元素还是第七个元素还是第八个元素?
#3
失散金属2016-04-14 09:12
malloc没有返回值,前面应该加“(int*)”
排列后数组的最大项下标为0,所以输出的应该是a[k-1]
程序代码:
//用户输入n个无序数字中找第k大的数
#include <iostream>
#include <algorithm>
using namespace std;
void select(int arry[],int n);
int main()
{
    int n,k,i;//n为数组的长度,k为用户输入的第K大的值
    cout<<"请输入你想输入的数字的总个数"<<endl;
    cin>>n;
    int *a;
    a=(int*)malloc(n*sizeof(int));
    cout<<"请输入您输入k的值"<<endl;
    cin>>k;
    cout<<"请开始输入无序数字"<<endl;
    for(i=0;i<n;i++)
        cin>>*(a+i);
    select(a,n);
    cout<<a[k-1]<<endl;
    free(a);
    return 0;
}
void select(int array[],int num)
{
    int i,j;
    for(i=0;i<num-1;i++)
        {
            for(j=i+1;j<num;j++)
                {if(array[i]<array[j])
            {swap(array[i],array[j]);}}
        }
}
#4
梦铭2016-04-14 15:34
回复 3楼 失散金属
谢谢了
#5
八半个桑2016-04-15 11:55
回复 3楼 失散金属
a=(int*)malloc(n*sizeof(int));
这句话是什么作用?
#6
c9742884322016-04-15 16:08
回复 5楼 八半个桑
在C中,对内存的管理是相当重要。下面开始介绍这两个函数:

 

  一、malloc()和free()的基本概念以及基本用法:

1、函数原型及说明:

void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

关于分配失败的原因,应该有多种,比如说空间不足就是一种。

void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

 

http://
#7
c9742884322016-04-15 16:32
a  还没有分配到地址  a=(int*)malloc(n*sizeof(int)); 给了地址  前面int aa[10]  ;a=aa;也分配了地址  不过malloc  free 也不太清楚  也是新手C   
#8
rjsp2016-04-18 12:55
挂C++头,卖C肉
std::nth_element
1