标题:编写一个输入N个数,输出第K大的数的程序时出错,大家帮忙看看,谢谢啦
只看楼主
梦铭
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-4-10
结帖率:0
已结贴  问题点数:5 回复次数:7 
编写一个输入N个数,输出第K大的数的程序时出错,大家帮忙看看,谢谢啦
错误提示为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]);}}
        }
}
搜索更多相关主题的帖子: conversion include invalid 
2016-04-13 20:58
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:1 
不知道你打算对一样大的元素怎么排?如果数组是{1,2,3,3,2,5,6,9},第4大的应该是第三个元素还是第四个元素还是第七个元素还是第八个元素?
2016-04-13 21:25
失散金属
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2016-4-14
得分:1 
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]);}}
        }
}
2016-04-14 09:12
梦铭
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-4-10
得分:0 
回复 3楼 失散金属
谢谢了
2016-04-14 15:34
八半个桑
Rank: 1
等 级:新手上路
帖 子:11
专家分:1
注 册:2016-4-15
得分:1 
回复 3楼 失散金属
a=(int*)malloc(n*sizeof(int));
这句话是什么作用?
2016-04-15 11:55
c974288432
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:44
专家分:104
注 册:2015-7-18
得分:1 
回复 5楼 八半个桑
在C中,对内存的管理是相当重要。下面开始介绍这两个函数:

 

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

1、函数原型及说明:

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

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

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

 

http://
2016-04-15 16:08
c974288432
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:44
专家分:104
注 册:2015-7-18
得分:0 
a  还没有分配到地址  a=(int*)malloc(n*sizeof(int)); 给了地址  前面int aa[10]  ;a=aa;也分配了地址  不过malloc  free 也不太清楚  也是新手C   
2016-04-15 16:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:1 
挂C++头,卖C肉
std::nth_element
2016-04-18 12:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-463613-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.216332 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved