第4章 数组与字符串 《C语言程序设计及应用教程》课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<stdio.h> void main() { int m[2][3],n[3][2],i,j; for(i=0;i<2;i++) { for(j=0;j<3;j++)
{ printf(“输入数组m第%d行%d列的元素 的值:”i+1,j+1); scanf("%d",m[i]+j);/*输入二维数组*/
例:int m[3][4]={{1,2,3},{4,5}}; (5)对二维数组的全部元素赋初值,可省略第一维的声明, 但不能省略第二维的声明。
例:int m[][4]={1,2,3,4,5,6,7,8,9,10,11, 12}; (6)只对部分数组元素赋初值,又省略了第一维的声明,那 么应分行赋值,即使某行没有初值,也要保留该行的一对大括 号。
m[]1][ 3]
&m[0] &m[0][ &m[0][ &m[0][ &m[1][ &m[1][ &m[1][ &m[1][
[0]
1]
2]
3]
0]
1]
2]
3]
m[0] m[0]+1 m[0]+2 m[0]+3 m[1] m[1]+1 m[1]+2 m[1]+3 2000 2004 2008 2012 2016 2020 2024 2028
例: int m[ ][4]={{1,3},{ },{5,6,7},{8,9, 10,11}};
4.2.2 二维数组及元素的引用
格式:数组名[行下标][列下标]
功能:按行下标和列下标确定要访问的数组元素
说明: (1)下标与一维数组要求相同。 (2)对基本数据类型的变量所能进行的各种操作,也适合于 同类型的二维数组元素。
4.1.3 一维数组的应用
【例4-1】定义一维数组m,有10个整型数组元素,为数组m的 各元素赋值0、2、4、6、8、10、12、14、16、18,并输出,然 后再按逆序输出各数组元素。
#include<stdio.h> void main( ) { int i ,m[10]; for( i=0;i<10; i++)
for(i=0;i<N;i++) { printf("%6.2f",Score[i]); if((i+1)%10==0) printf("\n");
}}
程序运行结果如图4-2所示。
4.2 二维数组
4.3.1 二维数组的声明、定义与初始化 4.3.2 二维数组及元素的引用 4.3.3 二维数组的应用
} }printf("\n按行输出原始数值m:\n"); for(i=0;i<2;i++ ) { for(j=0;j<3;j++)
printf("%5d",m[i][j]); printf("\n"); }
for(i=0;i<3;i++) /*数组m转置 存入数组n*/
for(j=0;j<2;j++) n[i][j]=m[j][i];
printf("%4d ",m[k]);
for(i=0;i<10;i++)
printf("\n");
【例4-3】在体育课上,20个学生测试100m短跑,老师把学生成 绩一一记录下来,然后将学生按速度由快到慢排序。
算法分析:相邻两数比较,小的换到前面,大的换到后面。 (1)首先将N=20个元素存入一维数组Score[N]中利用随机函数rand()循环 生成学生100m跑的成绩。 (2)排序由轮循环和每轮内的次循环嵌套完成。轮循环为外循环,轮内的次 循环作为内循环。 (3)在第0轮循环内排序时,先将第0个元素和第1个元素比较,若 a[0]>a[1],则交换两个元素,然后进行第1个元素和第2个元素的比较,依次类 推,直至a[18]与a[19]比较后为止。这样,经过一遍比较,可使最大元素排到 a[19](即a[N-1])的位置上。 (4)在第1轮循环内排序时,只需扫描前面的n-1=19个元素,将次大元素排 到a[18]中。以此类推,经过N-2轮排序后,仅剩下一个元素,无须再排,因此N 个元素全部拍立儿到了排列到正确的位置上。
500 520 530 510 550 530
50”LED
1560 1600 1650 1620 1640 1660
52”3D
2340 2400 2450 2500 2530 2600
表4-4
红旗电器集团2013年上半年电视机销售价目表 (单位 元/台)
月份型号
29”LED 34”LED 40”LED 50”LED 52”LED3
二维数组的元素地址表示:一维数组名+偏移量
计算公式为:&m[i][j]=m[i]+j
其中i表示二维数组元素行号,j表示二维数组元素的列数、
列号。
二维数组地址分配表
数组
取址 符表 地示 址 偏移 量表

