作业 ——实验四

Part1: 数组数据结构

数组是一种构造类型。 "构造"体现在,它是在基本数据类型int, float, double, char的基础上,把类型相同
的数据组织在一起。但是,又不是随意组织在一起的。而是存储在一组连续的内存空间中。
因此,归纳起来,数组这种数据结构的特点就在于:
1. 类型相同的一组数据构成的集合
2. 这一组数据在内存中连续存放
连续存放这个特性,使得一些问题求解变得易于处理。因为一旦确定了第一个数据的位置,就可以
顺序找到第二个数据,第三个数据,...有利于顺序对一组数据做处理

1.通过实验观察验证数据中数据是否是连续存放的?

再进行程序后,分别修改了line5和line9,其运行结果如下

Part2: 一维数组的定义、初始化以及数组元素的引用方法

运行结果如下:

Part3: 数组作为函数参数

         1.数组元素作为函数参数

       

         2.数组名作为函数实参数

Part4: 用冒泡法对一组数据由小到大排序

对一组数据进行排序(由小到大,或者,有大到小)有很多经典的排序算法。冒泡法是其中的一种。

冒泡法的算法思想:
把一组数据中相邻的两个数进行比较,较大的数放到后面。
这样,经过一轮以后,最大的数就放到了最后。
把剩余的数,再进行两两比较,经过第2轮后,第2大的数就放到了倒数第二的位置。
接下来,做类似操作

在这一实验过程中,可发现:

1.数组作为形参书写形式为:[const]  元素类型    数组名[ ]     或者     [const]    元素类型       * 变量名

2.数组名后的[  ]不能省略。

3.数组作为参数时,实参中只需写是参数组名,不能去其他地址。

4.数组名作为函数调用时的实参,实际上传递给形参的是数组的首地址。

5.在参数传递过程中:

(1)用数组名作函数参数时,要求形参和相对应的实参是类型相同的数组,否则会出错。

(2)在函数形参中,允许不给出形参数组的长度,或用一个变量来表示数组元素的个数。

6.冒泡排序就是从左到右,相邻元素之间的比较,每比较一轮就会有一个最值,这个最值就会从序列的最右边冒出。

 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 b[],int m)
{
    int max=b[0],j;
    for(j=1;j<m;j++)    
    {
    if(b[j]>max)
    max=b[j];
    }
    return max;
}

运行结果如下:

 在此过程中,我因为在for语句后面误打了一个";",所以造成了下面的错误:

练习2:补全程序,使用冒泡法对字符数组由大到小排序。

代码如下:

#include <stdio.h>
const int N=4;
void output(char x[], int n);  // 函数声明 
void rank(char x[],int n);

int main() {
    char string[N] = {'2','0','1','9'};
    int i;
    
    printf("排序前: \n");
    output(string, N);
    
    rank(string,N ); 
    
    printf("\n排序后: \n"); 
    output(string, N);
    
    printf("\n");
    
    return 0;    
} 

// 函数定义
// 函数功能描述:输出包含有n个元素的字符数组元素
// 形参:字符数组,以及字符数组元素个数
void output(char x[], int n) {
    int i;
    
    for(i=0; i<N; i++)
        printf("%c", x[i]);
} 

// 函数定义
// 函数功能描述:对一组字符由大到小排序
// 形参:字符数组,以及字符数组元素个数
// 补足代码3 
void rank(char x[],int n)
{
    int i,j;
    char t;
    for(i=0;i<n-1;i++)
    {
    for(j=0;j<n-1-i;j++)
    {
    if(x[j]<x[j+1])
    {
    t=x[j];
    x[j]=x[j+1];
    x[j+1]=t;
    }
     }
      }
 }

运行结果如下:

 此过程在做时,出现很多困难,借助了很多东西。

评论以下三位同学:

https://www.cnblogs.com/jiyuan201088/p/10770693.html

https://www.cnblogs.com/wyx-wyx/p/10771761.html

https://www.cnblogs.com/fujinzu/p/10771776.html

猜你喜欢

转载自www.cnblogs.com/ls4computer/p/10771888.html