![C语言项目化教程(基于智能制造软件)教案 项目5 汽车销售数据(数组)_第1页](http://file4.renrendoc.com/view8/M02/30/34/wKhkGWckyL6AfuXmAAEi2MvfsCI803.jpg)
![C语言项目化教程(基于智能制造软件)教案 项目5 汽车销售数据(数组)_第2页](http://file4.renrendoc.com/view8/M02/30/34/wKhkGWckyL6AfuXmAAEi2MvfsCI8032.jpg)
![C语言项目化教程(基于智能制造软件)教案 项目5 汽车销售数据(数组)_第3页](http://file4.renrendoc.com/view8/M02/30/34/wKhkGWckyL6AfuXmAAEi2MvfsCI8033.jpg)
![C语言项目化教程(基于智能制造软件)教案 项目5 汽车销售数据(数组)_第4页](http://file4.renrendoc.com/view8/M02/30/34/wKhkGWckyL6AfuXmAAEi2MvfsCI8034.jpg)
![C语言项目化教程(基于智能制造软件)教案 项目5 汽车销售数据(数组)_第5页](http://file4.renrendoc.com/view8/M02/30/34/wKhkGWckyL6AfuXmAAEi2MvfsCI8035.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGE课题任务5.1显示某品牌新能源汽车一年的销售额(一维数组的输入与输出)课型讲练授课班级授课时数2教学目标1、掌握一维数组的定义、引用、初始化2、掌握数组的输入和输出教学重点1、一维数组的定义、引用、初始化2、一维数组实际应用教学难点数组的应用-从0开始学情分析数组概念的理解、数组在内存中的存储实质,地址的概念都应在刚接触数组时有所了解。学生组成一个班级利用学号组织。但是学号是从1开始,数组的开始从0开始,容易产生“失误”。教学效果教后记任务5.1显示某品牌新能源汽车一年的销售额(一维数组的输入与输出)5.1.1任务目标创建一个C语言程序,显示某品牌新能源汽车客车每月新增量(1-6月,每月新增量为60,54,50,70,36,51)。5.1.2知识储备之前已经学习了定义变量,但是当我们需要批量处理问题时,就会遇到很大的麻烦。比如一个车队有100名人员,那么是否需要定义100个变量,显然有问题的,这时我们就需要引入一种新的类型,数组,可以批量定义。1.数组的定义数组是具有相同类型的数据项的序列,是一种用于表示大量同类值的数据类型,我们通过下标访问数组的元素。2.一维数组程序经常使用同类的数据,例如我们要处理一些成绩,可以声明intgrade1,grade2,grade3;然而如果成绩量很大时,就要使用大量的标识符进行表示,且标识符必须唯一,这样做是很麻烦的,此时我们应该使用数组,用下标访问数组的各个元素,用方括号括住数组的下标。为了在程序中使用grade[0]、grade[1]、grade[2],我们声明intgrade[3];声明中的整数3表示数组的尺寸,即数组中元素的个数。注意,数组元素的下标总是从0开始。一维数组声明是一个类型后跟一个带有方括号括起来的常量整数表达式的标识符。常量表达式指定了数组的尺寸,但它的值必须是正的;它指定了数组中元素的个数。为了存储数组的元素,编译器会分配从一个基地址开始的适当大小的内存。3.一维数组的初始化当定义一个数组时,系统根据类型说明,分配由常量表达式所指定的相应数量的存储单元,一个存储单元对应一个数组元素。数组的初始化实质上就是在定义数组时,为每一个数组元素赋初值。数组的初始化是在编译阶段完成的,不占用运行时间。这样可以使数组元素在程序开始运行前就得到初值,从而节约了运行时间,提高了执行速度。一维数组的初始化可分为以下几种情况:①给全部数组元素赋初值例:intarray[8]={1,2,3,4,5,6,7,8};在给全部数组元素赋初值的情况下,也可以写成如下形式:intarray[]={1,2,3,4,5,6,7,8};系统会根据{}中的8个数据自动定义数组array的长度为8。②给部分元素赋值③④在定义一个数组时,可以只给部分元素赋初值,但不能越过前面的元素给后面的元素的赋值。后面未被赋值的元素根据其数据类型自动取为0或‘\0’例:inta[6]={1,2,3};//等价于inta[6]={1,2,3,0,0,0};*/charc[4]={‘a’,‘b’};//等价于charc[4]={‘a’,‘b’,‘\0’,‘\0’};(4)一维数组元素的引用数组是一组数组元素的顺序集合,数组名代表了整个数组存储空间的首地址。当我们对数组进行操作时,不能对整个数组进行操作,只能对其中的数组元素进行操作。4.一维数组元素的引用方式为:数组名[下标表达式]下标表达式即为该数组元素在数组中的位置。例如:若有如下定义:intgrade[3];则grade[0]、grade[2]、grade[i]、grade[i+j]都是数组元素合法的引用形式,但要注意下标的取值范围,它的下限为0,上限为数组长度-1。5.键盘输入10个同学的C语言成绩,并显示每个同学的成绩。程序代码:#include"stdio.h"//头文件#defineN10//定义符号常量voidmain()//主函数{ intgrade[N],i;//定义整型数组gradefor(i=0;i<N;i++)scanf("%d",&grade[i]);//通过输入语句对数组元素赋值for(i=0;i<N;i++)printf("%d号的成绩为%d\n",i+1,grade[i]);//输出数组元素}程序运行截图如图5-1-1所示:图5-SEQ图5-\*ARABIC1-1示例运行截图程序解析:数组grade需要存储10个整数值的内存空间。假设我们的机器用4个字节存储一个int型的值。如果grade[0]存储地址为2000,那么其余的数组元素连续的存储地址为2004、2008、2012、2016、2020、2024、2028、2032、2036。如表5-1所示。表5-SEQ表5-\*ARABIC1数组数据存储存储地址数值数组地址地址200089grade[0]地址200498grade[1]地址200876grade[2]地址201267grade[3]地址201678grade[4]地址202087grade[5]地址202488grade[6]地址202866grade[7]地址203299grade[8]地址203679grade[9]第2行代码,把数组的尺寸定义为符号常量,这是一种良好的编程习惯。因为很多代码要依赖这个值,要改变数组的大小,可在#define中很方便地改变该值。通常把变量i用作数组的下标变量。第6第7行代码是一种处理全部数组元素的关键性习惯用法。一般下标变量从0开始,一直到N-1。5.1.3典型案例典型案例1:已知某品牌4S店的一年12月的销售量分别为{10,12,15,14,16,8,7,14,16,17,11,12},输出12个月的销售数据。算法分析1.定义变量2.输入销售量(注意数组格式)3.输出销售量流程图:典型案例1流程图如图5-1-2所示图5-1-SEQ图5-\*ARABIC2典型案例1流程图程序代码:#include"stdio.h"voidmain(){intsales[12];inti;printf("请输入销售量:(12个月)\n");for(i=0;i<12;i++){printf("%d月",i+1);scanf("%d",&sales[i]);}printf("1-12月某品牌4S店销售情况表:\n");printf("一月\t二月\t三月\t四月\t五月\t六月\t七月\t八月\t九月\t十月\t十一月\t十二月\n");for(i=0;i<12;i++){printf("%d\t",sales[i]);}printf("\n");}典型案例1运行截图如图5-1-3所示图5-1-SEQ图5-\*ARABIC3典型案例1运行截图典型案例2:下表为某品牌新能源小客车在不同时段的耗油量,从键盘输入各个时段的耗油量,编写程序求出该小客车的平均耗油量。具体的时段和耗油量如表5-2所示(参考变量耗油量oilconsumption总耗油量sum_oilconsumption,平均耗油量avg_oilconsumption)表5-2时段和耗油量时段时段1时段2时段3时段4时段5时段6时段7时段8时段9耗油量8.58.89.210.17.88.68.78.79.5算法分析1.定义变量耗油量,总耗油量,平均耗油量,i;2.求总耗油量;3.计算平均耗油量;4.输出平均耗油量;典型案例2流程图如图5-1-4所示图5-1-SEQ图5-\*ARABIC4典型案例2流程图程序代码#include"stdio.h"voidmain(){doubleoilconsumption[9]={8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7,9.5};doublesum_oilconsumption=0,avg_oilconsumption; inti=0;for(i=0;i<9;i++) {sum_oilconsumption+=oilconsumption[i]; }avg_oilconsumption=sum_oilconsumption/9.0; printf("平均耗油量:%f\n",avg_oilconsumption);}典型案例2运行截图如图5-1-5所示图5-1-SEQ图5-\*ARABIC5典型案例2运行截图典型案例3:已知某品牌4S店的销售人员根据每年的销售量情况,分为不同等级的销售员,分别为’A’,’B’,’C’,’D’,要求输出销售人员的销售等级。*/(参考变量销售员salesman)算法分析1.定义变量2.输出销售人员的销售等级(注意数组成员类型)流程图:典型案例3流程图如图5-1-6所示图5-1-SEQ图5-\*ARABIC6典型案例3流程图程序代码#include"stdio.h"voidmain(){charsalesman[10]={'C','A','B','A','C','B','D','C','C','A'};inti;for(i=0;i<10;i++){printf("销售员%d,等级:%c\n",i+1,salesman[i]);} }典型案例3运行流程图如图5-1-7所示图5-1-SEQ图5-\*ARABIC7典型案例3运行截图5.1.5任务分析与实践算法分析1.定义变量2.输入汽车数据3.输出汽车数据任务目标流程图如图5-1-8所示图5-1-SEQ图5-\*ARABIC8任务目标流程图#include"stdio.h"#defineN6//定义符号常量,表示有6个月voidmain(){intV_number[N];//定义存放新增量的数组inti;for(i=0;i<N;i++)scanf("%d",&V_number[i]);//键盘输入6个月的数据printf("某市海格新能源全天然气客车月新增量明线表\n");printf("1月份\t2月份\t3月份\t4月份\t5月份\t6月份\n");for(i=0;i<N;i++)printf("%d\t",V_number[i]);//输出6个月的数据}5.1.5动手练习1.从键盘输入5名驾驶员的工资,求工资的平均值2.在选择车牌时,有时可以随机产生,假设随机产生的是后五位并且都是数字,随机产生10个车牌存放在车牌数组中,并输出。3.在选择车牌时,有时可以随机产生,假设随机产生的是后五位并且都是数字,随机产生20个车牌存放在车牌数组中,并挑选最后一位是偶数的车牌存放在另一个数组中。课题任务5.2求某品牌新能源汽车一年的最高销售月(一维数组求最值)课型讲练授课班级授课时数2教学目标1、进一步熟练掌握一维数组的数组的输入和输出2、掌握在数组中的查找、最值操作教学重点数组中的查找、最值操作教学难点查找、最值操作学情分析数组概念应该已经掌握,关键在于数组下标从0开始,上限等知识点学生容易混淆,同时本节课主要插入和删除操作,数组中内容的变换规律描述成程序不是很容易。教学效果教后记任务5.2求某品牌新能源汽车一年的最高销售月(一维数组求最值)5.2.1任务目标从键盘输入8位驾驶员身高,输出个子最低的驾驶员的身高和对应的下标。5.2.2知识储备在实际应用中,我们还会碰到需要求数据的最值,查找等特殊情况,这种情况我们如何解决?1.查找对数组中数据进行查找时,通过循环逐一进行比较。程序代码一般为:for(i=0;i<数组长度;i++)if(数组名[i]==被查数据)break;2.统计对数组中的数据进行统计,一般经过两步操作:第一步对数组元素进行筛选,可以用if语句,也可以使用swtich语句;第二步进行统计。3.求最值第一步定义变量包含一个最值第二步数组后面的每个与最值进行比较,查找规律示例1:已知数组s中存有以下数据:12、9、7、11、10、15、13、14、16和8,编写程序,用户从键盘输入一个数据,从数组中找出该数据。程序代码:#include<stdio.h>voidmain(){ ints[10]={12,9,7,11,10,15,13,14,16,8}; intx,i; for(i=0;i<10;i++) printf("%4d",s[i]); printf("\n"); printf("请输入要查找的数据:"); scanf("%d",&x); for(i=0;i<10;i++) if(s[i]==x)break; if(i<10) printf("s[%d]=%d\n",i,s[i]); else printf("该数据不存在!\n");}示例2已知数组中的数据为12,4,5,6,7,89,求他们的最小值。程序代码#include"stdio.h"voidmain(){ints[10]={12,4,5,6,7,89},i=0,min,m;min=s[0]; m=0; for(i=0;i<6;i++) {if(min>s[i]) { min=s[i]; m=i+1; } } printf("最小值为s[%d]=%d\n",m,min);}5.2.3典型实例典型案例1:已知某品牌4S店的一年12月的销售量分别为{10,12,15,14,16,8,7,14,16,17,11,12},输出12个月的最高销量。(参考变量销售量sales,最大销售量max_sales)算法分析:求最值任务分析过程:第一步max_sales=sales[0]第二步if(maxsales<sales[1])max_sales=sales[1];第三步if(maxsales<sales[2])max_sales=sales[2];。。。。。。第N步if(maxsales<sales[N-1])max_sales=sales[N-1];根据以上分析,可以用循环完成初值:max_sales=sales[0],范围1-11循环体if(maxsales<sales[i])max_sales=sales[i];算法过程1.定义销售量数组2.求最值流程图:典型案例1流程图如图5-2-1所示图5-2-1典型案例1流程图程序代码#include"stdio.h"voidmain(){intsales[12]={10,12,15,14,16,8,7,14,16,17,11,12};intmax_sales=sales[0],i;for(i=1;i<12;i++){ if(max_sales<sales[i]) max_sales=sales[i];}printf("最高销售量=%d",max_sales);}典型案例1运行截图如图5-2-2所示图5-2-2典型案例1运行截图典型案例2:下表为某品牌新能源小客车在不同时段的耗油量,编写程序求出该小客车的耗油量最小的时段。时段和耗油量如表5-3所示表5-SEQ表5-\*ARABIC3时段和耗油量时段时段1时段2时段3时段4时段5时段6时段7时段8时段9耗油量8.58.89.210.17.88.68.78.79.5算法过程1.定义耗油量数组2.求最小值(注意数据类型)流程图:典型案例2流程图如图5-2-3所示:图5-SEQ图5-\*ARABIC2-3典型案例2流程图程序代码:#include"stdio.h"voidmain(){doubleoilconsumption[9]={8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7,9.5};doublemin_oilconsumption=oilconsumption[0];inti;for(i=1;i<9;i++){ if(min_oilconsumption>oilconsumption[i]) { min_oilconsumption=oilconsumption[i]; }}printf("最小耗油量是:%.1f",min_oilconsumption);}典型案例2运行截图如图5-2-4所示图5-2-4典型案例2运行截图5.2.4任务分析与实践#include"stdio.h"voidmain(){ doubledriver_H[8],driverH_min; inti; intdriverH_num; printf("请输入8名驾驶员的身高"); for(i=0;i<8;i++) { scanf("%lf",&driver_H[i]); } driverH_min=driver_H[0]; driverH_num=0; for(i=0;i<8;i++) { if(driver_H[i]<driverH_min) { driverH_min=driver_H[i]; driverH_num=i; } } printf("最低驾驶员的下标为%d,身高为%lf",driverH_num,driverH_min);}5.2.5动手练习(修改)1.从键盘输入5名驾驶员的工资,求高于平均工资的驾驶员。2.2020年某地区5月份10天的最高气温依次是(℃):30313032323333323132。编写程序,分别统计出32℃和33℃各占多少天。3.输入10个整数存入一维数组,输出值和下标都为奇数的元素个数。4.已知数组s中存有以下数据:12、9、7、11、10、15、13、14、16和8,编写程序,用户从键盘输入一个数据,从数组中找出该数据。课题任务5.3对某品牌新能汽车销售人员业绩排序(一维数组排序)课型讲练授课班级授课时数2教学目标1、掌握一维数组的定义、引用、初始化2、掌握数组的输入和输出教学重点1、一维数组的定义、引用、初始化2、一维数组实际应用教学难点数组的应用-从0开始学情分析数组概念的理解、数组在内存中的存储实质,地址的概念都应在刚接触数组时有所了解。学生组成一个班级利用学号组织。但是学号是从1开始,数组的开始从0开始,容易产生“失误”。教学效果教后记任务5.3对某品牌新能汽车销售人员业绩排序(一维数组排序)5.3.1任务目标创建一个C语言程序,按非递减顺序显示某市海格新能源全天然气客车的月新增量(1-6月,每月新增量为60,54,50,70,36,51)。5.3.2知识储备对于杂乱无章的数据,有时我们需要按照一定规律进行排列,我们本次课程就来研究这个问题。1.排序对于搜索大型数据库来说,对信息进行排序的算法是至关重要的。想象一下词典或电话号码本,用它们来查找信息都是相对容易和方便的,这是因为其中的信息按按字母表或词曲顺序排序了。排序是一种非常有助于解决问题的技术,因此如何有效的排序的问题本身是一个重要的研究领域。排序有多种方式,有冒泡排序、简单选择排序、直接插入排序等。2.冒泡排序这种方法可形象描述为:使较小的值象水中的气泡一样逐渐“上浮”到数组的顶部,而较大的值则逐渐“下沉”到数组的底部。这种技术要排序好几轮,每轮都要比较连续的数组元素对。如果某一对元素的值本身是升序排的,那就保持原样,否则交换其值。冒泡排序的基本思想是:从前向后依次比较相邻两个数的值,如果前者比后者大,那么这两个数交换,否则不交换,第一次排序结束,最大数“后沉”到最后一个。排序过程示例(设N=8):每趟只将方括号中的数据从左向右两两比较,让较大者不断“后沉”到方括号外。假设原始数据[4938659776132750]第一趟排序后[38496576132750]97第二趟排序后[384965132749]7697第三趟排序后[3849132750]657697第四趟排序后[38132749]50657697第五趟排序后[132738]4950657697第六趟排序后[1327]384950657697第七趟排序后[13]27384950657697最后排序结果1327384950657697读者可以看到第五趟排序结束后,其实已经得到我们最终所需的结果了,如果不对程序进行优化,计算机就一定会进行七趟排序,那么应该如何处理,请读者自行思考,也可查看相关资料。3.选择法排序选择法的基本思想是:用变量p来存放最大数所在的位置,若数组中有n个数,首先p中存放0,认为a[0]中数最大。然后把a[p]跟后面的a[1]比较,若a[1]比a[p]大,则p=1;否则p不变。接着a[p]跟后面的a[2]比较,若a[2]比a[p]大,则p=2;否则p不变。接着a[p]跟后面的a[3]比,a[4]比,……,与最后一个元素比较。这时p中存放的是所有元素中最大元素所在的位置。把a[0]中的数与a[p]中的数交换。a[0]中存放最大元素。再从余下的n-1个数中找最大的数与a[1]交换,重复直到排序结束。假设原始数据[4938659776132750]第一趟排序后13[38659776492750]第二趟排序后1327[659776493850]第三趟排序后132738[9776496550]第四趟排序后13273849[76976550]第五趟排序后1327384950[976576]第六趟排序后132738495065[9776]第七趟排序后13273849506576[97]最后排序结果13273849506576974.示例:键盘输入10个同学的C语言成绩,按从高到低显示每个同学的成绩。程序代码:#include"stdio.h"#defineN10voidmain(){intgrade[N];inti,j,temp;for(i=0;i<N;i++)scanf("%d",&grade[i]);printf("排序前10位同学的成绩:\n");for(i=0;i<N;i++)printf("%d",grade[i]);printf("\n从高到低排序后10位同学的成绩:\n");for(i=0;i<=N-2;i++)//冒泡排序{ for(j=0;j<=N-i-2;j++)if(grade[j]<grade[j+1])//条件成立,相邻两个值进行交换{temp=grade[j];grade[j]=grade[j+1];grade[j+1]=temp;}}for(i=0;i<N;i++)printf("%d",grade[i]);}5.3.3典型实例典型案例1:下表为海格某汽油小客车在不同时段的耗油量,编写程序将该小客车的不同时段耗油量从高到低进行排列。程序代码:#include"stdio.h"voidmain(){doubleoilconsumption[9]={8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7,9.5};inti,j;doubletemp;for(i=0;i<9;i++){ for(j=0;j<8-i;j++) { if(oilconsumption[j]<oilconsumption[j+1]) { temp=oilconsumption[j]; oilconsumption[j]=oilconsumption[j+1]; oilconsumption[j+1]=temp; } }}printf("耗油量从高到低依次是:");for(i=0;i<9;i++)printf("%.1f",oilconsumption[i]);}典型案例2:已知某品牌4S店的一年12月的销售量分别为{10,12,15,14,16,8,7,14,16,17,11,12},将销售量从小到大排序。程序代码#include"stdio.h"voidmain(){intsales[12]={10,12,15,14,16,8,7,14,16,17,11,12};inti,j,t;for(i=0;i<=10;i++){ for(j=i+1;j<=11;j++) { if(sales[i]>sales[j]) { t=sales[j]; sales[j]=sales[i]; sales[i]=t; } }}printf("销售量从小到大排序:");for(i=0;i<9;i++)printf("%d",sales[i]);}5.3.4任务分析与实践程序代码#include"stdio.h"#defineN6voidmain(){intV_number[N]={60,54,50,70,36,51}; inti,j,p; inttemp; printf("排序前新增量:"); for(i=0;i<N;i++) printf("%d",V_number[i]); printf("\n"); printf("排序后:"); for(i=0;i<N-1;i++) { p=i; for(j=i+1;j<N;j++) if(V_number[p]<V_number[j]) { p=j; } temp=V_number[p]; V_number[p]=V_number[i]; V_number[i]=temp; } for(i=0;i<N;i++) printf("%d",V_number[i]); printf("\n");}5.3.5动手练习1.从键盘输入20名驾驶员的工资,使用冒泡,顺序,选择其中一种方法进行从低到高排序并输出。并且画出流程图。2.从键盘输入14个车辆的载重量,使用冒泡,顺序,选择其中一种方法进行从高到低排序并输出。并且画出流程图。课题任务5.4显示某车企的新能源汽车品牌(字符数组)课型讲练授课班级授课时数2教学目标1.掌握字符数组的定义、初始化及字符数组元素的引用方式.2.提高学生的逻辑思维能了教学重点掌握字符数组的定义、初始化及字符数组元素的引用方式.教学难点字符数组的引用学情分析学生前面已经学过了数组,字符数组只不过定义的类型不同罢了。学习这个知识点大部分应该可以接受。教学效果教后记任务5.4显示某车企的新能源汽车品牌(字符数组)5.4.1任务目标从键盘输入江苏省的地级市,输出车牌字符。(
A南京市B无锡市C徐州市D常州市
E苏州市F南通市)任务目标运行截图如图5-4-1所示图5-4-1任务目标运行截图5.4.2知识储备在实际情况中,我们需要用到汉字或者多个字符的情况,这时我们就需要引入字符数组。1.一维字符数组与字符串①一维字符数组数组元素的类型是字符类型的一维数组称为一维字符数组。定义一个一维数组时,如果数据类型为char,这就是一个一维字符数组。例如:charch[10];定义了一个名为ch的一维字符数组,长度为10,系统为该数组开辟了10个连续的存储单元,在这里,一个元素的存储空间正好为一个字节,所以系统开辟了10个连续的字节单元,ch为该连续存储单元的首地址。可以引用数组的元素,如ch[0]=’a’;ch[9]=’\n’;等。②字符串字符串就是一串字符的组合,但它的最后一个字符必定是’\0’。’\0’是一个转义字符,它是字符型的“空值”,它的ASCII代码值为0。’\0’是字符串的结束标志。在C语言中,字符串借助于一维字符数组来存放。在存储时,结束标志’\0’占用存储空间,但不计入字符串的实际长度。C语言中,字符串是用双引号””作为定界符的。在表示字符串时,不需要人为在其末尾加入’\0’。例如,字符串”COMPUTER”不必写成”COMPUTER\0”,C的编译系统在处理时会自动在末尾添加’\0’。一个字符串在存储时,会占用内存中一串连续的存储空间,它有一个起始地址。这段连续的存储空间实际中就是一个一维的字符数组,只是这个数组没有名字。所以,在C语言中,字符串被隐含处理成一个以’\0’结尾的无名的一维字符数组,该字符串就表示内存中一串连续存储空间的首地址。③一维字符数组与字符串的区别一个一维字符数组中的每一个元素都可以存放一个字符,并且它不限定最后一个字符应该是什么。而在C语言中,有关字符串的大量操作都与串结束标志’\0’有关,因此,字符串是最后一个字符必有’\0’的一维字符数组。当一个一维字符数组的长度大于一个字符串的有效长度再加1时,该一维字符数组可以用于存放该字符串。此时,一维字符数组可以被“看作”是字符串变量。但它又不同于一般的变量,不能把一个字符串整体赋给一个数组。2.将一个字符串赋给一个一维字符数组①通过初始化实现逐一元素地赋初值,这种方法同给一般数组赋初值的方式相同。例:charstr[10]={‘s’,’t’,’u’,’d’,’e’,’n’,’t’,’\0’};②赋初值时,直接赋字符串常量例如:charch[8]={“student”};或者省略大括号:charch[8]=“student”;③在执行过程中给一维字符数组赋字符串前面已经讲过,不能给一个数组整体赋值,对一维字符数组同样如此。只能给数组元素逐个赋字符值,最后人为加入串结束标志。例如:charstr[8];str[0]=’s’;str[1]=’t’;str[2]=’u’;str[3]=’d’;str[4]=’e’;str[5]=’n’;str[6]=’7’;str[7]=’\0’;3.字符串的输入和输出①用”%c”格式字符逐个输入和输出例如:通过键盘输入一字符串(以回车结束,假设长度不超过50),存放于数组ch中。#include"stdio.h"#defineLEN51 voidmain(){ charch[LEN]; inti=0; scanf("%c",&ch[i]);while((ch[i]!='\n')) { i++; scanf("%c",&ch[i]); } ch[i]='\0'; i=0; while(ch[i]!='\0'){ printf("%c",ch[i]); i++; }}②用”%s”格式整体输入和输出例如:charch[20];scanf(“%s”,ch);说明:输入项是一数组的数组名,也就是数组的首地址。功能:从键盘输入一串字符,读入到以ch开始的存储单元中,以空格或回车符结束读入。printf(“%s”,ch);说明:输出项是一数组的数组名,也就是数组的首地址。功能:输出以ch为起始地址的存储单元的内容到终端,遇到’\0’时结束输出。③用字符串输入(gets)和输出(puts)函数实现字符串的输入和输出字符串输入(gets)和输出(puts)函数的定义说明在头文件”stdio.h”中,在程序中若调用这两个函数,必须在程序的开头加入文件包含命令:#include“stdio.h”gets函数实现输入调用形式如下:gets(str)说明:str为一确定的地址值,它可以是一个字符数组的数组名,也可以是今后要学到的已赋值的指针型变量。函数功能:调用该函数时,用户从键盘输入一个字符串,以换行符(Enter键)作为输入结束标志;然后将接收到的字符(包括换行符)依次赋给以str为起始地址的存储单元中,系统自动用’\0’来代替最后的换行符。注意:gets函数调用中,空格不作为分隔符,它可以出现在字符串中,这是gets与scanf函数的主要区别。例如:charch[20];gets(ch);若输入:IAM(回车),则在ch中将存入字符串”IAM”,而不是字符串”I”。puts函数实现输出调用形式如下:puts(str)说明:同gets(str)一样,str为一确定的地址值。函数功能:调用该函数时,系统从str这一地址开始,依次输出存储单元的内容,直到遇到第一个’\0’,系统自动将’\0’转换成一个换行符输出,并结束输出。注意:puts函数输出结束后换行,而printf函数输出结束后并不自动换行。4.常用字符串和字符函数C语言有关字符的函数分为字符串函数和字符函数两类,分别包含于头文件“string.h”及头文件“ctype.h”中。常用的字符串函数如表5-4-1所示,常用的字符函数如表5-4-2所示表5-SEQ表5-\*ARABIC4-1常用字符串函数函数名意义返回值gets(str)键盘输入一串字符赋给字符数组strstrputs(str)输出字符数组str内容到显示器strstrlen(str)
求串长整数strcat(str1,str2)
串连接,即串2连接于串1后str1strncat(str1,str2,n)串连接,仅串2前n字符连于串1后str1strcpy(str1,str2)
串复制,串2复制给串1str1strncpy(str1,str2,n)串复制,仅串2前n字符复制给串1str1strcmp(str1,str2)
串比较,比较串2、串1大小整数strncmp(str1,str2,n)串比较,仅比较串2、串1前n字符大小整数strset(str,ch)置换,用ch置换str串各字符strstrnset(str,ch,n)置换,用ch置换str串前n个字符strstrlwr(str)大转小,串中大写字母变为小写字母strstrupr(str)小转大,串中小写字母变为大写字母strmemset(str,ch,n)
置换,将str串前n个字符置换成chstrstrrev(str)倒置,将str串字符颠倒顺序strstrchr(str,ch)ch在str串中首次出现的位置地址,无返回空指针strstr(str1,str2)str2子串在str1串中首次出现的位置地址,无返回空指针表5-4-2字符函数函数名称意义返回isalnum(ch)ch是否是字母或数字是返回1,否返回0isalpha(ch)ch是否是字母isdigit(ch)ch是否是数字islower(ch)ch是否是小写字母isupper(ch)ch是否是大写字母isspace(ch)ch是否是空格isprint(ch)ch是否是可打印字符ispunct(ch)ch是否是标点或空格tolower(ch)将字母ch转小写字母相应小写字母toupper(ch)将字母ch转大写字母相应大写字母5.4.3典型实例典型案例1:从键盘输入某辆车的车架号,并输出车架号。程序代码#include"stdio.h"voidmain(){charvin[18];printf("请输入车架号:");gets(vin);printf("车架号为");puts(vin);}典型案例1运行截图如图5-4-2所示图5-4-2典型案例1运行截图截图典型案例2:从键盘输入某辆车的车架号,并求长度,判断是否满足车架号的长度。典型案例2运行截图如图5-4-3所示图5-4-3典型案例2运行截图典型案例2方法一流程图如图5-4-4所示图5-4-4典型案例2方法一流程图方法一程序代码#include"stdio.h"voidmain(){charvin[18],i=0,len=0;printf("请输入车架号:");scanf("%s",vin);while(vin[i]!='\0'){len++;i++;}if(len==17)printf("满足车架号的长度!");elseprintf("车架号长度有误!");}方法二运用字符串函数程序代码#include"stdio.h"#include"string.h"voidmain(){charvin[18],i=0,len;printf("请输入车架号:");gets(vin);len=strlen(vin);if(len==17)printf("满足车架号的长度!");elseprintf("车架号长度有误!");}典型案例3:从键盘输入某辆车的车牌,再次输入车牌,判断第二次和第一次输入的车牌是否相等,相等显示两次车牌输入一致,不相等显示两次车牌输入不一致。典型案例3运行截图如图5-4-5所示。图5-4-5典型案例3运行截图程序代码#include"stdio.h"#include"string.h"voidmain(){charvin[20],vin2[20];inti=0,flag=0; printf("请输入车架号:");gets(vin);printf("请再次输入车架号:");gets(vin2);if(strcmp(vin,vin2)==0)printf("两次输入车架号一致!");elseprintf("两次输入车架号不一致!");}5.4.4任务分析与实践任务目标流程图如图5-4-6所示图5-4-6任务目标流程图程序代码#include"stdio.h"#include"string.h"voidmain(){charlicense_plate[8];printf("请输入地级市");gets(license_plate);if(strcmp(license_plate,"南京市")==0)printf("A南京市");elseif(strcmp(license_plate,"无锡市")==0)printf("B无锡市");elseif(strcmp(license_plate,"苏州市")==0)printf("E苏州市");elseif(strcmp(license_plate,"南通市")==0)printf("F南通市");elseprintf("输入有误或者无记录");}5.4.5动手练习1.从键盘输入“我爱你中国”并输出。2.从键盘输入一名驾驶员的工号,已知工号长11位,第一位为2,判别学号是否正确。3.输入10名驾驶员的姓名,并按照姓名从高到低进行排序并输出姓名和序号。4.通过键盘将一句英文存放于一个字符数组中,统计该句子里面出现的单词的个数(单词之间用空格分隔)。(提高)5.一名用户要求车牌是6位字符,并且满足回文,从键盘输入车牌,判断是否满足条件。课题任务5.5某车企多年销售统计(二维数组)课型讲练授课班级授课时数2教学目标1、掌握二维数组的使用2、利用二维数组解决实际相关问题3、提高分析问题的能力教学重点1、二维数组的定义、存储形式、元素引用及初始化2、二维数组实际应用教学难点二维数组的输入输出(与循环嵌套相结合使用)学情分析一维数组已经学过对于初始化的一些问题学生应该比较容易接受。由于还没有学习线性代数,对于二维数组的描述不是特别的清楚。要多举例。教学效果教后记任务5.5某车企多年销售统计(二维数组)5.5.1任务目标新能源大客车在江苏不同城市1-6月的新增情况如表5-5-1所示,请编写程序输出该明线表。表5-5-1新增情况表苏州无锡常州南京1月241413162月201616253月183020434月24108125月105686月85575.5.2知识储备一维数组只能处理一种批量数据情况,如果同种数据类型,更多种情况,此时就需要引入多维数组。1.二维数组C语言允许任何类型的数组,甚至允许数组的数组。使用两对方括号,我们就能得到二维数组。要得到高维数组,只要简单地继续增加方括号即可。每使用一对方括号,我们就对数组增加了一维。数组的格式如表5-5-2所示表5-5-2数组的格式数组的声明注释inta[100];一维数组charb[20][30];二维数组floatc[2][3][4];三维数组一个k维数组的尺寸与各个维的尺寸有关。如果用Si代表数组的第i维尺寸,那么数组声明为S1*S2*…*Sk个元素分配的空间。在上表中,b有20*30个元素,c有2*3*4个元素。从数组的基地址开始,所有的数组元素都存储在连续的内存中。即使数组元素是一个接一个地连续存储,我们也经常把二维数组看作是由行和列组成的矩阵更为方便。例如,如果我们声明inta[2][5],那么我们数组元素的排列如表5-5-3所示:表5-5-3数组排列第1列第2列第3列第4列第5列第1行a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]第2行a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]2.二维数组的定义、引用和声明①二维数组的定义定义形式 类型数组名[行常量表达式][列常量表达式]; 可以看作元素是一维数组的一维数组如:inta[3][4];/*3行4列*/②二维数组元素的引用二维数组元素的表示形式为:数组名[下标][下标]如:a[2][3]、b[1][2]=a[2][3]/2、a[2][3]=3;注意:其中下标可以是整型表达式;不要写成a[2,3]等形式;应该注意下标值应在已定义的数组大小范围内;定义数组时用的a[3][4]与引用数组元素时用的a[3][4]的区别。③二维数组的初始化分行给二维数组赋初值:如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]={{1},{5},{9}};等价于inta[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};inta[4][3]={{1,2},{4,5}};等价于inta[4][3]={{1,2,0},{4,5,0},{0,0,0},{0,0,0}};键盘输入5个同学的2门课程的成绩,显示每个同学的学号及成绩明细。3.示例程序代码:#include"stdio.h"voidmain(){ floatscore[5][2]; inti,j; for(i=0;i<5;i++)//外循环次数由人数确定 for(j=0;j<2;j++)//内循环次数由课程数确定 { scanf("%f",&score[i][j]); } printf("学号课程1课程2\n");//输出表头 for(i=0;i<5;i++) { printf("%d",i+1);//输出学号 for(j=0;j<2;j++) { printf("%.1f",score[i][j]);//输出每门课程的成绩 } printf("\n"); }}程序解析:给二维数组赋值,一般通过两重循环来实现,外循环确定行数,内循环确定列数。由于每个学生的两门成绩显示在一行,因此人数确定外循环次数,课程数确定内循环次数。第11行用于输出表头的语句必须在整个循环体的最外面,因此语句只需要执行一次。第14行用于输出学号的语句应放在内循环的外面,保证在循环输出各门课程成绩时,学号只输出一次。请注意第19行语句,这是一条换行语句,一定不能放在内循环里面,否则就不会产生二维表格的输出形式。如果放在内循环里面,结果会是怎么,请读者自行思考。5.5.3典型实例典型案例1:已知某品牌4S店2名销售的12个的销售额如表5-5-4所示,输出2名销售12个月的销售数据。表5-5-4销售额数据表1月份2月份3月份4月份5月份6月份7月份8月份9月份10月份11月份12月份销售1312424223013销售2244332143322典型案例1流程图如图5-5-1所示图5-5-1典型案例1流程图程序代码#include"stdio.h"voidmain(){ intsales[2][12]={{3,1,2,4,2,4,2,2,3,0,1,3},{2,4,4,3,3,2,1,4,3,3,2,2}}; inti,j; for(i=1;i<=12;i++) { printf("%d月份\t",i); } printf("\n"); for(i=0;i<2;i++) { for(j=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文章阅读心得体会15篇
- 春节安全通知范文汇编9篇
- 文艺简短的离职感言7篇
- 攀登者观后感(集锦15篇)
- 我们要做新时代的奋斗者演讲稿范文600字(26篇)
- 科技助力下的城市内涝防治实践案例分析
- 跨学科视角下的学生阅读能力提升路径
- 校园办公环境安全与应急预案培训
- 科研实验室的标准化认证流程解析
- 旅游行业安全风险防控与救援机制
- 2024年江西省南昌市中考一模数学试题(含答案)
- 48贵州省贵阳市2023-2024学年五年级上学期期末数学试卷
- 《采暖空调节能技术》课件
- CONSORT2010流程图(FlowDiagram)【模板】文档
- 游戏综合YY频道设计模板
- arcgis软件操作解析课件
- 中兴ZCTP 5GC高级工程师认证考试题库汇总(含答案)
- 大学生创新创业教程PPT全套完整教学课件
- 小学科学项目化作业的设计与实施研究
- 2020年中考生物试卷及答案
- MCNP-5A程序使用说明书
评论
0/150
提交评论