




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程内容,Ch1创建一个C语言程序Ch2算法的重要性及表达Ch3-5基本程序结构,数据及运算Ch6数组成批数据如何处理?Ch7函数大型的程序如何划分?Ch8指针变量在内存的存储与访问Ch9结构体较为复杂的数据结构Ch10文件持久保存数据补充位运算,习题5.4统计一串英文字符中的大写字母、小写字母、数字、空格、其他字符的个数。,问题扩展:输入一句英文,统计并输出每个字母使用的频数和频率,例5.8Fibonacci数列,问题:如何使用数学中的下标变量x1,x2,xn,形式表示一组相关的数据,例5.8Fibonacci数列用数组解决,inti,fibo40;fibo0=fibo1=1;for(i=2;i40;i+)fiboi=fiboi-1+fiboi-2;for(i=0;i40;i+)printf(%10d,fiboi);if(i+1)%5=0)printf(n);,第6章数组,数组的概念,有序数据的集合用同一名称表示一组相同类型的相关数据用下标区分各个元素相当于数学中的下标变量,如x1,x2,.a11,a12,.,a21,.,一维数组的定义,定义:类型说明数组名常量定义一个数组的名称、类型、元素个数,一维数组的定义,shortinta3;,说明:不能动态定义数组,见P.143说明(3),存储地址,数组元素,存储单元,0000000000000110,a2=6;,一维数组元素的引用,定义后的数组可分别引用各个元素数组名下标下标是整型常量或表达式注意:引用的是数组中的元素,而不是整个数组;C编译系统对下标越界的引用不给出错误提示,一维数组的定义和引用-阅读程序,inta5,i;for(i=0;i=3;i+)ai=2*i;a4=100;for(i=0;i=4;i+)printf(a%d=%dn,i,ai);ai=20;printf(a%d=%dn,i,ai);,一维数组的定义和初始化,inta10=2,5,3,1,8,6,9,4,7,1;定义整型数组a并给a0-a9赋初值,一维数组的定义和初始化,inta10=2,5,3,1,8,6;定义整型数组a并给a0-a5赋初值,其余元素值为0,一维数组的定义和初始化,inta=2,5,3,1,8,6;定义整型数组a并赋初值,该数组包含6个元素a0-a5,一维数组的定义和初始化,inta5,i;for(i=0;i5;i+)printf(%dn,ai);,一维数组的定义、初始化和引用,例:显示Fibonacci数列前40项。,inti,fibo40=1,1;for(i=2;i40;i+)fiboi=fiboi-1+fiboi-2;for(i=0;i40;i+)printf(%10d,fiboi);if(i+1)%5=0)printf(n);,一维数组的定义和引用,例:求一维数组最大值及下标,inta10=23,41,56,21,15,67,32,44,16,31;inti,max;max=a0;for(i=0;imax)max=ai;printf(最大值:%dn,max);,一维数组的定义和引用,例:在一维数组中查找给定数据及下标,inta10=23,41,56,21,15,67,32,44,16,31;inti,key,index=-1;printf(输入要查找的值:);scanf(%d,这是顺序查找法。还有一种常用的折半查找法,数据量大且有序时使用,效率更高。,折半查找,inta11=5,13,19,21,37,56,64,75,80,88,92;intindex=-1,key,low,high,middle;scanf(%d,一维数组的定义和引用,例:排序算法,算法演示冒泡排序选择排序插入排序快速排序,基本思路:依次将数组中相邻两元素比较,并按要求的顺序交换,从而将最大/最小的数推至最前或最后;对余下的数重复上述步骤,最终获得所需的顺序,冒泡排序,对数组元素a0-a5升序排序比较a5和a4,若顺序不符则交换;比较a4和a3,若顺序不符则交换;比较a3和a2,若顺序不符则交换;比较a2和a1,若顺序不符则交换;比较a1和a0,若顺序不符则交换。,冒泡排序,=结果:最小的数被换到了a0中。=对a1-a5重复上述步骤,将其中最小的数换到a1中。=重复上述步骤直至完成排序。,冒泡排序,冒泡排序,inta6,i,j,t;for(i=0;i=i;j-)if(aj=aj-1)t=aj;aj=aj-1;aj-1=t;for(i=0;i6;i+)printf(%dn,ai);,基本思路:在一列数中找到最小/最大值,与指定位置的数交换;对余下的数重复上述步骤,最终获得所需的顺序。,选择排序,对数组元素a0-a5升序排序找a0至a5的最小值,与a0交换其值找a1至a5的最小值,与a1交换其值找a2至a5的最小值,与a2交换其值找a3至a5的最小值,与a3交换其值找a4至a5的最小值,与a4交换其值,选择排序,for(i=0;i5;i+)imin=i;min=ai;/*求ai之后元素的最小值*/for(j=i+1;j=5;j+)if(ajmin)min=aj;/*变量min记录最小值*/imin=j;/*变量imin记录最小值的下标*/temp=ai;ai=aimin;aimin=temp;/*最小值与ai交换*/,选择排序,选择排序,for(i=0;i5;i+)imin=i;for(j=i+1;j=5;j+)if(ajaimin)imin=j;/*只记录最小值的下标imin,最小值就是aimin*/if(imin!=i)t=ai;ai=aimin;aimax=t;/*当imin=i时无需交换*/,对选择排序法进行改进,二维数组的定义,类型说明数组名常量常量功能:定义一个二维数组的名称、类型、元素个数,二维数组的定义和存放,说明:二维数组在内存中按行连续存放例如定义shortinta23;,二维数组的定义和逻辑结构,二维数组可视为一维数组的集合例如inta23;可以被当成两个一维数组的集合:inta0:包括三个元素a00,a01,a02inta1:包括三个元素a10,a11,a12,二维数组的定义和初始化,inta23=2,5,3,1,8,6;inta23=2,5,3,1,8,6;inta23=2,1,8,6;inta3=2,5,3,1,8,6;,讨论:以矩阵的形式输出这个数组,二维数组元素的引用,数组名下标下标例:赋值a13=8;输出printf(%d,a21);,二维数组的定义和引用,下面的程序运行时输入345612794152,显示结果为_。inta23,i,j;for(i=0;i=1;i+)for(j=0;j=2;j+)scanf(%d,二维数组,例6.4二维数组行列对换(矩阵转置)例6.5对于一个二维数组,求最大值及其下标经典实例:杨辉三角(第6章习题第6题),二维数组,本节要点二维数组的物理存储方式二维数组的逻辑概念矩阵二维数组元素的遍历双重循环,字符数组,C语言中没有字符串变量,字符串数据需要使用字符数组保存。,字符常量与字符串常量的区别,字符数组,定义字符数组及元素赋值,a0=a;a1=n;a2=;a3=97;a4=n;a5=t;,chara6;,注意:实际存储二进制码,字符数组,字符数组的初始化,chara6=a,n,a,n,t;chara6=h,a,p,p,y;,a5值为0,chara=h,e,l,l,o;chara=hello;chara10=hello;printf(%dn,sizeof(a);printf(%dn,strlen(a);,字符数组,字符数组的输入输出,逐个元素输入inti;chara10;for(i=0;i=9;i+)scanf(%c,字符数组,字符数组的输入输出,逐个元素输出inti;chara=hello;for(i=0;i=4;i+)printf(%c,ai);for(i=0;i=4;i+)putchar(ai);,字符数组,字符数组的输入输出,整个字符串(字符数组)输出inti;chara10=hello;printf(%s,a);,字符串格式符,字符数组名,只输出5个字符(到0为止),字符数组,字符数组的输入输出,整个字符串(字符数组)输入inti;chara10;scanf(%s,a);printf(%s,a);,字符串格式符,不可包含空格,字符数组名,不加scanf(%s%s,a,b);printf(%s,%sn,a,b);printf(%x,%x,a,b);,输入时两个字符串以空格分隔,以十六进制显示数组首地址,字符数组,字符串处理函数,P.130-134自学,字符数组,字符串处理函数,puts(字符数组)输出字符数组的值对比printf(%s,a)对比putchar(字符变量),字符数组,字符串处理函数,gets(字符数组)输入字符串赋值给字符数组,函数值为该数组的首地址对比scanf(%s,a)对比getchar(字符变量),字符数组,字符串处理函数,strcat(字符数组1,字符数组2),连接两个字符数组,保存在字符数组1中,函数值为字符数组1的值,chars1=Good,s2=Bye;printf(%sn,strcat(s1,s2);printf(%sn,s1);printf(%sn,s2);,字符数组,字符串处理函数,strcpy(字符数组1,字符串2),将字符串2(字符串常量或字符数组)内容复制到字符数组1中,chars1=GoodMorning!;chars2=Hello!;printf(%sn,strcpy(s1,s2);,字符数组,字符串处理函数,strncpy(字符数组1,字符串2,数值n),将字符串2前n个字符复制到字符数组1中,chars1=GoodMorning!chars2=Hello!;printf(%s,strncpy(s1,s2,4);,字符数组,字符串处理函数,strcmp(字符串1,字符串2),比较两个字符的大小逐个字符进行比较出现不同的字符或结束符,返回两者ASCII值的差,chars1=God,s2=Good;printf(%dn,strcmp(s1,s2);,C语言中没有字符串“=”、“”的运算,字符数组,字符串处理函数,strlen(字符串),返回字符串(字符串常量或字符数组)中“0”之前的字符个数,chars110=Good;printf(%d,strlen(s1);printf(%d,strlen(Hello);,字符数组,字符串处理函数,strlwr(字符串),将字符串(字符串常量或字符数组)中的大写字母转换为小写,chars110=Good;printf(%sn,strlwr(s1);printf(%s,strlwr(Hello);,字符数组,字符串处理函数,strupr(字符串),将字符串(字符串常量或字符数组)中的小写字母转换为大写,chars110=Good;printf(%sn,strupr(s1);printf(%s,strupr(Hello);,字符数组,字符串处理函数练习,main()charpass_str80;inti=0;w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年核电电缆附件行业研究报告及未来发展趋势预测
- 子网虚拟化技术-洞察及研究
- 制造业绿色环保管理体系建设
- 2024执业兽医经典例题带答案详解(预热题)
- 2024-2025学年度粮油食品检验人员考试历年机考真题集含答案详解(培优B卷)
- 2025大理农林职业技术学院单招《职业适应性测试》全真模拟模拟题及完整答案详解(易错题)
- 2024-2025学年计算机一级模考模拟试题含答案详解【能力提升】
- 高校教师资格证之《高等教育法规》综合提升测试卷带答案详解(精练)
- 2025年自考专业(汉语言文学)综合提升测试卷(研优卷)附答案详解
- 中分数审刽聚类方案
- 《 建筑施工企业会计》课件-项目一 施工企业会计基础
- 《火力发电企业电力监控系统商用密码应用技术要求》
- 2025反洗钱知识考试试题库及答案
- 儿童白癜风诊疗专家共识解读 3
- 人工智能训练师基础技能培训手册
- 激光SLAM中的动态物体剔除算法研究及其性能评估
- 膝关节鹅足炎诊断
- 超声在肾结石中的诊断
- 基层应急管理培训课件
- 2024年司法协理员招聘考试题库及答案
- DB61-T 5061-2023 民用建筑有线电视系统工程技术规程
评论
0/150
提交评论