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

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

数组和指向数组的指针,第6章,6.2 一维数组,第6章,(1)数组的类型就是数组各个元素的类型,对于一个数组,所有元素的数据类型都是相同的。 (2)数组名取名规则与变量名相同,遵守标识符命名规则。 (3)数组名后是用方括弧括起来的可以是常量、常量表达式或符号常量,不能是变量。 (4)所有数组元素共用一个名字,用下标来区别每个不同元素。下标从0开始,按照下标顺序依次连续存放。如a0,a1,a2,。 (5)常量表达式表示元素个数,即数组的长度。如int a10表示a数组有10个元素。,6.2.1 一维数组的定义,格式 类型说明符 数组名常量表达式;,6.2 一维数组,第6章,说明 常量列表可以是数值、字符常量或字符串常量,数组元素的初值必须依次放在一对花括号内。,6.2.2 一维数组的初始化,格式 类型说明符 数组名下标常量列表;,6.2 一维数组,第6章,说明 下标可以是整型常量或整型表达式。例如a1,a2*2。 若要对一维数组的连续多个元素引用或操作,可用一重循环实现。 如fori0;i10,; printf(“4d”,ai);,6.2.3 一维数组元素的引用,格式数组名下标,6.2 一维数组,第6章,【例6.1】用一维数组,求10个学生的单科平均成绩。 程序思路与框架 main 定义循环变量 i,求和累加器s0,定义数组a10并初始化; 循环fori0;i9;i 对10个数求和后赋值给变量s 循环结束,求平均分; 打印输出平均分; ,6.2.4 一维数组应用举例,6.2 一维数组,第6章,程序代码 include main int i,s0,a1078,89,54,90,89,70,100,56,67,95; /*给数组a的10个元素初始化赋值*/ float ave; fori0;i10;i ssai; /*用循环对10个数求和后赋值给变量s*/ aves/10.0; /*计算平均分*/ printf(“ave.2fn”,ave); /*平均分按实型输出,小数点保留2为小数*/ ,6.2.4 一维数组应用举例,6.2 一维数组,第6章,程序代码 include main int i,s0,a1078,89,54,90,89,70,100,56,67,95; /*给数组a的10个元素初始化赋值*/ float ave; fori0;i10;i ssai; /*用循环对10个数求和后赋值给变量s*/ aves/10.0; /*计算平均分*/ printf(“ave.2fn”,ave); /*平均分按实型输出,小数点保留2为小数*/ ,6.2.4 一维数组应用举例,运行结果为 ave78.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.4 一维数组应用举例,6.2 一维数组,第6章,程序代码 include main int i,amax,amin,a10; printf“ 10 numbersn“; /*人机会话方式提示输入数据*/ fori0;iai aminai; /*用循环对10个数求最小值赋值给变量amin*/ Printf“n最高分dn最低分 dn”,amax,amin; /*打印最高分和最低分*/ ,6.2.4 一维数组应用举例, 10 numbers 78 89 54 90 89 70 100 56 67 95(回车键) 最高分100 最低分54,6.3 二维数组,第6章,说明 常量表达式1设置二维数组的行数,常量表达式2设置二维数组的列数。6.3.1 二维数组的定义,格式 类型说明符 数组名常量表达式1常量表达式2,6.3 二维数组,第6章6.3.2 二维数组的初始化,格式 类型说明符 二维数组名行下标列下标常量列表,;,6.3 二维数组,第6章6.3.3 二维数组的引用,格式 数组名行下标列下标,6.3 二维数组,第6章6.3.4 二维数组应用举例,【例6.4】显示3个学生的信息学号、数学、英语、计算机、总分、平均分。 分析应该设二维数组,3个人每人6项内容,所以大小应为 int student36,最后2列分别为存放总分和平均分。,程序代码 include main int student36201101,78,93,82,201102,67,83,72,201103,55,83,62; int i,j; printf“学号 数学 英语 计算机 总分 平均分 n“; fori0; i3;i forj0;j6;j printf“-12d“,studentij; /* 打印student数组的数据 */ printf“n“; 6.4 字符型数组与字符串,第6章6.4.1 字符数组的定义,一维字符数组的定义格式 char 数组名常量表达式; 例如char a10; 二维字符数组的定义格式 char 数组名常量表达式1常量表达式2; 例如char b34;6.4 字符型数组与字符串,第6章6.4.2 字符数组的初始化,对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。如 char c10Ia,mh,a,p,p,y; 等价于 c0I; c1; c2a; c3m; c4; c5h; c6a; c7p; c8p; c9y; 以上定义C为字符数组,包含10个元素,赋值后数组的状态如图所示。字符数组赋值后的状态,6.4 字符型数组与字符串,第6章6.4.3 字符数组的引用,用字符数组的下标指定要引用的数组元素。 一维字符数组的引用格式 数组名 下标 二维字符数组的引用格式 数组名 行下标 列下标6.4 字符型数组与字符串,第6章6.4.3 字符数组的引用,【例6.6】输出一个字符串。 include main() char c10Ia,mh,a,p,p,y; int i; for(i0;i10;i) printf(“c”,ci); printf(“n”); 运行结果为 I am happy,6.4 字符型数组与字符串,第6章6.4.4 字符串,在C语言中,“字符串常量”是用双引号括起来的一串字符,并用0(ASCII码值为0)作为字符串的结束标志,它占一个字节的内存空间,但不计入串的长度。C语言中没有专门的字符串变量,所以用字符型一维数组存储字符串。 1 用字符串常量给字符数组赋初值(初始化) 例如char c6“China”; 说明 (1)如果提供的字符个数大于数组长度,系统报错。 (2)如果提供的字符个数小于数组长度,则在最后一个字符后添加0作为字符串结束标志。6.4 字符型数组与字符串,第6章6.4.5 字符数组的输入和输出,1逐个字符输入和输出 用格式“c”输入或输出一个字符,如【例6.7】。 逐个输入字符结束后,系统不会自动在末尾添加0,因此输出时也用格式符“c”逐个输出字符。 2整个字符串输入和输出 用格式符“s”输入或输出字符串。 例如 char c“China”; printf“s”,c;6.4 字符型数组与字符串,第6章6.4.6 字符串处理函数,1字符串输出函数 格式puts(字符数组名或字符串) 功能 将一个字符串(以0为结束标志)输出到终端。输出的字符串中可以包含转义字符。例如 char str“ChinanBei jing”; puts(str); 输出 China Bei jing 在输出时系统将字符串结束标志0转换成n,即输出完字符串后换行。6.4 字符型数组与字符串,第6章6.4.6 字符串处理函数,2字符串输入函数 格式gets(字符数组) 功能 从终端输入一个字符串(可包含空格)以回车为输入结束标志,将接收到的字符依次赋值给字符数组各个元素,并自动在字符串末尾加结束标记0。 例如gets(str); 注意用puts和gets函数只能输入或输出一个字符串,不能写成 puts(str1,str2); 或 gets(str1,str2);6.4 字符型数组与字符串,第6章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 china6.4 字符型数组与字符串,第6章6.4.6 字符串处理函数,4字符串拷贝函数 格式strcpy(字符数组,字符串或字符数组) 功能 将字符串或拷贝到字符数组中去。 例如 char str110,str2“china”; strcpy(str1,str2); /* 或strcpy(str1,“china”); */ 执行后str1的内容为 china000006.4 字符型数组与字符串,第6章6.4.6 字符串处理函数,5.字符串比较函数 格式strcmp(字符串1,字符串2) 功能 比较字符串1和字符串2的大小。 说明 按照ASCII码值大小将两个字符串自左至右逐个字符比较,直到出现不同的字符或遇到0为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个不相同字符的比较结果为准返回函数值。 字符串1字符串2,函数值0; 字符串1字符串2,函数值0; 字符串1字符串2,函数值0。6.4 字符型数组与字符串,第6章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.4.7 字符数组应用举例,例6.8】输入一个字符串,将其中的大写字母均变成小写字母。 程序代码 include include main char s40; printf“请输入一个字符串”; getss; /*输入一个字符串,保存在s数组中*/ strlwrs; /*将s数组的字符串大写字母均变成小写字母*/ printf“输出转换后的字符串”; putss; 运行输入一个字符串AB cd Ef 输出转换后的字符串abcdef,6.5 指针与数组,第6章6.5.1 一维数组的指针与指针变量的引用,1指向一维数组元素的指针 数组名代表该数组的首地址,即数组中第一个元素的地址。将一维数组名赋给一个指针变量,则该指针变量即指向一维数组的起始地址。 2通过指针引用一维数组元素 给指针赋值pa;或p是等价的,它们都是把数组a的起始地址赋给指针变量p。6.5 指针与数组,第6章6.5.1 一维数组的指针与指针变量的引用,【例6.11】用二种不同的方法输出数组中的10个元素值。 方法1用下标法 include main() int a101,2,3,4,5,6,7,8,9,10; int i; fori0;i10;i) printf(3d ,ai); /*用下标法输出数据*/ 运行结果 1 2 3 4 5 6 7 8 9 10,6.5 指针与数组,第6章6.5.1 一维数组的指针与指针变量的引用,【例6.12】找出下面程序中的错误。 include main int *p,i,a10; pa; /* p指向第1个元素a0的地址*/ fori0;i10;i *pi; /* i 的值从0到9分别赋值给a0到a9中*/ fori0;i10;i printf“addn“,i,*p; /*打印a数组中的数据*/6.5 指针与数组,第6章6.5.2 二维数组的指针与指针变量的引用,1指向二维数组元素的指针 指向二维数组元素的指针可以采用两种定义形式。 (1)用普通指针变量指向数组元素 例如 int a23,*p; pa; p是一个指向整型数组元素的指针变量,每次p,指针移动到下一个元素的地址。 (2)用行指针变量指向数组元素 二维数组可以看成是由多个一维数组构成,即每行是一个一维数组,则行指针变量是指向每一行数组元素的起始地址。 格式 类型 *变量名常量表达式;6.5 指针与数组,第6章6.5.2 二维数组的指针与指针变量的引用,2指针引用二维数组元素 【例6.13】用指针变量输出数组元素的值。 (1)用普通指针变量引用数组元素。 include main int a13,4,5,6,7,8,9,10,11,12; int i,j,*pa; for i0; i3;i for j0;j4;j printf“3dn”,*p; /* *p先取指针所指地址中的值,然后指针向后移动*/ 运行 1 2 3 4 5 6 7 8 9 10 11 12,6.6 指针数组,第6章6.6.1 指针数组的定义,如果一个数组的所有元素都是相同类型的指针,则称为指针数组。 一般格式 类型说明符 *数组名数组长度 例如 int *p3 表示p是一个指针数组,有三个数组元素,每个元素值都是一个指针(地址),这些指针都是指向整型变量的。6.6 指针数组,第6章6.6.2 指针数组的引用,可以定义一个与二维数组相同类型的指针数组,通过这个指针数组访问二维数组。 例如 int a44,*p4; fori0;i4;i piai; 把这个二维数组各行的首地址赋予指针数组p,让p0、p1、p2、p3分别指向各行的开头。 与普通数组的规定一样,指针数组在内存区域中分配连续的存储空间,这时指针数组名就表示该指针数组的存储首地址。指针数组在说明的同时可以进行初始化。6.6 指针数组,第6章6.6.2 指针数组的引用,例如字符指针数组的初始化与输出。 include main /*定义并初始化指针数组*/ char *booksComputer,English,Mathematics,Chinese,Accounting; int i; fori0;i5;i printf No.dsn,i1,books i; /*指针数组中存放的是每本书的起始地址*/ 6.7 程序设计举例,第6章,排序是我们日常生活中经常遇到的问题,如学生成绩排序、比赛排名、家电销售量排名等,它们的数据不同,但是处理方法是相同的。冒泡排序法是排序中比较经典的算法,特点是先找最大数,该算法又称“石头下沉”法。其思路是将相邻两个数比较,将小数调到前面,大数调到后面。以6个整数排序为例,第一趟的比较如图6-16所示图6-16 冒泡法排序第一趟的比较图,6.7 程序设计举例,第6章,【例6.15】用冒泡法对10个学生的数学成绩由小到大排序。 程序思路与框架 main 定义变量和一维数组a11,根据习惯从a1a10,a0不用; for循环语句输入10个整数 scanf“d“; forj1;j9;j 用二重循环进行排序; fori1;i10-j;i 用if比较相邻2个数,小数交换到前面; 输出排序后的10个整数; 6.7 程序设计举例,第6章,程序代码 include main int i,j,t,a11; printf“please 10 numbers n“; /*人机会话方式输入数据 */ for i1;iaj1 /* 相邻数比较,若前面数大于后面的数则交换*/ taj;ajaj1; aj1t; /* 两个数交换 */ printf“the sorted numbers n“; fori1;i10;i /* 用循环输出排序后的10个整数 */ printf“4d “,ai; printf“n“; 运行结果 Please 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 则尾插入a10num; 否则,用循环查找插入位置fori0;inum,找到了插入位置,记下i的值ti,停止查找; 从后向前移动位置,空出待插入数据的位置; fori9;it;i ai1ai; 插入数据 atnum; 打印插入数后的数组 printf“5d“,ai ; 6.7 程序设计举例,第6章,程序代码 include main int a1145,52,65,74,76,79,81,90,92,100, i,num,end,t; printf“原始数据n“; for i0;iend a10num;/* 若新插入的数大于end,则尾插入*/ else6.7 程序设计举例,第6章,程序代码 fori0;inum ti; break; /*若数组中的某个数据num,则记下当前位置,中断循环*/ fori9;it;i /*数据向后移动,空出要插入的位置 */ ai1ai; /*因为a11是空的,所以整体向后移动到t下标位置 */ atnum; /*空出的位置,插入新数据 */ printf“插入一个数后的排序数据n“; for i0;i11;i printf“5d“,ai ; /* 打印插入一个数据后的排序数据*/ printf“n“; ,6.7 程序设计举例,第6章,【例6.17】从键盘输入年、月、日,计算该日是该年的第几天。 思路定义一个二维数组,第一行数据为非闰年的数据,第二行数据为闰年的数据。判断是否闰年,是leap1,取第二行数据求和,否则leap0,取第一行数据求和。 程序代码 include main() 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(“ddd”,6.7 程序设计举例,第6章,【例6.17】从键盘输入年、月、日,计算该日是该年的第几天。 思路定义一个二维数组,第一行数据为非闰年的数据,第二行数据为闰年的数据。判断是否闰年,是leap1,取第二行数据求和,否则leap0,取第一行数据求和。 程序代码 scanf(“ddd”, 运行结果为 请输入年 月 日2012 08 10 2012年8月10日是该年的223天。,E-,网址,地址大连市软件园路80号,大连理工大学出版社,谢谢观看,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值