- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
研究式学习—C程序设计(第四章)
10
一维数组的定义
1一、维定义数了组一定个义名的为一a的般一形维式数组为。:
2、方括类号中型的名10规数定组了名a数[组常长量度表为1达0,式即]有10个元素,它
们例分如别:是ian[0t]、aa[1[]1、0a][2;]、a[3]、……a[7]、a[8]、a[9]。
count=0; sum=0;
printf("Input %d scores:" N);
for (i=0; i<N; i++ )
{ scanf ("%d", &score[i] ) ; /* 输入N个学生的成绩 */
sum+=score[i] ;
}
/* 求总分 */
average=sum/N;
/* 求平均分 */
第1行 a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
第2行 a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
研究式学习—C程序设计(第四章)
19
main() 程序 { int i,j;
二维数组—程序
float s[3][5]={ {24001,97.2,87.7,93.6,0},
5
数组-—问题分析(2)
1 成成绩绩存存储储形形式式
在C与语n 使言个用中学普,生通允的(许成基用绩一分本个数类名可型字视)来为变命一量名组一同n样个类,类型使型的用相一数同组组的数数存据据放,。数 并据把之这前样,的要数对据数类组型进称行为定数义组。。存 储 n 个 成 绩 数 据 的 数 组 例sco如res可co以re定[0义],如sc下or:e[1]……score[i](0<i<n),其中 score 为数组名,i为某个学生成绩数据存放数组score中
要建立则以b下[0]概、念b[:i]、b[i+k]都是对b数组元素的合法引用,其中0, i标1数, .表i据+k达类一, 式称型个必为的数须下变组大标量元于表能素等达实进于式质行零。上的并由就运小于是算于定或一1义0操个0了。作同b类,数注型也组意变适有:量用10b。于0[i个+因同k元]此类中素,型,,对数i+因k基组此只本元下是 一素个。下标表达式。
外语 93.6 90.7 91.9
总分
研究式学习—C程序设计(第四章)
18
二维数组—问题分析
学生成绩表是一个由3行和5列组成的表格或矩阵。其中 每一行记录一个学生各科成绩及总分。而每一列是某门课成 绩或总分。存储这样由3行5列共15个数据组成的表格,可以
使用二fl维oa数t组a。[3所][谓5二];维数组,是指数组中的每个元素都有
{ min=a[i]; k=i;}
printf(" 数 组 中 最 小 值 的 元 素 下 标 为 % d, 其 值 是 : %4d",k,min);
}
研究式学习—C程序设计(第四章)
16
程序
一维数组—应用举例
例3 将数组中数据按逆序存放后输出,不允许再另外开辟
新数组。
分析:逆序存放数组的算法为:假设数组有n个元素,
各元素按照下标递增的顺序存放,如下所示:
a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8]a[9]
研究式学习—C程序设计(第四章)
11
一维数组的引用
只能逐个引用数组元素,而不能一次引用整个数组(字符数组除 外)。引用形式如下:
数组名[下标表达式]
其中,下标可以是整型表达式。例如定义了b数组: int b[100];
int a[5]={0,1,2,3,4} /*依次把花括弧中数据赋给a[0]到a[4]*/
对数组全部元素赋初值时,可不指定长度。例如:
int a[ ]={1,2,3,4,5,6,7,8}
编译系统按初值个数确定该数组长度。上数组等价于:
int a[8]={1,2,3,4,5,6,7,8}
2、对数组的部分元素赋初值。如: int a[5]={1,2,3};
则第一个元素与最后一个元素交换,第二个元素与倒数第 二个元素交换,依次类推直到交换n/2次后,逆序存放完成。 当n为偶数时进行两两交换;当n为奇数时,中间那个数不
用交换。如图所示。
a[0],a[1], a[2],… a[n-3],a[n-2],a[n-1]
交换
for(i=0;i<n/2;i++)
程序清单看教科书
int i,k,min;
min=a[0]/* 将数组中第一程个元序素运的行值结作果为为比较:基准 */
k=0;
/* 将a[0]下标值赋给变量k */
for(i=1; i<5;i++) /*数循组环中完最成选小出值数的组元元素素中下标*/
if(min>a[i]) /*的为最3小, 其值和值最是小:值6对应下标 */
for(i=0;i<5;i++) printf(“%3d”,a[i]) ;}
研究式学习—C程序设计(第四章)
14
一维数组—应用举例
例 2 输入100个整型数据,找出其中最大值并显示出来。
main() {int buffer[100],max,i; for(i=0;i<100;i++)
scanf(“%d”,&buffer[i]); max=buffer[0]; for(i=1;i<100;i++)
if (score[i]>averange) count++;
研究式学习—C程序设计(第四章)
8
数组 程序
#define N 1I0napvuetra1g0es=c7o7res,c:o7—u0n8程t=0 65序8 92 88 76 96 60 56 90
main()
{ int i, count, sum, average; int score[N];
i=0: sum=0+score[0] i=1: sum=score[0]+score[1] i=2: sum= +score[2] i=3: sum= +score[3]
... i=99: sum= +score[99]
用平均分与各数组元素逐一比较,并记下大于平均
分的数组元素的个数。
for(i=0 ;i<100; i++)
初值个数为3少于数组元素个数5,表示只给数组前三个元素赋 值,后两个元素a[3],a[4]编译系统给赋初值0。 3、如果程序中没有为静态数组赋初值,则编译系统自动为其 赋初值0。
研究式学习—C程序设计(第四章)
13
程序
一维数组—应用举例
例 1 一维数组的定义和引用。
main() { int a[5]={9};
两个下标。其中第一个下标为行下标。第二个下标为列下标。
由于数a数组只组能的存逻储辑相结同类构型可的视数为据具,在有本如题下中形,式把学的号3行及各4 门列课的成矩绩阵定(义或为实表型格,)都:能兼顾。
假设第用0列二维第数1组列a来第存2储列数据第:3列 第4列 第0 行 a[0][f0l]oaat[0a][[13]][a5[]0;][2] a[0][3] a[0][4]
研究式学习—C程序设计(第四章)
7
数组-—问题分析(4)
3 求出平均分
首先需要把100个同学的分数累加 来,也就是把100个数组元素的 值相加后,再求平均值。 for(i=0 ;i<100; i++) sum=sum+score[i]; averange=sum/100;
4 求出高于平均分的学生人数
2. 一个数组不能整体引用。例如不能用b代表b[0]到b[99]这 100个元素。 C语言中,数组名是一地址常量。它代表整个数组 的首地址。关于这方面的内容将在第六章指针中详细讨论。
研究式学习—C程序设计(第四章)
12
一维数组的初始化
在定义数组的同时给数组赋初值,称为初始化 。 1、对数组的全部元素赋初值。如:
{ t=a[i];a[i]=a[n-i-1]; a[n-i-1]=t;例} 4.3
研究式学习—C程序设计(第四章)
17
二维数组—问题的提出
问题:某小组有3人,要求计算每人考试成绩总 分,期末考试成绩如下 :
学号 24001 24002 24003
语文 97.2 87.5 78.6
数学 87.7 92.3 81.9
第四章
数组(一)
研究式学习—C程序设计(第四章)
1
上讲主要内容
➢ 什么是循环结构? ➢ 循环语句 ➢ 语法练习 ➢ 编程练习
研究式学习—C程序设计(第四章)
2
本章主要内容
➢ 一维数组
◆ 概念的引入 ◆ 一维数组的定义、引用及初始化 程序举例
➢ 二维数组
研究式学习—C程序设计(第四章)
3
数组—问题的提出
for (i=0 ; i<N; i++ )
if (score[i] >average ) /* 比较当前成绩是否高于平均分 */
count++;
/* 若高于平均分,计数器加1 */
printf("\naverage=%d, conut=%d", average, count );
}
研究式学习—C程序设计(第四章)
int i;
程序运行结果为: /* 定义输整入数数型组数第组五a并个初元始素化的*值/ :5
a[1]=8;