资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2022/6/2 Thursday,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2022/6/2 Thursday,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2022/6/2 Thursday,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2022/6/2 Thursday,#,项目一,初窥门径,C,语言和程序设计,任务,1 Hello world,!初识,C,语言,任务,2,求两个整数之和,C,程序的结构,任务,1 Hello world,!初识,C,语言,任务,描述,:,编程语言是人跟计算机打交道的桥梁,它充当人类的翻译官,请在,C,环境中输出“,Hello world,!,”,。,案例,分析,:,了解编程语言及,C,语言的发展和特点,初步认识,Dev-C+,的运行环境及运行的基本步骤。,1.1,编程语言,机器语言,汇编语言,C,语言,1.2 C,语言的发展及其特点,1.C,语言,的特点,语言简洁紧凑,使用灵活方便,运算符丰富,数据类型丰富,具有结构化的控制语句,语法限制不太严格,程序设计自由度大,C,语言允许直接访问物理地址,用,C,语言编写的程序可移植性好,C,语言程序生成代码质量高,程序执行效率高,1.3 Dev-C+,介绍,1.Dev-C+5.11,界面,图,1-1 Dev-C+5.11,界面,表,1-1,Dev-C+5.11,部分按钮说明如表,1-1,所示,图标,功能,快捷键,新建,Ctrl+N,打开,Ctrl+O,保存,Ctrl+S,撤销,Ctrl+Z,恢复,Ctrl+Y,编译,F9,运行,F10,编译运行,F11,表,1-1,2.,在,Dev-C+,上运行一个,C,程序的基本步骤,图,1-2 Dev-C+5.11,新建或打开一个文件,(,1,)新建或打开一个文件,(,2,)在编辑窗口中输入或修改,C,程序,2.,在,Dev-C+,上运行一个,C,程序的基本步骤,图,1-3,编译程序结果窗口,(,3,)保存,(,4,)编译,(,5,)运行,任务,1 Hello world,!初识,C,语言,任务实施,:,#include,main(),printf(Hello world,!,);,运行结果:,Hello world,!,任务,1 Hello world,!初识,C,语言,任务总结,:,本任务实现了简单语句的输出,从而了解了,C,语言的特点、运行环境以及运行步骤。,任务拓展,:,请使用快捷键法输出“这是我的第一个,C,程序。”,任务,2,求两个整数之和,C,程序的结构,任务,描述,:,求两个整数的和,熟悉,C,语言程序的结构以及,C,语言程序运行的方法。,案例,分析,:,设置,3,个变量,,a,和,b,用来存放两个整数,,sum,用来存放和数,用赋值运算符“,=,”把相加的结果传送给,sum,并输出,1.4 C,语言程序的结构,1.C,语言,的特点,一个,C,语言程序是由一个或多个函数组成的,其中必须包含且只能包含一个,main,函数,当然可以包含若干个其他函数。,程序总是从,main,函数开始执行。,一个函数由函数首部和函数体两部分组成。,C,程序书写格式是比较自由的。,程序应当包含注释。,1.5 C,语言程序的上机步骤,图,1-5,运行,C,程序的步骤,1.6,程序设计的任务,从确定问题到最后完成任务,一般经历以下几个工作阶段:,(,1,)问题分析。,(,2,)设计算法。,(,3,)编写程序。,(,4,)对源程序进行编辑、编译和连接,得到可执行程序。,(,5,)运行程序,分析结果。,(,6,),编写程序文档。,任务实施,:,任务,2,求两个整数之和,C,程序的结构,#incl,u,de,main()/*,求两个整数之和,*/,int a,b,sum;/*,这是声明部分,定义,a,b,sum,为整型变量,*/,a=1;/*,将,1,赋给,a,,从这行开始的,4,行是,c,语句,*/,b=2;/*,将,2,赋给,b*/,sum=a+b;/*,将,a+b,的和赋给,sum*/,printf(“%d”,sum);/*,输出,s,的值,*/,案例,6,植物生长逐帧动画,始终显示标记:不管绘图纸外观是否打开,都在时间轴标题中显示绘图纸外观标记。,锚定标记:将绘图纸外观标记锁定在时间轴标题中的当前位置。通常情况下,绘图纸外观范围是和当前帧指针以及绘图纸外观标记相关的。通过锚定绘图纸外观标记,可以防止它们随当前帧指针移动。,标记范围,2,:在当前帧的两边各显示两个帧。,标记范围,5,:在当前帧的两边各显示五个帧。,标记整个范围:在当前帧的两边显示所有帧。,(4),“修改标记”的,5,种形式,任务,1 Hello world,!初识,C,语言,任务总结,:,在本任务中通过综合运用C语言程序的结构特点,依据C程序的运行方法,实现了简单的两个整数求和功能。,任务拓展,:,请查找资料并了解函数的调用功能,求出两个整数中的较大者。,项目总结,本项目介绍了编程语言和C语言的发展及特点,并通过两个任务实例分析了C语言程序的格式、构成和基本要求,最后介绍了C程序的上机步骤。,项目二,算法与流程图,项目概述,:,近些年,编程从少数程序员的特有技能逐步向通用技能扩散,大有“全民编程”之势;编程的核心在于算法;编程语言纷繁复杂,高级、中级、低级兼备,但无论使用哪种语言算法都是绕不开的。,C,语言中所谓的算法实际上就是程序设计的主思想,这些思想就是,C,语言代代码中的各种语句、运算或者指令信息的体现。而流程图则是将编程中的算法思想通过绘制图形以及流程的形式展示出来。本项目将,C,语言中的算法以及流程图相关内容进行详细讲解。,学习目标,:,了解算法概念;理解算法的特性;了解算法的优劣;掌握用流程图描述算法。,知识框架,:,任务,3,比谁更聪明,任务,4,流程图,任务,3,比谁更聪明,任务,描述,:,计算,1+2+3+,+100,的和,。,任务分析,:,本任务中,100,个数逐个相加在一起后的结果,如果按照变量赋值的方法来实现,显然进行,100,个变量是不合适的,通过使用循环结构,对循环变量进行赋初值后,判断循环变量是否超出,100,,如果未超出就累加到变量,s,中,这样循环执行循环体后,就得到了想要的结果。,知识准备,:,著名的计算机科学家沃斯曾提出过一个公式:数据结构,+,算法,=,程序。也就是说,一个完整的程序应该包含数据结构和算法。数据结构就是程序中所使用到的数据的类型以及数据的组织形式。,而就现在而言,设计一个,C,语言程序不仅需要数据结构和算法,还需要程序的设计方法以及一个语言工具和环境。所以一个程序的组成可以表示为:程序结构,+,算法,+,程序设计方法,+,语言工具和环境。,任务,3,比谁更聪明,2.1,算法,在现实生活中,算法无处不在,当人们遇见一个问题并对这个问题进行思考时,就是在使用算法。因此算法可以理解为针对出现的问题所设计的具体步骤以及解决方法。,对同一个问题,可以有不同的解题方法和步骤,有的方法只须进行很少的步骤,而有些方法则需要较多的步骤;一般来说,希望采用方法简单、运算步骤少得方法。因此,为了有效地进行解题,不仅需要保证算法的正确,还要考虑算法的质量,选择合适的算法。,任务,3,比谁更聪明,计算机中的算法大致可分为以下两种类别。,(,1,)数值运算算法,数值运算算法主要用于针对数值问题进行求解,比如求解方程的根、求解函数的,这类需要借助数学公式进行相应的计算。,(,2,)非数值运算算法。,这类算法所包括的面十分广泛,比如在图书索、人事管理、车辆调度中的应用,一般需要建立一个过程模型,根据模型制定算法。,任务,3,比谁更聪明,2.2,算法的特性,总地来说,算法在解决问题时具有以下特性。,1.,有穷性,算法应当包含有限的操作步骤,不能无穷无尽,不论在做什么样的运算,一定要注意所包含的上限问题,也就是说要在有限的操作步骤内可以解决问题。,2.,确定性,算法中的每个步骤都必须是确定的、十分清晰,不得具有二义性。若是某个操作是含糊的、模棱两可的话,解决问题的结果可能就会出现分歧。,任务,3,比谁更聪明,3.,有零个或多个输入,输入是指在执行算法时需要从外界来获取若必要的初始量等信息。,例如,:,c=a+b;,此时需要用户给定变量,a,和变量,b,的值以计算变量,c,的值。,又例如,:,printf(Hello);,此时只是需要输出一段字符串,不需要用户入任何数据,此为零输入。,4.,有一个或多个输出,算法的最终目的就是为了求解,通过输出的方式将求出的结果显示出来。若是一个程序在执行结束后没有返回任何信息,那么此程序就没有执行的价值。,任务,3,比谁更聪明,5.,有效性,算法在执行时,每一个步骤必须都能够有效地执行,并且得到确定的结果。,例如,:,int a=2,b=0;,c=a/b;,此时,“,c=a/b,”便为一个无效语句,因为使,0,作为分母是没有意义的。,任务,3,比谁更聪明,2.3,算法的优劣,一个产品的质量可以用好坏来区分,算法同也有优劣,评判一个算法的优劣性可以从以下几个方面来讲。,1.,正确性,正确性是说算法在制定完成后能否满足具体问题的要求,也就是说针对任何合法的输入,该算法都能够得出合理正确的结果。,2.,可读性,算法在制定完成后,该算法被理解的难易程即为可读性。可读性对于一个算法来说十分重要,若是一个算法令人难以理解,,那么这个算法就得不到推广也不能进行交流,对于算法的修改、维护以及拓展都十分不利。因此制定算法的时候,需要尽量将算法写得通俗易懂,简单明了。,任务,3,比谁更聪明,3.,健壮性,在一个程序完成之后,运行该程序的用户对程序的理解会因人而异,开发人员不能够确保每一个用户都能够按照要求来进行输入。健壮性就是说当用户输入的数据非法时,该算法能够做出相应的判断,不会因为输入了错误的数据而造成程序的崩溃瘫痪。,4.,时间复杂度与空间复杂度,时间复杂度是指一个算法在运行的过程中所消耗的时间。影响一个算法的时间复杂度主要有以下几个因素。,(1),问题的规模大小。例如,求解,10,以内自然数之和与求解,1000,以内自然数之和所花费的时间是不同的。,(2),源程序的编译功能强弱以及经过编译所产的机器代码质量的优劣。,(3),根据计算机的系统硬件所决定的机器执行一条目标指令所需要的时间。,(4),程序中语句所执行的次数。,(5),使用不同的计算机语言所实现的效率。,任务,3,比谁更聪明,时间复杂度在一个非常小的程序中可能很体会出来,但是在一个特别大的程序中就会发现一个程序在运行的过程中时间复杂度是举足轻重的。所以说编写出一个更为高效且高速的算法是开发人员对算法不断改进的目标。,空间复杂度是指算法在运行的过程中所需要的内存空间的大小。一个算法在计算机的内存中所占用的存储空间包含了算法本身所占的内存空间、算法在对数据输入输出时所占用的内存空间以及算法在运行的过程中所占用的临时存储空间。就目前而言,计算机发展日新月异,对于空间复杂度的考虑已经不再那么要了,但是编程时开发人员也是需要注意的。,任务,3,比谁更聪明,在计算机科学中,算法是指描述用计算机解决给定问题的过程。计算,1+2+3+,+100,的算法可表示为:,步骤,1,:,0s,步骤,2,:,1i,步骤,3,:,s+is,步骤,4,:,i+1i,步骤,5,:如果,i,100,,转到步骤,3,,否则,结束。,任务实施,:,任务,3,比谁更聪明,在上面的算法中,符号,s,和,i,表示变量,符号,表示给变量赋值。步骤,1,和步骤,2,表示给变量,s,和,i,赋初值,0,和,1,;步骤,3,将变量,i,的当前值累加到变量,s,中;步骤,4,使变量,i,在原来的基础上增加,1,;步骤,5,判断,i,的值如果小于等于,100,,重复做步骤,3,和步骤,4,,构成一个循环,而当,i,的值不小于等于,100,的时候,循环结束,这时,变量,s,的值就是要求的计算结果。,任务,3,比谁更聪明,本次任务描述了整个计算过程中算法的实现,下面就将算法以程序的形式录入电脑,以此来验证一下算法。程序的运行结果如图,2-1,所示。,#include,main(),int i,s=0;,for(i=1;i=,&,赋值运算符,=,及其扩展赋值运算符,条件运算符,?:,逗号运算符,,,指针运算符,*和,求字节数运算符,sizeof,强制类型转换运算符,(,类型,),成员运算符,.,下标运算符,其他,如函数调用运算符(),1.,算术运算符,运 算 符,含 义,举 例,结 果,+,正号运算符(单目运算符),-,负号运算符(单目运算符),*,乘法运算符,3*2,6,/,除法运算符,3/2,1,3.0/2.0,1.5,%,求余运算符,3%2,1,3.0%2.0,出错,+,加法运算符,3+2,5,-,减法运算符,3-2,1,2.,自增(,+,)、自减(,-,)运算符,自增(,+,)、自减(,-,)运算符的作用是使变量的值加,1,或减,1,例如:,+i,-i(,在使用,i,之前,先使,i,的值加(减),1),i+,i-(,在使用,i,之后,使,i,的值加(减),1),3,算术表达式和运算符的优先级与结合性,(,1,)算术运算符的优先级。优先级由高到低为:括号函数调用取负*、,/,、,%+,、,-,。,(,2,),C,语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向都是“自左至右”(又称左结合性)。,4.,赋值运算符,(,1,)赋值符号“”就是赋值运算符,它为“右结合”,它的作用是将一个数据赋给一个变量。,(,2,)复合的赋值运算符,在赋值符之前加上其他运算符,可以构成复合的运算符。如果在“”前加一个“十”运算符就成了复合运算符“”。,5.,逗号运算符,逗号运算符用于将多个表达式连接起来,优先级最低。,格式:,表达式,1,,表达式,2,,,表达式,n,;,功能:从左向右计算各个表达式的值,整个逗号表达式的结果是最后一个表达式,n,的值。,任务实施,:,任务,6,计算奥运冠军全红婵的总得分运算符和表达式,#include,main(),float total,a,b,c,d,e;,a=82.50;,b=96.00;,c=95.70;,d=96.00;,e=96.00;,total=a+b+c+d+e;,printf(,奥运冠军全红婵的总得分为:,%.2f,分。,n,to,tal);,任务总结,:,任务,6,计算奥运冠军全红婵的总得分运算符和表达式,本任务用算术表达式和赋值运算符完成了计算冠军总分的问题,需要注意运算符和优先级和结合性,算术运算符具有左结合性,赋值运算符具有右结合性。,任务拓展,:,任务,6,计算奥运冠军全红婵的总得分运算符和表达式,在,32,届奥运会女子铅球比赛中,中国选手巩立娇获得冠军,摘得中国队的第,22,枚金牌。铅球场地的投掷圈平面图如图所示,根据标准,铅球投掷圈的直径为,2135mm,圆周率为,3.14159,请编程计算铅球投掷圈的周长和面积。,任务,描述,:,任务,7,统计捐赠物资,C,语句及输入输出函数,H,地遭遇了千年一遇的大暴雨,引起了社会各界的广泛关注,,H,地灾情牵动着全国人民的心,有人奔赴前线,有人捐款捐物,请编程实现,由键盘输入所捐赠的现金和物资(物资统一用等价的现金数值计),输出共捐赠的现金和物资总数。,案例,分析,:,输入所捐赠的现金和物资,使用,scanf,函数输入,money,和,goods,的值,用,printf,函数输出所捐赠的物资总数,任务,7,统计捐赠物资,C,语句及输入输出函数,知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.3 C,语句,C,语句的作用和分类,(,1,)控制语句,(,2,)函数调用语句,(,3,)表达式语句,(,4,)空语句,(,5,)复合语句,知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.3 C,语句,2.,赋值语句,(1),赋值表达式和赋值语句,(2),变量赋初值,赋值语句是在赋值表达式的末尾加一个分号构成。赋值表达式的一般形式为:,变量 赋值运算符 表达式,知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.4,格式输入输出函数,用,printf,函数输出数据,(,1,),printf,函数的一般格式,printf(,格式控制,输出表列),知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.4,格式输入输出函数,用,printf,函数输出数据,(2),格式字符,格 式 符,功能说明,%d,按十进制整数形式输出,%c,按字符形式输出,%s,按字符串形式输出,%o,按八进制整数形式输出,%x,按十六进制整数形式输出,%f(%e),按浮点形式(或指数形式)输出,默认为,6,位小数,%m.nf,按浮点形式输出,显示宽度不小于,m,,小数位数为,n,知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.4,格式输入输出函数,2.,用,scanf,函数输入数据,(,1,),scanf,函数的一般形式,scanf(,格式控制,地址表列),(,2,),scanf,函数中的格式声明,与,printf,函数中的格式声明相似,以开始,以一个格式字符结束,中间可以插入附加的字符。,知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.4,格式输入输出函数,(,3,)使用,scanf,函数时应注意的问题,scanf,函数中的格式控制后面应当是变量地址,而不是变量名,如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符。,在用“,c”,格式声明输入字符时,空格字符和“转义字符”中的字符都作为有效字符输入,在输入数值数据时,如输入空格、回车、,Tab,键或遇非法字符(不属于数值的字符),认为该数据结束。,知识准备,:,任务,7,统计捐赠物资,C,语句及输入输出函数,3.5,字符输入输出函数,1.,用,putchar,函数输出一个字符,putchar,函数的一般形式为:,putchar(c),2.,用,getchar,函数输入一个字符,任务实施,:,任务,7,统计捐赠物资,C,语句及输入输出函数,#include,main(),float money,goods,total;,printf(,请输入捐赠的现金数:,);,scanf(%f,printf(,n,请输入捐赠的物资数:,);,scanf(%f,&,good,s);,t,otal=money+goods;,printf(,n,您所捐赠的物资总数为,:%fn,total,);,如输入,5000000,45000000,则输出结果为:,任务总结,:,任务,7,统计捐赠物资,C,语句及输入输出函数,本任务用,scanf,函数和,printf,函数,结合算术表达式和赋值语句输出捐赠物资总数,要注意输入输出函数中格式符及地址表列的区别。,任务拓展,:,请编写程序将“,Love”,译成密码。密码规律是:用原来的字母后面第,4,个字母代替原来的字母。例如,字母“,A”,后面第,4,个字母是“,E”,,用“,E”,代替“,A”,。因此,“,Love”,应译为“,Pszi”,。,项目总结,C,语言的基本数据类型有整型、字符型、浮点型,其中浮点型又分为单精度型和双精度型,,C,语句分为五类:控制语句、函数调用语句、表达式语句、复合语句和空语句。数据的输入输出语句是,C,语言程序中用的最多的语句,是在函数库中调用的输入输出函数:,getchar(),putchar(),scanf(),printf(),等。,项目四,选择结构程序设计,任务,8 A,比,a,大吗?,关系表达式,任务,9,闰年的表示,逻辑表达式,任务,10,儿童票售票提示,if,选择语句,任务,11,打印成绩等级,switch,多分支语句,任务,8 A,比,a,大吗?,关系表达式,任务,描述,:,编写程序,比较,C,语言中字母,A,和字母,a,的大小。,任务分析,:,在本任务中,要比较两个值的大小需要用到关系运算符。在,C,语言中,所谓关系运算就是进行比较的运算:将两个值进行比较,判断其是否符合给定的条件。若符合,则为真(结果为,1,),否则为假(结果为,0,)。,4.1,关系运算符及其优先级,运算符,含义,优先级,结合方向,大于,6,自左至右,=,大于或等于,6,自左至右,小于,6,自左至右,=”,、“,=”,、“,=”,、和“,!=”,与数学中对应的运算符写法不同,要注意区分。,(,2,)关系运算符被分为两种优先级,前四种高于后两种。关系运算符的优先级低于算术运算符,高于赋值运算符。,(,3,)当相同优先级的关系运算符同时出现时,从左至右进行运算。,任务,8 A,比,a,大吗?,关系表达式,4.2,关系表达式,用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的值是一个逻辑值,即“真”和“假”。,C,语言没有逻辑型数据,以“,1”,代表“真”,以“,0”,代表“假”。,若有定义语句:,a=1,b=2,c=3;,则:,ab,为真,值为,1,。,d=cba d,的值为,0,。,任务,8 A,比,a,大吗?,关系表达式,#include,main(),int a,b,c;,a=Aa;,b=A=a;,c=Aa;,printf(%d,%d,%d,a,b,c);,任务,8 A,比,a,大吗?,关系表达式,任务实施,:,任务,8 A,比,a,大吗?,关系表达式,任务总结,:,关系表达式可以像本任务中这样赋值给一个变量,也可以作为条件判断单独使用。,在使用关系运算符时要注意其与数学中运算符写法的不同。,任务拓展,:,将“知识准备”中的例子在软件中进行验证,更好地理解掌握关系表达式的使用。,任务,9,闰年的表示,逻辑表达式,任务,描述,:,闰年分为普通闰年和世纪闰年:,(,1,)普通闰年:年份是,4,的倍数,且不是,100,的倍数。,(,2,)世纪闰年:年份是,400,的倍数。,请用,C,语言逻辑表达式来表示闰年。,任务分析,:,在本任务中,需要用到逻辑表达式。要将文字描述转化成,C,语言的逻辑表达式,需要先来认识逻辑运算符。,4.3,逻辑运算符及其优先级,表,4-2 C,语言中的逻辑运算符,任务,9,闰年的表示,逻辑表达式,运算符,含义,优先级,结合方向,&,逻辑与,11,自左至右,|,逻辑或,12,自左至右,!,逻辑非,2,自右至左,4.3,逻辑运算符及其优先级,(,1,)“,&”,和“,|”,为双目运算符,“,!”,为单目运算符。,(,2,)三种逻辑运算符优先级都不相同,“,!”,最高,“,&”,高于“,|”,。逻辑运算符的优先级高于赋值运算符。,(,3,)当相同优先级的逻辑运算符同时出现时,“,&”,和“,|”,是从左至右进行运算,而“,!”,是从右至左进行运算。,任务,8 A,比,a,大吗?,关系表达式,4.4,逻辑表达式,用逻辑运算符连接若干个表达式组成的式子称为逻辑表达式。与关系表达式一样,逻辑表达式的值也是一个逻辑值,即“真”和“假”,以“,1”,代表“真”,以“,0”,代表“假”。但在判断一个量是否为“真”时,以“,0”,代表“假”,以非,0,代表“真”。,1.,求值规则,a&b,若,a,、,b,同时为真,则,a&b,为真,值为,1,。,a|b,若,a,、,b,之一为真,则,a|b,为真,值为,1,。,!a,若,a,为真,则,!a,为假,值为,0,。,任务,9,闰年的表示,逻辑表达式,4.4,逻辑表达式,2.,求值策略,按照求值规则,逻辑与和逻辑或表达式应该从左至右依次计算各表达式的值,但实际上并不一定从左至右运算到底,当表达式的值能够确定的时候运算就应该停止。,(,1,),a&b&c,若,a,为假,则整个表达式为假,就不必判断,b,和,c,的值;若,a,为真,,b,为假,则整个表达式也为假,就不必判断,c,的值。,(,2,),a|b|c,若,a,为真,则整个表达式为真,就不必判断,b,和,c,的值;若,a,为假,,b,为真,则整个表达式也为真,就不必判断,c,的值。,任务,9,闰年的表示,逻辑表达式,#include,main(),int year;,printf(,输入一个年份,:);,scanf(%d,if(year%4=0)&(year%100!=0)|(year%400=0)/*if,语句判断是否满足条件*,/,printf(%d,年是闰年,year);,else printf(%d,年是平年,year);/*,如对非闰年不做要求,可省略此句*,/,任务实施,:,任务,9,闰年的表示,逻辑表达式,任务总结,:,能够将实际问题的文字描述转换成正确的逻辑表达式是本任务的重点,在逻辑运算中,需要综合运用运算符的优先级、结合性、求值规则以及求值策略。,任务拓展,:,1.,用逻辑表达式表示,1b),t=a;a=b;b=t;,printf(%d,a);,4.5 if,语句的三种形式,任务,10,儿童票售票提示,if,选择语句,2.ifelse,语句,语句格式:,if(,表达式,),语句,1;,else,语句,2;,执行过程如图所示:先判断表达式,如果表达式为真,则执行语句,1,,否则执行语句,2,。,4.5 if,语句的三种形式,任务,10,儿童票售票提示,if,选择语句,3.if,语句的嵌套,(,1,)当实际运用中面临两种以上的选择时,把,ifelse,语句稍加扩展就能满足需求。其一般形式为:,if(,表达式,1),语句,1;,else if(,表达式,2),语句,2;,else if(,表达式,3),语句,3;,else if(,表达式,m),语句,m;,else,语句,n;,4.5 if,语句的三种形式,任务,10,儿童票售票提示,if,选择语句,(,2,)一条,if,语句中可以包含另一条,if,语句,称为,if,语句的嵌套。在嵌套的,if,语句中,,else,与它前面最近的,if,配对,除非用花括号来改变。,格式,1,:,if(,表达式,),if(,表达式,),语句,1;,else,语句,2;,格式,2,:,if(,表达式,),if(,表达式,),语句,1;,else,语句,2;,4.5 if,语句的三种形式,任务,10,儿童票售票提示,if,选择语句,配对关系不同,程序运行结果就不同,试比较以下两个程序段的输出结果。,程序段,1,:,if(score=60),if(score=60),if(scorey?x:y;,先计算,xy,是否为真,如果为真,则把,x,的值赋给,max,,否则将,y,的值赋给,max,。,(,2,)条件运算符的结合性为右结合性,即自右向左进行计算。,max=xy?x:yz?y:z;,等价于,max=xy?x:(yz?y:z);,#include,main(),float h;,printf(,请输入儿童身高,(,米,):);,scanf(%f,if(h1.2),printf(,免票!,);,else if(h=1.5),printf(,请购买半价票!,);,else printf(,请购买全价票!,);,任务实施,:,任务,10,儿童票售票提示,if,选择语句,任务总结,:,多个,if,结构并列,有执行多个分支的可能性,基本的,ifelse,结构以及扩展的,ifelse,结构只能根据条件执行其中的一个分支,使用,ifelse,的嵌套结构要仔细确定好,if,与,else,的配对。,任务拓展,:,1.,从键盘输入,3,个数,判断能否构成三角形,如果能,则输出该三角形的形状信息(等边、等腰、任意三种情况),否则输出提示。,2.,从键盘上输入,3,个数,按照从大到小的顺序输出。,3.,从键盘输入一个字母,判断它是否为大写英文字母,若是,转换成对应的小写字母,否则原样输出(用条件表达式实现)。,任务,10,儿童票售票提示,if,选择语句,任务,描述,:,编写程序,当输入学生的考试成绩(百分制)后,输出学生的成绩,等级:,90,分及以上为优,,80-89,分为良,,70-79,分为中,,60-69,分为及格,,60,分以下为不及格。,任务分析,:,在本任务中,程序面临多重选择,使用,if,嵌套语句可以实现多重选择,但是嵌套层次过多,这时使用,switch,多分支语句更为方便。,任务,11,打印成绩等级,switch,多分支语句,4.7 switch,多分支语句,任务,11,打印成绩等级,switch,多分支语句,switch(,表达式,),case,常量表达式,1:,语句序列,1;break;,case,常量表达式,2:,语句序列,2;break;,case,常量表达式,n:,语句序列,n;break;,default:,语句序列,n+1;,4.7 switch,多分支语句,任务,11,打印成绩等级,switch,多分支语句,switch,语句的工作过程是:,先计算,switch,括号中表达式的值,如果它与某一,case,后的常量表达式的值相等,则执行这个,case,常量后的语句序列,遇到,break,语句后,跳出,switch,结构,执行,switch,结构后的语句。若表达式的值与所有,case,后的常量都不相等,则执行,default,(如果有)后的语句序列。,#include,main(),float score;,int x;,printf(,请输入成绩:,);,scanf(%f,x=score/10;,switch(x),case 10:,case 9:printf(,优,n);break;,case 8:printf(,良,n);break;,case 7:printf(,中,n);break;,case 6:printf(,及格,n);break;,default:printf(,不及格,n);,任务实施,:,任务,11,打印成绩等级,switch,多分支语句,任务总结,:,本任务使用,switch,语句实现了五重分支结构,,break,语句作用非常关键,,使程序能及时跳出,switch,结构。,任务拓展,:,编写一个程序,能够对两个操作数进行基本的四则运算,例如从键盘上输入“,3+5”,时,输出“,15”,,当除数为,0,时,输出提示“除数不能为零!”。,任务,11,打印成绩等级,switch,多分支语句,(,1,)关系表达式和逻辑表达式均可用于判断,前者适合单个条件的简单判断,后者可将多个简单判断联合构成复杂的判断。这两种表达式的值均为“真”或“假”,在,C,语言中使用数值,1,和,0,来表示的。,(,2,)使用关系表达式和逻辑表达式时要注意与数学上表达方式的不同,多个运算符同时使用时要注意优先级和结合性。,(,3,)多个,if,结构并列,有执行多个分支的可能性,基本的,ifelse,结构以及扩展的,ifelse,结构只能根据条件执行其中的一个分支,要根据需要灵活选用。,ifelse,的嵌套结构要仔细确定好,if,与,else,的配对。,(,4,)当程序面临多重选择时,选用,switch,多分支语句更为方便。,项目总结,项目五,循环结构程序设计,任务,12,求阶乘,for,语句,任务,13,求,的近似值,while,语句,任务,14,计算数字位数,dowhile,语句,任务,15,统计非正常视力人数,转移控制语句,任务,16,输出区间内素数,循环结构的比较与嵌套,任务,描述,:,编写程序,求,10,!(,10!=1*2*3*10,)。,任务分析,:,在本任务中,“有规律性的重复”表现为每次在上次乘积的基础上再乘以比上次大,1,的数,所以应该用循环结构来实现。从,1,到,10,共有,10,个数相乘,也就是循环变量初值、步长增量、循环次数都已确定,所以适合用,for,语句来实现。,任务,12,求阶乘,for,语句,5.1 for,语句,for,语句的一般形式,for(,表达式,1;,表达式,2;,表达式,3),语句序列,;,说明:,(,1,)“表达式,1”,一般为赋值表达式,为循环变量赋初值。,(,2,)“表达式,2”,一般为关系表达式或逻辑表达式,表示循环条件。,(,3,)“表达式,3”,一般为赋值表达式,表示循环变量的更新。,(,4,)“语句序列”是需要重复执行的循环体,可以是单条语句,也可以是用花括号括起来的复合语句。,任务,12,求阶乘,for,语句,5.1 for,语句,for,语句的一般形式,(,1,)计算“表达式,1”,的值,即对循环变量赋初值。,(,2,)以“表达式,2”,作为循环条件,若结果为真,转步骤(,3,);若为假,转步骤(,5,)。,(,3,)执行一次循环体,即“语句序列”。,(,4,)计算“表达式,3”,,即对循环变量进行更新,转到步骤(,2,)。,(,5,)结束循环,执行,for,循环之后的语句。,任务,12,求阶乘,for,语句,5.1 for,语句,for,语句的一般形式,从以上执行流程可知,,for,循环先判断条件后执行循环体,,因此循环次数可能为,0,。,例:以下为计算,1+2+10,的程序段,试陈述程序执行过程。,sum=0;,for(i=1;i=10;i+),sum+=i;,任务,12,求阶乘,for,语句,5.1 for,语句,2.for,语句的变式,(,1,),for,语句中的表达式可以部分或全部省略,但两个“,;”,不能省略。,变式,1,:,sum=0,i=1;,for(;i=10;i+),sum+=i;,任务,12,求阶乘,for,语句,变式,2,:,sum=0;,for(i=1;i=10;),sum+=i;i+;,变式,3,:,sum=0,i=1;,for(;i=10;),sum+=i;i+;,5.1 for,语句,(,2,),for,语句中的表达式允许出现与循环控制无关的表达式,例如刚才的程序段可以做如下变式:,for(sum=0,i=1;i=10;sum+=i,i+);,任务,12,求阶乘,for,语句,#include,main(),int i,t=1;,for(i=1;i=1e-8),pi+=1/i*t;,t=-t;,i+=2;,printf(pi=%lfn,pi*4);,任务实施,:,任务,13,求,的近似值,while,语句,任务总结,:,本任务用,while,语句完成了循环次数不确定的求解,的问题,但并不意味着,while,语句不能完成循环次数确定的情况。,任务拓展,:,1.,编写程序,用,while,语句求解,10,!。,2.,编写程序,从键盘输入一行字符,统计其中英文字母、数字和其它字符的个数。,任务,13,求,的近似值,while,语句,任务,14,计算数字位数,dowhile,语句,任务,描述,:,编写程序,从键盘输入一个整数,计算该整数有几位数。,任务分析,:,本任务的基本思路是将整数反复除以,10,,直到商为,0,为止,执行除法的次数就是该数的位数。由于整数至少有一位数,也就是循环体至少要执行一次,所以选用“直到型”循环更合适,即,dowhile,语句。,5.3 dowhile,语句,dowhile,语句用来实现“直到型”循环结构,其一般格式为:,do,语句序列,;,while(,表达式,);,(,1,)“表达式”一般为关系表达式或逻辑表达式,表示循环条件,相当于,for,语句中的“表达式,2”,。需要特别注意的是“,while(,表达式,);”,中的“,;”,不能省略。,(,2,)“语句序列”是需要重复执行的循环体,循环体无论是单条语句还是复合语句都建议用花括号括起来。,(,3,)循环体内一般要有能够改变表达式值的操作,最终使表达式的值变为,0,;如果没有改变表达式值的操作,也可以在循环体内借助,break,语句强行退出循环,.,。,任务,14,计算数字位数,dowhile,语句,5.3 dowhile,语句,dowhile,语句执行过程如图所示:,(,1,)执行一次循
展开阅读全文