1 / 35

云南民族大学 017 胡顺仿

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

julie
Download Presentation

云南民族大学 017 胡顺仿

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. 云南民族大学017 胡顺仿 • 第 6章数组 • 一维数组

  2. 教材 • 佘玉梅等著,科学出版社,C语言程序设计 参考书 • 谭浩强著,清华大学出版社,C语言程序设计(第6版) • 二级C语言考试相关书籍

  3. 内容概述 • 数组概述 • 一维数组 1.数组的定义 2.数组初始化 3.数组引用 4.数组输入与输出 5.一维数组程序举例 • 课堂练习

  4. 教学目标 • 掌握一维数组的定义与引用 • 了解数组在计算机中的存储结构和输入与输出方法 • 掌握一维数组的应用,包括:查找、排序和插入等。

  5. 知识点回顾 第1章 C语言概述 第2章 C语言程序设计入门 第3章 结构化程序 第4章 程序控制——选择 第5章 程序控制——循环 • 第6章 数组

  6. 低地址 程序区 知识点回顾 指令 冯氏原理:人们预先编好程序,利用输入设备把程序输入内存,计算机在控制器控制下,从内存中逐条取出程序交运算器执行。把结果回送入内存、或由输出设备输出。 • 执行步骤:取指令、分析指令、执行指令、程序计数器加1 (例:指令070740H的执行过程) 数据区 高地址 数据

  7. 内存储器 程序计数器PC(0100H) 控制器 指令寄存器 … … 操作码 地址码 程序区 译码器 …… 操作控制线路 … 数据区 …… 累加器 …… 算术、逻辑运算部件 运算器 预备知识 自动加1 程序计数器PC (0101H) 07 0740

  8. 低地址 知识点回顾 指令 • 变量 • 名称 • 内存地址 • 值 int a; float score=80.5; 80.5 a=5; score 4字节 数据 a 2字节 5

  9. 低地址 知识点回顾 指令 • 程序控制——选择 if (score>=60) printf(“通过考试\n”); else printf(“没有通过考试\n”); 80.5 score 4字节 数据 a 2字节 5

  10. 低地址 知识点回顾 指令 • 程序控制——循环 #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 数据

  11. 问题 • 在计算机中存储5个学生分数,便于后续处理 • 定义5个变量? 如:score1、 score2、 score3、 score4、 score5 • 存储500个学生分数 • 定义500个变量? • 问题分析 • 500个学生分数数据类型相同,可以按一定顺序存储 • 数组优点 • 便于循环处理 • 提高效率,便于书写、检查、修改(海量数据效果更明显)

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

  13. 6.1 概述 根据数组的定义,必须明确以下几点: (1)数组的命名与简单变量的命名规则相同。 (2)数组中的元素是有序排列的。 (3)数组中的每个元素必须是相同的数据类型。 (4)数组的元素个数是有限的,数学中的无限数组不能表示。 (5)数组的元素在内存中存储时连续的。

  14. 6.1 概述 • 一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。 • 按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 • 使用不同数据类型的数组来存储不同类型的数据。 例子: float score[60]; /*浮点数数组*/ char name[30]; /*字符数组*/ int states[6]; /*整数数组*/

  15. 6.2 一维数组 6.2.1一维数组的定义: 类型说明符 数组名 [常量表达式]; 例如: int a[6]; 它表示定义了一个数组,数组名为a,数组有6个元素,即数组长度为6。 共包含a[0], a[1], a[2], a[3], a[4], sa[5] 这6个元素。

  16. 6.2.1一维数组定义 类型说明符 数组名 [常量表达式]; 类型说明符:是任一种基本数据类型或构造数据类型。 可以是int、char、float、double等。 数组名:是用户定义的数组标识符。数组的命名规则和变量的命名规则相同,书写规则要符合标识符的命名规则。

  17. 6.2.1一维数组定义 类型说明符 数组名 [常量表达式]; 常量表达式:表示数据元素的个数,也称为数组的长度。元素个数的下标从0开始。 常量表达式中可以包含常量和符号常量,不能包含变量。也就是说不能动态声明数组的长度。 int n = 6; int states[n]; 使用下面的方式是正确的: #define MAX 6 int states[MAX]; X错误

  18. 6.2.2一维数组初始化 数组初始化赋值是指在数组定义时给数组元素赋初值。 • 数组初始化赋值时可以在一对大括号中为数组元素赋初值。 • 初始化赋值的一般形式为: 类型说明符 数组名[常量表达式]={值,值……值}; 在{ }中的各数据值即为各元素的初值,各值之间用逗号间隔。

  19. 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;

  20. 对数组的初始化赋值还有以下几点规定: (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;

  21. 对数组的初始化赋值还有以下几点规定: 6.2.2一维数组初始化 (3)给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。 例如: int a[5]={1,2,3,4,5}; 可写为: int a[]={1,2,3,4,5};

  22. 6.2.3 一维数组引用 • 数组必须先定义,才能使用。 • C语言规定只能逐个引用数组元素而不能一次引用整个数组。 • 用数组名和下标来唯一确定并访问数组中的元素。 数组元素表示形式为: 数组名[下标] • 下标可以是整型常量或整型表达式。 • 定义一个长度为n的一维数组,那么下标的范围是0到n-1。 • 对数组每个元素的使用与普通变量无异

  23. 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

  24. 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

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

  26. 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

  27. 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

  28. 在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++)

  29. 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");

  30. 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] 不成立

  31. 6.2.5 一维数组的程序举例 实验预习: 1. 其余排序方法排序方法 以上程序是交换排序,每趟次比较交换只能确定一个数,效率低。常见的排序方法还有:选择排序、冒泡排序、快速排序、堆排序 等。 2.在已经排好序的数组中插入一个数,要求按原来的规律将它插入数组中 。 3.在已排序好的数组中用折半查找查找某1个数。

  32. 主要内容 • 数组概述 • 一维数组 1.数组的定义 2.数组初始化 3.数组引用 4.数组输入与输出 5.一维数组程序举例 • 课堂练习

  33. 课堂练习 一.判断 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

  34. 课堂练习 二.单项选择题: 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

  35. 谢谢! 请提出宝贵意见

More Related