slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
云南民族大学 017 胡顺仿 PowerPoint Presentation
Download Presentation
云南民族大学 017 胡顺仿

Loading in 2 Seconds...

play fullscreen
1 / 35

云南民族大学 017 胡顺仿 - PowerPoint PPT Presentation


  • 158 Views
  • Uploaded on

云南民族大学 017 胡顺仿. 第 6 章数组 一维数组. 教材 佘玉梅等著,科学出版社, C 语言程序设计 参考书 谭浩强著,清华大学出版社, C 语言程序设计 ( 第 6 版 ) 二级 C 语言考试相关书籍. 内容概述. 数组概述 一维数组 1. 数组的定义 2. 数组初始化 3. 数组引用 4. 数组输入与输出 5. 一维数组程序举例 课堂练习. 教学目标. 掌握一维数组的定义与引用 了解数组在计算机中的存储结构和输入与输出方法 掌握一维数组的应用 , 包括 : 查找、排序和插入等。. 知识点回顾. 第 1 章 C 语言概述

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 '云南民族大学 017 胡顺仿' - julie


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
slide1

云南民族大学017 胡顺仿

  • 第 6章数组
  • 一维数组
slide2

教材

  • 佘玉梅等著,科学出版社,C语言程序设计

参考书

  • 谭浩强著,清华大学出版社,C语言程序设计(第6版)
  • 二级C语言考试相关书籍
slide3
内容概述
  • 数组概述
  • 一维数组

1.数组的定义

2.数组初始化

3.数组引用

4.数组输入与输出

5.一维数组程序举例

  • 课堂练习
slide4
教学目标
  • 掌握一维数组的定义与引用
  • 了解数组在计算机中的存储结构和输入与输出方法
  • 掌握一维数组的应用,包括:查找、排序和插入等。
slide5
知识点回顾

第1章 C语言概述

第2章 C语言程序设计入门

第3章 结构化程序

第4章 程序控制——选择

第5章 程序控制——循环

  • 第6章 数组
slide6

低地址

程序区

知识点回顾

指令

冯氏原理:人们预先编好程序,利用输入设备把程序输入内存,计算机在控制器控制下,从内存中逐条取出程序交运算器执行。把结果回送入内存、或由输出设备输出。

  • 执行步骤:取指令、分析指令、执行指令、程序计数器加1

(例:指令070740H的执行过程)

数据区

高地址

数据

slide7

内存储器

程序计数器PC(0100H)

控制器

指令寄存器

操作码

地址码

程序区

译码器

……

操作控制线路

数据区

……

累加器

……

算术、逻辑运算部件

运算器

预备知识

自动加1

程序计数器PC

(0101H)

07

0740

slide8

低地址

知识点回顾

指令

  • 变量
  • 名称
  • 内存地址

int a;

float score=80.5;

80.5

a=5;

score 4字节

数据

a 2字节

5

slide9

低地址

知识点回顾

指令

  • 程序控制——选择

if (score>=60)

printf(“通过考试\n”);

else

printf(“没有通过考试\n”);

80.5

score 4字节

数据

a 2字节

5

slide10

低地址

知识点回顾

指令

  • 程序控制——循环

#define N 50

float score,sum=0;aver=0;

for(n=1;n<=N;i++)

{

scanf("%f",&score);

sum=sum+score;

}

aver=sum/N;

0

aver

0

sum

score

数据

slide11
问题
  • 在计算机中存储5个学生分数,便于后续处理
  • 定义5个变量?

如:score1、 score2、 score3、 score4、 score5

  • 存储500个学生分数
  • 定义500个变量?
  • 问题分析
  • 500个学生分数数据类型相同,可以按一定顺序存储
  • 数组优点
  • 便于循环处理
  • 提高效率,便于书写、检查、修改(海量数据效果更明显)
slide12
第六章 数组

6.1 概述

  • 数组是一组具有相同类型的有序变量的集合。
  • 数组可用于存储成组的有序数据,这些按序排列的同类数据元素的集合称为数组。
  • 数组中的每一个元素都属于同一个数据类型。
slide13

6.1 概述

根据数组的定义,必须明确以下几点:

(1)数组的命名与简单变量的命名规则相同。

(2)数组中的元素是有序排列的。

(3)数组中的每个元素必须是相同的数据类型。

(4)数组的元素个数是有限的,数学中的无限数组不能表示。

(5)数组的元素在内存中存储时连续的。

slide14

6.1 概述

  • 一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
  • 按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
  • 使用不同数据类型的数组来存储不同类型的数据。

例子:

float score[60]; /*浮点数数组*/

