实验四 数组程序设计
Download
1 / 22

??? ?????? - PowerPoint PPT Presentation


  • 70 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' ??? ??????' - lacy-wiley


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

6743509
一、实验目的

  • 掌握一维数组和二维数组的定义、引用、初始化和输入输出方法。

  • 掌握与数组有关的算法(查找和排序算法)

  • 良好编程风格之标识符命名


6743509
二、实验内容

  • 数组是一组相关的存储单元,这些存储单元具有相同的名字和数据类型。

  • 要引用数组的某个特定的存储单元(元素),需要说明数组名和该特定元素在数组中的序号。数组的下标是从0开始的,因此,用C[0]引用数组 C的第1个元素,用C[1]引用数组C的第2个元素,C[i-1]引用数组C的第i个元素。


6743509
二、实验内容

  • 一维数组的定义格式为:

    类型说明符 数组名[常量表达式];

  • 在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。

  • 组的下标是从0开始的,因此,用C[0]引用数组 C的第1个元素,用C[1]引用数组C的第2个元素,C[i-1]引用数组C的第i个元素。


6743509
一维数组的定义

  • 一维数组的定义格式为:

    类型说明符 数组名[常量表达式];

  • 在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度。

  • 常量表达式可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。


6743509
一维数组的定义

  • 以下程序段,给出了一维数组的几种定义方法,判断哪些是正确的,哪些是错误的

  • 常量表达式可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。


6743509

main()

{

int n;

scanf("%d" ,&n);

int a[n];

}

main()

{

const int n=4;

int a[n] = {1, 2, 3, 4};

...

}


6743509

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};

..

}


6743509

  • 7. 判断哪些是正确的,哪些是错误的

  • main()

  • {

  • char a[] = {‘1’, ‘2’, ‘3’, ‘4’, ‘5’};

  • char b[] = “This is a string.”;

  • ...

  • }


6743509

  • 2. 判断哪些是正确的,哪些是错误的生成指向数组的指针

    - 通过指定数组名,可以生成一个指向数组第一个元素的指针。

    int *p;

    int sample[10];

    p = sample;

  • 可以使用&运算符来指定数组第一个元素的地址。

    p=&sample[0]


6743509

  • 3. 判断哪些是正确的,哪些是错误的一维数组作为函数的参数

    - 在C中,不能把整个数组作为一个参数传递给函数, 可以通过指定数组名而不是下标,把一个指向数组的指针传递给函数。

    int main(void)

  • 可以使用&运算符来指定数组第一个元素的地址。

    p=&sample[0]


6743509

  • 3. 判断哪些是正确的,哪些是错误的一维数组作为函数的参数

    - 在C中,不能把整个数组作为一个参数传递给函数, 可以通过指定数组名而不是下标,把一个指向数组的指针传递给函数。

    int main(void)

    {

    int i[10];

    func(i);

    ......

    }


6743509


6743509

  • 有三种方式声明一维数组作为函数形参: 判断哪些是正确的,哪些是错误的

    - 作为一个指针

    void func (int *x); //pointer

    - 作为一个固定长度的数组

    void func (int x[10]); //sized array

    - 作为一个不定长的数组

    void func (int x[]); //unsized array


6743509

  • 定义二维数组的一般形式是: 判断哪些是正确的,哪些是错误的

    类型说明符 数组名[常量表达式1][ 常量表达式2];

  • 二维数组的初始化

    - 在定义数组时对数组进行初始化,

    - 作为一个不定长的数组

    void func (int x[]); //unsized array


6743509
二维数组的定义 判断哪些是正确的,哪些是错误的

  • 定义二维数组的一般形式是:

    类型说明符 数组名[常量表达式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};


6743509
二维数组的定义 判断哪些是正确的,哪些是错误的

  • 二维数组作为函数的输入参数

    如果你向函数传递二维数组:

    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};


6743509

  • 二维数组作为函数的输入参数 判断哪些是正确的,哪些是错误的

    如果你向函数传递二维数组:

    int array[NROWS][NCOLUMNS];

    f(array);

    那么函数的声明必须匹配:

    void f(int a[][NCOLUMNS])

    { ... }

    或者

    void f(int (*ap)[NCOLUMNS]) /* ap 是个数组指针 */


6743509
应用举例 判断哪些是正确的,哪些是错误的

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]);

  • }

  • }

  • }


6743509

#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. 输入并运行下面的程序,该程序实现了排序算法


6743509

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. 输入并运行下面的程序,该程序实现了排序算法


6743509

for (i = 0; i < N; i++) 判断哪些是正确的,哪些是错误的

{

printf("%d", data[i]);

}

}

1)调试程序使之能正常运行,若希望从大到小排序,需如何修改程序?

2)如果希望看到程序运行过程中,数据是如何一步一步完成排序的,需在程序中的什么位置增加什么代码?

2. 输入并运行下面的程序,该程序实现了排序算法


ad