c语言sort函数c语言 ,编写一个函数input(),sort(),实现数组的输入,排序。

c语言sort函数  时间:2021-06-06  阅读:()

这个c语言程序中的sort函数为什么没有或者不需要返回值

因为这里,数组的传递本身就是地址,所以,在sort里面,对数组的操作影响到调用地方的数组的值,而这正是需要的,所以sort不需要返回值,如果你还需要其他信息需要sort返回,可以使用返回值。



C语言 排序 函数

一群菜鸟不懂的乱说。

我把楼主的代码改了一些,如下

#include<stdio.h>

int input(int data[], int argc, int *n) { int i; printf("请输入要输入数的个数"); scanf("%d", n); if(*n > argc) { printf("segment fault!"); return -1; } for(i = 0; i < *n; i++) { printf("输入的第%d个数.", i+1); scanf("%d", data+i); //canf("%d", &data[i]); } printf("输入的数是: "); for(i = 0; i < *n; i++) { printf("%5d ", data[i]); } return 0; }

void sort(int n, int data[]) { int i, j, temp; for(i = 0; i < n-1; i++) { for(j = i+1; j < n; j++) if(data[i] < data[j]) { temp = data[i]; data[i] = data[j]; data[j] = temp; } } printf("排序后的结果如下: "); for(i = 0; i < n; i++) printf("%5d ", data[i]); }

int main() { int data[100]; int n; if(input(data, 100, &n) == -1) return -1; sort(n, data); return 0; }

对于以上代码,做出如下解释:

(1)C语言的参数有形参和实参的说法,形参在传递到函数内的时候,复制一个副本给函数,在函数内部和外部是两个完全不同的变量,函数结束,空间也被释放,所以不能在函数内部来改变外部的值。

所以要像楼主这样用一个函数给一个变量赋值,要用实参int input(int data[], int argc, int *n)中的int *n就是实现形式,这种办法把n的地址传递给函数。

当然,在调用函数的时候也同样要传递地址指针类型(&n)。

(2)

if(*n > argc) { printf("segment fault!"); return -1; }

这一段是我加进去的,因为按照楼主的意思,data数组的长度也要传递进去,但是意思何在?所以只好加了这一段,并把函数改为有类型的,以检验是否有数据溢出。

(3)scanf("%d", data+i); //scanf("%d", &data[i]);

这里我改动的主要原因是为了提升程序速度,scanf("%d", &data[i]);同样可以运行,但是寻址一次,又回头要地址,这样绕了一圈,没有必要。

对于楼主提几点建议:

(1)C语言的精髓在于指针,刚才说到的实参,就是用指针的概念实现的。

scanf("%d", data+i); 一行,同样也是把数组头指针加上偏移地址,得到所要的地址。

(2)C语言编程的时候特别要注意数据的溢出,这是所有初学者头疼的问题之一。

建议在一开始就养成习惯,经常检验数组的边界。

(3)void main一看就知道是看潭浩强的书长大的程序员。

建议我们都用int main(){ return 0; }的形式,可以看看C语言之父K&R的书。

主函数的返回值是告诉操作系统,这个函数是正常退出(返回0),还是异常退出(非0,经常是-1)。

(4)在做实际项目的时候,程序经常是要回头看的,也经常是要给别人看以达到维护的目的的。

除了要养成良好的文档书写习惯以外(学习软件工程以后你就会掌握),还要养成良好的编程风格,这里我建议看《thinking in C++》,并按照里面例题的风格,养成自己的习惯。

c语言 ,编写一个函数input(),sort(),实现数组的输入,排序。

input()里面的输入的数据存放在数组中,只要在调用sort()的时候使用数组作为参数就可以!例如下题: //从键盘输入n(1<n<=10)个数据,并对这n个数据从小到大排序 #include<stdio.h> void main() { int i,n,a[10]; void input(int a[],int n); void sort(int a[],int n); printf("请输入数据的个数n:"); scanf("%d",&n); input(a,n); sort(a,n); printf("排序结果:"); for(i=0;i<n;i++) printf("%6d",a[i]); printf(" "); } void input(int a[],int n) { int i; printf("请输入n个数据:",n); for(i=0;i<n;i++) scanf("%d",&a[i]); } void sort(int a[],int n)//选择法排序 {int t,index,k,i; for(k=0;k<n-1;k++) {index=k; for(i=k+1;i<n;i++) if(a[index]>a[i])index=i; t=a[index];a[index]=a[k];a[k]=t; }}

JustHost,最新高性价比超便宜俄罗斯CN2 VPS云服务器终身8折优惠,最低仅8元/月起,200Mbps带宽不限流量,五大机房自助自由切换,免费更换IP,俄罗斯cn2vps怎么样,justhost云服务器速度及综合性能详细测评报告

主机参考最新消息:JustHost怎么样?JustHost服务器好不好?JustHost好不好?JustHost是一家成立于2006年的俄罗斯服务器提供商,支持支付宝付款,服务器价格便宜,200Mbps大带宽不限流量,支持免费更换5次IP,支持控制面板自由切换机房,目前JustHost有俄罗斯5个机房可以自由切换选择,最重要的还是价格真的特别便宜,最低只需要87卢布/月,约8.5元/月起!just...

HostKvm - 夏季云服务器七折优惠 香港和韩国机房月付5.95美元起

HostKvm,我们很多人都算是比较熟悉的国人服务商,旗下也有多个品牌,差异化多占位策略营销的,商家是一个创建于2013年的品牌,有提供中国香港、美国、日本、新加坡区域虚拟化服务器业务,所有业务均对中国大陆地区线路优化,已经如果做海外线路的话,竞争力不够。今天有看到HostKvm夏季优惠发布,主要针对香港国际和韩国VPS提供7折优惠,折后最低月付5.95美元,其他机房VPS依然是全场8折。第一、夏...

90IDC-香港云主机,美国服务器,日本KVM高性能云主机,创建高性能CLOUD只需60秒即可开通使用!

官方网站:点击访问90IDC官方网站优惠码:云八五折优惠劵:90IDCHK85,仅适用于香港CLOUD主机含特惠型。活动方案:年付特惠服务器:CPU均为Intel Xeon两颗,纯CN2永不混线,让您的网站更快一步。香港大浦CN2測速網址: http://194.105.63.191美国三网CN2測速網址: http://154.7.13.95香港购买地址:https://www.90idc.ne...

c语言sort函数为你推荐
csonline2反恐精英online2什么时候出oa办公系统下载免费oa办公软件哪里可以下载到?拜托各位大神seo优化技术SEO技术是什么?12种颜色十二种颜色的英文怎么读?js后退在全局js中屏蔽了后退功能,但是想让自己定义的后退有用模式识别算法机器学习和模式识别有什么区别?看教材,发现它们的算法都差不多一样啊。。。部署工具win10 评估和部署工具包有什么用云盘网谁知道免费的网盘?微软操作系统下载微软的系统到哪下载审计平台审计软件的产品介绍
万网域名注册 美国域名注册 enzu 国内加速器 免费网络电视 免费个人空间申请 电子邮件服务器 日本bb瘦 国外免费asp空间 hktv Updog 最漂亮的qq空间 免费mysql数据库 美国独立日 web服务器搭建 新加坡空间 512内存 sonya 建站技术 删除域名 更多