C语言项目化教程(基于智能制造软件)教案 项目6 模块化设计(函数)_第1页
C语言项目化教程(基于智能制造软件)教案 项目6 模块化设计(函数)_第2页
C语言项目化教程(基于智能制造软件)教案 项目6 模块化设计(函数)_第3页
C语言项目化教程(基于智能制造软件)教案 项目6 模块化设计(函数)_第4页
C语言项目化教程(基于智能制造软件)教案 项目6 模块化设计(函数)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE课题任务6.1显示车辆数据(无参数无返回值类型)课型讲练授课班级授课时数2教学目标1、了解模块化程序设计的方法2、掌握函数的定义、声明和调用3、能够自行定义简单的函数、按要求完成相关的功能教学重点1、模块化程序设计的思想2、函数的定义、声明和调用教学难点1、函数形参、实参的概念2、实参,形参之间的数据传递的学情分析函数这个知识点相对前面的其他知识点有很大的联系。教学的时候首先要让学生了解使用函数的优点,树立模块化的意识,再进一步介绍函数的其他知识。教学效果教后记项目六模块化设计[学习目标]知识目标理解函数的定义理解主调函数和被调函数、实参和形参、函数的返回值、函数的声明熟悉函数的嵌套调用熟悉函数的递归调用了解数组名作为函数的参数能力目标会函数的定义和说明格式。能通过进行函数的调用,学会函数的参数传递,得到正确的函数返回值。会利用函数的嵌套和递归调用强化模块化程序设计思路。情景设置:对于一个完整的监控系统,除了数据的采集、发送和接收,还需要在接收端显示电动汽车的运行状态,观察数据特点,并加以应对,本节通过一个显示函数实现车辆数据的显示功能。任务6.1显示车辆数据(无参数无返回值类型)6.1.1任务目标创建一个C语言程序,输出某集团新能源M型大客车6-12月新增明线表如表6-1-1所示。表6-SEQ表6-\*ARABIC1-1大客车6-12月新增明线表苏州无锡常州南京1月241413162月201616253月183020434月24108125月105686月8557任务目标运行截图如图6-1-1所示:图6-1-SEQ图6-\*ARABIC1任务目标运行截图6.1.2知识储备前面上课的内容我们已经接触了很多函数比如数学函数sqrt,字符函数strcat等。一个较大的程序都会由若干个程序模块组成。在C语言中,一般由一个主函数和若干个子函数构成。函数的概念从用户使用的角度,函数分为两种标准函数,即库函数。由系统提供,比如printf,strlen等用户自己定义的函数。也就是我们上面介绍的子函数,目的是解决用户的专门需求。2.有关函数的说明:(1)一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能。在C语言中,用函数来实现各功能模块。(2)一个C程序可由一个main主函数和若干个其它函数构成。由主函数调用其它函数。(3)一个源程序文件由一个或多个函数组成,它们是一个整体。一个源程序是一个编译单位。(4)C程序的执行总是从main主函数开始,调用其它函数后流程回到main主函数,在main主函数中结束整个程序的运行。main主函数是系统定义的。(5)所有函数都是独立的,完成一个特定的功能。3.无参无返回函数的定义形式void函数名(){声明部分语句}主函数中的调用的写法函数名();6.1.3典型案例典型案例1:下表为某集团新能源某不同类型客车在不同时段的耗油量,编写程序,要求自定义两个函数,分别输出表头和内容。耗油量如表6-1-2所示。表6-1-SEQ表6-\*ARABIC2耗油量表时段1时段2时段3时段4时段5时段6时段7时段88.58.89.210.17.88.68.78.710.2111314.58.99.79.79.8典型案例1的流程图主要由三部分构成,其中主函数流程图如图6-1-2所示,子函数表头流程图如图6-1-3所示,子函数内容流程图如图6-1-4所示。图6-1-SEQ图6-\*ARABIC2主函数流程图图6-1-SEQ图6-\*ARABIC3表头流程图图6-1-SEQ图6-\*ARABIC4内容流程图程序代码:#include"stdio.h"voidprint_head(){ inti; printf("集团新能源某不同类型客车在不同时段的耗油量\n"); for(i=1;i<=8;i++) printf("时段%d\t",i); printf("\n");}voidprint_details(){ floatoilconsumption[2][8]={{8.5,8.8,9.2,10.1,7.8,8.6,8.7,8.7},{10.2,11,13,14.5,8.9,9.7,9.7,9.8}}; inti,j; for(i=0;i<2;i++) { for(j=0;j<8;j++) { printf("%.2f\t",oilconsumption[i][j]); } printf("\n"); }}voidmain(){ print_head(); print_details();}典型案例1运行截图如图6-1-5所示图6-1-SEQ图6-\*ARABIC5典型案例1运行截图小贴士:无参数无返回值函数时最简单的一种方式,想想大家一件事情时采用分工合作,是不是就是这种。小贴士:无参数无返回值函数时最简单的一种方式,想想大家一件事情时采用分工合作,是不是就是这种。典型案例2:从键盘输入某品牌新能源客车5名驾驶员12个月的工资,并输出。典型案例2的流程图主要由三部分构成,其中主函数流程图如图6-1-6所示,子函数输入数据流程图如图6-1-7所示,子函数输出数据流程图如图6-1-8所示。图6-1-SEQ图6-\*ARABIC6典型案例2主函数流程图图6-1-SEQ图6-\*ARABIC7输入子函数流程图图6-1-SEQ图6-\*ARABIC8输出函数流程图程序代码:#include"stdio.h"floatsalary[3][6];voidinput_salary(){ inti,j; for(i=0;i<3;i++) {printf("驾驶员%d六个月工资:",i+1); for(j=0;j<6;j++) { scanf("%f",&salary[i][j]); } }}voidoutput_salary(){ inti,j; printf("驾驶员6个月的工资明线表\n"); for(i=0;i<3;i++){ printf("驾驶员%d",i+1); for(j=0;j<6;j++) printf("%d月份",j+1); printf("\n"); for(j=0;j<6;j++) printf("%10.2f",salary[i][j]); printf("\n"); }}voidmain(){ input_salary(); output_salary();}典型案例2运行截图如图6-1-9所示图6-1-SEQ图6-\*ARABIC9典型案例2运行截图6.1.4任务分析与实践任务目标的流程图主要由四部分构成,其中主函数流程图如图6-1-10所示,子函数显示内容流程图如图6-1-11所示。图6-1-SEQ图6-\*ARABIC10任务目标主函数流程图图6-1-SEQ图6-\*ARABIC11任务目标显示内容流程图程序代码:#include"stdio.h"voidprint_head(){printf("海格新能源M型大客车6-12月新增明线表\n");printf("\n"); printf("苏州无锡常州南京\n"); }voidprint_body(){ intV_number[6][4]={{24,14,13,16},{20,16,16,25}, {18,30,20,43},{24,10,8,12},{10,5,6,8},{8,5,5,7}}; inti,j; for(i=0;i<6;i++) { printf("%d月",i+1); for(j=0;j<4;j++) { printf("%6d",V_number[i][j]); } printf("\n"); }}voidprint_foot(){ printf("制表日期:2019年1月2日");}voidmain(){ print_head(); print_body(); print_foot();}6.1.5动手练习1.需要把p1,p2各个函数输出,请填空#include<stdio.h>voidp1(){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");}voidp2(){printf("*\n");printf("*\n");printf("*\n");}voidmain(){__________;__________:}运用函数将“爱家才会有温馨,爱国才能得安宁。家庭是温暖得巢,国家是安稳得营。”的显示10遍。课题任务6.2根据车辆品牌,显示车辆数据(有参数无返回值类型) 课型讲练授课班级授课时数2教学目标1.掌握通过指针访问数组2.指针指向数组的几种方式教学重点指针指向数组时几种方式的转换教学难点指针指向数组的理解学情分析前面已经讲过了指针指向一个变量,数组也学习过,基本的转换学生是可以理解的,但是指针与数组联系后很多同学不是能理解指针,几种关系放在一起更容易乱。教学效果教后记任务6.2根据车辆品牌,显示车辆数据(有参数无返回值类型) 6.2.1任务目标从键盘输入车辆品牌,如果是比亚迪输出国产新能源车,否则输出不能辨别。任务目标运行截图如图6-2-1所示。图6-2-1任务目标截图6.2.2知识储备在使用函数时,有时我们需要传递一些数据。这时,子函数和主函数就会有参数使用。有参无返回函数的定义形式.void函数名(数据类型形参1,数据类型形参2,。。。。。。){声明部分语句}主函数中调用的写法函数名(参数1,实参2,。。。。。。)6.2.3典型案例典型案例1:从键盘输入一个车牌,要求长度等于5,如果长度不等于5输出不合格,如果等于5输出长度合格。典型案例1的流程图主要由二部分构成,其中主函数流程图如图6-2-2所示,子函数判断车牌长度流程图如图6-2-3所示。图6-2-2典型案例1主函数的流程图图6-2-3子函数判断车牌长度流程图程序代码:#include"stdio.h"#include"string.h"voidplatenumber_len(charplatenumber[]){ if(strlen(platenumber)==5) printf("车牌长度正确!"); else printf("车牌长度有误!");}voidmain(){ charplatenumber[20]; printf("请输入车牌号:"); gets(platenumber); platenumber_len(platenumber);}典型案例1运行截图如图6-2-4所示图6-2-4典型案例1运行截图典型案例2:从键盘输入一个数值,如果输入1显示比亚迪,如果输入2显示东风,如果输入3显示吉利,其它输入显示不确定。典型案例2的流程图主要由二部分构成,其中主函数流程图如图6-2-5所示,子函数判断品牌如图6-2-6所示。图6-2-5典型案例2流程图图6-2-6判断品牌流程图程序代码:#include"stdio.h"voidbrand_info(intn){ switch(n) { case1:printf("比亚迪");break; case2:printf("东风");break; case3:printf("吉利");break; default:printf("不确定"); }}voidmain(){ intbrand_number; printf("请输入品牌号(1位整数):"); scanf("%d",&brand_number); brand_info(brand_number);}典型案例2运行截图如图6-2-7所示。图6-2-7典型案例2运行截图典型案例3:从键盘输入某品牌新能源客车1名驾驶员12个月的工资,并输出。典型案例3的流程图主要由三部分构成,其中主函数流程图如图6-2-8所示,子函数输入工资如图6-2-9所示,子函数输出工资如图6-2-10所示。图6-2-8典型案例3主函数流程图图6-2-9SEQ图6-\*ARABIC输入工资子函数流程图图6-2-10输出工资子函数流程图程序代码:#include"stdio.h"voidinput_salary(floatsalary[]){ inti; printf("请输入6个月的工资:"); for(i=0;i<6;i++) scanf("%f",&salary[i]);}voidoutput_salary(floatsalary[]){ inti; printf("该驾驶员6个月的工资:"); for(i=0;i<6;i++) printf("%.2f\t",salary[i]);}voidmain(){ floatsalary[6]; input_salary(salary); output_salary(salary);}典型案例3运行截图如图6-2-11所示图6-2-11典型案例3运行截图6.2.4任务分析与实践任务目标的流程图主要由二部分构成,其中主函数流程图如图6-2-12所示,子函数判断是否是新能源流程图如图6-2-13所示。图6-2-12任务目标主函数流程图图6-2-13子函数判断是否是新能源流程图程序代码:#include"stdio.h"#include"string.h"voidbrand_identify(charbrand[]){ if(strcmp(brand,"BYD")==0) printf("国产新能源车"); else printf("不能辨别");}voidmain(){ charbrand[20]; printf("请输入车辆品牌:"); gets(brand); brand_identify(brand);}6.2.5动手练习1.从键盘输入两名车辆得载重量,运用有参无返回值方式求出最重得载重量。2.已知某辆车一个星期得载重量为{20,15,32,21,24,33,15},使用有参无返回值的方法计算这星期的总共载重量。课题任务6.3:根据车辆品牌,显示销售额(有返回值类型)课型讲练授课班级授课时数2教学目标1、了解模块化程序设计的方法2、掌握函数的定义、声明和调用3、能够自行定义简单的函数、按要求完成相关的功能4、有返回值类型主函数调用方法,子函数写法教学重点1、模块化程序设计的思想2、函数的定义、声明和调用教学难点1、函数形参、实参的概念2、实参,形参之间的数据传递的学情分析函数这个知识点相对前面的其他知识点有很大的联系。教学的时候首先要让学生了解使用函数的优点,树立模块化的意识,再进一步介绍函数的其他知识。教学效果教后记任务6.3:根据车辆品牌,显示销售额(有返回值类型)6.4.1任务目标下图是几种车辆的近半年的销量数,从键盘输入车辆品牌,输出销售数。汽车品牌和销售量如表6-SEQ表6-\*ARABIC3-1所示。表6-SEQ表6-\*ARABIC3-1汽车品牌的销售量表汽车品牌数量吉利汽车1500838东风日产1300592长城汽车915039北京现代790177任务目标运行截图如图6-3-1所示图6-3-1任务目标截图6.3.2知识储备我们如果想在百度搜索一些内容,那么会输入需要搜索的内容,结果就会在页面上显示我们需要的页面。程序中也有很多这种情况,需要将子函数的数据返回,这就是有返回值函数。一般有以下两种情况,第一种无参数有返回值,第二种有参数有返回值。1.无参数有返回值返回值类型函数名(){语句;return返回值;}主函数调用格式变量名=函数名();(变量名的数据类型和返回值的数据类型一致)2.有参数有返回值返回值类型函数名(参数1,参数2,。。。){语句;return返回值;}主函数调用格式变量名=函数名(实参);(变量名的数据类型和返回值类型一致)6.3.3典型案例典型案例1:某集团驾驶员工资根据驾驶员的安全驾驶年限规定,安全驾驶0年3000元,1-3年4000元,4-7年6000元,8-10年8000元,10年以上1万元,从键盘输入安全驾驶年数,输出工资。典型案例1的流程图主要由二部分构成,其中主函数流程图如图6-3-2所示,子函数判断车牌长度流程图如图6-3-3所示。图6-3-2典型案例1的主函数流程图图6-3-3子函数判断车牌长度流程图程序代码:#include"stdio.h"floatsalary_onfixed(intfixed){ floatsalary=-1; if(fixed<0)printf("输入有误"); elseif(fixed==0)salary=3000; elseif(fixed<=3)salary=4000; elseif(fixed<=7)salary=6000; elseif(fixed<=10)salary=8000; elsesalary=10000; returnsalary;}voidmain(){ intyear;floatsalary; printf("请输入安全驾驶年数"); scanf("%d",&year);salary=salary_onfixed(year); printf("工资为:%.2f",salary);}典型案例1运行截图如图6-3-4所示图6-3-4典型案例运行截图典型案例2:从键盘输入一个车牌,如果第一个字符是3,输出是自选号,否则输出不是自选号。典型案例2的流程图主要由二部分构成,其中主函数流程图如图6-3-5所示.图6-3-5典型案例2主函数的流程图程序代码:#include"stdio.h"#include"string.h"#include"stdlib.h"intPlatenumberisfree(charbrand[]){intresult=0; if(brand[0]=='3') result=1; returnresult;}voidmain(){ charbrand[10]; printf("请输入车牌号:"); gets(brand); if(Platenumberisfree(brand)==1)printf("是自选号");elseprintf("不是自选号");}典型案例2运行截图如图6-3-6所示图6-3-6典型案例2运行截图典型案例:3:从键盘输入一个车牌,要求只包含数字和大写字母,判断是否合格。典型案例3的流程图主要由三部分构成,其中主函数流程图如图6-3-7所示,子函数判断车牌长度流程图如图6-3-8所示,判断是否含有5个数字和大写字母流程图如图6-3-9所示。图6-SEQ图6-\*ARABIC32典型案例3主函数的流程图图6-3-8子函数判断车牌长度流程图图6-3-9是否含有5个数字和大写字母流程图程序代码:#include"stdio.h"#include"string.h"#include"ctype.h"intlen_islegal(charp_n[]){ if(strlen(p_n)==5) return1; return0;}intdigit_upper_islegal(charp_n[]){ intcount=0,i=0; while(p_n[i]!='\0') { if(isdigit(p_n[i])||isupper(p_n[i])) count++; i++; } if(count==5) return1; return0;}voidmain(){ charPlate_number[10]; printf("请输入车牌号:"); gets(Plate_number); if(len_islegal(Plate_number)&&digit_upper_islegal(Plate_number)) printf("车牌号合法!"); else printf("车牌号不合法!"); }典型案例3运行截图如图6-3-10所示图6-3-10典型案例3运行截图典型案例4:已知四种汽车品牌的近半年的销量数,输出最大销售数量。典型案例4的流程图主要由二部分构成,其中主函数流程图如图6-3-11所示,子函数求最值流程图如图6-3-12所示。图6-3-11典型案例4的主函数的流程图图6-3-12求最值子函数流程图程序代码:#include"stdio.h"intsales[4]={1500838,1300592,915039,790177};intmax_sales(){ inti,max=sales[0]; for(i=1;i<4;i++) { if(max<sales[i]) max=sales[i]; } returnmax;}voidmain(){ printf("最大销售数量是:%d",max_sales()); }典型案例4运行截图如图6-3-13所示图6-3-13典型案例4运行截图6.3.4任务分析与实践任务目标的流程图主要由二部分构成,其中主函数流程图如图6-3-14所示,子函数根据车牌输出销售量流程图如图6-3-15所示。图6-3-14任务目标主函数的流程图图6-3-15子函数根据车牌输出销售量流程图程序代码:#include"stdio.h"#include"string.h"charbrand_sales[4][20]={"吉利","东风日产","长城","北京现代"};intsales[4]={1500838,1300592,915039,790177};intsearch_salesonbrand(charbrand[]){ intsalesnumber=-1,i; for(i=0;i<4;i++){ if(strcmp(brand,brand_sales[i])==0) { salesnumber=sales[i]; break; } } returnsalesnumber;}voidmain(){ charbrand[20]; printf("请输入品牌:"); gets(brand); if(search_salesonbrand(brand)!=-1) printf("该品牌的销售总量是%d",search_salesonbrand(brand)); else printf("无此品牌!");}6.3.5动手练习1.从键盘输入两名车辆得载重量,运用有参有返回值方法求出最重得载重量。2.已知某辆车一个星期得载重量为{20,15,32,21,24,33,15},使用有参有返回值的方法计算这星期的总共载重量。课题任务6.4根据驾驶员的工作年限,求工资的数额(嵌套和递归)课型讲练授课班级授课时数2教学目标掌握递归函数的算法运用软件开发方法提出问题,分析问题的能力;运用各种开发工具调试程序。教学重点递归函数的算法教学难点递归函数的算法学情分析学生前面已经学习的函数的方法,在讲解循环中也引入了递归函数,此个递归函数也许会和循环讲解时产生问题,此处多注意他们的问题。教学效果教后记任务6.4根据驾驶员的工作年限,求工资的数额(嵌套和递归)6.4.1任务目标已知驾驶员的工资和工作年限相关,第一年每月的工资为5000元,以后每年增长10%,求第12年每月的工资。程序运行结果如图6-40所示。图6-40程序运行结果(上图已修改)6.4.2知识储备1.函数的嵌套调用在调用一个函数的过程中又调用另一个函数称为“函数的嵌套调用”。示例1,函数的嵌套调用的示例代码如下:#include<stdio.h>voidf1();voidf2(intn);voidmain(){f1();}f1(){f2(5);}voidf2(intn){inti;for(inti;i<=n;i++)rintf(“*”);}示例1的函数嵌套调用的示意图如图6-41所示。图6-41函数的嵌套调用的示意图2.函数的递归调用在调用一个函数的过程中,又出现直接或间接地调用该函数本身称为“函数的递归调用”。示例2:函数的递归调用的应用。#include<stdio.h>voidf(intn){if(n==0)return;printf("%d\n",n);f(--n); //直接递归调用}voidmain(){intnum=5;f(num);}6.4.3典型案例典型案例1:某集团对驾驶员的工资根据是否出现交通事故而制定,如果没有出现交通事故,则驾驶员下一个月的工资会增加上一个月工资的10%。一个驾驶员1月的工资为3000元,假设该驾驶员全年都没有出现交通事故,则计算这个驾驶员全年的工资(备注一个函数求和,一个函数求每个月的工资)。典型案例1嵌套调用示意图如图6-42所示。图6-42典型案例1嵌套调用示意图代码如下:#include"stdio.h"doublesalaryincrease(intmonth){doublesalary=3000;inti;for(i=2;i<=month;i++)salary=salary*1.1;returnsalary;}doublesum_salary(intmonth){doublesum=0;for(i=1;i<=12;i++)sum=sum+salaryincrease(i);returnsum;}voidmain(){intmonth=12;printf("本年一共领取了%.2f工资",sum_salary(12));}典型案例1的运行结果如图6-43所示。图6-43图6-43典型案例1的运行结果1)算法分析根据题意可知age(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论