char name[30]; /*字符数组*/

int states[6]; /*整数数组*/

slide15
6.2 一维数组

6.2.1一维数组的定义:

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

例如:

int a[6];

它表示定义了一个数组,数组名为a,数组有6个元素,即数组长度为6。

共包含a[0], a[1], a[2], a[3], a[4], sa[5] 这6个元素。

6 2 1
6.2.1一维数组定义

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

类型说明符:是任一种基本数据类型或构造数据类型。 可以是int、char、float、double等。

数组名:是用户定义的数组标识符。数组的命名规则和变量的命名规则相同,书写规则要符合标识符的命名规则。

6 2 11
6.2.1一维数组定义

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

常量表达式:表示数据元素的个数,也称为数组的长度。元素个数的下标从0开始。

常量表达式中可以包含常量和符号常量,不能包含变量。也就是说不能动态声明数组的长度。

int n = 6;

int states[n];

使用下面的方式是正确的:

#define MAX 6

int states[MAX];

X错误

6 2 2
6.2.2一维数组初始化

数组初始化赋值是指在数组定义时给数组元素赋初值。

  • 数组初始化赋值时可以在一对大括号中为数组元素赋初值。
  • 初始化赋值的一般形式为:

类型说明符 数组名[常量表达式]={值,值……值};

在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。

6 2 21
6.2.2一维数组初始化

例如:int a[5]={0,1,2,3,4};

也可以用赋值语句对数组的每一个元素单独赋值。

例如:

int a[5];

a[0]=0;

a[1]=1;

a[2]=2;

a[3]=3;

a[4]=4;

slide20
对数组的初始化赋值还有以下几点规定:

(1)可以只给部分元素赋初值。

  • 当{ }中值的个数少于元素个数时,只给前面部分元素赋值。

例如:

int a[5]={0,1,2};

表示只给a[0]~a[2] 3个元素赋值。

(2)只能给元素逐个赋值,不能给数组整体赋值。

例如给5个元素全部赋1值,只能写为:

int a[5]={1,1,1,1,1};

而不能写为:

int a[5]=1;

slide21
对数组的初始化赋值还有以下几点规定:

6.2.2一维数组初始化

(3)给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。

例如:

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

可写为:

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

6 2 3
6.2.3 一维数组引用
  • 数组必须先定义,才能使用。
  • C语言规定只能逐个引用数组元素而不能一次引用整个数组。
  • 用数组名和下标来唯一确定并访问数组中的元素。

数组元素表示形式为: 数组名[下标]

  • 下标可以是整型常量或整型表达式。
  • 定义一个长度为n的一维数组,那么下标的范围是0到n-1。
  • 对数组每个元素的使用与普通变量无异
6 2 31
6.2.3 一维数组引用
  • 下标是整型常量

int b[5];

b[0]=2;

2

b[1]=1;

1

b[2]=b[0]+2;

4

b[3]= b[1] +b[0] ;

3

6 2 32
6.2.3 一维数组引用
  • 下标是整型表达式

int b[5],i=2,j=0

b[j]=2;

2

b[j+1]=1;

1

b[i]=b[j]+2;

4

b[2*i]= b[1] +b[0];

3

6 2 4
6.2.4 一维数组输入与输出

只能逐个对数组元素进行操作(字符数组例外)

int a[10],i;

输入方法

  • 输入下标为i的元素

scanf(“%d”,&a[i]);

  • 输入整个数组

for(i=0,i<10,i++)

scanf(“%d”,&a[i]);

输出方法

  • 输出下标为i的元素

printf(“%d”,a[i]);

  • 输处整个数组

for(i=0,i<10,i++)

printf(“%d”,a[i]);

6 2 41
6.2.4 一维数组输入与输出

例6.1 如下程序使a[0]到a[4]的值为0到4,然后按逆序输出。

#include <stdio.h>

void main(void)

{ int i;

int a[5];

for (i=0;i<=4;i++){ a[i]=i;}

for(i=4;i>=0;i--){ printf("%d",a[i]);}

}

运行结果如下 :

4 3 2 1 0

6 2 5
6.2.5 一维数组的程序举例

例6.2找出数组中最大/小的元素,并输出。

分析程序运行

#include <stdio.h>

void main( )

