1 / 22

实验四 数组程序设计

实验四 数组程序设计. 一、实验目的. 掌握一维数组和二维数组的定义、引用、初始化和输入输出方法。 掌握与数组有关的算法(查找和排序算法) 良好编程风格之标识符命名. 二、实验内容. 数组是一组相关的存储单元,这些存储单元具有相同的名字和数据类型。 要引用数组的某个特定的存储单元(元素),需要说明数组名和该特定元素在数组中的序号。数组的下标是从 0 开始的,因此,用 C[0] 引用数组 C 的第 1 个元素,用 C[1] 引用数组 C 的第 2 个元素, C[i-1] 引用数组 C 的第 i 个元素。. 二、实验内容. 一维数组的定义格式为 :

lacy-wiley
Download Presentation

实验四 数组程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验四 数组程序设计

  2. 一、实验目的 • 掌握一维数组和二维数组的定义、引用、初始化和输入输出方法。 • 掌握与数组有关的算法(查找和排序算法) • 良好编程风格之标识符命名

  3. 二、实验内容 • 数组是一组相关的存储单元,这些存储单元具有相同的名字和数据类型。 • 要引用数组的某个特定的存储单元(元素),需要说明数组名和该特定元素在数组中的序号。数组的下标是从0开始的,因此,用C[0]引用数组 C的第1个元素,用C[1]引用数组C的第2个元素,C[i-1]引用数组C的第i个元素。

  4. 二、实验内容 • 一维数组的定义格式为: 类型说明符 数组名[常量表达式]; • 在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。 • 组的下标是从0开始的,因此,用C[0]引用数组 C的第1个元素,用C[1]引用数组C的第2个元素,C[i-1]引用数组C的第i个元素。

  5. 一维数组的定义 • 一维数组的定义格式为: 类型说明符 数组名[常量表达式]; • 在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。 • 常量表达式可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

  6. 一维数组的定义 • 以下程序段,给出了一维数组的几种定义方法,判断哪些是正确的,哪些是错误的 • 常量表达式可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

  7. 以下程序段,给出了一维数组的几种定义方法, 判断哪些是正确的,哪些是错误的 main() { int n; scanf("%d" ,&n); int a[n]; } main() { const int n=4; int a[n] = {1, 2, 3, 4}; ... }

  8. 4.main() { int a[2+2*4] ... } 3.#include <stdio.h> #define M 10 main() { int a[M]; ... } 5.#include <stdio.h> #define M 2 #define N 8 main() { int a[M+N]; ... } 6. main() { int a[] = {1, 2, 3, 4, 5}; int b[6] = {1, 2, 3, 4, 5}; static int c[6] = {1}; .. }

  9. 7. • main() • { • char a[] = {‘1’, ‘2’, ‘3’, ‘4’, ‘5’}; • char b[] = “This is a string.”; • ... • }

  10. 2.生成指向数组的指针 - 通过指定数组名,可以生成一个指向数组第一个元素的指针。 int *p; int sample[10]; p = sample; • 可以使用&运算符来指定数组第一个元素的地址。 p=&sample[0]

  11. 3.一维数组作为函数的参数 - 在C中,不能把整个数组作为一个参数传递给函数, 可以通过指定数组名而不是下标,把一个指向数组的指针传递给函数。 int main(void) • 可以使用&运算符来指定数组第一个元素的地址。 p=&sample[0]

  12. 3.一维数组作为函数的参数 - 在C中,不能把整个数组作为一个参数传递给函数, 可以通过指定数组名而不是下标,把一个指向数组的指针传递给函数。 int main(void) { int i[10]; func(i); ...... }

  13. 有三种方式声明一维数组作为函数形参: - 作为一个指针 void func (int *x); //pointer - 作为一个固定长度的数组 void func (int x[10]); //sized array int i[10]; func(i); ...... }

  14. 有三种方式声明一维数组作为函数形参: - 作为一个指针 void func (int *x); //pointer - 作为一个固定长度的数组 void func (int x[10]); //sized array - 作为一个不定长的数组 void func (int x[]); //unsized array

  15. 定义二维数组的一般形式是: 类型说明符 数组名[常量表达式1][ 常量表达式2]; • 二维数组的初始化 - 在定义数组时对数组进行初始化, - 作为一个不定长的数组 void func (int x[]); //unsized array

  16. 二维数组的定义 • 定义二维数组的一般形式是: 类型说明符 数组名[常量表达式1][ 常量表达式2]; • 二维数组的初始化 - 在定义数组时对数组进行初始化, int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int a[2][3] = {1, 2, 3, 4, 5, 6}; - 定义时初始化可以省略第一维的大小,例如: int a[][3] = {1, 2, 3, 4, 5, 6}; //等价于 int a[2][3] = {1, 2, 3, 4, 5, 6};

  17. 二维数组的定义 • 二维数组作为函数的输入参数 如果你向函数传递二维数组: int array[NROWS][NCOLUMNS]; f(array); 那么函数的声明必须匹配: int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int a[2][3] = {1, 2, 3, 4, 5, 6}; - 定义时初始化可以省略第一维的大小,例如: int a[][3] = {1, 2, 3, 4, 5, 6}; //等价于 int a[2][3] = {1, 2, 3, 4, 5, 6};

  18. 二维数组作为函数的输入参数 如果你向函数传递二维数组: int array[NROWS][NCOLUMNS]; f(array); 那么函数的声明必须匹配: void f(int a[][NCOLUMNS]) { ... } 或者 void f(int (*ap)[NCOLUMNS]) /* ap 是个数组指针 */

  19. 应用举例 1. 输入以下程序,调试并修改错误,参考程序如下: • #include <stdio.h> • void main(void) • { • int i, a[5]; • for (i = 0; i <= 5; i++) • { • printf("Please input the %dth number:",i+1); • scanf("%d",&a[i]); • for (i = 0; i <= 5; i++) • { • printf("the %dth number is %d:",i+1,a[i]); • } • } • }

  20. #include <stdio.h> #define N 10 int main(void) { int i, j; int t; //中间变量 int min; //记录符合位置i的最小的数的位置 int data[N]={3,6,2,5,8,1,0,4,7,9}; for (i = 0; i < N-1; i++) { min=i; 2. 输入并运行下面的程序,该程序实现了排序算法

  21. for (j = i+1; j < N; j++) { if (data[j] < data[min]) { min = j; } } if (min != i) { t = data[i]; data[i] = data[min]; data[min] = t; } } 2. 输入并运行下面的程序,该程序实现了排序算法

  22. for (i = 0; i < N; i++) { printf("%d", data[i]); } } 1)调试程序使之能正常运行,若希望从大到小排序,需如何修改程序? 2)如果希望看到程序运行过程中,数据是如何一步一步完成排序的,需在程序中的什么位置增加什么代码? 2. 输入并运行下面的程序,该程序实现了排序算法

More Related