实验四

(前三部分所有程序已经在实验课前及实验课上运行观察完,故运行结果省略,在此处仅做一总结。)

Part1: 数组数据结构

该部分程序运行结果表明数组是一种构造类型,在基本数据类型int, float, double, char的基础上,把类型相同的数据存储在一组连续的内存空间中。

数组中的一组数据元素在内存中是连续存放的。

Part2: 一维数组的定义、初始化以及数组元素的引用方法

1.其中程序一的

int a[5];

a[0] = 1;
a[1] = 9;
a[2] = 8;
a[3] = 6;
a[4] = 0;

改为如下格式

int a[5] = {1, 9, 8, 6, 0};在此基础上利用循环语句使得程序更加简洁。

2.int a[] = {1, 9, 8, 6, 0}; 指出当对所有数组元素初始化的时候,才可以省略数组大小,但要利用n = sizeof(a) / sizeof(a[0])计算数组个数,最后利用循环输出数组元素。

3.只对部分数组元素初始化

例如  int a[5] = {1, 9}; // 虽然总共定义了5个元素,但只有1和9分别用于初始化a[0]和a[1],其他的都会以0输出,相当于没有定义。

Part3: 数组作为函数参数

1.数组元素作为参数:例如,数组元素score[i]可作为标准库函数printf()的实参,实现打印输出

2.特别注意函数名作为实参与形参时的书写形式:

函数声明和函数定义中,函数名init后面括号里出现的是形式参数,数组名后面要加[ ]。即:
void init(int a[], int n, int value);
函数调用中,函数名init后面括号里出现的是实际参数,直接写数组名。即:
init(b, N, -1);

Part4: 用冒泡法对一组数据由小到大排序

****冒泡法的算法思想****

把一组数据中相邻的两个数进行比较,较大的数放到后面。

(看完附加的动图之后可以理解这个程序的基本思路,但是在观察程序结构及自己尝试编写时仍存在很大问题)

// 对一组整型数据由小到大排序(采用冒泡排序算法)
#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;
}
}
}
}
// 注意内外层循环i和j开始和结束的边界条件

 

Part5: 编程练习

练习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++)// 利用循环输入N个整数给数组a
scanf("%d",&a[i]);// 补足程序1
// 。。。
max=findMax(a,N);// 调用子函数max求数组a的最大元素值,并赋值给max
// 补足程序2
// 。。。
// 输出最大值
printf("数组a中最大元素值为: %d\n\n", max);
return 0;
}
int findMax(int a[],int n){
int x,max;
max=a[0];
for(x=0;x<n;x++)
if(max<a[x])
max=a[x];
return max;}// 函数定义
// 功能描述:找出整型数组a中元素的最大值,并返回次此最大值
// 补足函数findMax()的实现部分3
// 。。。

练习2:补全程序,使用冒泡法对字符数组由大到小排序。

#include <stdio.h>
const int N=4;
void output(char x[], int n); 
void bubbleSort( char x[], int n); // 函数声明
// 排序函数声明
// 补足代码1
// 。。。
int main() {
char string[N] = {'2','0','1','9'};
int i;
printf("排序前: \n");
output(string, N);
bubbleSort(string,N);// 调用排序函数对字符数组中的字符由大到小排序
// 补足代码2
// 。。。
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 bubbleSort( char 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;}}}}
// 函数定义
// 函数功能描述:对一组字符由大到小排序
// 形参:字符数组,以及字符数组元素个数
// 补足代码3
// 。。。

 

实验编程练习部分总结:

对于练习一,我将结束时的返回值写为了return 0;致使无法运行,最后才找出错误,希望可以多加注意细节问题;

练习二中,程序的最后需要补全的那一部分仍旧有些不理解,脱离例题之后自己无法独立完成,需加油!

 

实验互评:

https://www.cnblogs.com/lxzblogs/

https://www.cnblogs.com/lsy17/

https://www.cnblogs.com/wznn/

 

posted @ 2019-04-25 17:52  zzn123321  Views(128)  Comments(2)    收藏  举报