【实验结论】
一、对Part1-Part4的总结。
1、数组名作为函数参数时,形参、实参的语法形式书写注意事项。
这一点在书本上P154—P158有详细说明,但是叙述过于冗杂,所以借用“实验4.pdf”中的内容总结:
(1)函数声明和函数定义中,函数名init后面括号里出现的是形式参数,数组名后面要加[ ]。即:
void init(int a[], int n, int value);
(2)函数调用中,函数名init后面括号里出现的是实际参数,直接写数组名。即:
init(b, N, -1);(此时定义的数组为b[n])
2、对冒泡法的归纳总结。
冒泡法,用于排序,其基本算法就是把一组数据中的相邻两数进行比较,将大数放后,小数放前,(当然也可以反过来),至于其原理,我就把demo4.cpp中函数调用的部分拿出来分析一下。
限于代码框的大小,直接放图。
对每条语句逐一注释了一下,理解得清楚点。(如果注错了希望大家批评指正)
注意边界条件(两个for循环语句的条件),因为数组中第一个元素为a[0]而非a[1]。
把老师在"实验4.pdf"中的注拿出来提醒一下:
建议在纸上按照冒泡排序思路,对一组数据写下排序中间过程,这样对冒泡排序的理解会更容易些。
二、Part5:编程练习。
1、补全程序,查找一组整型程序的最大值。
补全后的代码如下:
#include <stdio.h> int findMax(int a[], int n); const int N=5; int main() { int a[N]; int max, i; printf("输入%d个整数: \n", N); for(i=0;i<N;i++) scanf("%d",&a[i]); max=findMax(a,N); printf("数组a中最大元素值为: %d\n\n", max); return 0; } int findMax(int a[],int n){ int i,j,max; max=a[0]; for(i=0;i<N;i++){ if(a[i]>max){ max=a[i]; } } return max; }
运行结果:
思路:此题不需要使用冒泡法,因为不需要排序,只需要通过循环语句找出这堆数的最大值就ok了。
所以,寻找最大数的核心代码,即findMax函数的主代码就很容易写出来了:
for(i=0;i<N;i++){ if(a[i]>max){ max=a[i]; } }
然后,事情就变得简单了起来。
2、补全程序,使用冒泡法对字符数组由大到小排序。
补全后的代码如下:
1 #include <stdio.h> 2 const int N=4; 3 void output(char x[], int n); 4 void sort(char x[],int n); 5 int main() { 6 char string[N] = {'2','0','1','9'}; 7 int i; 8 9 printf("排序前: \n"); 10 output(string, N); 11 12 printf("\n"); 13 sort(string,N); 14 15 printf("\n排序后: \n"); 16 output(string, N); 17 18 printf("\n"); 19 20 return 0; 21 } 22 23 void output(char x[], int n) { 24 int i; 25 26 for(i=0; i<N; i++) 27 printf("%c", x[i]); 28 } 29 30 void sort(char x[], int n){ 31 int i,j,t; 32 for (i=0; i<n-1; i++) { 33 for(j=0; j<n-1-i; j++) { 34 if( x[j] < x[j+1] ) { 35 t = x[j]; 36 x[j] = x[j+1]; 37 x[j+1] = t; 38 } 39 } 40 } 41 }
运行结果如下:
思路:用冒泡法。无非就是把demo4.cpp中的大于号改成小于号,因为这里要求从大到小排序而不是从小到大排序。
【实验总结与体会】
通过这次实验,加深了我对数组的基本知识和冒泡法的理解,但对含数组的函数定义与调用理解还不透彻,今后得反复练习实验掌握。