对于c/c++中的数组排序及计算平均值和得到最大最小值的思考

2016-02-19 12:21 6 1 收藏

今天图老师小编给大家介绍下对于c/c++中的数组排序及计算平均值和得到最大最小值的思考,平时喜欢对于c/c++中的数组排序及计算平均值和得到最大最小值的思考的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

作者:网易学院程序系教授管宁

最近在帮助其它人的学习中发现了许多问题就数组和局部变量和全居变量的两道例题进行刨析和思考!

排序操作

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

#include

voidsort(array,n)
intarray[];
intn;
{
inti,j,k,t;
for(i=0;i){
k=i;[/LIGHT] /* 把i记录下来,以便进行调换操作 */
for(j=i+1;)j{
if(array[j])/* 利用k对比j循环的元素大小是否比外部i循环当前元素的值 */
{
k=j; /* 将k的值定义为j循环的最小元素的(下标),以便进行调换操作 */
}
t=array[k]; /* 将t的值定义为j循环的最小值元素的值 */
array[k]=array[i]; /* 把j循环内的(也就是array[j])的值,调换为此次外部i循环元素的值 */
array[i]=t; /* 将外部i循环的当前元素的值替换为前面以t为临时存储的(也就是array[j])的值 */
}
}
}
main()
{
inta[10],i; /* 定义a[10]为一个数组,用于输入10个不同的数字;定义用于循环的便量i; */
printf("enter the array");
for(i=0;i10;i++)
{
scanf("%d",&a[i]); /* 利用这10次循环给每个数组元素尽心赋值操作从a[0]到a[9] */
}
sort(a,10);/* 把数组a的各数组元素地址和数组数量传递给自定义排序涵数的形式参数 */
printf("the sorted array:");
for(i=0;i10;i++)
{
printf("%d",a[i]); /*利用10次循环把排序后的数组元素打印在屏幕上*/
}
printf("");

}/* 此篇代码练习序号注意的是用数组名作涵数实际参数的时候,不是把数组的值传递给形式参数,
而是把实际参数数组的起始地址传递给形式参数数组,这样两个数组就共同占用一段内存单元,而
不需要建立两个不同的数组浪费内存空间 */


