樊媛媛《c语言程序设计》07-数组
C语言程序设计-电子教案-甘勇-50848295 07 数组
7.2 一维数组与指针运算
一维数组的数组名 一维数组的下标与指针 作为函数参数的一维数组的数组名
一维数组的数组名
先看以下两个定义: int sum; int num[5]; 变量sum是一个标量,因为它是一个单一的值且这个数值 是整型的。变量num是一个数组,因为它是一组值的集合。 当数组名和下标值一起使用,就可以标识数组中某个特定 的值。
num[2]的类型是整型数据,那么 num的类型又是什么呢?它所表 示的又是什么呢?
在C语言中,在几乎所有使用数组名的表达式中, 数组名的值是一个指针常量,也就是数组中第一 个数组元素的地址。num的类型取决于数组元素 的类型,数组元素的类型是int类型,那么num的 类型就是“指向int的常量指针”。因此一维数组 的数组名表示的是该数组中第一个数组元素的存 储地址,数组名的类型是“指向数组元素存储类 型的常量指针”。请不要将数组等同于指针,因 为数组具有一些和指针完全不同的特征。
再通过间接访问操作访问这个新的存储空间取得这个存 储空间中所存储的数据。这个过程看上去很熟悉,因为 这和前面的数组下标的引用过程完全一样的。因此 num[2]和*(num+2)是等价的。请牢记在C语言中下标引 用和间接访问表达式是一样的。
#define N 10 ……
int array[N]; int *ptr = array+5;
例如:
f[2][3]=f[2][2]/2+1; f[2][2]=f[1][2]*f[2][1];
例如:a[0]=a[5]+a[7]-a[2*3] 数组元素是一个变量。
例如:price[3]=20.23; scanf(“%d %f”, &grade[2], &price[0] );
樊媛媛《c语言程序设计》07-数组
}
2021/7/22
数据结构不合理
15
#define N 100 main() { int i,a[N],n;
用数组 eg7-4
float aver=0;
for(i=0;i<N;i++) scanf(“%d”,&a[i]); for(i=0;i<N;i++) aver+=a[i]; aver/=N; n=0;
选择法基本思想: 首先选择最小的数放在0位置,再在剩下的数 中选择最小的数放在下一位置,┈┈,依次类推, 共进行9次选择。
5874390126
2021/7/22
20
每次选择都要与其后的所有数进行比较换位。 5874390126
ij
2021/7/22
for(i=0;i<N-1;i++)
for(j=i+1 ;j<N ;j++)
3
对于三个数的排序:
main() {
仍可用变量作 为数据结构
int a,b,c,t;
scanf(“%d,%d,%d”,&a,&b,&c);
if(a<b) {t=a; a=b; b=t;}
if(a<c) {t=a; a=c; c=t;}
if(b<c) {t=b; b=c; c=t; }
printf(“\n %d,%d,%d”,a,b,c);
2021/7/22
2
例:求任意100个数中的最大值。
main()
{ int i,a,max; max=-32768 for(i=1;i<=100;i++)
C语言程序设计-第9章
若有以下定义: int a[10],*p,x; 语句a=&x;或a++都是非法的。
在c语言中,虽然不可以改变数组名a中的内容,但可以通过对数 组名加一个整数的办法,来依次表达该数组中不同元素的地址。例 如:(假定已定义k为整型变量); for(k=0;k<10;K+通过表达式:a+k,逐一给出了a数 组中每个元素的地址,使p依次指向a数组中的每一个元素。
一维数组元素的引用
一维数组只带有一个下标,它的引用形式如下: 数组名[下标] /*下标可以是表达式*/ 例如:double x[8]; /*定义了一个双精度型数组,有8个元素*/ 则:x[3]或x[i+3]都是合法的引用形式。
数组概念的相关解释: 1、一个数组元素实际上就是一个变量名,代表内存中的一个存储 单元。一个数组占有一串连续的存储单元。 2、在c语言中,一个数组不能整体引用。在c语言中,数组名中存 放的是一个地址常量,它代表整个数组的首地址。 3、在引用数组元素时,数组元素中下标表达式的值必须是整数, 它的下限为0。在编写程序时保证数组下标不越界是十分重要的。
通过数组的首地址引用数组元素
a是a数组元素的首地址,a(即a+0)的值即等于&a[0];则a+1即等 于&a[1]、a+2的值即等于&a[2]、…、a+9的值即等于&a[9]。 我们知道,可以通过间接访问运算符*来引用地址所在的存储单元, 因此对于数组元素a[0],可以用表达式*&a[0]来引用,也可以用*(a+0) 来引用,对此也可以写成:*a;而对于数组元素a[1],可以用表达式 *&a[1]来引用,也可以用*(a+1)来引用,因为a+1即是a[1] 的地址,使 用间接访问运算符可以引用地址所代表的存储单元,因此,*(a+1)就是 a[1];…;对于数组元素a[9],可以用表达式*&a[9]来引用,也可以用*(a+9) 来引用。因此,可以通过以下语句逐个输出a数组元素中的值: for(k=0;k<10;k++) printf(“%4d”,*(a+k)); 此语句相当于: for(k=0;k<10;k++) printf(“%4d”,a[k]);
C语言程序设计教程 第07章
C语言程序设计教程
第7章 数组
9
根据数组的有序性,往往使用循环语句来对数组进行处理, 用循环控制变量作为数组下标,从而可以以统一的方式来访问 循环控制变量作为数组下标,从而可以以统一的方式来访问 数组元素.
例7.1 从键盘输入15个整数,再反序输出. 从键盘输入15个整数 再反序输出. 个整数,
运行结果: array a is:3 4 5 0 0 array b is:-32 1398 40 1170 454
2010/5/7
考虑:数组b 的值的含义?
C语言程序设计教程
第7章 数组
14
例7.3 从键盘上输入5个数,输出最大,最小的元素以及 从键盘上输入5个数,输出最大, 它们的下标
#define N 5 若输入: 若输入 8 2 312 0 -10↙ ↙ #include <stdio.h> 输出为: 输出为 max:a[2]=312,min:a[4]=-10 main( ) { int i,j,k, max,min; static int a[5]; for (i=0;i<5;i++) scanf("%d",&a[i]); max=min=a[0]; /*假定第一个元素既是最大的,也是最小的 假定第一个元素既是最大的, 假定第一个元素既是最大的 也是最小的*/ j=k=0; /*对分别记录最大,最小元素下标的变量 初始化 */ 对分别记录最大, 对分别记录最大 最小元素下标的变量j,k初始化 for (i=0;i<5;i++) { if (max<a[i]) { max=a[i];j=i;}/*把当前最大值送 把当前最大值送max,下标送 下标送j*/ 把当前最大值送 下标送 else if (min>a[i]){ min=a[i];k=i;} } printf("max:a[%d]=%d,min:a[%d]=%d",j,max,k,min); }
《C语言程序设计课件》第四章-数组
#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
C语言程序设计数组(说课稿)
C语言程序设计——数组(说课稿)南京浦口中等专业学校—陈松一、课程目标《C语言程序设计》是中职对口单招计算机专业理论考试和技能考试中一门重要的课程。
要求学生掌握计算机编程语言的基本知识,初步掌握程序设计的基本思想,具有基本的C程序设计能力,能比较熟练地阅读、理解和编制简单的C程序。
二、学情分析本课程是针对综合高中对口单招班高二年级计算机专业的学生,学生已学习了计算机基础和计算机原理课程,对专业知识有了一定的了解。
但班级学生参差不齐,不少学生学习习惯较差,基础较薄弱。
教师必须首先弄清学生对专业课学习的障碍及原因,再根据教学原理制定出相应的对策,培养学生学习的积极,提高解决实际问题的能力。
三、教材与参考书本课程使用的教材是《C语言编程基础》(第2版)电子工业出版社。
此教材分为两部分,第一部分是基础知识模块,第二部分是选用模块。
对口单招学生只学习第一部分内容,第二部分内容单招计算机专业的考纲中是不要求的。
辅导练习:1、C语言阶段综合测试卷集。
2、自己编写的每次课的学生工作页。
四、教材分析1、单元内容数组单元是C语言的一个重要章节,本单元教学内容有:(1)一维数组的定义、引用和初始化、一维数组应用。
(2)二维数组的定义、引用和初始化、二维数组应用。
(3)字符串与字符数组、字符串的输入输出、字符串处理函数、字符数组应用。
2、单元设计(1)本单元每次课都编写了学生工作页,让学生根据任务去学习本单元内容。
(2)本单元加强了上机实习的课时数,着重培养学生上机实践能力,提高他们的程序设计能力。
3、教学目标➢知识目标:(1)了解一维数组、二维数值型数组的定义和使用方法。
(2)掌握对数组的初始化。
(3)掌握字符串的输入、输出和处理。
(4)熟练掌握使用数组进行程序设计的方法。
(5)理解程序设计中的几种常见算法的基本思路。
➢技能目标:(1)学生能正确的定义数组;能正确的引用数组和初始化数组;能使用数组进行程序设计。
(2)培养学生的分析、思考能力,提高解决问题的能力。
C语言程序设计ppt数组
达数组中打头元素旳地址
2024/10/10
6
8.2.1 一维数组旳申明
例8.1 具有基本数据类型旳一维数组旳申明
#define SIZE 10 int array[5]; double d[5],e[SIZE]; char name[SIZE*5];
13. double even;
21. course_even[i]=course_su
/*分别为全部课程旳总分、平均分 m[i]/5.0;
*/
22. sum+=course_sum[i];
14. int i;
23.
} /* 计算各门课平总分 */
24. even=sum/(3.0*SIZE);
2024/10/10
2024/10/10
17
例8.10
8. int course_sum[3]={0,0,0}; 15. for(i=0;i<5;i++){
9. double course_even[3];
16. course_sum[0]+=math[i];
/组**分/ 别为各门课程总分、平均分数17. course_sum[1]+=physics[i];
用若干个数字序号(下标)来区别各数组元素
例如定义float score[30],可表述30位学生成绩 用数组具有什么好处?
2024/10/10
3
8.1 数组概述
问题
计算全班30位同学某门课程旳平均成绩
处理措施
设置30个float型变量来统计成绩 设置一种有30个float型元素旳数组来统计成绩
c语言程序设计第7章(谭浩强)PPT版本
如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ()
例
38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
程序举例
#include <stdio.h> #define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }
c语言课程设计数组
c语言课程设计数组一、教学目标本章节的教学目标是使学生掌握C语言中数组的概念、声明、初始化、访问以及数组排序等基本操作。
1.理解数组的概念和作用。
2.掌握数组的声明和初始化。
3.学会使用循环语句访问数组元素。
4.掌握数组的排序算法。
5.能够正确声明和使用一维数组。
6.能够对一维数组进行排序。
7.能够使用循环语句遍历数组并打印元素。
情感态度价值观目标:1.培养学生的逻辑思维能力。
2.培养学生的问题解决能力。
3.培养学生的团队合作意识。
二、教学内容本章节的教学内容主要包括数组的概念、声明、初始化、访问以及数组排序。
1.数组的概念和作用。
2.数组的声明和初始化,包括一维数组和多维数组。
3.数组的访问,包括使用循环语句遍历数组并打印元素。
4.数组的排序算法,包括冒泡排序和选择排序。
三、教学方法为了达到本章节的教学目标,将采用以下教学方法:1.讲授法:用于讲解数组的概念、声明、初始化、访问以及数组排序的基本原理。
2.案例分析法:通过分析实际案例,让学生更好地理解数组的应用。
3.实验法:让学生通过编写程序实践数组的操作,提高学生的实际编程能力。
四、教学资源为了支持本章节的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:《C语言编程思想》。
3.多媒体资料:PPT课件、视频教程。
4.实验设备:计算机、编程环境。
五、教学评估为了全面、公正地评估学生在数组学习方面的掌握情况,将采用以下评估方式:1.平时表现:通过课堂提问、讨论和实验操作等环节,评估学生的参与度和理解程度。
2.作业:布置与数组相关的编程作业,评估学生对数组操作的掌握情况。
3.考试:包括期中考试和期末考试,题目将涵盖数组的概念、声明、初始化、访问以及数组排序等知识点。
4.平时表现:积极参与课堂活动,回答问题准确,讨论中能提出自己的见解。
5.作业:编程作业要求正确实现数组相关功能,代码规范,注释清晰。
6.考试:满分100分,60分为及格。
中国矿业大学(北京)《C语言程序设计》课件第6章数组
find_i=Search(a, N, x);//调用下边的函数查找
if(find_i==-1)
/*find_i的值没变,表示没找到*/
printf("not found!");
else
printf("found!,a[%d]=%d\n",find_i,a[find_i]);
}
//函数功能:用顺序查找法在具有n个元素的数组a中查找x,返回第一次出现的下标。
int i; for (i=0; i<n; i++) {
if (a[i] == x) {
return (i);//找到返回下标。 } } return (-1);//没找到返回-1 }
22
例5完整程序(方法一)
#include <stdio.h>
#define N 200
int Search(int a[], int n, int x);
//虽然在时间上要先定义函数,但往往将函数定义放在main()之后。
int Search(int a[], int n, int x)
{ int i;
for (i=0; i<n; i++)
{ if (a[i] == x)
return (i); //找到返回下标。
}
return (-1);//没找到返回-1 }
scanf("%d",&a[i]); max_i=Max_i(a,N); //调用函数求a中最大值对应的 下标
printf("\n The maximum score is %d :\n ", a[max_i]); }
《C语言程序设计与数据结构》第7章 数组
C语言程序设计与数据结构
7.1.3 一维数组元素的赋值
数组定义之后,如果不对其进行初始化,则其值可通过赋值语句获 或者可从键盘、文件等读取获得。现以从键盘接收数据为例: 【例7.1】从键盘输入十个数据给数组a赋值,然后把数组a的值复制到数组 b中。 main( ) { int a[10],b[10],i; for(i=0;i<10;i++) scanf(" %d",&a[i]); for(i=0;i<10;i++) b[i]=a[i]; for(i=0;i<10;i++) printf("%d",b[i]); }
C语言程序设计与数据结构
7.2 二维数组
二维数组:数组元素是双下标变量的数组。二维数组的数组 素可以看作是排列为行列的形式(矩阵)。二维数组也用统一的数组名 标识,第一个下标表示行,第二个下标表示列。下标从0开始。 7.2.1 二维数组的定义与初始化 7.2.1.1 二维数组的定义 二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2]; 其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标 的长度。 例如: int a[3][4]; 说明了一个三行四列的数组,数组名为a,其下标变量的 类型为整型。该数组的下标变量共有3×4个,即: a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后 顺次放入第二列。在C语言中,二维数组是按行排列的。
数组(c语言版本)
数组元素访问示例: array[2] = 100;
知识讲解
3.一维数组元素的引用
注意: 数组的索引都有一个范围,为“0~数组长度-1”。 假设数组array的长度为6,则其下标范围为0~5。 当访问数组中的元素时,下标不能超出这个范围, 否则程序会报错。
案例实现
1.案例设计
对案例进行分析,案例设计步骤如下。
知识讲解
1.数组的概念
数组是一种存储相同数据类型的数据集合,数组的每个成员被称为数组的元素。 数组中的元素都有一个索引标示位置,索引从0开始。
如果把数组看作是一个用小格子盛放数据的容器,那么,存放数据的小格子编号,可 以看做是数组的索引。
元素1 元素2 元素3 … 元素n
0
1
2
… n-1
知识讲解
//就交换两个元素的位置 temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}}}
知识讲解
2.选择排序
选择排序的原理与冒泡排序不同,它是 指通过每一趟排序过程,从待排序记录 中选择出最大(小)的元素,将其依次 放在数组的最前或最后端,最终实现数 组的排序。
学习目标/Target
掌握二维数组定义与初始化,能够定义二维数组并完成初始化 掌握二维数组元素的引用,能够通过索引访问二维数组元素 了解二维数组的内存结构,能够说出二维数组在内存中的存储特点
章节概述/ Summary
前面章节中学习的都是基本数据类型,使用基本数据类型只能处理单个零散的变量,如果 要批量处理数据,使用基本数据类型的变量操作比较复杂。为了批量处理数据,C语言提 供了数组类型,本章将详细讲解数组相关知识。
C语言程序设计 CPD_07 更多课件请进我文库
7.4.6 字符串的输入输出
北京工商大学 何渝
字符串的输入输出常有两个办法: 1. 直接用cin和cout输入输出字符串,如: char cs[100]; cin >> sc; cout << sc; 2. 利用C++提供的处理字符串的标准函数库中的 若干函数,如输入字符串的函数: strcpy(char string1[ ], char string2[ ]) 它的功能为将串string1复制到string2中。 char c1[10]={"hello!\n"}, c2[20]; cout << strcpy(c1,c2); //c1中的字符串被复制到c2中,并输出
二维数组的元素在内存中是按行存放,先行后列。
8
计算机程序设计基础
北京工商大学 何渝
二、三维数组的定义与二维类似,如:int b[2][3][2];
它表示定义了一个三维数组 b,有 2*3*2=12个元素,在内存中的存放顺序 如右图所示。更高维的都类似。 而一个二维数组可看成是一个二维矩 阵,若有一m*n的数组,它的第 i 行第 j 列元素的位置公式为: i*n+j+1 比如有一个二维数组 a[3][4],它的a21 号元素的位置为第2*4+1+1=10个。 a00 a = a10 a20 a01 a11 a21 a02 a12 a22 a03 a13 a23
10
计算机程序设计基础
北京工商大学 何渝
二、部分初始化
static int m[2][3]={ {1,2}, {1} }; 结果为: 1 2 0 1 0 0 同理, static int g[ ][3]={ {1}, {1,2}, {1,2,3} }; 结果为: 1 0 0 1 2 0 1 2 3
C语言数组的定义PPT课件
1.为什么要引入数组
前面各章所使用的数据都属于 基本数据类型(整型、实型、字符型) C语言除了提供基本数据类型外,还提供了 构造类型的数据(数组类型、结构体类型、共 同体类型)。 构造数据类型是由基本数据类型的数据按照一 定的规则组成,所以也称为“导出类型”。
Page 4
1.为什么要引入数组
• 下列是不正确的 • Int a=5; • Int b[a];
Page 12
举例: int n;
scanf(“%d”,&n);
int a[n];
/*在程序中临时输入数 组的大小 */
数组说明中其他常见的错误
① float a[0]; /* 数组大小为0没有意义 */
② int b(2)(3); /* 不能使用圆括号 */ ③ int k, a[k]; /* 不能用变量说明数组大小*/
成员 a[0]
a1]
a[2]
a[3]
a[4]
地址 #2000 #2002 #2004 #2006 #2008
Page 15
2、一维数组
4)类型说明:指的是数据元素的类型,可以是 基本数据类型,也可以是构造数据类型。类型 说明确定了每个数据占用的内存字节数。
2 Int a[5]//表示向系统申请了( 5 )x 字节大小的内存空间,共
Page 7
1.为什么要引入数组
下面简单介绍一下数组概念: 1、数组:一组具有相同数据类型的数据的有序的 集合。 2、数组元素:构成数组的数据。数组中的每一个 数组元素具有相同的名称,不同的下标,可以作为 单个变量使用,所以也称为下标变量。 3、数组的下标:是数组元素的位置的一个索引或 指示。 4、数组的维数:数组元素下标的个数。根据数组 的维数可以将数组分为一维、二维、三维、多维数 组。
《C语言程序设计》课件 第五章 数组
a(5948)
a[2](5964) a[1](5956) a[0](5948) 图 5-10
a[2][1] (5968) a[2][0] (5964) a[1][1] (5960) a[1][0] (5956) a[0][1] (5952) a[0][0](5948)
return 0;
}
5.1.4一维数组程序举例
3.用选择法对输入的n个学生的单科成绩进行 从小到大排序。
编程思路: 直接选择排序的过程是:首先在所有数据中找出值 最小(最大)的数据,把它与第1个数据交换,然后 在其余的数据中找出值最小(最大)的数据,与第2 个数据交换......依次类推,这样,n个数据经过n-1轮 交换后可得到有序结果。
printf("%3d ",a[i]); printf("\n"); return 0; }
5.1.3 一维数组的初始化 5.1.3 一维数组的初始化
数组初始化常见的格式:
1.用大括号括起来的常量表达式列表,常量表达式 之间用逗号进行分隔: int a[10]={1,2,3,4,5,6,7,8,9,10};
注意:
不要将a[i][j]写成a[i,j],否则编译系统会将逗号分隔 符作为逗号运算符处理,即将a[i,j]视为a[j]。
5.2.2二维数组元素的引用
可以将二维数组看成是特殊的一维数组。
例如,二维数组a[3][2]可以看成是长度为3的一维数组, 所含的3个数组元素分别为:a[0]、a[1]、a[2]
for(i=0;i<3;i++) for(j=0;j<5;j++)
《C语言程序设计基础与实训教程》第7章:数组
/webnew/
7.1.4 一维数组的应用举例
例7.4 编写程序,定义一个含有20个元素的数组,并完成以下操作。 (1)调用C库函数中的随机函数给所有的元素赋以10~50之间的随机数; (2)输出数组元素中的值; (3)按顺序对每隔四个数求一个和数,保存和数并输出。 分析:调用随机函数的方法如下:在程序开头包含头文件stdio.h,通 过函数random(x)得到一个0到x之间的随机整数,因此,可以通过10+ random(40)产生一个10~50之间的随机数。 题目要求按顺序对每隔四个数求一个和数,20个元素将得到5个和数。 20 5 和数要求保存并输出,所以,必须再定义一个一维数组用于和数的保存。 程序 运行结果如图:
/webnew/
7.1.1 一维数组的定义
1、一维数组的定义格式 C语言中,定义一维数组的一般形式为: 类型说明 数组名 [常量表达式]; 其中,类型说明中的类型是指数组元素的数据类型,它们可以是基本类型, 如int 、float等,也可以是构造类型。数组名 [常量表达式]为数组说明符,数 组名是数组的标识符,其命名遵循标识符的命名规则。常量表达式表示该数 组中元素的个数,即数组容量或数组长度,可以是整型常量、字符常量以及 有确定值的常量表达式,其值必须是正整数。 例如:int a[10]; /*定义一个名为a的一维数组,数组中有10个数组元素*/ float b[‘A’],c[3*5]; int a1[MAX],b1,c1; /*MAX为一符号常量*/
/webnew/
7.1.3 一维数组元素的引用
2.一维数组的输入与输出 一维数组的输入与输出 如何给数组元素赋值以及如何将数组元素的值输出是数 组最基本的操作。下面将讨论一维数组元素的输入与输出。 例7.1 定义一个五个元素的字符型数组,通过键盘给每 个元素赋值,并以相反的顺序的输出。 程序1 程序2 从上面的例子可以看出,一个数组中往往往包含较多的 数组元素,相同的赋值或输出操作将被重复多次进行,所以, 一维数组元素的输入与输出一般通过一重循环来实现。
《C语言程序设计》第7章数组
{temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; }; printf("\nthe result of sort:\n"); /*输出排序后的数据*/ for(i=0; i<NUM; i++) printf("%d ",data[i]);
}
7.2 2维数组的定义和引用
1 0 0 0
int a[3][4]={{1},{0,6}, {0,0,11}}; 0 6 0 0
0 0 11 0
int a[3][4]={{1},{5,6}};
1 0 0 0 5 6 0 0 0 0 0 0
int a[3][4]={{1},{}, {9}};
1 0 0 0 0 0 0 0 9 0 0 0
(1)首先将相邻的A[1]与A[2]进行比较,如果 A[2]的值小于A[1]的值,则交换两者的位置, 使较小的下沉,较大的上浮;接着比较A[2]与 A[3],同样使小的下沉,大的上浮。依此类推, 直到比较完A[n-1]和A[n]后,A[n]为具有最大排 序码(数值)的元素,称第一趟排序结束。
(2)然后在A[1]~A[n-1]区间内,进行第二趟排
7.3.2 字符数组的初始化
字符数组的初始化,可以通过为每个数 组元素指定初值字符来实现。
如:
char c[10]={‘I’,’□’,’a’,’m’,’□’,’h’,’a’,’p’,’p’,’y’};
char c2[ ]={‘c’,’h’,’i’,’n’,’a’}; char d[2][3]={{‘□’,’*’,’□’},{‘*’,’□’,’*’}};
x x[0] —— x[0][0] x[0][1] x[0][2] x[0][3] x[1] —— x[1][0] x[1][1] x[1][2] x[1][3] x[2] —— x[2][0] x[2][1] x[2][2] x[2][3]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.1 数据结构与数组的概念
影响程序设计的因素除算法外还有数据结构。
■数据结构概念
编写一个程序除了重视算法的设计外,还需重 视数据类型的选择,即选择合适的数据类型来存 放要处理的数据。在程序设计中,数据类型就称 为数据结构,选择合适的数据类型实际上就是进 行数据结构的设计。
ppt课件
1
ppt课件
16
(3)对100个学生的分数统计出每分一档人数。
0? 1? 2? 3? 4? ┇ ┇ 99 ?
#define N 100 main() { iinntt ii,a,,an;[N+1];
}
对于很多个数的排序用变量会很复杂而用数组会 使算法很简单。
ppt课件
4
■数组的概念
一组具有同样类型的数据的集合 统一用一个名字代表---数组名(代表一组数) 将一组数用一个名字代表,便于管理。
int a[10]
数组名
数组大小
ppt课件
5
数组中的各成员称数组元素,由数组 名加下标唯一地确定。
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
用数组 eg7-4
float aver=0;
for(i=0;i<N;i++) scanf(“%d”,&a[i]);
for(i=0;i<N;i++) aver+=a[i];
aver/=N;
n=0;
for(i=0;i<N;i++) if(a[i]>aver)n++;
printf(“\n %d”,n);
}
ppt课件
8
■引用 逐个引用其元素,不能进行整体引用。 引用的一般形式:
数组名[下标]
如:a[0]=50; a[1]=100; a[2]=a[0]+a[1];
与 a2=a0+a1有根本性的区别:下标可变。
ppt课件
9
例:从键盘输入10个数。 用变量:(不方便)
scanf(“%d%d%d%d%d%d%d%d%d%d ”,
&a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a 8,&a9);
用数组: (灵活方便)
for(i=0;i<10;i++) scanf(“%d”,&a[i]);
用循环控制输入个数和下标的变化。
注意下标的变化范围。
ppt课件
10
■初始化 eg7-0 在定义数组的同时给数组赋初值。
int a[10]={0,1,2,3,4,5,6,7,8,9}; int a[10]={0,1,2,3,4}; int a[]={0,1,2,3,4};
for(i=0;i<100;i++) { scanf(“%d”,&a);
{ scanf(“%d”,&a); if(a>aver)n++;
aver+=a;
}
}
printf(“\n %d”,n);
aver/=100;
}
数据ppt结课件 构不合理
15
#define N 100
main() { int i,a[N],n;
for(i=0;i<100;i++)
{ scanf(“%d”,&a);
if(a>max) max=a;
if(a<min) min=a;
aver+=a;
}
aver/=100;
printf(“\n %d,%d,%f”,max,min,aver);
}
ppt课件
13
#define N 100
main() { int i,a[N],max,min;
aver+=a[i]; } aver/=N;
找最大最小的位置? eg7-3
printf(“\n %d,%d,%f”,max,min,aver);
}
ppt课件
14
(2)统计高于平均分的人数。
main()
用变量
{ int i,a,n;
n=0;
float aver=0;
for(i=0;i<100;i++)
数组元素
下标
只有一个下标的数组称为一维数组; 可有二维数组、三维数组、…、七维数组。
ppt课件
6
7.2 一维数组的定义和引用 ■定义 一般形式: 类型符 数组名[常量表达式];
int a[10]; float b[10];
类型符 数组名 长度 作用:分配一组连续的内存单元
ppt课件
7
说明: ●数组必须先定义后使用。 ●数组名的命名规则与变量相同。 ●常量表达式表示元素的个数(长度),下标 从0开始。 ●常量表达式不能包含变量,即不允许作动态 定义。
ppt课件
3
对于三个数的排序:
main() {
仍可用变量作 为数据结构
int a,b,c,t;
scanf(“%d,%d,%d”,&a,&b,&c);
if(a<b) {t=a; a=b; b=t;}
if(a<c) b<c) {t=b; b=c; c=t; }
printf(“\n %d,%d,%d”,a,b,c);
ppt课件
11
■应用举例 (1)对100个学生的分数统计最高分、最低 分和平均分。
两种方法: 用变量作为存放初始数据的数据结构 用数组作为存放初始数据的数据结构
ppt课件
12
main()
{ int i,a,max,min; float aver=0; max=0; min=100;
用变量 eg7-1
在程序设计中有格言:
数据结构+算法=程序 说明数据结构与算法同等重要,算法依赖于 数据结构,对于同一个问题的求解,可以采 用不同的数据结构和不同的算法,对不同的 数据结构有不同的算法,其复杂程度也会不 同,选择合适的数据结构,可以降低算法的 复杂程度。因此,在程序设计中应重视数据 结构的设计。
ppt课件
2
例:求任意100个数中的最大值。
main()
{ int i,a,max; max=-32768 for(i=1;i<=100;i++)
用一个简单变量作为 数据结构,合理,算 法简单
{
scanf(“%d”,&a);
if(a>max) max=a;
}
printf(“\n max=%d”,max);
}
float aver=0;
用数组 eg7-2
for(i=0;i<N;i++) scanf(“%d”,&a[i]);
mamxa=xa=[00];; mmiinn==0a;[0];
for(i=0;i<N;i++)
{ if(aif[(i]a>[im]>aax[)mmaaxx])=ma[ai]x;=i;
if(ai[fi(]a<[im]<ina)[mmiinn]=) am[ii]n;=i;