实际地址
m[0][ 0]
m[0][1] m[0][2] m[0][3]
m[1]0]
m[1][1] m[1][2]
m[i]=2*i; //为数组元素赋值
for(i=0;i<10;i++) printf("%d ", m[i]); printf("\n"); for(i=9;i>=0;i--) printf("%d ", m[i]); printf("\n");
}
【例4-2】从键盘上输入10个整型数据,倒序排列存储,再倒序
址 偏移量表 示
a
a+1 a+2 a+3 a+4 a+5 a+6 a+7
实际地址 2000 2004 2008 2012 2016 2020 2024 2028
4.1.2 一维数组元素的引用
数组必须声明或定义后,才能被使用
注意
(1)下标可以是整型表达式,其合法值的范围是0~数组长 度-1。
(2)数组元素也称为下标变量,它的引用方式和普通变量相 表如表4-3
,销售单价如表4-4。编程求解该厂2014年上半年每个月的销
售收入和上半年的总销售收入。
型号月 份 1 2 3 4 5 6
29”LED
350 280 250 200 200 200
34”LED
470 500 520 480 500 480
40”LED
for(i=0;i<N;i++) {Sec=rand()%6;
//随机生成跑步成绩中的整数秒
switch(Sec)
{
case 0: Sec=13;break;
case 2: Sec=15;break;
case 4: Sec=17;break;
case 1: Sec=14;break; case 3: Sec=16;break; case 5: Sec=18;break; }
第4章 数组与字符串 《C语言程序设 计及应用教程》课件
【内容摘要】
(1)知识点:数组的声明、定义、初始化;数组的访问;字符 型数组。
(2)难点:二维数组、二维数组的一维化处理、字符型数组的 访问、字符串函数
(3)重点:数组的定义与综合应用
本章节次
4.1 一维数组 4.2 二维数组 4.3 字符数组与字符串 4.4 数组综合应用举例
{
t=m[k];
for(i=0;i<10;i++)
m[k]=m[i-k-1];
{
m[i-k-1]=t;
printf("输入数组的第 %d 个元素:",i); }
scanf("%d",&m[i]);
puts("\n\n数组逆序\n");
}
for(k=0;k<10;k++)
printf("\n原输入数组\n");
二维数组的定义与赋值
类型说明符 数组名[整型常量表 达式1][ 整型常量表 达式2]={{常量列表},…};
常用方式有以下六种 (1)分行给所有元素赋值。
例: int m[2][3]={{1,2,3},{4,5,6}}; (2)不分行给二维数组所有元素赋以初值,即所有元素的 初值写在同一对大括号内,
4.2.3 二维数组的应用
【例4-4】从键盘上输入一个2×3的矩阵,将其转置后形成3×2 矩阵输出
算法分析: (1)矩阵a为2行3列的二维数组,转置阵矩阵b为3行2列的 二维数组。 (2)外层循环控制矩阵a的行,循环2次,控制变量为i;内 层循环控制列,循环3次,控制变量为j。 (3)循环体中将m[i][j]存入n[j][i]中。
Score[i]=Sec+random()%100/100.0; //整数秒加上随机生成的小数秒得到最 终成绩
printf("%6.2f",Score[i]); if((i+1)%10==0) printf("\n"); /*输出10个换行*/
}
printf("\n"); //冒泡排序
for(i=0;i<N-1;i++) /*轮循环,做N-1遍,即外循环*/ for(j=0;j<N-i-1;j++) //第i轮排序,每轮做N-i次比较 if(Score[j]>Score[j+1]) /*比较,判断是否交换*/ { t=Score[j]; Score[j]=Score[j+1]; Score[j+1]=t;} printf("\n 由快到慢排队后结果 \n");
4.2.1 二维数组的声明、定义与初始化
格式:类型 数组名[整型常量表达式1][整型常量表达式2];
功能: (1)按指定“数据类型”声明二维数组, (2)该数组有“行×列”个元素。 (3)为这些元素按次序申请一块连续的存储空间
说明: (1)数组类型可以是任何基本数据类型,也可以是后面章节将 要介绍的指针、结构等,数组名用标识符表示。 (2)两个整型常量表达式分别表示数组的行数和列数,行和列 下标均从0开始。 (3)数组元素占有连续的存储空间,各元素按行顺序排列存储。
一维数组的存储: 设系统为a数组分配的内存地址为第2000字节,因float型数据在 计算机内按4个字节存储,因此元素的地址表示法和机内的实际 地址如表4-1所示。
一维数组地址分配表
数组
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

取址符表 示
&a[0] &a[1] &a[2] &a[3] &a[4] &a[5] &a[6] &a[7]
数组概述
数组的概念: (1)根据基本数据类型构造出的一种新的数据类型,因此数组 属于构造类型。 (2)具有相同数据类型的一批数据的集合,数组的类型就是这 些数据的类型的代表,数组的名称就是这些数据的名称。 (3)元素:数组中的每一个数。用它们的编号即下标来标识。
4.1 一维数组
4.1.1 一维数组的声明、定义和初始化 4.1.2 一维数组元素的引用 4.1.3 一维数组的应用
例: int n[2][3]={1,2,3,4,5,6}; (3)只对每行的前几个元素赋初值,其余所有未赋初值的 元素默认为零(整型数组是0,实型数组是0.0,字符型数组是 ‘\0’)
例如:int m[2][3]={{1},{4,5}};
(4)只对前几行的前几个元素赋初值,则所有未赋初值的数 组元素默认为零。
4.1.1 一维数组的声明、定义和初始化
一维数组的声明:
格式:类型说明符 数组名[整型常量表达式];
功能:定义一个一维数组,整型常量表达式的值表示数组元素的 个数。 一维数组的定义:
类型说明符 数组名 [整型常量表达式]={初值1,初值2,……};
例: float a[5] = {0,1,2,3,4};
printf("\n转置矩阵n: \n"); /*输出矩阵n*/
for(i=0;i<3;i++ ) { for(j=0;j<2;j++) printf("%5d",n[i][j]);
printf("\n"); } }
【例4-5】红旗电器集团生产5种型号的电视机。在环境保护
、市场消费和价格导向的作用下,厂里挖潜改造,不断调整
#include<stdio.h>
#include<math.h> #include<conio.h>
#define N 20
void main() { float Score[N],t;
//声明实型成绩数组、临时变量
int i,j,Sec; printf(" //随机生成学生跑步成绩
学生100m跑原始成绩记录\n");
输出。
算法分析:倒序排列,可将数组中的第一个元素与最后一个元素交换,第二元 素与倒数第二个元素交换,依次类推,直到数组中间元素为止。
源程序如下: #include<stdio.h>
printf("%4d ",m[i]); //做数组的逆序
void main()
for(k=0;k<=i/2;k++)
{ int k,t,i,m[10];
相关文档
最新文档