




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 数组哈尔滨工业大学计算机科学与技术学院苏小红 C语言大学实用教程内容提要数组类型;向函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值等;用字符数组存取字符串;使用字符串处理函数处理字符串数组的用处 保存大量同类型的相关数据如矩阵运算,表格数据等 数组(Array)int a10;定义一个有10个元素的数组,每个元素的类型均为int使用a0、a1、a2、a9这样的形式访问每个元素。可以像使用普通变量一样使用他们。系统会在内存分配连续的10个int空间给此数组直接对a的访问,就是访问此数组的首地址a数组首地址a9a8a7a1a0数组的定义与初始化数组定义后的初值仍然是随机数,
2、一般需要我们来初始化int a5 = 12, 34, 56 ,78 ,9 ;int a5 = 0 ;int a = 11, 22, 33, 44, 55 ;数组大小最好用宏来定义,以适应未来可能的变化#define SIZE 10int aSIZE;数组大小定义好后,将永远不变数组的使用数组的下标都是从0开始对数组每个元素的使用与普通变量无异可以用任意表达式作为下标,动态决定访问哪个元素for (i=0; iSIZE; i+) ai = 2 * i;下标越界是大忌!使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果sizeof可以用来获得数组大小数组的特点快速地
3、随机访问一旦定义,不能改变大小只能逐个对数组元素进行操作(字符数组例外)输入方法:int a10,i;输入第i个数组元素:scanf(%d,&ai);输入整个数组元素:for (i=0;i10;i+) scanf(%d,&ai);输出方法:输出第i个数组元素:printf(%d,ai);输出整个数组元素:for (i=0;i10;i+) printf(%d,ai);一维数组的输入和输出文曲星猜数游戏由计算机随机生成一个各位相异的4位数字,由人来猜,每次提示:xAxBA前面的数字表示有几个数字猜对位置也对了B前面的数字表示有几个数字猜对但位置不对提示用数组a存计算机随机生成的4位数用数组b存人猜
4、的4位数对a和b的相同位置的元素进行比较,得到A前面的数字对a和b的不同位置的元素进行比较,得到B前面的数字文曲星猜数游戏随机生成一个各位相异的4位数字 srand(time(NULL); a0 = rand()%10; do a1 =rand()%10; while (a0 = a1 ); do a2 = rand()%10; while (a0 = a2 | a1 = a2); do a3 = rand()%10; while (a0 = a3 | a1 = a3 | a2 = a3);文曲星猜数游戏统计数字和位置都猜对的个数,对a和b的相同位置的元素进行比较,得到A前面的数字right
5、= 0;for (j=0; j4; j+)if (aj = bj) right = right + 1; j=0j=1j=2j=3ab文曲星猜数游戏统计人猜对的数字个数,对a和b的不同位置的元素进行比较,得到B前面的数字good = 0; for (j=0; j4; j+)for (k=0; k4; k+) if (ak = bj ) good = good + 1; good = good - right;k=0k=1k=2k=3j=0abj=1餐饮服务质量调查打分 有40个学生被邀请给自助餐厅的食品和服务质量打分(110等级),统计调查结果,并用*打印如下形式的统计结果直方图 Grade
6、CountHistogram 1 5* 2 10* 3 7* .餐饮服务质量调查打分 提示定义数组score存放打的分数定义数组count为计数器(count0不用)计算统计结果:设置一个循环,依次检查数组元素值scorei,是1则将数组元素count1加1,是2则将数组元素count2加1,依此类推for (i=0; iSTUDENTS; i+)countscorei +;打印统计结果,设置一个循环,按count数组元素的值,打印相应个数的符号*例6.1 兔子繁殖问题打印每个月和年底时的总的兔子对数Fibonacci数列 123581321345589144233, 例6.1#include
7、 #define YEAR_MONTH 12main()int fYEAR_MONTH+1 = 0,1,2;int month;for (month=3; month=YEAR_MONTH; month+)fmonth = fmonth-1 + fmonth-2; for (month=1; month=YEAR_MONTH; month+)printf(%dt, fmonth); printf(nsum = %dn, fYEAR_MONTH); 二维数组的定义数据类型 数组名常量表达式常量表达式;int a23;a0a1a- a00 a01 a02- a10 a11 a12二维数组的存储结构
8、short int a23;a0a1a10a11a12a00a01a02存放顺序:按行存放先顺序存放第0行的元素再存放第1行的元素a00a01a02a10a11a12二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)int a23,i,j;输入方法:输入第i行第j列元素:scanf(“%d”,&aij);输入整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”,&aij);输出方法:输出第i行第j列元素:printf(“%d”,aij);输出整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+) pri
9、ntf(“%d”,aij);max(i=0)max(i=2)max(i=3)计算最大值算法例6.2 打印最高分从键盘输入学生人数n;从键盘输入所有学生的学号和成绩分别存入数组num和score假设其中的一个学生成绩为最高maxScore = score0;对所有学生成绩进行比较,即 for (i=1; i maxScore则修改maxScore值为scorei 打印最高分maxScore.main() .for (i=0; in; i+) scanf(%ld%f, &numi, &scorei); maxScore = score0;for (i=1; i maxScore) maxScore
10、 = scorei; printf(maxScore = %.0fn, maxScore); 例6.2 打印最高分.main() .for (i=0; in; i+) scanf(%ld%f, &numi, &scorei); maxScore = score0;maxNum = num0; for (i=1; i maxScore) maxScore = scorei; maxNum = numi; printf(maxScore = %.0f, maxNum = %ldn, maxScore, maxNum); 例6.2 打印最高分及其学生序号 用函数实现?#include #define
11、 ARR_SIZE 40float FindMax(float arr,int n);main() float scoreARR_SIZE, maxScore;int n, i;printf(Please enter total number:);scanf(%d, &n); printf(Please enter the score:n);for (i=0; in; i+) scanf(%f, &scorei); maxScore = FindMax(score,n);printf(maxScore = %.0fn, maxScore); float FindMax(float arr, i
12、nt n) float max;int i;max = arr0;for (i=1; i max) max = arri; 现场编程用函数实现打印最高分数组名作函数参数传递整个数组到另一个函数内,可以将数组的首地址作为参数传过去用数组名作为函数参数只拷贝一个地址自然比拷贝全部数据效率高由于首地址相同,故实参数组与形参数组占用同一段内存在该函数内,不仅可以读这个数组的元素,还可以修改它们 简单变量和数组作函数参数的区别作业P2286.46.76.9现场演示排序算法交换法排序选择法排序交换法排序交换法排序交换法排序交换法排序 for (i=0; in-1; i+) for (j=i+1; j sc
13、orei) 交换成绩scorej和scorei, 交换学号numj和numi; 选择法排序k=1k=2k=0k=1选择法排序k=3k=4k=3k=4选择法排序选择法排序 for (i=0; in-1; i+) k = i; for (j=i+1; j scorek) 记录此轮比较中最高分的元素下标 k = j; 若k中记录的最大数不在位置i,则 交换成绩scorek和scorei, 交换学号numk和numi; 现场演示查找算法顺序查找折半查找顺序查找int Search(long a, int n, long x) int i; for (i=0; iamid, low=mid+1第二次循环
14、:99011 99013 99015 99017 99019 low=mid high x=amid,找到哈,找到了!折半查找数组下标 0 1 2 3 4 5 6第一次循环:99011 99013 99015 99017 99019 查找值x=99016 low mid high xamid, low=mid+1第二次循环:99011 99013 99015 99017 99019 low=mid high xamid, high=mid-1第三次循环:99011 99013 99015 99017 99019 high low 不满足low=high, 循环结束,未找到 唉,没找到!int
15、BinSearch(long a, int n, long x) int low, high, mid;low = 0; high = n - 1; while (low amid) low = mid + 1; else if (x amid) high = mid - 1; else return (mid); return(-1); 向函数传递二维数组实际传送的是指向数组第一个元素的地址在声明二维数组形参时,不能省略数组第二维的长度,为什么? a00a01a02a10a11a12a00a01a02a10a11a12例6.8 计算每门课程的总分和平均分void Total(int scor
16、eCOURSE, int sum, float aver, int n) int i, j;for (j=0; jCOURSE; j+) sumj = 0; for (i=0; in; i+) sumj = sumj + scoreij; averj = (float) sumj / n; 可以省略数组第一维的长度不能省略数组第二维的长度字符串(String)与字符数组字符串一串以0结尾的字符在C语言中被看作字符串用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理字符数组每个元素都是字符类型的数组char s
17、tring80;字符数组的初始化用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接对数组初始化 char str6 = China; char str6 = China;逐个输入输出for (i=0; si!=0; i+) putchar(si);putchar(n);一次性输入输出scanf(%s,s); printf(%s,s);char s10;字符数组的输入输出 gets(s); puts(s);scanf()char str10;scanf(%s, str);不能读入带空格的字符串,gets()可以这两种用法都不安全。当用户的输入多于10
18、个(含10个),str数组将越界现场编程做试验scanf被公认为最易遭到黑客攻击的函数之一gets()字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机 对输入字符串长度有限制的函数调用fgets(buf, sizeof (buf), stdin);字符串处理函数在中定义了若干专门的字符串处理函数strcpy: string copystrcpy(目的字符串,源字符串);strlen: string lengthstrlen(字符串);返回字符串的实际长度,不包括0strcat: string combinationstrcat(目的字符串,源字符串);strcmp: string comparisonstrcmp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省滨州市三校联考2025届高三暑假自主学习测试数学试题含解析
- 公共交通车辆租赁服务合同
- 智慧农业技术创新助力乡村振兴
- 委托合同范本
- 体育馆物业管理委托合同范本
- 商业地产买卖合同细则
- 标准茶叶购销合同模板简
- 产品设计服务合同范本
- 血液透析中低血压处理
- 初中数学第一章 整式的乘除单元测试2024-2025学年北师大版数学七年级下册
- 九宫数独题200题及答案
- 2023年大学生创业的商业计划书模板(四篇)
- 夜间施工措施
- GB/T 1229-2006钢结构用高强度大六角螺母
- GA 137-2007消防梯
- 通用报价单模板
- 血精的诊治课件
- 考研考博-英语-北京建筑大学考试押题三合一+答案详解4
- 《三角形的分类》-完整版课件
- 吊装安全心得体会(6篇)
- DB52-T 1057-2022+农村生活污水处理技术规范
评论
0/150
提交评论