实验4 数组

Posted anna0708

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验4 数组相关的知识,希望对你有一定的参考价值。

实验结论

Θ PART 1~PART 4

¹』数组名作为函数参数时,形参、实参的语法形式书写注意事项,函数调用和参数传递过程。

(1)在变量作函数参数时,所进行的值传送是单向的。即只能从实参传向形参,不能从形参传回实参。形参的初值和实参相同,而形参的值发生改变后,实参并不变化,

  两者的终值是不同的。而当用数组名作函数参数时,情况则不同。由于,实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。

  当然这种情况不能理解为发生了“双向”的值传递。但从实际情况来看,调用函数之后实参数组的值将由于形参数组值的变化而变化。

(2)用数组名作函数参数时,应该在主调函数和被调函数中分别定义数组,并且要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明,

  当形参和实参二者不一致时,即会发生错误。

(3)在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。

(4)数据的传送的实现:由于数组名就是数组的首地址,在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。

  形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。

(5)形参数组也可以不指定大小,定义数组时在数组名后跟一个空的中括号,为了在被调函数中处理数组元素的需要,可以另设一个参数,传递数组元素的个数。

  这些其实是我在网上看的一些资料进行的一个整合? •?•?推荐一个新发现的网站 https://www.csdn.net CSDN专业IT技术社区 可以查到很多资料。

²』对冒泡法排序算法的理解,尤其是边界条件的理解和归纳总结

冒泡法就是对一组数据,相邻两项进行大小比较并按一定条件进行换序再进行不断比较换序,从而将数据按一定的次序排列。

每次最大元素(或最小元素)就像气泡一样“浮”到数组最后,

我在看这段程序的时候觉得每次循环的部分和之前章节中的倒叙输出和三个数中最大值有些相似。

在网上查到有说最后的条件改成 a[ i ] >= a[ i+1 ] 会变得不稳定,写实验仓促,这一点还不是很理解,需要再编程体会一下(●°u°●)? 

Θ PART 5

 Ü 练习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<5;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,t;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    return a[i];
}

运行结果↓

技术图片

 

Ü 练习2:补全程序,使用冒泡法对字符数组由大到小排序,程序源码如下↓

#include<stdio.h>
const int N=4;
void output(char x[],int n);
void f(char x[],int n);
int main()
{
    char string[N]={2,0,1,9};
    int i;
    printf("排序前: \\n");
    output(string,N);
    f(string,N);
    printf("\\n排序后: \\n");   
    output(string, N);
    printf("\\n");
    return 0;
}
void output(char x[],int n)
{
    int i;
    for(i=0;i<N;i++)
    printf("%c",x[i]);
}
void f(char x[],int n)
{
    int i,j,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;
        }
    }

}

运行结果↓

技术图片

 

实验总结与体会

首先这次的实验最大的变化在篇幅上,与之前的三篇实验相比,这一篇是十分的简短了,我仅写出了实验结论里所要求的内容,对验证性的实验没有罗列出来。

这个改变一是我在上次实验的互评中看到大家的实验报告精简清晰,觉得自己的每篇报告都含水量太大,内容过于繁重,就进行了简化;

二是由于高数考试和提前的deadline让本篇报告十分仓促,没有合理安排时间真的很不好_(:_」∠)_

互评链接还是会以评论的方式附在本篇实验之后☆?

 

以上是关于实验4 数组的主要内容,如果未能解决你的问题,请参考以下文章

在一个无序整数数组中,找出连续增长片段最长的一段, 增长步长是1。Example: [3,2,4,5,6,1,9], 最长的是[4,5,6]

实验4 数组

实验4 函数和数组

以下代码片段的时间复杂度是多少?

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段10—— 数组的响应式方法