|
最近在帮助其它人的学习中发现了许多问题就数组和局部变量和全居变量的两道例题进行刨析和思考! 排序操作 | | |
求平均值和找最大最小值
C 代码 #include <stdio.h>
float max; /* 定义全局变量max用于存储最大的数 */
float min; /* 定义全居变量min用于存储最小的数 */
main()
{
float count_avg(); /* 声明自定义涵数的数据类型 */
float score[10]; /* 定义一个数组用于存储输入数字 */
float score_avg;
int i; /* 定义用于循环的变量i */
for (i=0;i<10;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); /* 将平均值,最大值,最小值打印在屏幕上 */
}
float count_avg(array,score_num) /* 定义count_avg这个自定义涵数的数据类型为浮点形 */
float array[]; /* 定义形式参数array[]这个数组为浮点形 */
int score_num; /* 定义形式参数score_num为正形,用于得到实际参数也就是数组的元素个数 */
{
int i; /* 定义用于循环的变量i */
float sum = array[0]; /* 预先设置总数初始值为array[0]以便于后面对比大小的操作 */
float avg; /* 定义avg也就是平局值存储变量为浮点形 */
max=array[0]; /* 预先设置最大值初始值为array[0]以便于后面对比大的操作 */
min=array[0]; /* 预先设置最小值初始值为array[0]以便于后面对比小的操作 */
for (i=1;i<10 ;i++ ) /* 利用一个为9次的循环逐个和array[0]进行对比找出最大值和最小值 */
{
if (array>max) /* 利用已经存储的最大值和当前循环下的array进行对比(找大计算) */
{
max = array; /* 符合条件的存储为最大值.注意:(这里利用循环判断反复的对比操作逐步替换最大值最后得到最大的数)*/
}
else if(array<min) /* 利用已经存储的最小值和当前循环下的array进行对比(找小计算) */
{
min = array; /* 符合条件的存储为最小值.注意:(这里利用循环判断反复的对比操作逐步替换最小值最后得到最大的数)*/
}
sum += array; /* 计算个数组元素的总和 */
}
avg = sum / score_num; /* 计算出最后的平均值 */
return (avg); /* 返回平均值 */
}
/* 此例需要注意的是利用全局变量可以减少实际参数和形式参数的个数,从而减少内存空间和传递值数据是的时间开销.此外c语言也规定外部
数组可以富裕初值,而局部数组是不能赋予初值的,建议不在必要的时候不要使用全局变量,因为1:全局变量在程序的全部执行过程中都占用存储
单元,而不是仅在需要的时候开辟单元.2:它使涵数的通用性降低了,因为涵数在执行过程中要依赖于其他所在的外部变量.3:全局变量使用过多,
会降低程序的清晰性,难以清楚判断每个瞬时各个外部变量的值.在各个涵数执行的时候都会改变外部变量的值,导致程序出错!4.如果外部变量不
在文件开头定义,那么它只限与定义点到文件终了这段才起作用
*/
在学习中应该多注意细节这些东西在java中也是类似的,希望对大家有所启发!
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~