(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

求平均值和找最大最小值

 

#include

floatmax; /* 定义全局变量max用于存储最大的数 */
floatmin; /* 定义全居变量min用于存储最小的数 */



main()
{
floatcount_avg(); /* 声明自定义涵数的数据类型 */
floatscore[10]; /* 定义一个数组用于存储输入数字 */
floatscore_avg;
inti; /* 定义用于循环的变量i */
for(i=0;i10;i++) /* 利用一个为10次的循环为score[0]-score[9]的数组元素输入值*/
{
scanf("%f",&score); /* 格式化输入 */
}
score_avg =count_avg (score,10); /* 调用count_avg涵数计算平均值,在实际参数中带如数组score的地址和数组元素个数 */
printf("avg=%6.2f max=%6.2f min=%6.2f",score_avg,max,min); /* 将平均值,最大值,最小值打印在屏幕上 */
}

floatcount_avg(array,score_num) /* 定义count_avg这个自定义涵数的数据类型为浮点形 */
floatarray[]; /* 定义形式参数array[]这个数组为浮点形 */
intscore_num; /* 定义形式参数score_num为正形,用于得到实际参数也就是数组的元素个数 */
{
inti; /* 定义用于循环的变量i */
floatsum =array[0]; /* 预先设置总数初始值为array[0]以便于后面对比大小的操作 */
floatavg; /* 定义avg也就是平局值存储变量为浮点形 */

max=array[0]; /* 预先设置最大值初始值为array[0]以便于后面对比大的操作 */
min=array[0]; /* 预先设置最小值初始值为array[0]以便于后面对比小的操作 */

for(i=1;i10 ;i++ ) /* 利用一个为9次的循环逐个和array[0]进行对比找出最大值和最小值 */
{
if(arraymax) /* 利用已经存储的最大值和当前循环下的array进行对比(找大计算) */
{
max=array; /* 符合条件的存储为最大值.注意:(这里利用循环判断反复的对比操作逐步替换最大值最后得到最大的数)*/
}
elseif(arraymin) /* 利用已经存储的最小值和当前循环下的array进行对比(找小计算) */
{
min=array; /* 符合条件的存储为最小值.注意:(这里利用循环判断反复的对比操作逐步替换最小值最后得到最大的数)*/
}
sum += array; /* 计算个数组元素的总和 */
}

avg =sum / score_num; /* 计算出最后的平均值 */
return(avg); /* 返回平均值 */
}


/* 此例需要注意的是利用全局变量可以减少实际参数和形式参数的个数,从而减少内存空间和传递值数据是的时间开销.此外c语言也规定外部
数组可以富裕初值,而局部数组是不能赋予初值的,建议不在必要的时候不要使用全局变量,因为1:全局变量在程序的全部执行过程中都占用存储
单元,而不是仅在需要的时候开辟单元.2:它使涵数的通用性降低了,因为涵数在执行过程中要依赖于其他所在的外部变量.3:全局变量使用过多,
会降低程序的清晰性,难以清楚判断每个瞬时各个外部变量的值.在各个涵数执行的时候都会改变外部变量的值,导致程序出错!4.如果外部变量不
在文件开头定义,那么它只限与定义点到文件终了这段才起作用
*/
在学习中应该多注意细节这些东西在java中也是类似的,希望对大家有所启发!

来源:http://www.tulaoshi.com/n/20160219/1600694.html

延伸阅读
标签: excel
Excel2013怎样设置标出数据的最大最小值   第一步:首先,用Excel2013打开该电子表格,例如,要将表格sheet1中的E列数据进行处理,自动突出显示最大值和最小值,该怎么做呢?选中E2:E6区域,单击菜单栏--开始--条件格式--新建规则。 第二步:弹出新建格式规则对话框,我们将规则选择为:使用公式确定要设置格式的单元格,然后...
标签: SQLServer
做为一名数据库语言和用法教师,我发现一些特别难以解释的主题。其中的一个主题为SQL Server的Having子句。在本文中,我将简单说明这个子句,并提供一些代码实例,我想这是说明Having子句用法的最佳方法。 严格来说,Having并不需要一个子表,但没有子表的Having并没有实际意义。如果你只需要一个表,那么你可以用Where子句达到一切目的。为...
标签: 电脑入门
有时候我们做报表,报表中的数据是随着时间的推移逐渐往下去填写的,这样的动态变化的计算数据能不能自动处理呢?答案是肯定的。比如下表我要进行年度的平均值计算,01-----05年年度平均值是400,再往下填写06,07,07,09,10,11年的平均值是不是要选定区域的单元格是看下边的状态栏或者改公式呢?答案是不需要的,那究竟该怎样做呢?请接着往下看。 ...
标签: 电脑入门
excel怎么求平均值?excel平均值相关的函数有AVERAGEIFS、AVERAGE函数、SUBTOTAL函数。本文以一个综合实例来进一步认识excel怎么求平均值。 如果刚接触excel不久,对公式不熟悉的话,可以使用单个的函数来完成,比如求平均值,在I2输入公式:=AVERAGE(B2:E2),下拉复制就求出甲乙丙丁的平均值了。 如果对函数公式嵌套理解能力很好的话,也...
在本文中,简单说明这个子句,并提供一些代码实例,这是说明HAVING子句用法的最佳方法。 严格来说,HAVING并不需要一个子表,但没有子表的HAVING并没有实际意义。如果你只需要一个表,那么你可以用WHERE子句达到一切目的。为进行实践,HAVING预先假定至少两个表和一个基于第二个表的合计函数。 下面是一个简单的例子:你想要订单...

经验教程

727

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部