实验结论
Part 1
数组将类型相同的一组数据在内存中连续存放,由实验可看出数组中元素的内存地址是连续的,不同类型数据计算机为其分配的内存空间是不同的。
Part 2
定义一维数组a,须指明它包含的元素个数和元素类型,通过数组名和下标的形式引入数组元素,数组下标从0开始,当对所有元素进行初始化时可以省略数组大小,当只初始化一部分元素时剩余没有被初始化的元素值,系统自动设为0。
Part 3
函数名作为参数时,实参和形参的书写形式
函数声明和函数定义中,函数名init后面括号里出现的是形式参数,数组名后面要加[ ]。即:void init(int a[], int n, int value);
函数调用中,函数名init后面括号里出现的是实际参数,直接写数组名。即:init(b, N, -1);
Part 4
冒泡法对一组数据由小到大排序:把一组数据中相邻的两个数进行比较,较大的数放到后面。这样,经过一轮以后,最大的数就放到了最后。把剩余的数,再进行两两比较,经过第2轮后,第2大的数就放到了倒数第二的位置。接下来,做类似操作。若是由大到小排序类似,反过来就可以了。
用冒泡法对n个数小→大排序,
共需扫描(n-1)遍,第i遍扫描时需要比较(n-i)次
但在程序中略有不同:for(j=0; j<n-1-i; j++) 这是由于数组下标从0开始造成的
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<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,t,max; for(i=0;i<n-1;i++){ if(a[i]>a[i+1]){ t=a[i+1]; a[i+1]=a[i]; max=a[i+1]; } } return max; }
第一次写的时候子函数没有写返回,输出是0,后来对比发现错误
练习2:补全程序,使用冒泡法对字符数组由大到小排序。
#include <stdio.h> const int N=4; void output(char x[], int n); void sort(char x[], int n); int main() { char string[N] = {‘2‘,‘0‘,‘1‘,‘9‘}; int i; printf("排序前: \n"); output(string, N); sort(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 sort(char x[],int n){ char 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; } } } }
由大到小排序只需将Part4的程序稍作改进即可,没有遇到什么问题
实验总结与体会
对函数定义调用有了一定的理解,稍有掌握,但综合应用欠缺,具体编程问题很多,要勤加联系一一克服。
原文:https://www.cnblogs.com/angel-x/p/10770343.html