《C语言》教案第五章
更新时间:2023-05-21 08:17:01 阅读量: 实用文档 文档下载
- 《C语言》中图分类号是推荐度:
- 相关推荐
第五章 数组及其应用 构造数据类型之一 [ ] :数组运算符 数组:有序数据的集合,用数组名标识 单目运算符 元素:属同一数据类型,用数组名和下标确定 优先级(1)
§5.1 一维数组5.1.1 一维数组的定义 定义方式: 例 int a[6];合法标识符
左结合 不能用( )
数据类型
数组名[常量表达式];表示元素个数 下标从0开始
a
0 1 2
3 数组名表示内存首地址, 4 是地址常量 5
a[0] a[1] a[2] a[3] a[4] a[5]
编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型)
例 int i=15; 例 int data[5]; int data[i]; ( 不能用变量定义数组维数) data[5]=10; //C语言对数组不作越界检查,使用时要 注意
一维数组的引用
数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名[下标] 其中:下标可以是常量或整型表达式 例 int a[10]; printf(“%d”,a); ( ) 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]);
( )
5.1.3 一维数组的初始化 初始化方式
int a[5]={1,2,3,4,5}; 在定义数组时,为数组元素赋初值 等价于:a[0]=1; (在编译阶段使之得到初值) a[1]=2; a[2]=3; a[3]=4; a[4]=5; 说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度
如 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}; ( )
#include <stdio.h> 5.1.4 一维数组程序举例#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); }
例 用数组求Fibonacci数列前20个数
#include <stdio.h> main() { int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0) printf("\n"); printf("%12d",f[i]); } }
0 1 2
3 4 5
1 1 2 3 5 ……...
f[0] f[1] f[2] f[3] f[4] f[5]
19
f[19]
f[19]
例 用冒泡法对10个数排序
排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交 换;然后比较第二个数与第三个数;依次类推,直至第n-1 个数和第n个数比较为止——第一趟冒泡排序,结果最大 的数被安置在最后一个元素位置上 (2
)对前n-1个数进行第二趟冒泡排序,结果使次大的数 被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
如果有n个数,则要进行n-1趟比较,在第j趟比较中要进行 n-j两两比较
例
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
38 13 49
13 38 27 38 13 38 30 27 38 30 49
13 27 30 38
13 27 30
1327
49 27 13 49 30 27 49 3065
76 第 二 趟第 三 趟 第 四 趟 第 五 趟 第 六 趟 第 七 趟
输入n 个数给a[1] 到 a[n] for j=1 to n-1 for i=1 to n-j 真 a[i]>a[i+1]
a[i] a[i+1] 输出a[1] 到 a[n]
#include <stdio.h> main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); 假 for(j=1;j<=9;j++) for(i=1;i<=10-j;i++) if(a[i]>a[i+1]) {t=a[i]; a[i]=a[i+1]; a[i+1]=t;} printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
#define N 6 数组定义:必须用常量表达式 main() { int a[N],b[ B -60],c[]={1,2,3,4,5,6},i; for(i=0;i<N;i++) scanf(“%d%d”,&a[i],&b[i]); for(i=0;i<N;i++) 数组元素引用 printf(“%d ”,a[i]); printf(“\n”); for(i=0;i<N;i++) printf(“%d ”,b[i]); printf(“\n”); for(i=0;i<N;i++) Ch6_001.c c[i]=a[i]+b[N-i-1]; for(i=0;i<N;i++) printf(“%d ”,c[i]); }
§5.2 二维数组5.2.1 二维数组的定义
定义方式: c[0][1][1] 5 数据类型 数组名[常量表达式][常量表达式]; c[0][1][2] 6 数组元素的存放顺序 例 int a[3][4]; float b[2][5]; 原因:内存是一维的 int c[2][3][4]; 二维数组:按行序优先 int a[3,4]; ( ) 多维数组:最右下标变化最快0 1 2
0 c[0][0][0] c[0][0][1] 1 c[0][0][2] 2 元素个数=行数*列数c[0][0][3] 列数 3 int c[2][3][4] 行数 4 c[0][1][0]c[0][1][3] c[0][2][0] c[0][2][1] c[0][2][2] c[0][2][3] c[1][0][0] c[1][0][1] c[1][0][2] c[1][0][3] c[1][1][0] c[1][1][1] c[1][1][2] c[1][1][3] c[1][2][0] c[1][2][1] c[1][2][2] c[1][2][3]
7………...
int a[3][2]
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
3 4 5
a[0][0] a[0][1] a[1][0] a[1][1] 20 a[2][0] 21 a[2][1] 22 23
二维数组理解二维数组a是由3个元素组成0 1 2 3 4 5 6 7 8 9 10 11 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]
a[0]
例 int a[3][4];2000 2002 a[0] a[0][0] a[0][1] 1 3 2008 2010 a[1] a[1][0] a[1][1] 9 11 2016 2018 a[2] a[2][0] a[2][1] 17 19 行名 2004 a[0][2] 5 2012 a[1][2] 13 2020 a[2][2] 21 20006 a[0][3] 7 2014 a[1][3] 15 2022 a[2][3] 23
a[1]
a[2]
每个元素a[i]由包含4个元素 的一维数组组成
5.2.2 二维数组的引用形式: 数组名[下标][下标]
5.2.3 二维数组的初始化 分行初始化:
部分初始化 全部初始化 第一维长度省略初始化
部分初始化 按元素排列顺序初始化 第一维长度省略初始化 全部初始
化 例 int a[2][3]={{1,2,3},{4,5,6}}; 例 int a[2][3]={{1,2},{4}}; 例 int a[][3]={{1},{4,5}}; 例 intint2a[2][3]={1,2,4}; 1例 a[2][3]={1,2,3,4,5,6}; 5 3 4 6 1 2 0 4 0 0 例 int 0 a[][3]={1,2,3,4,5}; 1 0 4 5 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 11 22 34 40 50 60 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 3 4 5 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
5.2.4 二维数组程序举例例 将二维数组行列元素互换,存到另一个数组中 #include <stdio.h> 1 4 a= 1 2 3 main() b= 2 5 4 5 6 { int a[2][3]={{1,2,3},{4,5,6}}; 3 6 int b[3][2],i,j; printf("array a:\n"); printf("array b:\n"); for(i=0;i<=1;i++) for(i=0;i<=2;i++) { for(j=0;j<=2;j++) { for(j=0;j<=1;j++) { printf("%5d",a[i][j]); printf("%5d",b[i][j]); b[j][i]=a[i][j]; printf("\n"); } } printf("\n"); } }
#include <stdio.h> 例 求二维数组中最大元素值及其行列号 main() { int a[3][4]={{1,2,3,4}, {9,8,7,6}, max=a[0][0] {-10,10,-5,2}}; for i=0 to 2 int i,j,row=0,colum=0,max; for j=0 to 3 max=a[0][0]; for(i=0;i<=2;i++) a[i][j]>max 真 假 for(j=0;j<=3;j++) if(a[i][j]>max) max=a[i][j] row=i { max=a[i][j]; colum=j row=i; colum=j; 输出:max和row,colum } printf("max=%d,row=%d, \ colum=%d\n",max,row,colum); }
例 读入下表中值到数组,分别求各行、各列及表中所有数之和 #include <stdio.h> 12 4 6 main() 84 23 322 { int x[5][4],i,j; 12 6 15 7 934 for(i=0;i<4;i++) 8 23 3 for(j=0;j<3;j++) 27 5 17 15 9 31 scanf("%d",&x[i][j]); 2 5 17 24 for(i=0;i<3;i++) 37 39 35 111 x[4][i]=0; for(j=0;j<5;j++) for(i=0;i<5;i++) x[j][3]=0; { for(j=0;j<4;j++) for(i=0;i<4;i++) printf("%5d\t",x[i][j]); for(j=0;j<3;j++) printf("\n"); { x[i][3]+=x[i][j]; } x[4][j]+=x[i][j]; } x[4][3]+=x[i][j]; }
§5.3 字符数组5.3.1 字符数组的定义 ch[3][4]; 例 char c[10],
5.3.2 字符数组的初始化 逐个字符赋值 用字符串常量逐个字符赋值 用字符串常量 用字符串常量 逐个字符赋值 逐个字符赋值 有问题!
5.3.3 字符数组的引用例例charch[5]={ H , e , l , l , o }; char ch[6]={“Hello”}; 例 char ch[5]={ B , o , y }; 例 char ch[5]={ H , e , l , l , o }; char ch[5]=“Boy”; char ch[6]=“Hello”; H B charoch[]=“Hello”; \0 e ll y ll o \0 H e o\0 ch[0]H ch[1]e ch[2]l ch[3]l ch[4]o ch[0] ch[1] ch[2] ch[3] ch[4] ch[0] ch[1] ch[2] ch[3] ch[4] ch[0] ch[1] ch[2] ch[3] ch[4] ch[5]
二维字符数组初始化 二维字符数组初始化
例 char diamond[][5]={{'.', '.','*'},{'.','*','.','*'}, {'*', '.', '.', '.' ,'*'},{'.','*', '.','*'},{'.', 例 char fruit[][7]={“Apple”,”Orange”, '.','*'}};diamond[0] . . p * p r . a
”Grape”,”Pear”,”Peach”};* \0 \0
diamond[1] A fruit[0] . diamond[2] O fruit[1] *
.l.n .p *r c
e* g. e*
\0 e \0
\0 \0* \0 \0 \0
diamond[3] G fruit[2] . diamond[
4] P fruit[3] . fruit[4] P
r * a
e .e
aa
\0\0 \0h \0
\0 \0\0
例 输出一个字符串0
I a m a b o y
#include <stdio.h> main() { char c[10]={'I',' ','a','m',' ','a',' ','b','o','y'}; int i; for(i=0;i<10;i++) printf("%c",c[i]); printf("\n"); }
1 2 3 4 5 6 7 8 9
5.3.4 字符串和字符串结束标志 无字符串变量,用字符数组处理字符串 字符串结束标志:‘\0’
例 hello”共5个字符,在内存占6个字节 字符串长度5h e l l o \0 0
104 101 108 108 111
内存存放字符ASCII码
5.3.5 字符数组的输入输出 逐个字符I/O: %c 整个字符串I/O: %s 例 用%c main() { char str[5]; int i; for(i=0;i<5;i++) 例 用%s scanf(“%c”, &str[i]); main() for(i=0;i<5;i++) { char printf(“%c”, str[i]); str[5]; } scanf(“%s”, str); printf(“%s”, str);} 用字符数组名,不要加& 输入串长度<数组维数 遇空格或回车结束 自动加‘\0
用字符数组名, 遇‘\0 结束
例 main( ) { char a[5]={ H , e , l , l , o }; printf(“%s”,a); } 结果:Hello#-=* 例 main( ) { char a[ ]=“Hello”; printf(“%s”,a); } 结果:Hello
0
1
2
3
4
h
e
l
l
o
用 %s”输出时,遇‘\0 结 束
正在阅读:
《C语言》教案第五章05-21
《儒林外史》读后感心得600字左右04-16
幼儿园大班的毕业典礼诗歌05-03
资源枯竭型城市治理措施(德国鲁尔区的探索) - 图文04-19
人教版小学数学四年级下册第一单元综合能力提升练习题05-11
应届毕业生面试自我介绍范文06-11
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 教案
- 语言
- 2015教育及心理学考试题
- 空间目标的拓扑关系及其GIS应用分析
- 上课用4.1果胶酶在果汁生产中的作用
- 黑龙江省2008年高考作文范文作文展示
- 社会工作专业英语的专业词汇
- 杭州市余杭高级中学
- 福建农林大学_文献检索与利用期末考卷
- 2010-2011大学物理4-1试卷库王育慷2
- 招生就这么简单--电话技巧
- 急性心肌梗死患者的临床护理体会
- 逐步求精和分治法
- 深圳市钣金加工行业协会专家委员会章程
- 2015-2020年中国水产品零售市场分析预测及发展趋势研究报告
- 汽车电子辅助驱动-ADC测量和规范应用攻略
- 身份证号变更证明
- 糯东矿职工培训教师管理工作相关单位(责任人)工作职责、工作标准
- 系统自带可删除软件列表,给你的安卓瘦身
- 大学生创业心得体会
- 2014年七年级英语下册Unit7课本知识点
- 信息技术使城乡小学英语差距缩小