c语言大学实用教程数组新课件.pptx
《c语言大学实用教程数组新课件.pptx》由会员分享,可在线阅读,更多相关《c语言大学实用教程数组新课件.pptx(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/2/171 如何计算一个班级学生的平均分数?如何计算一个班级学生的平均分数?如何计算一个班级学生的平均分数?如何计算一个班级学生的平均分数?如何记录直线上的整数点?如何记录直线上的整数点?如何记录直线上的整数点?如何记录直线上的整数点?比如比如比如比如(0 0,0 0)、()、()、()、(1 1、1 1)、()、()、()、(2 2、2 2)、()、()、()、(3 3、3 3)、()、()、()、(4 4、4 4)、()、()、()、(5 5、5 5)。)。)。)。数组数组2023/2/172问题:问题:问题:问题:给一组数排序,这组给一组数排序,这组给一组数排序,这组给一组数排
2、序,这组 数该数该数该数该 如何存放呢如何存放呢如何存放呢如何存放呢?这些数据如何存放才便于排序82945637617188888888881111111111111118 8 88888888这便是本章所要解决的问题第第6 6章章 数组数组数组数组2023/2/173内容提要内容提要内容提要内容提要 数组类型;数组类型;数组类型;数组类型;向函数传递一维数组和二维数组;向函数传递一维数组和二维数组;向函数传递一维数组和二维数组;向函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值等;常用算法:排序、查找、求最大最小值等;常用算法:排序、查找、求最大最小值等;常用算法:排序、查找、
3、求最大最小值等;用字符数组存取字符串;用字符数组存取字符串;用字符数组存取字符串;用字符数组存取字符串;使用字符串处理函数处理字符串使用字符串处理函数处理字符串使用字符串处理函数处理字符串使用字符串处理函数处理字符串2023/2/174数组的用处数组的用处数组的用处数组的用处 保存大量同类型的相关数据保存大量同类型的相关数据保存大量同类型的相关数据保存大量同类型的相关数据如矩阵运算,表格数据等如矩阵运算,表格数据等如矩阵运算,表格数据等如矩阵运算,表格数据等 构造数据类型之一构造数据类型之一构造数据类型之一构造数据类型之一 数组数组数组数组:有序数据的集合有序数据的集合有序数据的集合有序数据的
4、集合,用数组名标识用数组名标识用数组名标识用数组名标识 元素元素元素元素:属同一数据类型属同一数据类型属同一数据类型属同一数据类型,用数组名和下标确定用数组名和下标确定用数组名和下标确定用数组名和下标确定2023/2/175 6.1 一维数组一维数组的定义:数据类型 数组名常量或常量表达式;合法标识符表示元素个数下标从0开始例 int a6;编译时分配连续内存内存字节数=数组定义的元素个数*sizeof(元素数据类型)数组名表示内存首地址,是地址常量a014523a00145a1a2a3a4a523a2023/2/176一维数组的引用v数组必须先定义,后使用v只能逐个引用数组元素,不能一次引用
5、整个数组v数组元素表示形式:数组名下标其中:下标可以是整型常量或整型表达式 以0开始,到n-1结束例 int a10;printf(“%d”,a);()必须 for(j=0;j10;j+)printf(“%dt”,aj);()例 int data5;data5=10;/C语言对数组不作越界检查,使用时要 注意下标越界是大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果2023/2/177数组的定义与初始化数组的定义与初始化数组的定义与初始化数组的定义与初始化 数组定义后的初值仍然是随机数,一般需要我们来初数组定义后的初值仍然是随机数,一般需要我们来初数组定
6、义后的初值仍然是随机数,一般需要我们来初数组定义后的初值仍然是随机数,一般需要我们来初始化始化始化始化 intint a5=12,34,56,78,9;a5=12,34,56,78,9;intint a5=0;a5=0;intint a=11,22,33,44,55;a=11,22,33,44,55;数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化#define#define SIZE 10 SIZE 10intint aSIZE;aSIZE;数组大小定义好后,将永远
7、不变数组大小定义好后,将永远不变数组大小定义好后,将永远不变数组大小定义好后,将永远不变2023/2/178一维数组的初始化v初始化方式 在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)int a5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;v说明:l数组不初始化,其元素值为随机数l对static数组元素不赋初值,系统会自动赋以0值l当全部数组元素赋初值时,可不指定数组长度如 int a5=6,2,3;等价于:a0=6;a1=2;a2=3;a3=0;a4=0;如 int a3=6,2,3,5,1;()static int a5;等价于:a0=0;a1
8、=0;a2=0;a3=0;a4=0;l只给部分数组元素赋初值 int a=1,2,3,4,5,6;编译系统根据初值个数确定数组元素个数2023/2/179 float a0;float a0;float a0;float a0;/*/*/*/*数组大小为数组大小为数组大小为数组大小为0 0 0 0没有意义没有意义没有意义没有意义*/*/*/*/int b(2)(3);int b(2)(3);int b(2)(3);int b(2)(3);/*/*/*/*不能使用圆括号不能使用圆括号不能使用圆括号不能使用圆括号*/*/*/*/int k,ak;int k,ak;int k,ak;int k,ak
9、;/*/*/*/*不能用变量说明数组大小不能用变量说明数组大小不能用变量说明数组大小不能用变量说明数组大小*/*/*/*/数组说明中其他常见的错误数组说明中其他常见的错误数组说明中其他常见的错误数组说明中其他常见的错误2023/2/1710数组的特点数组的特点数组的特点数组的特点 快速地随机访问快速地随机访问快速地随机访问快速地随机访问 一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小2023/2/1711只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)输入方法:输入方法:输入方法:输入方法:int a10,i;输入第
10、输入第输入第输入第i i个数组元素:个数组元素:个数组元素:个数组元素:scanf(%d,&ai);输入整个数组元素输入整个数组元素输入整个数组元素输入整个数组元素:for(i=0;i10;i+)scanf(%d,&ai);输出方法:输出方法:输出方法:输出方法:输出第输出第输出第输出第i i个数组元素:个数组元素:个数组元素:个数组元素:printf(%d,ai);输出整个数组元素:输出整个数组元素:输出整个数组元素:输出整个数组元素:for(i=0;i10;i+)printf(%d,ai);一维数组的输入和输出一维数组的输入和输出一维数组的输入和输出一维数组的输入和输出2023/2/171
11、2程序举例例 将10个整数存入数组,并打印输出。#include#define SIZE 10main()int xSIZE=0,1,2,3,4,5,6,7,8,9;int i;for(i=0;iSIZE;i+)printf(%d ,xi);#include#define SIZE 10main()int xSIZE,i;printf(Enter 10 integers:n);for(i=0;iSIZE;i+)scanf(%d,&xi);for(i=1;iSIZE;i+)printf(%d,xi);2023/2/1713程序举例例 读10个整数存入数组,找出其中最大值和最小值步骤:1.输入:f
12、or循环输入10个整数2.处理:(a)先令max=min=x0(b)依次用xi和max,min比较(循环)若maxxi,令min=xi3.输出:max和min#include#define SIZE 10main()int xSIZE,i,max,min;printf(Enter 10 integers:n);for(i=0;iSIZE;i+)scanf(%d,&xi);max=min=x0;for(i=1;iSIZE;i+)if(maxxi)min=xi;printf(Maximum value is%dn,max);printf(Minimum value is%dn,min);2023/
13、2/1720例例例例6.1 6.1 兔子繁殖问题兔子繁殖问题兔子繁殖问题兔子繁殖问题 打印每个月和年底时的总的兔子对数打印每个月和年底时的总的兔子对数打印每个月和年底时的总的兔子对数打印每个月和年底时的总的兔子对数 FibonacciFibonacci数列数列数列数列 1 1 2 2 3 3 5 5 8 8 1313 2121 3434 5555 8989 144144 233233,2023/2/1721例例例例6.16.1#includeinclude#definedefine YEAR_MONTH 12 YEAR_MONTH 12mainmain()()intint fYEAR_MONT
14、H+1=0,1,2;fYEAR_MONTH+1=0,1,2;intint month;month;forfor(month=3;month=YEAR_MONTH;month+)(month=3;month=YEAR_MONTH;month+)fmonth=fmonth-1+fmonth-2;fmonth=fmonth-1+fmonth-2;forfor(month=1;month=YEAR_MONTH;month+)(month=1;month=YEAR_MONTH;month+)printfprintf(%dt,fmonth);(%dt,fmonth);printfprintf(nsum=%
15、dn,fYEAR_MONTH);(nsum=%dn,fYEAR_MONTH);2023/2/1722例例例例6.2 6.2 打印出最高分及其学生序号打印出最高分及其学生序号打印出最高分及其学生序号打印出最高分及其学生序号 从键盘输入信管从键盘输入信管从键盘输入信管从键盘输入信管1 1班学生高数成绩(每班最多班学生高数成绩(每班最多班学生高数成绩(每班最多班学生高数成绩(每班最多不超过不超过不超过不超过4545人,具体人数由键盘输入人,具体人数由键盘输入人,具体人数由键盘输入人,具体人数由键盘输入),),试编程输试编程输试编程输试编程输出最高分及其学生序号。出最高分及其学生序号。出最高分及其学生
16、序号。出最高分及其学生序号。2023/2/1723max(i=0)max(i=2)max(i=3)计算最大值算法计算最大值算法计算最大值算法计算最大值算法2023/2/1724 Step1 Step1 从键盘输入学生人数从键盘输入学生人数从键盘输入学生人数从键盘输入学生人数n n;Step2 Step2 从键盘输入所有学生的学号和成绩分别存入数组从键盘输入所有学生的学号和成绩分别存入数组从键盘输入所有学生的学号和成绩分别存入数组从键盘输入所有学生的学号和成绩分别存入数组numnum和和和和scorescore Step3 Step3 假设其中的一个学生成绩为最高,同时记录其学号,即令假设其中的
17、一个学生成绩为最高,同时记录其学号,即令假设其中的一个学生成绩为最高,同时记录其学号,即令假设其中的一个学生成绩为最高,同时记录其学号,即令maxScore=score0maxScore=score0maxNum=num0maxNum=num0;Step4 Step4 对所有学生成绩进行比较,即对所有学生成绩进行比较,即对所有学生成绩进行比较,即对所有学生成绩进行比较,即 for(i=0;in;i+)for(i=0;i maxScorescorei maxScore,则修改则修改则修改则修改maxScoremaxScore值为值为值为值为scoreiscorei,并记录其学号并记录其学号并记录
18、其学号并记录其学号maxNum=numimaxNum=numi;Step5 Step5 打印最高分打印最高分打印最高分打印最高分maxScoremaxScore及其学号及其学号及其学号及其学号maxNummaxNum。例例例例6.2 6.2 算法算法算法算法 2023/2/1725.main()main().forfor(i=0;in;i+)(i=0;in;i+)scanf(%ld%f,&numi,&scorei);scanf(%ld%f,&numi,&scorei);maxScoremaxScore =score0;=score0;forfor(i=1;in;i+)(i=1;i maxSco
19、re)(scorei maxScore)maxScoremaxScore =scorei;=scorei;printf(maxScore=%.0fn,maxScore);printf(maxScore=%.0fn,maxScore);例例例例6.2 6.2 打印最高分打印最高分打印最高分打印最高分2023/2/1726.main()main().forfor(i=0;in;i+)(i=0;in;i+)scanf(%ld%f,&numi,&scorei);scanf(%ld%f,&numi,&scorei);maxScore=score0;maxScore=score0;maxNum=num0;
20、maxNum=num0;forfor(i=1;in;i+)(i=1;i maxScore)(scorei maxScore)maxScore=scorei;maxScore=scorei;maxNum=numi;maxNum=numi;printf(maxScore=%.0fprintf(maxScore=%.0f,maxNum=,maxNum=%ld%ldn,maxScore,n,maxScore,maxNummaxNum););例例例例6.2 6.2 打印最高分及其打印最高分及其打印最高分及其打印最高分及其学生序号学生序号学生序号学生序号 用函数实现?用函数实现?用函数实现?用函数实现?同
21、时输出最高分和最低分及其同时输出最高分和最低分及其同时输出最高分和最低分及其同时输出最高分和最低分及其学生序号,该如何改写程序呢学生序号,该如何改写程序呢学生序号,该如何改写程序呢学生序号,该如何改写程序呢?2023/2/1727#includeinclude#definedefine ARR_SIZE 40 ARR_SIZE 40float FindMax(float arr,int n);float FindMax(float arr,int n);mainmain()()floatfloat scoreARR_SIZE,maxScore;scoreARR_SIZE,maxScore;in
22、tint n,i;n,i;printf(Please enter total number:);printf(Please enter total number:);scanf(%d,&n);scanf(%d,&n);printf(Please enter the score:n);printf(Please enter the score:n);forfor(i=0;in;i+)(i=0;in;i+)scanf(%f,&scorei);scanf(%f,&scorei);maxScore=FindMax(score,n);maxScore=FindMax(score,n);printf(ma
23、xScore=%.0fn,maxScore);printf(maxScore=%.0fn,maxScore);float float FindMax(float arr,int n)FindMax(float arr,int n)floatfloat max;max;intint i;i;max=arr0;max=arr0;forfor(i=1;in;i+)(i=1;i max)(arri max)max=arri;max=arri;return max;return max;现场编程现场编程现场编程现场编程用函数实现打印最高分用函数实现打印最高分用函数实现打印最高分用函数实现打印最高分202
24、3/2/1728数组名作函数参数数组名作函数参数数组名作函数参数数组名作函数参数 P174-6.3P174-6.3 传递整个数组到另一个函数内,传递整个数组到另一个函数内,传递整个数组到另一个函数内,传递整个数组到另一个函数内,可以将数组的可以将数组的可以将数组的可以将数组的首地址首地址首地址首地址作为参数作为参数作为参数作为参数传过去传过去传过去传过去用数组名作为函数参数用数组名作为函数参数用数组名作为函数参数用数组名作为函数参数只拷贝一个地址自然比拷贝全部只拷贝一个地址自然比拷贝全部只拷贝一个地址自然比拷贝全部只拷贝一个地址自然比拷贝全部数据效率高数据效率高数据效率高数据效率高由于首地址相
25、同,故实参数组与由于首地址相同,故实参数组与由于首地址相同,故实参数组与由于首地址相同,故实参数组与形参数组占用同一段内存形参数组占用同一段内存形参数组占用同一段内存形参数组占用同一段内存在该函数内,不仅可以读这个数在该函数内,不仅可以读这个数在该函数内,不仅可以读这个数在该函数内,不仅可以读这个数组的元素,还可以修改它们组的元素,还可以修改它们组的元素,还可以修改它们组的元素,还可以修改它们2023/2/1729 简单变量和数组作函数参数简单变量和数组作函数参数简单变量和数组作函数参数简单变量和数组作函数参数的区别的区别的区别的区别2023/2/1730 用数组名作函数参数时,此时形参应当用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 大学 实用教程 数组 新课
限制150内