欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    数组和指向数组的指针C语言课件.ppt

    • 资源ID:6579173       资源大小:1.01MB        全文页数:44页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数组和指向数组的指针C语言课件.ppt

    数组和指向数组的指针,第6章,6.2 一维数组,第6章,(1)数组的类型就是数组各个元素的类型,对于一个数组,所有元素的数据类型都是相同的。(2)数组名取名规则与变量名相同,遵守标识符命名规则。(3)数组名后是用方括弧括起来的可以是常量、常量表达式或符号常量,不能是变量。(4)所有数组元素共用一个名字,用下标来区别每个不同元素。下标从0开始,按照下标顺序依次连续存放。如:a0,a1,a2,。(5)常量表达式表示元素个数,即数组的长度。如:int a10表示a数组有10个元素。,一维数组的定义,格式:类型说明符 数组名常量表达式;,6.2 一维数组,第6章,说明:常量列表可以是数值、字符常量或字符串常量,数组元素的初值必须依次放在一对花括号内。,一维数组的初始化,格式:类型说明符 数组名下标=常量列表;,6.2 一维数组,第6章,说明:下标可以是整型常量或整型表达式。例如:a1,a2*2。若要对一维数组的连续多个元素引用或操作,可用一重循环实现。如:for(i=0;i10,;+)printf(“%4d”,ai);,6.2.3 一维数组元素的引用,格式:数组名下标,6.2 一维数组,第6章,【例6.1】用一维数组,求10个学生的单科平均成绩。程序思路与框架:main()定义循环变量 i,求和累加器s=0,定义数组a10并初始化;循环for(i=0;i=9;i+)对10个数求和后赋值给变量s 循环结束,求平均分;打印输出平均分;,一维数组应用举例,6.2 一维数组,第6章,程序代码:#include main()int i,s=0,a10=78,89,54,90,89,70,100,56,67,95;/*给数组a的10个元素初始化赋值*/float ave;for(i=0;i10;i+)s=s+ai;/*用循环对10个数求和后赋值给变量s*/ave=s/10.0;/*计算平均分*/printf(“ave=%.2fn”,ave);/*平均分按实型输出,小数点保留2为小数*/,一维数组应用举例,6.2 一维数组,第6章,程序代码:#include main()int i,s=0,a10=78,89,54,90,89,70,100,56,67,95;/*给数组a的10个元素初始化赋值*/float ave;for(i=0;i10;i+)s=s+ai;/*用循环对10个数求和后赋值给变量s*/ave=s/10.0;/*计算平均分*/printf(“ave=%.2fn”,ave);/*平均分按实型输出,小数点保留2为小数*/,一维数组应用举例,运行结果为:ave=78.80,6.2 一维数组,第6章,【例6.2】对10个学生成绩,求出最高分和最低分。分析:用【例6.1】的10个学生成绩,定义2个变量,分别用来存放求出的最高分和最低分。程序思路与框架:main()定义循环变量 i,存放最大和最小值变量amax,amin,定义数组a10存放数据;用循环语句输入10个数 scanf(%d,i+)用条件语句对10个数求最高分,赋值给变量amax 用条件语句对10个数求最低分,赋值给变量amin 循环结束,输出最高分和最低分;,一维数组应用举例,6.2 一维数组,第6章,程序代码:#include main()int i,amax,amin,a10;printf(input 10 numbers:n);/*人机会话方式提示输入数据*/for(i=0;iai)amin=ai;/*用循环对10个数求最小值赋值给变量amin*/Printf(“n最高分=%dn最低分=%dn”,amax,amin);/*打印最高分和最低分*/,一维数组应用举例,input 10 numbers:78 89 54 90 89 70 100 56 67 95(回车键)最高分=100 最低分=54,6.3 二维数组,第6章,说明:常量表达式1设置二维数组的行数,常量表达式2设置二维数组的列数。,二维数组的定义,格式:类型说明符 数组名常量表达式1常量表达式2,6.3 二维数组,第6章,二维数组的初始化,格式:类型说明符 二维数组名行下标列下标=常量列表,;,6.3 二维数组,第6章,二维数组的引用,格式:数组名行下标列下标,6.3 二维数组,第6章,二维数组应用举例,【例6.4】显示3个学生的信息:学号、数学、英语、计算机、总分、平均分。分析:应该设二维数组,3个人每人6项内容,所以大小应为 int student36,最后2列分别为存放总分和平均分。,程序代码:#include main()int student36=201101,78,93,82,201102,67,83,72,201103,55,83,62;int i,j;printf(学号 数学 英语 计算机 总分 平均分 n);for(i=0;i3;i+)for(j=0;j6;j+)printf(%-12d,studentij);/*打印student数组的数据*/printf(n);,6.4 字符型数组与字符串,第6章,字符数组的定义,一维字符数组的定义格式:char 数组名常量表达式;例如:char a10;二维字符数组的定义格式:char 数组名常量表达式1常量表达式2;例如:char b34;,6.4 字符型数组与字符串,第6章,字符数组的初始化,对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。如:char c10=I,a,m,h,a,p,p,y;等价于:c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;以上定义C为字符数组,包含10个元素,赋值后数组的状态如图所示。,字符数组赋值后的状态,6.4 字符型数组与字符串,第6章,字符数组的引用,用字符数组的下标指定要引用的数组元素。一维字符数组的引用格式:数组名 下标 二维字符数组的引用格式:数组名 行下标 列下标,6.4 字符型数组与字符串,第6章,字符数组的引用,【例6.6】输出一个字符串。#include main()char c10=I,a,m,h,a,p,p,y;int i;for(i=0;i10;i+)printf(“%c”,ci);printf(“n”);,运行结果为:I am happy,6.4 字符型数组与字符串,第6章,字符串,在C语言中,“字符串常量”是用双引号括起来的一串字符,并用0(ASCII码值为0)作为字符串的结束标志,它占一个字节的内存空间,但不计入串的长度。C语言中没有专门的字符串变量,所以用字符型一维数组存储字符串。1用字符串常量给字符数组赋初值(初始化)例如:char c6=“China”;说明:(1)如果提供的字符个数大于数组长度,系统报错。(2)如果提供的字符个数小于数组长度,则在最后一个字符后添加0作为字符串结束标志。,6.4 字符型数组与字符串,第6章,字符数组的输入和输出,1逐个字符输入和输出 用格式“%c”输入或输出一个字符,如【例6.7】。逐个输入字符结束后,系统不会自动在末尾添加0,因此输出时也用格式符“%c”逐个输出字符。2整个字符串输入和输出 用格式符“%s”输入或输出字符串。例如:char c=“China”;printf(“%s”,c);,6.4 字符型数组与字符串,第6章,字符串处理函数,1字符串输出函数 格式:puts(字符数组名或字符串)功能:将一个字符串(以0为结束标志)输出到终端。输出的字符串中可以包含转义字符。例如:char str=“ChinanBei jing”;puts(str);输出:China Bei jing 在输出时系统将字符串结束标志0转换成n,即输出完字符串后换行。,6.4 字符型数组与字符串,第6章,字符串处理函数,2字符串输入函数 格式:gets(字符数组)功能:从终端输入一个字符串(可包含空格)以回车为输入结束标志,将接收到的字符依次赋值给字符数组各个元素,并自动在字符串末尾加结束标记0。例如:gets(str);注意:用puts和gets函数只能输入或输出一个字符串,不能写成:puts(str1,str2);或:gets(str1,str2);,6.4 字符型数组与字符串,第6章,字符串处理函数,3连接两个字符串函数 格式:strcat(字符串1,字符串2)功能:把字符串2中的字符连接到字符串1的字符后面,结果放在字符串1中,函数调用后得到一个函数值,即字符串1的起始地址。例如:char str130=“peoples republic of”;char str2=“china”;printf(“%s”,strcat(str1,str2);输出:peoples republic of china,6.4 字符型数组与字符串,第6章,字符串处理函数,4字符串拷贝函数 格式:strcpy(字符数组,字符串或字符数组)功能:将字符串或拷贝到字符数组中去。例如:char str110,str2=“china”;strcpy(str1,str2);/*或strcpy(str1,“china”);*/执行后str1的内容为:china00000,6.4 字符型数组与字符串,第6章,字符串处理函数,5.字符串比较函数 格式:strcmp(字符串1,字符串2)功能:比较字符串1和字符串2的大小。说明:按照ASCII码值大小将两个字符串自左至右逐个字符比较,直到出现不同的字符或遇到0为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个不相同字符的比较结果为准返回函数值。字符串1=字符串2,函数值=0;字符串1字符串2,函数值0;字符串1字符串2,函数值0。,6.4 字符型数组与字符串,第6章,字符串处理函数,6测试字符串长度函数 格式:strlen(字符数组)功能:测试字符串长度,函数返回值为字符串中实际长度,不包括0。例如:char str10=“china”;printf(“%d”,strlen(str);结果:5 7字符串小写函数 格式:strlwr(字符串)功能:将字符串中大写字母转换成小写字母。lwr是lowercase(小写)的缩写。8字符串大写函数格式:strupr(字符串)功能:将字符串中小写字母转换成大写字母。upr是uppercase(大写)的缩写。,6.4 字符型数组与字符串,第6章,字符数组应用举例,例6.8】输入一个字符串,将其中的大写字母均变成小写字母。程序代码:#include#include main()char s40;printf(“请输入一个字符串:”);gets(s);/*输入一个字符串,保存在s数组中*/strlwr(s);/*将s数组的字符串大写字母均变成小写字母*/printf(“输出转换后的字符串:”);puts(s);,运行:输入一个字符串:AB cd Ef 输出转换后的字符串:abcdef,6.5 指针与数组,第6章,一维数组的指针与指针变量的引用,1指向一维数组元素的指针 数组名代表该数组的首地址,即数组中第一个元素的地址。将一维数组名赋给一个指针变量,则该指针变量即指向一维数组的起始地址。2通过指针引用一维数组元素 给指针赋值p=a;或p=是等价的,它们都是把数组a的起始地址赋给指针变量p。,6.5 指针与数组,第6章,一维数组的指针与指针变量的引用,【例6.11】用二种不同的方法输出数组中的10个元素值。方法1:用下标法#include main()int a10=1,2,3,4,5,6,7,8,9,10;int i;for(i=0;i10;i+)printf(%3d,ai);/*用下标法输出数据*/,运行结果:1 2 3 4 5 6 7 8 9 10,6.5 指针与数组,第6章,一维数组的指针与指针变量的引用,【例6.12】找出下面程序中的错误。#include main()int*p,i,a10;p=a;/*p指向第1个元素a0的地址*/for(i=0;i10;i+)*p+=i;/*i 的值从0到9分别赋值给a0到a9中*/for(i=0;i10;i+)printf(a%d=%dn,i,*p+);/*打印a数组中的数据*/,6.5 指针与数组,第6章,6.5.2 二维数组的指针与指针变量的引用,1指向二维数组元素的指针 指向二维数组元素的指针可以采用两种定义形式。(1)用普通指针变量指向数组元素 例如:int a23,*p;p=a;p是一个指向整型数组元素的指针变量,每次p+,指针移动到下一个元素的地址。(2)用行指针变量指向数组元素 二维数组可以看成是由多个一维数组构成,即每行是一个一维数组,则行指针变量是指向每一行数组元素的起始地址。格式:类型(*变量名)常量表达式;,6.5 指针与数组,第6章,6.5.2 二维数组的指针与指针变量的引用,2指针引用二维数组元素【例6.13】用指针变量输出数组元素的值。(1)用普通指针变量引用数组元素。#include main()int a=1,3,4,5,6,7,8,9,10,11,12;int i,j,*p=a;for(i=0;i3;i+)for(j=0;j4;j+)printf(“%3dn”,*p+);/*p+先取指针所指地址中的值,然后指针向后移动*/,运行:1 2 3 4 5 6 7 8 9 10 11 12,6.6 指针数组,第6章,指针数组的定义,如果一个数组的所有元素都是相同类型的指针,则称为指针数组。一般格式:类型说明符*数组名数组长度 例如:int*p3 表示p是一个指针数组,有三个数组元素,每个元素值都是一个指针(地址),这些指针都是指向整型变量的。,6.6 指针数组,第6章,6.6.2 指针数组的引用,可以定义一个与二维数组相同类型的指针数组,通过这个指针数组访问二维数组。例如:int a44,*p4;for(i=0;i4;i+)pi=ai;把这个二维数组各行的首地址赋予指针数组p,让p0、p1、p2、p3分别指向各行的开头。与普通数组的规定一样,指针数组在内存区域中分配连续的存储空间,这时指针数组名就表示该指针数组的存储首地址。指针数组在说明的同时可以进行初始化。,6.6 指针数组,第6章,6.6.2 指针数组的引用,例如:字符指针数组的初始化与输出。#include main()/*定义并初始化指针数组*/char*books=Computer,English,Mathematics,Chinese,Accounting;int i;for(i=0;i5;i+)printf(No.%d-%sn,i+1,books i);/*指针数组中存放的是每本书的起始地址*/,6.7 程序设计举例,第6章,排序是我们日常生活中经常遇到的问题,如学生成绩排序、比赛排名、家电销售量排名等,它们的数据不同,但是处理方法是相同的。冒泡排序法是排序中比较经典的算法,特点是先找最大数,该算法又称“石头下沉”法。其思路是:将相邻两个数比较,将小数调到前面,大数调到后面。以6个整数排序为例,第一趟的比较如图6-16所示:,图6-16 冒泡法排序第一趟的比较图,6.7 程序设计举例,第6章,【例6.15】用冒泡法对10个学生的数学成绩由小到大排序。程序思路与框架:main()定义变量和一维数组a11,根据习惯从a1a10,a0不用;for循环语句输入10个整数 scanf(%d);for(j=1;j=9;j+)用二重循环进行排序;for(i=1;i=10-j;i+)用if比较相邻2个数,小数交换到前面;输出排序后的10个整数;,6.7 程序设计举例,第6章,程序代码:#include main()int i,j,t,a11;printf(please input 10 numbers:n);/*人机会话方式输入数据*/for(i=1;iaj+1)/*相邻数比较,若前面数大于后面的数则交换*/t=aj;aj=aj+1;aj+1=t;/*两个数交换*/printf(the sorted numbers:n);for(i=1;i=10;i+)/*用循环输出排序后的10个整数*/printf(%4d,ai);printf(n);,运行结果:Please input 10 numbers:81 90 74 52 92 65 76 100 45 79 the sorted numbers:45 52 65 74 76 79 81 90 92 100,6.7 程序设计举例,第6章,【例6.16】上例中对10个学生的成绩进行了排序,现在插入一个学生的成绩89分,要求新插入的成绩在原来有序的数列中仍然保持有序。分析:该问题是一个插入排序问题,即在一个有序的数组中,插入一个数。插入分3种情况:当插入的数比已有的数都小,在最前面插入又称头插入、中间插入、比所以的数都大时尾插入。尾插入操作最简单,直接放入最后即可,头插入和中间插入操作基本相同,找到插入位置后,原来位置的数据需要向后移动,这样所有的数据都要向后移动,空出插入数据的位置,才能保证原来有序的数据仍然保持有序。,6.7 程序设计举例,第6章,程序思路与框架:main()定义数组大小为11,定义变量 i,num,end,t;输出已经有序的10个原始数据;输入插入的数据num;把最后一个数放入变量end中;若numend 则尾插入a10=num;否则,用循环查找插入位置for(i=0;inum,找到了插入位置,记下i的值t=i,停止查找;从后向前移动位置,空出待插入数据的位置;for(i=9;i=t;i-)ai+1=ai;插入数据 at=num;打印插入数后的数组 printf(%5d,ai);,6.7 程序设计举例,第6章,程序代码:#include main()int a11=45,52,65,74,76,79,81,90,92,100,i,num,end,t;printf(原始数据:n);for(i=0;iend)a10=num;/*若新插入的数大于end,则尾插入*/else,6.7 程序设计举例,第6章,程序代码:for(i=0;inum)t=i;break;/*若数组中的某个数据num,则记下当前位置,中断循环*/for(i=9;i=t;i-)/*数据向后移动,空出要插入的位置*/ai+1=ai;/*因为a11是空的,所以整体向后移动到t下标位置*/at=num;/*空出的位置,插入新数据*/printf(插入一个数后的排序数据:n);for(i=0;i11;i+)printf(%5d,ai);/*打印插入一个数据后的排序数据*/printf(n);,6.7 程序设计举例,第6章,【例6.17】从键盘输入年、月、日,计算该日是该年的第几天。思路:定义一个二维数组,第一行数据为非闰年的数据,第二行数据为闰年的数据。判断是否闰年,是leap=1,取第二行数据求和,否则leap=0,取第一行数据求和。程序代码:#includemain()int year,month,day,total,i,leap;int mtable13=0,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31;printf(“请输入年 月 日:”);scanf(“%d%d%d”,,6.7 程序设计举例,第6章,【例6.17】从键盘输入年、月、日,计算该日是该年的第几天。思路:定义一个二维数组,第一行数据为非闰年的数据,第二行数据为闰年的数据。判断是否闰年,是leap=1,取第二行数据求和,否则leap=0,取第一行数据求和。程序代码:scanf(“%d%d%d”,,运行结果为:请输入年 月 日:2012 08 10 2012年8月10日是该年的223天。,E-mail:,网址:,地址:大连市软件园路80号,大连理工大学出版社,谢谢观看,

    注意事项

    本文(数组和指向数组的指针C语言课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开