最近在帮助其它人的学习中发现了许多问题就数组和局部变量和全居变量的两道例题进行刨析和思考!
排序操作
#include voidsort(array,n) intarray[]; intn; { inti,j,k,t; for(i=0;i)/* 循环9次,这里循环9次因为排列到第9次的时候最大的已经自动被排列到最后了 */ { k=i;[/LIGHT] /* 把i记录下来,以便进行调换操作 */ for(j=i+1;)j/* 在外部i循环内进行第二次循环,检查所有的剩余元素 */ { 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;i<10;i++) { scanf("%d",&a[i]); /* 利用这10次循环给每个数组元素尽心赋值操作从a[0]到a[9] */ } sort(a,10);/* 把数组a的各数组元素地址和数组数量传递给自定义排序涵数的形式参数 */ printf("the sorted array: "); for(i=0;i<10;i++) { printf("%d",a[i]); /*利用10次循环把排序后的数组元素打印在屏幕上*/ } printf(" "); } |
此篇代码练习序号注意的是用数组名作涵数实际参数的时候,不是把数组的值传递给形式参数,
而是把实际参数数组的起始地址传递给形式参数数组,这样两个数组就共同占用一段内存单元,而
不需要建立两个不同的数组浪费内存空间。
求平均值和找最大最小值
#include floatmax; /* 定义全局变量max用于存储最大的数 */ floatmin; /* 定义全居变量min用于存储最小的数 */ main() { floatcount_avg(); /* 声明自定义涵数的数据类型 */ floatscore[10]; /* 定义一个数组用于存储输入数字 */ floatscore_avg; inti; /* 定义用于循环的变量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); /* 将平均值,最大值, 最小值打印在屏幕上 */ } 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;i<10 ;i++ ) /* 利用一个为9次的循环逐个和array[0]进行对比找出最大值和最小值 */ { if(array>max) /* 利用已经存储的最大值和当前循环下的array进行对比(找大计算) */ { max=array; /* 符合条件的存储为最大值.注意:(这里利用循环判断反复的对比操作 逐步替换最大值最后得到最大的数)*/ } elseif(array<min) /* 利用已经存储的最小值和当前循环下的array进行对比(找小计算) */ { min=array; /* 符合条件的存储为最小值.注意:(这里利用循环判断反复的对比操作逐步 替换最小值最后得到最大的数)*/ } sum += array; /* 计算个数组元素的总和 */ } avg =sum / score_num; /* 计算出最后的平均值 */ return(avg); /* 返回平均值 */ } |