实验四
Part1~~~4实验总结
数组是存放两个或两个以上相邻存储单元的集合,每个存储单元中存储相同数据类型的数据。使用数组时要事先说明,在定义申明中指明数组类型,
数组神明时必须制定每个元素的类型和元素的个数。
inrt类型占4个字节,double类型占8个字节,char类型占1个字节。
数组中方括号是数组的下标(索引)。表示数组元素的位置,下标必须为整型值。
函数名作为参数时,形参,实参的书写格式
函数申明和函数定义中,函数名int后面括号里出现的是形式参数,要加【】,
函数调用中,函数名int后面括号里出现的是实际参数,直接写数组名,即int(b,n,-1)
函数调用时,参数的传递过程分析:
在程序当中到发生函数调用时,转入子程序中去执行
Part4
冒泡法的具体排序过程描述
假设要对n个数由小到大排序,使用冒泡法具体排序过程如下:
第1遍: 对n个数进行第1遍扫描
比较第1个数与第2个数,若a1>a2,则交换;此时,a2中存放a1和a2两个数当中的最大值。
比较第2个数与第3个数,若a2>a3,则交换;此时,a3中存放a2和a3两个数当中的最大值
依次类推…
比较第n-1个数和第n个数,若a n-1 >a n ,则交换;此时,a n 中存放a n-1 和a n 当中的最大值。
经过(n-1)次比较后,最大的数被放在a n
第2遍: 前面n-1个数进行第2遍扫描:
。。。
经过(n-2)次比较后,第2大的数被放在a n-1
… …
第n-1遍: 对前面2个数进行第n-1遍扫描
。。。
经过1次比较后,第2小的数被放a2
至此,排序过程结束。
总结: 用冒泡法对n个数小→大排序,
共需扫描(n-1)遍,第i遍扫描时需要比较(n-i)次
// 对一组整型数据由小到大排序(采用冒泡排序算法) #include <stdio.h> const int N=5; void bubbleSort( int [], int); // 函数声明 int main() { int i,a[N]; printf("请输入%d个整型数据: \n", N); for(i=0; i<N; i++) scanf("%d",&a[i]); printf("排序前的数据: \n"); for(i=0; i<N; i++) printf("%d ",a[i]); printf("\n"); bubbleSort(a,N); // 调用函数bubbleSort()对数组a中的N个元素排序 printf("排序后的数据: \n"); for(i=0; i<N; i++) printf("%d ",a[i]); printf("\n"); return 0; } // 函数定义 // 函数功能描述:对一组整型数据由小到大排序 // 形参描述:x是待排序的数组名,n是数组中元素个数 // 排序算法:冒泡法 void bubbleSort( int 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; } } } } // 注意内外层循环的边界条件 // 冒泡排序算法的归结起来是: // 对n个数排序,共需要扫描n-1遍 // 变量i用于控制要扫描多少遍 // 变量j用于控制每一遍扫描需要比较多少次 // 由于数组中第一个元素下标从0开始,所以j的取值是从0~n-1-i而不是,从1~n-i
Part5练习一:我觉得我的程序还是有点问题,希望有人可以帮我找一下问题解决一下。
// 功能描述:输入一组整数,输出最大值 #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++){// 利用循环输入N个整数给数组a scanf("%d",&a[i]); } for( i=0; i<N; i++) max=findMax(a,N); printf("数组a中最大元素值为: %d\n\n", max); return 0; } int findMax(int a[],int n) { int i,j, max;// 功能描述:找出整型数组a中元素的最大值,并返回次此最大值 for( i=0; i<n-1; i++){ for( j=0; j<n-1-i; j++){ if( a[j] > a[j+1]) { max = a[j]; a[j] = a[j+1]; a[j+1] = max; return max; } } } // 函数定义 } // 补足函数findMax()的实现部分3 // 。。。
练习二
#include <stdio.h> const int N=4; void output(char x[], int n); // 函数声明 void rank(char x[]);// 排序函数声// 补足代码1 int main() { char string[N] = {'2','0','1','9'}; int i; printf("排序前: \n"); output(string, N); rank(string);// 调用排序函数对字符数组中的字符由大到小排序 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]); } void rank(char x[]) { int num,i,j; char t; num=sizeof(x)/sizeof(char); for(j=0;j<num-1;j++) for(i=0;i<num-j-1;i++) if(x[i]<x[i+1]) { t=x[i]; x[i]=x[i+1]; x[i+1]=t; } } // 函数定义 // 函数功能描述:对一组字符由大到小排序 // 形参:字符数组,以及字符数组元素个数 // 补足代码3 // 。。。
此次试验最大的感受就是c语言要我小命,主要问题还是函数自定义那部分吧,回头我再联系联系。
互评
https://www.cnblogs.com/awjwj/p/10771497.html
https://www.cnblogs.com/24cherry/p/10770259.html
https://www.cnblogs.com/dejizhuoma4637/p/10771646.html