标签:排序算法 inf 还需 deb const 现在 截图 描述 \n
part 1
数组内的元素都是同一类型的数据,在元素前加‘&’即可输出元素像对应的地址,可证元素间的地址是连续的,地址间的差是元素类型的字节长度。
part 2
数组定义时要写类型,且元素个数需是常量。在定义时可以直接将数组初始化,也可以利用循环进行如(如下图,来自),引用时通过数组名和下标进行引用,下标从0开始。定义时对数组全部初始化可以省略数组大小,如果只对部分元素初始化,剩下的元素将自动设为0.
part 3
数组作为形式参数出现在函数声明和定义中时数组名后要加‘[]’,函数调用时作为实际参数可以直接写数组名。而关于函数调用时参数传递过程,我在调试part 5的一个程序时结合PPT里和上课时的说明搞清楚了:
调用函数时把实参的地址复制给了形参,形参和实参共用一个地址,从上图可以看到它们地址时一样的。那么在函数里形参变化的同时,在同一地址的主函数中实参也发生了变化。
part 4
冒泡排序法,算法还是挺好理解的, 但是边界条件从零开始让人感到迷糊,我把边界改为了从零开始,冒泡函数部分的代码如下:
1 // 函数定义 2 // 函数功能描述:对一组整型数据由小到大排序 3 // 形参描述:x是待排序的数组名,n是数组中元素个数 4 // 排序算法:冒泡法 5 void bubbleSort( int x[], int n) { 6 int i,j,t; 7 for (i=1; i<=n-1; i++) { 8 for(j=1; j<=n-i; j++) { 9 if( x[j-1] > x[j] ) { 10 t = x[j-1]; 11 x[j-1] = x[j]; 12 x[j] = t; 13 }
这样和原来运行情况时一样的,而且看起来好懂些。修改这部分代码后的运行截图:
part 5
练习1:
源代码:
1 // 功能描述:输入一组整数,输出最大值 2 #include <stdio.h> 3 int findMax(int a[], int n); // 函数声明 4 const int N = 5; 5 int max, n; 6 int main() { 7 int a[N]; 8 printf("输入%d个整数: \n", N); 9 for (n = 0; n < N; n++) // 利用循环输入N个整数给数组a 10 scanf("%d", &a[n]); 11 12 max = findMax(a, n); // 调用子函数max求数组a的最大元素值,并赋值给max 13 14 printf("数组a中最大元素值为: %d\n\n", max);// 输出最大值 15 getchar(); 16 return 0; 17 } 18 int findMax(int b[], int n) { // 函数定义 19 max = b[0]; 20 for (n = 1; n < N; n++) // 功能描述:找出整型数组a中元素的最大值,并返回次此最大值 21 { if (max<b[n ]) 22 max = b[n]; 23 } 24 return max; 25 }
运行结果:
练习2:
源代码(嗯,这是不对的):
1 #include <stdio.h> 2 const int N = 4; 3 void output(char x[], int n); // 函数声明 4 void reorder(char x[], int n);// 排序函数声明 5 int main() { 6 char string[N] = { ‘2‘,‘0‘,‘1‘,‘9‘ }; 7 int i; 8 printf("排序前: \n"); 9 10 output(string, N); 11 reorder(string, N);// 调用排序函数对字符数组中的字符由大到小排序 12 13 printf("\n排序后: \n"); 14 output(string, N); 15 printf("\n"); 16 return 0; 17 } 18 // 函数定义 19 // 函数功能描述:输出包含有n个元素的字符数组元素 20 // 形参:字符数组,以及字符数组元素个数 21 void output(char x[], int n) { 22 int i; 23 for (i = 0; i < N; i++) 24 printf("%c", x[i]); 25 } 26 // 函数定义 27 // 函数功能描述:对一组字符由大到小排序 28 // 形参:字符数组,以及字符数组元素个数 29 int t, j; 30 void reorder(char x[], int n) { 31 for (j = 1; j <= N - 1; j++) { 32 for (n = 1; n < (N - j); n++) 33 { 34 if (x[n - 1] < x[n]) 35 t = x[n]; x[n] = x[n - 1]; x[n - 1] = t; 36 } 37 } 38 39 }
在vs里的debug结果:
在Dev-c里的运行结果:
这次重新下载了vs来写程序(找不到Dev-c里的调试功能啊\拍桌,网上的设置方法也不太行啊\拍桌,而且想试试用vs),然后不知道为什么运行窗口老是闪退,对各种功能也在慢慢熟悉,再加上时间比较仓促,练习二就出现了很迷的状况···
在写这两个程序的过程中用调试功能,能检查到边界条件和各个变量的值。练习2我感觉我的边界没有设错···可是x和t的值让我十分迷惑···我还需要时间再想想,现在只能先把作业交了···
——未完待续
part 6
标签:排序算法 inf 还需 deb const 现在 截图 描述 \n
原文地址:https://www.cnblogs.com/ningchenyang/p/10771699.html