实验4(2019.4.23)

【实验结论】

一、对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中的大于号改成小于号,因为这里要求从大到小排序而不是从小到大排序。

 【实验总结与体会】

通过这次实验,加深了我对数组的基本知识和冒泡法的理解,但对含数组的函数定义与调用理解还不透彻,今后得反复练习实验掌握。

猜你喜欢

转载自www.cnblogs.com/zys-0119/p/10769529.html