码迷,mamicode.com
首页 > 其他好文 > 详细

实验四

时间:2019-04-26 00:15:59      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:排序算法   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!