{ int i,max,min;

int a[5]={9,20,8,6,-5};

max=min=a[0];

for(i=1;i<5;i++)

{if(a[i]>max) max=a[i];

if(a[i]<min) min=a[i];

}

printf(“最大值是:%d,最小值是:%d ",max,min);

}

max=min=a[0];

max=min=9;

i=1 a[i]=20

a[i]>max 成 立 max=20

a[i]<min 不成立

i=2 a[i]=8

a[i]>max 不成立

a[i]<min 成 立 min=8

i=3 a[i]=6

a[i]>max 不成立

a[i]<min 成 立 min=6

i=4 a[i]=-5

a[i]>max 不成立

a[i]<min 成 立 min=-5

i=5 循环结束

max=20, min=-5

6 2 51

在100个数中进行查找

6.2.5 一维数组的程序举例

例6.2找出数组中最大/小的元素,并输出。

#include <stdio.h>

void main( )

int i,max,min;

int a[5]={9,20,8,6,-5};

max=min=a[0];

for(i=1;i<5;i++)

{if(a[i]>max) max=a[i];

if(a[i]<min) min=a[i];

}

printf(“最大值是:%d,最小值是:%d ",max,min);

}

int a[100]={9,20,8,6,-5·······};

或者int a[100];

for(i=0;i<100;i++)

scanf(“%d”,&a[i]);

for(i=0;i<100;i++)

6 2 52
6.2.5 一维数组的程序举例

例6.3一维数组排序。(1)

程序分析:以5个数字降序排序为例,从数据排序后的结果看,第1个数比后面4个都大,第2个比后面3个都大,以此类推。

所以,可以让第1个数和后面4个数逐个比较,若比后面的数要小,则两者交换。让第2个数和后面3个数逐个比较,若比后面的数要小,则两者交换 ……

#include "stdio.h"

void main()

{ int i,j,t,a[5];

printf(“请输入5个数:\n");

for(i=0;i<5;i++)

scanf("%d",& a[i]);

printf("\n");

6 2 53

i=0

j=1

j=4

i=0

j=2

j=3

i=0

6.2.5 一维数组的程序举例

程序分析

例6.3一维数组排序。(2)

若输入的依次是:

3 9 -2 100 14

for(i=0;i<4;i++)/*排序*/

{for(j=i+1;j<5;j++)

if(a[i]<a[j])

{t= a[i]; a[i]=a[j]; a[j]=t; }

}

printf(“排序后数组是: \n");

for(i=0;i<5;i++)

printf("%5d\n",a[i]);

}

a[i]<a[j] 成立 两者交换

9 3 -2 100 14

a[i]<a[j] 成立 两者交换

a[i]<a[j] 不成立

100 3 -2 9 14

a[i]<a[j] 不成立

6 2 54
6.2.5 一维数组的程序举例

实验预习:

1. 其余排序方法排序方法

以上程序是交换排序,每趟次比较交换只能确定一个数,效率低。常见的排序方法还有:选择排序、冒泡排序、快速排序、堆排序 等。

2.在已经排好序的数组中插入一个数,要求按原来的规律将它插入数组中 。

3.在已排序好的数组中用折半查找查找某1个数。

slide32
主要内容
  • 数组概述
  • 一维数组

1.数组的定义

2.数组初始化

3.数组引用

4.数组输入与输出

5.一维数组程序举例

  • 课堂练习
slide33
课堂练习

一.判断

1、数组中的元素可以属于不同的数据类型。

2、数组的元素个数是有限的。

3、数组的元素在内存中存储时连续的。

4、int a[5]={0,1,2}表示分别给a[0]~a[2] 3个元素赋值为0,1,3。

5、如给全部元素赋初值,则在数组说明中可以不给出数组元素的个数。

6、数组不必先定义,就能使用。

7、引用数组,实际上是引用它的数组元素。

8、数组定义 int a[10]; 也可以写成 int a(10);

9、数组定义 int a[10]; 它的第10个元素为a[10]。

10.语句int n=6;int s[n]; 定义了一个数组s。

答案:NYYYY NNNNN

slide34
课堂练习

二.单项选择题:

1、一维数组下标的最小值是( )。

A、0 B、1 C、2 D、3

2、在执行语句: int x=1;int a[2][3]={2,4,6,8,10,12};后,printf("%d", a[x][1]);的值是( )。

A、2 B、6 C、8 D、10

3、若有说明:int d[3][4];则对d数组元素的正确引用是( )。

A、d[2][4] B、d[1,3] C、d[2][0] D、d(2)(1)

4、若有说明:int a[3][4]={1};则下面正确的叙述是( )。

A、只有元素a[0][0]可得到初值1

B、此说明语句不正确

C、数组a中各元素都可得到初值1

D、数组a中每个元素均可得到初值,元素e[0][0]得到初值1,其它元素得到初值0

答案:ADCD

slide35

谢谢!

请提出宝贵意见