实验结论:
part 1-4:当数组名作为形式参数时,数组名后面要加[ ];当数组名作为实际参数时,直接写数组名,后面不要加[ ];
关于函数的调用及参数传递过程:在程序运行到函数调用这一步骤时,实参会将值赋值给调用函数中的形参,形参进行运算,不影响函数实参的值;但当实参为数组时,若调用函数中的形参也是数组时,调用函数中对于形参的改变会影响实参,即实参参与了运算,因为实参数组的地址被复制给了形参数组,形参数组实际上代表的是一个地址变量,用来存放地址,通过形参的地址去对数组元素进行赋值操作时,实际上就是对实参数组赋值操作。
关于冒泡法的理解:外层循环运行一次在n-i(i=0;i<n-1;i++)个数中最大(最小)的值,即总共要进行n-1次找出n-1个在n-i中的极大(极小)值,n-1个数大小排好后,最后一个剩下的不需要比较,也没法比较,位置固定了。如果没有外层循环那就直接是进行一次找出最大(最小)值。由于数组的起始地址编号从0到n-1,所以外层循环共要进行n-1次;每次外层循环中,内层循环的次数从n-1次到1次逐次递减。从零开始便于考虑。
关于函数调用,形参、实参一一对应;在调用函数中可重新定义一些变量,如i之类的,与主函数不冲突。
part 5第一条,附上代码:
// 功能描述:输入一组整数,输出最大值 #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); // 利用循环输入N个整数给数组a // 补足程序1 // 。。。 for(i=0;i<N;i++) scanf("%d",&a[i]); // 调用子函数max求数组a的最大元素值,并赋值给max // 补足程序2 // 。。。 findMax(a,N); max=a[4]; // 输出最大值 printf("数组a中最大元素值为: %d\n\n", max); return 0; } // 函数定义 // 功能描述:找出整型数组a中元素的最大值,并返回次此最大值 // 补足函数findMax()的实现部分3 // 。。。 。 int findMax(int x[], int n){ int i,t; for(i=0;i<n-1;i++){ if(x[i]>x[i+1]){ t=x[i]; x[i]=x[i+1]; x[i+1]=t; } } }
运行截图如下:
。
part 5第二条,附上程序代码:
#include <stdio.h> const int N=4; void output(char x[], int n); // 函数声明 // 排序函数声明 // 补足代码1 // 。。。 。 void bubbleSort(char string[], int n); int main() { char string[N] = {'2','0','1','9'}; int i; printf("排序前: \n"); output(string, N); // 调用排序函数对字符数组中的字符由大到小排序 // 补足代码2 // 。。。 bubbleSort(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 bubbleSort(char x[], int n){ int i,j; char t; for(i=0;i<n;i++){ for(j=3;j>i;j--){ if(x[j]>x[j-1]){ t = x[j]; x[j]=x[j-1]; x[j-1]=t; } } } }
运行截图如下:
。
实验总结与体会:编写程序还是要先考虑过程,有了清晰的逻辑后,再翻译成计算机语言(不过这一次次循环条件之类的不够熟练就真的很耗时间)。
附上互评地址:
https://www.cnblogs.com/zys-0119/p/10769529.html;
https://www.cnblogs.com/MR-XN/p/10770271.html;
https://www.cnblogs.com/mjc217/p/10771742.html。