求解这C微信小程序 if else中 错误为什么出现在else处?

【教学课题】 C 语言简介 【目的要求】 了解 C 语言基本元素的组成,掌握 VC6.0 集成开发环境,C 语言程序的结构,C 语言程 序的上机步骤 【教学重点】 上机操作的基本知识,C 语言程序的结构 【教学难点】 C 语言程序的结构,程序调试与错误定位 【教学方法】 任务驱动法、案例教学法、启发式教学 【教学手段】 讲授+演示+学生实践 【作业布置】 1、完成教材第一章课后总复习题。一、提出任务,引入课题: 简单应用问题: 1、用 C 程序实现:让计算机输出一句问候语“你好,很高兴能认识你! ” 。 2、一个简单的 C 程序,其功能是求键盘输入的两个数中较大的数。 3、怎么让计算机执行并显示结果?其运行环境怎样? 二、分析任务,讲授新课 (一)VC++6.0 运行集成开发环境简介 1、启动与退出 2、集成开发环境介绍:如图 2-1 所示。 (以任务 1,任务 2 的实现为例讲解) 图 2-1VC6.0 集成开发环境VC6.0 的集成开发环境主要由标题栏、菜单栏、工具栏、项目工作区窗口、源程序编辑 窗口、输出窗口和状态栏 7 部分组成。 (二)C 语言简介 1、如何学习 C 语言 紧紧抓住 C 语言学习的主线。如图 2-2 所示。函数结构C语 言 学 习 主 线预处理命令 语句结构常量、变量、 表达式2、C 程序的构成 (以上面所做的例题为例) 从上面例子,我们对 C 语言程序的基本组成和形式(程序结构)有了一个初步了解: (1)C 程序由函数构成(C 是函数式的语言,函数是 C 程序的基本单位) 。 (2) 一个 C 源程序至少包含一个 main 函数,也可以包含一个 main 函数和若干个其它函 数。 (3)被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的 函数。C 函数库非常丰富,ANSI C 提供 100 多个库函数,Turbo C 提供 300 多个库函数 (4)main 函数(主函数)是每个程序执行的起始点。 (5)函数的构成 (一个函数由函数首部和函数体两部分组成) ◆ 函数首部:一个函数的第一行。 格式: 返回值类型 函数名([函数参数类型 1 函数参数名 1][,?,函数参数类型 2,函数 参数名 2]) 注意: 函数可以没有参数,但是后面的一对()不能省略,这是格式的规定。 ◆ 函数体:函数首部下用一对{}括起来的部分。 格式: { [声明部分]:在这部分定义本函数所使用的变量。 [执行部分]:由若干条语句组成命令序列(可以在其中调用其它函数) 。 } 注意: 如果函数体内有多个{},最外层是函数体的范围。函数体一般包括声明部分、执行 部分两部分。 (6)可以使用/* */对 C 程序中的任何部分作注释。 注释可以提高程序可读性,使用注释是编程人员的良好习惯。 3、C 程序的书写格式 (1)习惯用小写字母,大小写敏感 (2)不使用行号,无程序行概念 (3)可使用空行和空格 (4)常用锯齿形书写格式 (5)每条语句的最后必须有一个分号“;”表示语句的结束。但在预处理命令、函数 头、花括号之后不能加分号。 优秀程序员的素质之一: (1)使用 TAB 缩进 (2){}对齐 (3)有足够的注释 (4)有合适的空行 4、C 程序的开发过程与上机步骤(P11)开始编辑 源程序 file.c编译有 有错? 无 可执行 目标程 序 连 接目 标 程 序 file.obj执行库函数和 其它目标 程序不正确 结果正确? 正确 结 束三、解决任务,学生实践 (一)用 C 程序实现:让计算机输出一句问候语“你好,很高兴能认识你! ” 。 (二)一个简单的 C 程序,其功能是求键盘输入的两个数中较大的数。 四、针对难点,重点突破 (一)C 程序的构成,函数的构成,代码的书写; (二)C 程序的开发过程 五、拓展任务,学生实践 判断一个数的个位数字和百位数字之和是否等于其十位上的数字, “是” 则返回 “Yes! ” , “否”则返回“No!” 。 六、检查作业,评价学生 【教学课题】 常量、变量和标识符 【目的要求】 掌握 C 中各种词法记号,命名规则,理解常量、变量的含义,搞清符号常量的使用, 变量的定义方法与初始化方法,了解 C 中数据类型。 【教学重点】 标识符命名规则,常见关键字,常量的分类,符号常量的使用,变量的含义及定义、 初始化。 【教学难点】 非法标识符的辨别,符号常量的使用,变量含义的理解 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、标识符的命名规则有哪些? 2、什么是常量,什么是变量,写出变量的定义格式和符号常量的定义格式。 3、编写程序,求半径为 3 的圆的面积,要求将π 、半径定义为符号常量。一、提出任务,引入课题 写一程序要求分行输出“你好,中国! ” , “国庆节快乐! ” ; 请大家说一说, C 程序代码到底由一些什么东西构成。 是不是有一些固定不变的单词和语句呢? 二、分析任务,讲授新课 (一)词法记号的概述(补充) 1、概念 指程序中具有独立含义的且不可进一步分割的单位,称为词法记号。 2、分类(五大类) 关键词,标识符,常量,运算符,分隔符 (二)各类词法记号 1、关键词 (1)含义 C 语言中预先定义的符号,具有固定的含义。具体如下(32 个) : Auto double Int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while(2)说明 ◆ 用户定义的任何名字(如:变量名,函数名等)不得与关键词冲突; ◆ 除上面的关键词外,把库函数名、预处理命令名、系统函数名称为准关键词,具体 有:define、endif、include、ifdef、line、undef、scanf、printf; 2、标识符 (1)含义 就是一个对象的名称,即用户自行定义的字符序列,用于标识常量、变量、函数、标 号等。 (2)标识符组成原则(补充) ◆ 由字母、数字、下划线组成(不能是汉字) ; ◆ 第一个符号不能为数字; ◆ 最长不得超过 32 个字符; ◆ 区分大小写; ◆ 望名知意。 3、分隔符分隔各种词法记号的符号。具体有:[ ] ( ) { } * . 4、运算符(以后讲解) (三)常量与变量 1、数据类型 (计算机能处理的数据很多,不同的数据具有不同的特点,遵循不同运算规则,所以 : = ; # 各种程序设计语言处理系统都将数据分成若干种类,C 程序设计语言将数据分成以下几类) 基本类型:整型,实型,字符型,枚举型 构造类型:数组,结构体,共用体 指针类型:指针 空类型 (任何一种数据都有常量和变量之分, 计算机程序处理的数据不是常量就是变量; C中 所有的常量和变量都属于以上数据类型中的一种;C 程序中的任何变量都必须先声明再使 用) 2、常量 (1)概念 程序运行中其值不能改变的量。如:3、4、3.12 等。常量区分不同的类型,如整型常 量、实型常量、字符型常量等。 (2)分类 直接常量:又叫字面常量(从字面可以判断) 符号常量:用标识符代表的常量,须定义才能使用。 (3)常见的直接常量 ◆ 整型常量(三种形式,十进制、八进制、十六进制) 一般在判断符放在数字前面: 0 开头:八进制数(如:0516) 0X 开头:十六进制数(如:0X516) 也可放在后面: 表示长整型数据(如:4987L) ◆ 浮点型常量(小数或实数) 小数形式:如:1.54 指数形式:如:3.02E-3(3.02×10 3)-◆ 字符型常量 ◇ 一般字符常量:用单引号括起来的单一字符,如:?A? ◇ 转义字符常量:以“\”开头的字符序列,如:\n(P25,表 2-3) ◇ 字符串常量: 用双引号括起来的任意个字符序列, 如: “A” 、 “HOW ARE YOU?” (4)符号常量 ◆ 概念:用一个标识符表示的常量,叫符号常量。 ◆ 定义格式: #define 常量名 字符串 (如:#define PRICE 16) ◆ 具体使用(如:求圆的面积、周长、体积) ◆ 说明: ◇ 定义符号常量时,句末无分号; ◇ 通常放在函数名之前定义; ◇ 常量名通常大写; ◇ 有一定的作用域。 3、变量 (1)概念 程序运行中,其值可以改变的量。程序中体现为一个标识符。 (2)组成 变量名(存储单元) 、变量值 (3)作用 存放具体的数值(变量值,常量) 4、说明 (1)变量名:变量存储单位的名称,即为其地址; 变量值:存放在变量存储单元中的具体数值。 (2)变量常用小写字母表示(符号常量名常用大写字母表示) (3)变量必须先定义,后使用,定义的格式:&类型标识符& &变量名& (4)变量的初始化:变量名=初值 (5)一定的变量执行一定的操作 三、解决任务,学生实践 C 程序代码由什么东西构成? 四、针对难点,重点突破 (一)标识符的命名规则 (二)符号常量的作用 “一改全改” (三)变量含义、定义、内存表示 1、一个变量变相当于一个容器,一个用来存放常量或其他变量的容器,这个容器事实 上是一块内存单元。变量名实际上对应的就是这块内存单元。常用“&+变量名”表示内存 单元的入口地址; 2、变量有类型之分; 3、C 中,变量必须先定义,再使用。 五、拓展任务,学生实践 (一)下面是不是合法的标识符 M.D.John,¥ 123,#33,3D64,a&b,e 可 (二)编一程序计算苹果总金额,单价为 20 元/千克,数量从键盘输入。要求单价定义 为符号常量 PRICE (输入函数:scanf() ;实型变量定义:float 变量名) 六、检查任务,评价学生 【教学课题】 整型、实型数据 【目的要求】 掌握整型、实型数据的取值范围,相应变量的定义方法,理解其内存的存储方式,了 解不同数据间的转换。 【教学重点】 不同数据的取值,变量定义方法,所占空间,数据间的转换。 【教学难点】 不同数据的内存表示,不同数据类型间的转换 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、整型数据、实型数据数据在内存中所占的空间分别是多少? 2、整型数据、实型数据分别有哪些种类? 3、写出整型变量、实型变量变量的定义格式。一、提出任务,引入课题 有一个程序,代码如下: main() { short int n,s; printf(&请输入一个整数:&); scanf(&%d&,&n); s=100*n; printf(&%d 的 100 倍是:%d\n&,n,s); } 请同学们运行,会出现什么情况(输入 3,234,500,600) 二、分析任务,讲授新课 (一)整型数据 1、整型变量 (1)概述 程序运行中,其值可以改变的整型数据,在内存中占两个(VC6.0 中的短整型)或四个 字节(VC6.0 中的基本整型和长整型) (2)分类 ◆ 基本的整型:int ◆ 短整型:short 或者 short int ◆ 长整型:long 或者 long int ◆ 按有无符号的方式,所有整数又可以分为有符号整型数据(signed ,默认的整型数 据,最高位表示符号位, “0”代表正数, “1”代表负数)和无符号整型数据(unsigned) ◆ 各种类型整数的本质区别:在内存中所占的空间不同,各自的取值范围不同(P20, 表 2-1) (3)定义整型变量 格式:int 变量名列表 或 unsigned 变量名列表 或 long 变量名列表 或 short 变量名列表 (变量名之间用逗号分隔) 2、整型常量(回顾前面所讲,P21) 十进制:正常格式,输出格式符 d% 八进制:以 0(数字)开头,输出格式符为%o(字母) 十进制:以 0x(数字与字母)开头,输出格式符为%x(字母) (数制间的转换,回顾,C 中没有二进制输出格式符) (二)实型数据 1、实型变量 (1)概述 程序运行中其值可以改变的实型数据,在内存中占 4 个字节( FLOAT ) 、 8 个字节 (DOUBLE)或 16 个字节(LONG DOUBLE) ,以指数的形式存储。 (2)实型变量的分类 单精度实型数据:float 双精度实型数据:double 长双精度实型数据:long double (以上数据类型在内存中所占的空间不同,取值范围不同,具体见 P22 表 2-2) (3)实型变量的定义 格式:float 变量名列表 或 double 变量名列表 (实型常量在 C 中常被当做双精度数据进行处理) 2、实型常量表示法 (1)小数形式 组成:数字+小数点 (2)指数形式 组成:数字 1+E+数字 2(如 123E3=123×103) 注意: ◆ E 可以大写也可以小写; ◆ E 前数字不能省,E 后的数字表示指数,须为整数(可正可负) ; ◆ 通常数字 1 的小数点左边有且只有一位非零数字(规范化指数形式) ; ◆ %e 为指数形式输出格式符,此时是规范化的指数形式。 三、解决任务,学生实践 输入的数据扩大 100 倍为什么输入结果错误? (不同类型的数据具有不同的取值范围) 四、针对难点,重点突破 (一)整型、实型数据的内存空间不同,导致取值范围不同; (二)不同数据类型间的转换 1、自动类型转换 (1)须类型转换的背景(通常只有整型、实型、字符型放在一块,才能进行类型转换) 当表达式中出现不同类型的数据时,系统将会按一定的原则将其转换成为同一种类型, 再进行去处。 (2)转换的规则 double←float ↑ long ↑ unsigned ↑ int←char,short (其中←为必定的转换) (3)例如:10+?a?+i*f+d/e(其中:i,int;f,float;d,double;e,long) (最终结果为 double 型) 2、强制类型转换 (1)概念 编写代码时,人为的将一种数据类型转换成另一种数据类型。 (2)转换形式: (类型名)&表达式& (3)例如: b=(float)i (i 整型数据) (注意,运算后 i 的数据类型不变) 五、拓展任务,学生实践 (一)写如下程序的执行结果 main() {printf(“ ab c\t de\rf\tg\n”); Printf(“h\ti\b\bj k”);} (二)将“China”译成密码,密码规律是:用原来字母后面第 4 个字母代替原来的字 母。如“A”就用“E”代替,因此, “China”应译成“Glmre” ,编程实现。 六、检查任务,评价学生 【教学课题】 运算符与表达式 【目的要求】 掌握 C 中算术运算符及其表达式、赋值运算符及其表达式,自增自减运算,了解逗号 运算符及其表达式。 【教学重点】 各运算符的符号、特点、优先级、结合性,自增自减运算符的含义。 【教学难点】 各运算符的结合性,复合的赋值表达式,自增自减运算符的含义与具体应用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、写出程序运行结果 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);} 2、写出下面表达式运算后 a 的值,设原来 a=12,a 和 n 已定义为整型变量。 (1)a+=a (4)a/=a+a (24) (0) (2)a―=2 (10) (3)a*=2+3 (0) (60)(5)a%=(n%2) ,n 的值等于 5 (0)(6)a+=a―=a*=a 一、提出任务,引入课题 计算机中程序的运行就是对相应的数据进行处理,得出一个想要的结果。而对数据处 理的一个主要方面就是将需要处理的数据组合成一个表达式, 再进行相应的运算, 得出结果。 那么到底什么是表达式,表达式怎么来的,表达式又由哪些元素构成呢? 二、分析任务,讲授新课 (一)运算符分类(补充) 1、算术运算符(+、―、*、/、%、++、――) 2、关系运算符(&、&、==、&=、&=、!=) 3、逻辑运算符(&&、||、 ! ) 4、赋值运算符(=) 5、条件运算符(? : ) 6、逗号运算符(, ) 7、位运算符(&&、&&、~、|、^、&) 8、指针运算符(*、&) 9、求字节运算符(sizeof) 10、强制类型转换运算符( (类型) ) 11、分量运算符(.、-&) 12、下标运算符([、]) 13、其他(如函数调用运算符() ) (二)算术运算符及算术表达式 1、算术运算符(4 种) (具体包括:+、-、*、/、%、 ) (1)/(除法运算符) : 操作数须为整数或实数,结果为整数或实数(如果操作数都为整数,结果取商的整数部 分,注意:3/2 与 3/2.0 的区别) (2)%(取模运算符、求余运算符) : 操作数为整型数据,结果为余数 2、算术表达式 (1)概念 由算术运算符、 括号、 运算对象组成的符合 C 语法的式子, 称为算术表达式。 如 a+2+b; (2)注意 一个常量、一个变量(已赋值)都属于合法的表达式。如:1、-x 等 3、优先级与结合性 (1)优先级 ◆ 概念: 由多个运算符与运算对象组成的表达式,计算时,先对哪个运算符运算,再对哪个运算 符运算,这种运算符运算的先后顺序称为运算符的优先级。如乘除法的优先级高于加减法。 如:a+b-c*e+(e-f) ◆ 具体的优先级: 负值运算符&乘、除、求余运算符&加减运算符 (所有运算符中,圆括号的优先级最高;表达式中,先算优先级高的运算符,再算优先 级低的运算符) (2)结合性 ◆ 概念: 是指在有多个符号的表达式中,具体的运算方向。 (即:当一个操作对象两侧的运算符 具有相同的优先级时,该操作对象是先与左边的运算符结合还是先与右边的运算符结合) ◆ 分类: 左结合性:自左至右,如:a*b+c(从左至右) 右结合性:自右至左,如:a=b+c(从右至左) (++、--运算符遵循右结合性,如-i++等价于-(i++) ,常出现在循环中表示变量的变化) (三)赋值运算符与赋值表达式 1、运算符 (1)符号:= (2)作用:程序运行时,将符号右边的值赋给符号左边的变量。 (实际就是将特定的值 写到变量所对应的内存单元) (3)注意: ◆ 符号左边为变量,右边为表达式; ◆ 符号两边的数据类型通常应一致。 (如果不一致将自动转换) 2、赋值表达式: (1)概念:用赋值运算符连接起来的且符合 C 语法规则的表达式 (2)运算规则(结合性) :自右至左(右结合性) 3、复合赋值运算符和复合赋值表达式 (1)构成:在“=”前加上其他运算符(如“+=” ) (2)例如:a+=3(等价于:a =a+3) ,还原步骤: A、将变量和运算符右移,如果右侧为表达式,则须用括号将其括起(x%=(y+3) ) B、左添同一变量 (四)自加++和自减--运算符 (1)++(增 1 运算符) (i=i+1) : i++:先用 i 的值进行其他操作,再将 i 增加 1(i=i+1) ; (i=1;printf(“%d” ,i++); ) ++i:先将 i 的值增加 1(i=i+1) ,再用新的值进行其他操作。 (i=1;printf(“%d” ,++i); (2)--(减 1 运算符)(i=i-1) (类似于++运算符,此二运算符只能用于变量,不能用于常量和表达式) (五)逗号运算符与逗号表达式 1、运算符: , 2、作用:连接若干个表达式 3、表达式形式:表达 1,表达式 2,……,表达式 n 4、含义:先求表达式 1 的值,再求表达式 2 的值,……,最后求表达式 n 的值,整个 表达式的值为表达式 n 的值 5、例如:x=(a=3,6*3) x=18(逗号运算符的优先级最低) 三、解决任务,学生实践 C 程序中,什么是表达式,表达式怎么来的,表达式又由哪些元素构成呢? 四、针对难点,重点突破 (一)除法运算(两个整数相除结果为整数) ; (二)复合的赋值表达式(右结合性) (三)自增自减运算 1、前置运算(运算符放在变量之前) 运算形式:++a 运算规则:先使变量的值增加 1,再让变量以新值进行其他运算 2、后置运算(运算符放在变量之后) 运算形式:a++ 运算规则:先让进行其他运算,再使变量的值增加 1 五、拓展任务,学生实践 (一)自增自减与负号运算 i=3; printf(“%d”,i++); printf(“%d”,i); ); Printf(“%d”,i); 34 (二)求表达式的值 1、x+a%3*(int)(x+y)%2/4,其中 x=2.5,a=7,y=4.7 2、 (float)(a+b)/2+(int)x%(int)y,其中 a=2,b=3,x=3.5,y=2.5 六、检查任务,评价学生 (2.5) (3.5) -3 4 i=3; printf(“%d”,-i++ ; printf(“%d”,i); -3 -2 3 -2 i=-3; printf(“%d”,i++) i=-3; printf(“%d”,-i++); printf(“%d”,i); 【教学课题】 技能训练 【目的要求】 回顾本章知识,掌握常量、变量概念,定义方法,各数据类型的取值范围,内存存储, 算术与赋值运算符的使用,了解关键字、标识符概念、数据的溢出以及逗号运算符与逗号表 达式。 【教学重点】 常量与变量的使用、各类型数据的变量的定义、算术与赋值运算符,自增自减运算。 【教学难点】 变量的理解、原码、反码、补码、数据类型转换、自增自减运算。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、编写程序,求一正方形面积。要求定义一符号常量来表示边长 2、根据圆的半径求圆的周长、面积、相应球的体积。要求半径从键盘输入, π 的值 为 3.14。一、提出任务,引入课题 1、运行如下程序 main() { short int a=32767,b; b=a+1; printf(&a=%d,b=%d\n&,a,b); } 2、运行如下程序 main() { unsigned short int a=65535,b; b=a+1; printf(&a=%d,b=%d\n&,a,b);} b 的值分别是:-32768 和 0,为什么? 二、分析任务,讲授新课 (一)整型数据在内存中的存放(二进制) (补充) 1、整数的分类 正数:原码 负数:补码 2、VC 编译系统规定:除短整型数据外在内存中占 2 个字节外,其他整型数据在内存 中占 4 个字节的空间; (不同于 TC) 3、计算机存储有符号数时,最高位表示符号位( “1”表示负数, “0”表示正数),并且 通常在不加说明的情况下存储的为有符号数; 4、相应概念: (1)机器数:数据在计算机中的表示形式; (2)原码:任何数的二进制代码; (3)反码:原码的每个数据位取反得到的代码; (4)补码:利用原码按特定的规则进行转换而得到的代码(正数的补码就是原码,负 数的补码:对应数的绝对值二进制代码取反加 1) 如: 求-10 的补码 (-10 的绝对值为 10, 二进制为 1010, 占两个字节: 0000, 0000, 0000, 1010,取反得:,,加上 1 得:,) (5)计算机中所有整数都是以其补码形式在内存中保存。 5、对于问题 1 的说明: (1)32767 的内存表示:11,1111 (2)加 1 后得到的表示:00,0000,而此表示实际为数-32768 的补码形式。 6、对于问题 2 的说明: (1)65535 的内存表示:11,1111 (2)加 1 后本应得到:1,00,0000,而无符号的基本整型只占 16 位,所以 就只有:00, 了。 (实际此时已发生“溢出” ,但机器并不报错,有如 汽车里程表,达到最大后就从零开始) (二)运算符的优先级 最低优先级是逗号运算符,其次是赋值运算符,再其次是三目运算符。而关系运算符的 优先级高于逻辑运算符(不包括逻辑非运算) ,算术运算符的优先级高于关系运算符,象++ 和的优先级比前面几个都高,但最高的要属()了。优先级高的先运算。 通常如下:算术运算符&关系运算符&逻辑运算符&赋值运算符&逗号运算符 (三)类型转换 1、总原则:按存储单元中的存储形式直接传送 2、具体规定: (1)浮点型赋予整型:舍弃小数部分,保留整数部分; (2)整型赋予实型:值不变,增加小数部分,小数部分用 0 表示; (3)字符型赋予整型:即为对应字符的 ASCII 值; (4)整型赋予字符型:取整型数据的低 8 位,即为对应字符的 ASCII 码值; (5)单、双精度浮点型之间的赋值: double→float:取前面 7 位有效数字,存放到 32 位的存储单元; float→double:值不变,有效位数扩充到 16 位,存储到 64 位的存储单元中。 (四)其他 标识符、常量与变量、各类型数据、算术运算符与表达式、赋值运算符与表达式、自增 自减运算。 三、解决任务,学生实践 C 中出现溢出的原因及理解 四、针对难点,重点突破 (一)整型数据的存储; (二)运算符的优先级; (三)类型转换。 五、拓展任务,学生实践 (一)编写程序,求一正方形面积。要求定义一符号常量来表示边长 (二)编写程序,计算 e5+20 的值。要求将变量设置为单精度型 (应注意 float 型数据只有7位有效数字;应该避免将一个很大的数和一个很小的数相 加减) (三)根据圆的半径求圆的周长、面积、相应球的体积。要求半径从键盘输入, π 的 值为 3.14。 六、检查任务,评价学生 【教学课题】 程序设计和算法 【目的要求】 了解程序设计的基本概念,C 语言程序,掌握计算机语言的发展与分类,算法的概念及 特性 【教学重点】 计算机语言的分类,算法的概念及特性,结构化程序设计的描述工具 【教学难点】 算法的概念,结构化程序设计的描述工具的应用 【教学方法】 任务驱动法、案例教学法、启发式教学 【教学手段】 讲授+演示+学生实践 【作业布置】 1、计算 100! :1*2*?*100 的积。用传统的流程图和 N-S 图写出算法。 2、求键盘输入的两个数中较大的数。用传统的流程图和 N-S 图写出算法。一、提出任务,引入课题: 简单应用问题: 1、在超市购买了瓶洗发水(37.5 元/瓶) ,给收银员一张面值 50 元的人民币,应找多 少? 2、在商场或超市购物经常有许多优惠活动:用户购物满 100 元享受八折优惠,否则只 能享受九折优惠。计算机顾客付款金额? 3、计算:1+2+?+100 的和。 这些简单却又被频繁应用的实际问题, 我们人是如何做的?如果让计算机来完成, 又要 怎么实现呢? 事实上,计算机要实现这些功能,同样需要有自己的“思维 ” ,这种“思维”是人类利 .. . 用彼此能懂的语言 进行程序设计 告知其方法, 控制其操作。 掌握程序设计的前提是掌握程序 .. .... 设计语言。在众多的程序设计语言中,C 语言以其灵活性和实用性受到了广大计算机应用人 员的喜爱。 二、分析任务,讲授新课 (一)程序和程序设计 1、程序设计语言:人与计算机进行交流的工具,是一系列对计算机可进行操作的规则, 按这些规则人可以编写程序与计算机进行交流。具体有:C、VB、VC、DELPHI、JAVA 等 2、程序:利用程序设计语言编写的、存贮在计算机内部、控制计算机运行的一系列代 码的集合。 3、 程序设计: 根据任务, 用程序设计语言将任务转化为计算机可以执行的命令序列 (程 序) ,使计算机执行程序并得到正确的结果的过程。具体过程:如图 1-1 所示。提出问题程 序 设 计 过 程确定数据结构 确定算法 编写程序 调试程序 书写文档图 1-1 程序设计过程4、注意 数据结构是指数据在计算机中的存放形式, 它用来反映一个数据的内部构成, 即一个数 据由哪些数据成分构成,以什么方式构成,呈什么结构,如线性表、树等。 (二)程序设计语言 大致可以分为 3 类:机器语言、汇编语言和高级语言。 1、 机器语言 计算机唯一能直接识别的语言,即由 0 和 1 构成的代码,可以对机器硬件直接操作。 优点:速度快。缺点:它非常难于记忆和识别;受机器型号的限制。 2、汇编语言 实质与机器语言是相同的,都是直接对硬件操作,只是用英文缩写作为指令标识符(助 记符) ,较易识别和记忆。 优点:文件小;速度快;可以对硬件直接操作。缺点:对使用者要求高;汇编源程序一 般比较冗长、复杂、容易出错;受机器型号的限制,可移植性比较差。 3、高级语言 接近于人们习惯的自然语言, 用它编写的代码易于理解, 具有很好的通用性和可移植性, 必须编译后计算机才能执行。如 C、VB、VC、FoxPro 等。 (三)算法 1、定义 广义上讲,算法是为了解决一个问题而采取的确定且有限的方法和步骤。 例如:描述跆拳道动作的图解----跆拳道的算法 又如:一首歌曲的乐谱----歌曲的算法 著名科学家沃思(Nikiklaus Wirth)曾提出一个公式: 数据结构在程序中数据的类型和组织形式 算法是操作步骤的描述数据结构 + 算法 = 程序 2、算法的描述 常用的描述方法有关 3 种:伪代码、流程图和 N-S 结构图。 (1)伪代码:一种近似高级评议但又不受语法约束的语言描述方法。优点:比较易于 理解;缺点:描述较冗长。 (2)流程图:基本图形组成如图 1-2 所示。起止框处理框输入输出框 图 1-2判断框流程线连接点流程图基本构成图形优点:形象直观、简单方便; 缺点:对于流程线的走向没有任何限制,可以任意转向,描述算法时费时费力且不易阅 读。 (3)N-S 流程图: 这种流程图完全去掉了流程线, 算法的每一步都用一个矩形框来表示, 把一个个矩形框 按执行的次序连接起来就是一个算法的描述。 3、算法的特性 (1)有穷性; (2)确定性(每一个步骤必须明确可行,不能模棱两可,含糊不清) ; (3)有零个或多个输入; (4)有一个或多个输出; (即必须有一个输出,可以没有输入) (5)有效性(每一个步骤应能被有效执行,如:8/0 就不行) 。 (四)结构化程序设计 1、顺序结构 最基本的算法结构, 当执行由这些语句构成的程序时, 将这些语句在程序中的先后顺序 逐条执行,没有分支,没有转移,没有步骤之间的相互约束,没有对某一步骤的多次使用, 完全按照步骤的原有次序依次执行。结构可用图 1-3 的流程图表示。其中图 1-3(a)是一 般流程图,图 1-2(b)是 N-S 结构图。语句 1 语句 1 语句 2 语句 2条件表达式 满足 语句 2不满足 条件 表达式 语句 1 满足 语句 1 不满足 语句 2 (b) 图 1-4 选择结构(a) 图 1-3(b) 顺序结构(a)【解决任务 1】在超市购买了瓶洗发水(37.5 元/瓶) ,给收银员一张面值 50 元的人民 币,应找多少? 要求:I 学会用精练的文字表示执行步骤。 II 学会用两种不同的方法表示算法。 2、选择结构 选择结构根据不同的条件去执行不同分支中的语句。 选择结构可用图 1-4 所示的流程图 表示,其中图 1-4(a)是一般流程图,图 1-4(b)是 N-S 结构图。 【解决任务 2】在商场或超市购物经常有许多优惠活动:用户购物满 100 元享受八折优 惠, 否则只能享受九折优惠。 如何知道根据每个用户购物金额的不同按不同的折扣给出准确 付款值? 要求:I 能分析问题中的条件。 II 学会用两种不同的方法表示算法。 3、循环结构 循环结构是根据各自的条件,使同一组语句重复执行多次。循环结构的流程图如图 1-5 和图 1-6 所示。条件表达式 满足 循环体不满足 当条件满足时 循环体(a) 图 1-5 当型循环(b)循环体 循环体 条件表达式 满足 不满足 直到条件满足时(a) 图 1-6 直到型循环(b)【解决任务 3】计算:1+2+?+100 的和。 要求:I 能分析问题中重复执行的过程(即循环体)及终止重复执行的条件。 II 学会用两种不同的循环类型表示算法。【结论】 由以上 3 种基本结构组成的算法结构可以解决任何复杂的问题, 由它们所构成 的算法称为结构化算法,由它们所构成的程序为结构化程序。 三、解决任务,学生实践 (一)在超市购买了瓶洗发水(37.5 元/瓶) ,给收银员一张面值 50 元的人民币,应找 多少? (二)在商场或超市购物经常有许多优惠活动:用户购物满 100 元享受八折优惠,否则 只能享受九折优惠。计算客户的准确付款值? (三)计算:1+2+?+100 的和。 四、针对难点,重点突破 (一)理解算法的概念 完成一件事情的方法和步骤。程序计中:算法是灵魂,数据结构是加工对象,语言是 工具。 (二)传统流程图与 N-S 图表示算法 五、拓展任务,学生实践 (一)在商场或超市购物经常有许多优惠活动:用户购物满 100 元享受 9 折优惠,满 200 元享受 8 折优惠,否则不享受优惠。计算客户的准确付款值?写出算法。 (二)计算 100! :1*2*?*100 的积。写出算法。设积为 p,表示计算 p 的算法。 六、检查作业,评价学生 【教学课题】 程序设计与 C 语言复习 【目的要求】 掌握程序与程序设计的概念,算法的概念与编写,C 程序的构成和书写格式,了解计算 机语言的发展,结构化程序设计,VC6 的开发环境,C 程序的上机步骤。 【教学重点】 程序与程序设计,算法,C 程序构成,C 程序上机步骤 【教学难点】 算法的概念与描述,C 程序的构成 【教学方法】 任务驱动法、案例教学法、启发式教学 【教学手段】 讲授+演示+学生实践 【作业布置】 1、简述 C 程序上机步骤; 2、C 程序是怎样构成的?一、提出任务,引入课题: 通过对本章的学习, 我们是否了解了什么是程序, 计算机语言分为哪几种, 什么是算法, 如何来描述算法,结构化程序设计又是怎么回事,C 程序由什么构成,如何书写 C 程序,是 否了解 VC6 的开发环境,C 程序上机的具体步骤是怎样? 今天和大家一起来回顾一遍。 二、分析任务,讲授新课 (一)程序设计的基本概念 1、程序和程序设计 2、计算机语言的发展 3、算法(三种程序结构) 4、结构化程序设计 (二)C 语言简介 1、C 程序构成(函数) 2、C 程序书写格式 3、如何学习(多想算法、多写代码、多上机调试) (三)VC6 开发环境 1、启动、退出 2、界面 3、工程的建立、源文件的编写、编译、运行 (四)C 程序上机步骤 1、启动 VC6 2、建立.c 的源文件 3、编译源文件,生成目标文件(.obj) ,改正语法等错误 4、运行,改正逻辑错误(CTRL+F5) 三、解决任务,学生实践 (一)什么是程序? (二)计算机语言分为哪几种? (三)什么是算法,如何来描述算法? (四)结构化程序设计又是怎么回事? (五)C 程序由什么构成,如何书写 C 程序? (六)C 程序上机的具体步骤是怎样? 四、针对难点,重点突破 (一)算法的描述; (二)C 程序的构成与书写格式; (三)C 程序的上机步骤。 五、拓展任务,学生实践 (一)编写一个 C 程序,要求如下: 输入 5 个数,求出他们的和,并将结果显示 (二)编写一 C 程序显示如下图案: ******************** C 语言学习之旅开始了! ********************* (三)编写一程序,显示如下图形: * *** ***** ****** 六、检查作业,评价学生 【教学课题】 赋值语句、数据的输出 【目的要求】 了解 C 语句的分类,理解输入输出的实现,掌握赋值语句与 printf()函数的使用。 【教学重点】 C 语句类别,赋值语句,printf 函数 【教学难点】 C 中输入输出的实现,printf 函数的工作过程,格式控制符的使用 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、C 语言中语句分成哪几类? 2、在 C 语言中,如何实现数据的输入和输出?一、提出任务,引入课题 前面我们说过,C 程序由函数构成,而函数由函数头和函数体构成,作为函数重要部分 的函数体则由 C 语句构成,所以我们编写函数体代码实际上就是要写出一句句的 C 语句, 那么 C 中到底有一些什么样的 C 语句呢?(此处前面的引入采用提问的方式由学生回答) 前面也已讲过,一定范围内,整数和字符一一对应,那么在屏幕上显示结果时,到底 如何才显示整数,又怎样才显示字符呢? 实型数据可以是小数形式,也可以是指数形式,那么我们要用什么样的方法才能按我 们希望的方式来显示实型数据呢? 这就是我们本堂课的主要内容。 二、分析任务,讲授新课 (顺序结构是任何程序的基本结构,其内部可以包含选择结构和循环结构) (一)C 语句分类(5 类,以分号结束) 1、控制语句(9 条) (1)选择语句:if…else 和 switch(内 case 和 default) (2)循环语句:for、while、do…while (3)转向语句:goto、continue、break (4)返回语句:return 2、函数调用语句 (1)构成:由函数名加参数加分号构成 (2)格式:函数名(参数列表) ; 3、表达式语句 (1)构成:由表达式加分号构成 (2)格式:表达式; 4、空语句 (1)构成:由单独一个“; ”构成的语句 (2)作用:语句执行时不产生任何动作。用来延迟或以后插入新的语句。 5、复合语句 (1)构成:由“{}”括起来的程序块 (2)格式:{语句 1;语句 2;…;语句 n} (3)说明:常用来括一个循环体的语句序列或 if 下面的语句序列。 (二)赋值语句 1、构成:由赋值表达式加分号构成 2、格式:赋值表达式; 3、原理:把赋值运算符左边的值给右边的变量(如:a=b+5; ) 4、常见的赋值方法(三种) (1)定义时全部赋值: int a=3,b=3,c=4; 不能写成:int a=b=3,c=4; (2)定义时部分赋值: int a=3,b,c; (3)先定义,后赋值(最常见) : int a,b,c; a=3;b=3;c=4; 或:int a,b,c; a=b=3;c=4; (三)数据输入输出 1、C 中,输入输出的实现 在 C 中没有专门的输入输出语句,其输入输出的实现是通过调用输入输出函数来完成。 2、常见的输入输出函数 scanf、printf、getchar、putchar、gets、puts 3、预处理 (1)原因:这些已经编制好的输入输出函数的相关信息都存放在头文件“stdio.h”中, 所以要使用这些函数须在程序中先指明头文件。 (2)方法: #include “stdio.h” 或 #include &stdio.h& 4、说明 (1)由于 scanf 与 printf 两个函数使用频繁,所以系统允许在使用这两个函数时不加 “include”命令; (2)常用数学函数包含在头文件“math.h”中。 (四)、数据的输出 1、作用 向终端输出若干任意类型的数据(不同于 putchar、puts) 2、格式 1) 、形式: printf(格式控制,输出列表) 2) 、说明: (1)格式控制:用双引号括起来的内容,表示以什么样的形式输出结果,由格式说明符(%d、%f……,输出时,由对应的常量、变量值或表达式值代替) 、普通字符(输出时,照原样输出) 、转义字符(输出时,用于确定输出内容的位置)组成; (2)输出列表:若干个常量、变量或表达式组成,中间用逗号分隔; (3)系统运行:先用输出表列中常量、变量或表达式的值代替对应的格式符中,然后 与普通字符一起输出,输出时由转义字符来确定其位置。 (一定的格式符对应一定类型的数据) 如:printf(“结果为:a=%d,b=%d”,a,b); printf(“结果为:a=%d\nb=%d”,a,b); 3、常见格式符 1) 、d(或 i)格式符 (1)%d:以十进制整数形式输出,长度为实际长度; (2)%md:以十进制整数形式输出(实际长度&m,左补空格,实际长度&=m,按实 际长度输出,最终实现右对齐) ; (3)%-md:以十进制整数形式输出(实际长度&|m|,右补空格,实际长度&=| m|,按实际长度输出,最终实现左对齐) ; (4)%ld:输出长整型数据。 (5)举例: printf(“%4d,%4d”,a,b); printf(“%-4d,%-4d”,a,b); 设:a=123,b=12345 2) 、u 格式符 以无符号的十进制形式输出 3) 、o 格式符(八进制格式符)与 x(X)格式符(十六进制格式符) (1)说明:%o、%x 输入的数据都是无符号数据; (2)举例: short int i=-4; printf(“\n%d,%u,%x,%o\n”,i,i,i,i); -4 在内存中的存储,求-4 的补码: 4 的二进制代码:00,0100 取反:11,1011 加 1:11,1100 将此数作为无符号数:6-3) 转换为 8 进制:177774 转换为 16 进制:fffc 4) 、f 格式符 (1)%f:以小数形式输出实数,包括单、双精度实数,输出时占用的宽度由系统指 定(同时输出时并非全部数字都有效,单精度有效位数是 7 位,双精度有效位数是 16 位, 小数部分通常是 6 位) ; 例如: float a=,b=; double x,y; x=1.; y=2.; printf(&%f\n&,a+b); printf(“%f\n”,x+y); (2)%m.nf:结果占 m 列,n 位小数,右对齐 (3)%-m.nf:结果占 m 列,n 位小数,左对齐 (其中小数点占一列) (4)%.nf:按实际长度输出,n 位小数。 (5)举例: 写出如下代码的运行结果: float f=123.456; printf(“%f %10f %10.2f %.2f %-10.2f\n”,f,f,f,f,f); 结果如下: 123.) 、e 格式符 (1)%e:以指数形式输出实数,系统自动指定宽度(常占 13 列宽,指数部分含 E 和 符号占 5 列,小数部分含小数点占 8 列) (2)%m.ne:其中 m 与 n 的含义与 f 格式符中一致。 (3)举例 写出下面代码运行结果: float f=123.456; printf(“%e %10e %10.2e %.2e %-10.2e\n”,f,f,f,f,f); 结果如下: 1.2 1.2 1.23e+002 1.23e+002 1.23e+002 123..46 123.46 123.46 6) 、c 格式符 (1)%c:用来输出一个字符,%mc:类似于%md(字符型数据与整型数据通用) (2)举例: 7) 、s 格式符 (1)%s:按实际长度输出一个字符串; (2)%ms:实际长度&=m,实际输出;实际长度&m,左补空格,实现右对齐; (3)%-ms:实际长度&=m,实际输出;实际长度&m,右补空格,实现左对齐; (4)%m.ns:m 为所占列数,n 为从左至右所取字符数(最终实现右对齐) (5)%-m.ns:m 为所占列数,n 为从左至右所取字符数(最终实现左对齐) (6)%.ns:此时自动有 m=n,等价于:%n.ns。 (7)举例 写出下面代码运行结果: printf(“%3s,%7.2s,%.4s,%-5.3s\n”,”CHINA”,”CHINA”,”CHINA”,”CHINA”); 结果如下: CHINA, 8) 、g 格式符 %g:输出实数(系统自动选择 e 或 f 的形式输出,原则是选择宽度较小的一种格式, 且不输出无意义的零) (四)注意 1、输出数据时,所用格式符常和数据类型一致; 2、只有 X、E、G 可以大写,其余格式符必须小写; 三、解决任务,学生实践 (一)我们都知道在 C 程序中如何输入数据到系统,让计算机进行处理,那么处理后 得到的结果又怎么在屏幕上显示呢? (二)前面也已讲过,一定范围内,整数和字符一一对应,那么在屏幕上显示结果时, 到底如何才显示整数,又怎样才显示字符呢? (三)实型数据可以是小数形式,也可以是指数形式,那么我们要用什么样的方法才 能按我们希望的方式来显示实型数据呢? 四、针对难点,重点突破 (一)printf 函数系统工作过程; CH,CHIN,CHI (二)%d、%f、%s、%e 输出时,宽度占用问题; (三)无符号数、8 和 16 进制的输出问题。 五、拓展任务,学生实践 请写出下面代码的运行结果: main() { int a=5,b=7; float x=67.8564,y=-789.124; char c='A'; long n=1234567; unsigned u=65535; printf(&%d%d\n&,a,b); printf(&%3d%3d\n&,a,b); printf(&%f,%f\n&,x,y); printf(&%-10f,%-10f\n&,x,y); printf(&%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n&,x,y,x,y,x,y); printf(&%e,%10.2e\n&,x,y); printf(&%c,%d,%o,%x\n&,c,c,c,c); printf(&%ld,%lo,%x\n&,n,n,n); printf(&%u,%o,%x,%d\n&,u,u,u,u); printf(&%s,%5.3s\n&,&computer&,&computer&); } 六、检查任务,评价学生 【教学课题】 数据的输入 【目的要求】 了解 scanf 函数的功能,理解系统的工作过程,掌握 scanf 函数的书写格式,掌握常见 的输入格式符的用法。 【教学重点】 scanf 函数的格式,格式控制符,地址列表。 【教学难点】 运行 scanf 函数时,系统的工作过程,格式控制符的用法。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】一、提出任务,引入课题 我们都知道在 C 程序中如何输入数据到系统,让计算机进行处理,那么处理后得到的 结果又怎么在屏幕上显示呢? 我们知道程序运行实事上就是对具体的数据进行处理,得出运行结果,那么在 C 程序 中怎么样把用户数据输入到计算机,让计算机进行处理,得出结果呢? 二、分析任务,讲授新课 (一)scanf 函数 1、作用:从键盘输入若干任意类型数据到计算机(不同于 getchar 与 gets) 2、格式: scanf(格式控制,地址列表) ; 其中: 格式控制:双引号括起,包括格式控制符与其他字符(常省略) ; 地址列表:是变量在内存中的地址,在变量名前加“&”来表示,之间用逗号分隔; 系统运行:一一对应原则,将数据存放到对应的内存块中。 3、格式符 (1)构成:%+附加格式符+格式符(如:%d,%ld) (2)常见格式符(P28,表 3-3) (须记住,使用较多,%d,%c,%f,%s) (3)附加格式符(要注意域宽与*的使用) 4、注意 (1)对于无符号数字输入时,可用%u、%o、%x 格式符输入; (2)如果双引号中有格式符之外的其他字符,则在输入数据时须原样输入这些字符; (3)地址列表中的参数通常是“&”+变量名构成,不能只写变量名; (4)通常格式控制中的控制符个数与地址列表中的地址数量相等,且一一对应(包 括数据类型也相对应) ; 三、解决任务,学生实践 (一)C 语言中有一些什么样的 C 语句? (二) 在 C 程序中怎么样把用户数据输入到计算机, 让计算机进行处理, 得出结果呢? 四、针对难点,重点突破 (一)为什么要加预处理命令。 (二)scanf 函数的工作过程。输入数据后,计算机怎么处理,学生必须理解。 (三)输入函数使用的注意事项(如有:scanf(”%d%d%d”,&a,&b,&c) ;语句,输入数 据时两个数据间可以是一个或多个空间,也可以用回车键或 Tab 间隔) 。 五、拓展任务,学生实践 用下面 scanf 函数输入数据,使 a=3,b=7,x=8.5,y=71.89,c1=‘A’ ,c2=‘a’ , 问在键盘如何输入,同时加入输入代码,要求验证输入数据是否正确。 main() { int a,b; float x,y; char c1,c2; printf(&请输入相应数据:&); scanf(&a=%d b=%d&,&a,&b); scanf(& %f %e&,&x,&y); scanf(& %c %c&,&c1,&c2); printf(&输入的数据是:\n&); printf(&a=%d,b=%d\n&,a,b); printf(&x=%f,y=%f\n&,x,y); printf(&c1=%c,c2=%c\n&,c1,c2);} 六、检查任务,评价学生 【教学课题】 顺序结构程序设计复习 【目的要求】 了解 C 语句分类, 理解赋值语句、 scanf、 printf 函数的系统工作原理, 掌握 scanf、 printf、 函数的作用,具体的使用,能独立进行简单的顺序程序设计。 【教学重点】 赋值语句,scanf、printf、函数的使用。 【教学难点】 理解赋值语句、scanf、printf 函数的系统工作原理,scanf、printf、函数的使用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、编写程序。输入三角形的三边长,求三角形的面积。 2、编写程序。求 ax2+bx+c=0 方程的根。a、b、c 的值由键盘输入,设 b2-4ac&=0。一、提出任务,引入课题 所有的程序都可是由顺序结构、选择结构和循环结构组合而成,其中顺序结构是最基 本的,也是最容易理解的一种程序结构,许多程序整体上而言都可以看作是一个顺序结构, 只是在它的内部还可嵌套其他结构而已。 那么作为程序设计者, 掌握顺序程序结构是最基本 的,也是最起码的。必须知道如何输入数据,进行怎样的运算,然后再如何将结果输出。 二、分析任务,讲授新课 (一)C 语句分类 (后加分号,5 大类,控制语句、函数调用语句、表达式语句、空语句、复合语句) (二)赋值语句 1、形式 2、系统工作原理(把右边表达式或变量或常量的值给左边的变量) (三)数据的输入与输出实现 没有专门的输入输出语句, 利用相应的输入输出函数来实现。 因为要用到标准的库函数, 所以程序经常要用到 include 预处理命令。如:#include “math.h”。 常用的输入输出函数有哪些? (四)格式输入 scanf 函数 1、作用 2、格式 3、系统工作原理 4、常用格式符(%d、%c、%f、%s 等) (五)格式输出 printf 函数 1、作用 2、格式 3、系统工作原理 4、常用格式符(输入宽度、小数位数等的设置) (六)顺序结构程序 1、顺序结构程序运行总原则; 2、顺序结构程序组成。 三、解决任务,学生实践 如何输入数据,进行怎样的运算,然后再如何将结果输出。 四、针对难点,重点突破 格式输入、格式输出函数的使用与格式控制符。 五、拓展任务,学生实践 (一)输入三角形的三边长,求三角形的面积。输出结果取 2 位小数。 (面积公式:area= s(s ? a)(s ? b)(s ? c) ,其中 s=(a+b+c)/2,求平方根用库函数: sqrt()来实现) (二)求 ax2+bx+c=0 方程的根。a、b、c 的值由键盘输入,设 b2-4ac&=0,输出结果取 2 位小数。 (用公式:x1=? b ? b 2 ? 4ac ? b ? b 2 ? 4ac ,x2= 来实现) 2a 2a(三)输入一个华氏温度,要求输出摄氏温度。公式为 c=5/9(F-32) ,输出要求有文字 说明,取 2 位小数。 六、检查任务,评价学生 【教学课题】 关系运算与逻辑运算 【目的要求】 掌握关系运算符和关系表达式,掌握逻辑运算符和逻辑表达式,了解条件运算符和条 件表达式。 【教学重点】 关系运算符和逻辑运算符的使用。 【教学难点】 多种不同类型运算符的复杂表达式。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、写出下列式子 C 语言的的表达式 ? ? ? |X|&2 X≤1+a 并且 Y≤bf ( x) ?( x ? 1)( x ? 2) x2、int a=1,b=2,c=3,d=4,m=2,n=2; 执行表达式(m=a&b)&&(n=c&d)后 m 的值是 n 的值是 。3、 若有 int a=1,b=1,c=1;则执行表达式(a++||b++)&&c++后, 变量 a,b,c 的值分别是多少? 4、若有 int a=5;则表达式 a=10 的值是什么? 5、若有 int a=5;则表达式 a++&5 的值是什么? 最后 a 的值是什么?一、提出任务,引入课题 1、计算函数值: Sin(x)/x Y= 1 2、判断某年是否闰年。 二、分析任务,讲授新课x≠0 x=0(一)关系运算符和关系表达式 1、关系运算 是对两个量进行比较运算。 2、关系运算符 ①大小判断:>、>=、<、<=。 优先级: 高②相等判断:==(等于) 、!=(不等于) 优先级:低 【注意】 : ? 关系运算符“>=、<=、==、!=”在书写时,不要用空格将其分开,否则 会产生语法错误。判断相等一定要用两个等号。 ? 注意区分“=”与“==”3、优先级别 (1)算术运算符→关系运算符→赋值运算符(高→低) (2) 例题 c&a+b a= =b&c a=b&c若 a=1,b=-5,c=?a?时,表达式的值。 4、关系表达式: (1)概念:用关系运算符将两个表达式连接起来的式子。 (2)基本形式: 表达式 1 关系运算符 表达式 2 注意:数值量比较:数字的大小。字符量比较:ASCII 码的大小。 5、关系表达式的值: 真(1) ,假(0) 。 6、结合规则: 左结合(自左至右) (二)逻辑运算符和逻辑表达式 ! (非) 算术运算符 关系运算符 &&(与)和||(或) 赋值运算符 高低1、逻辑运算符:&&(与) ||(或) ! (非) 2、优先级别: !→&&→||(高→低)不同运算符的优先级的比较 3、逻辑量: 当一个量(可以是基本类型的常量或变量)用作判断时,C 编译系统认为 非零是为真,为零时为假。 4、运算规则:逻辑&&:遇假则假。 逻辑||:遇真则真。 逻辑! :真假互换。 5、逻辑表达式: (1)概念:用逻辑运算符将两个表达式连接起来的式子。 (2)基本形式: 表达式 1 逻辑运算符 表达式 2 (3)逻辑运算的真值表: (见 P59) 6、逻辑表达式的值:1(真) 、0(假) 注意:强调逻辑运算符的“短路特性” 在求解逻辑与(&&)表达式时,若&&运算符左边表达式的值为 0(假) ,则不再 进行&&右边表达式的运算,且将整个&&表达式的值定为 0;在求解逻辑或(||)表达 式时,若||左边表达式的值为非 0 值(真) ,则不再进行||右边表达式的运算,且将整个 逻辑||表达式的值定为 1(真) 。 (三)条件运算符和条件表达式(P43) 1、条件运算符:? : 是唯一一个三目运算符。优先级别高于赋值运算,结合方向自右向左 。 .... 2、格式:表达式 1 ?表达式 2 :表达式 3 3、执行方式: 4、例如:max=a&b?a:b; 相当于:if(a&b) max=a; else max=b; 三、解决任务,学生实践 1、写出计算函数值的表达式。 2、写出判断闰年的逻辑表达式。 闰年的条件是符合下面二者之一: (1)能被 4 整除,但不能被 100 整除。 (2)能被 4 整除,又能被 400 整除。 四、针对难点,重点突破 1、各种运算符的优先级及结合性 2、逻辑运算的短路性。 五、拓展任务,学生实践 1、从键盘输入一年份,判断是否是闰年。 2、输入一个字符,判断它是否为大写字母,如果是,将它转换为小写字母;如果不是 不转换。然后输出最后得到的字符。 六、检查任务,评价学生 【教学课题】 If 语句与 if 语句构成的选择结构 【目的要求】 复习关系表达式和逻辑表达式, ,掌握 if 语句的基本形式及条件表达式,掌握 if 语句的 执行原理。 【教学重点】 if 语句的执行原理及条件表达式。 【教学难点】 if 语句及其复杂格式的使用。 【教学方法】 任务驱动法,案例教学法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、有 a,b,c 三个整数,由键盘输入,输出其中的最大的数。写出程序 2、输入学生成绩,对成绩进行等级评定,如果成绩≥90 为优秀,如果成绩≥80 为良好,如 果成绩≥70 为中,如果成绩≥60 为及格,如果成绩&90 为不及格。输出成绩等级。 一、提出任务,引入课题 1、输入一个整数 a,判断它是偶数还是奇数? 2、任给 a,b,c 三个数,按从大到小顺序输出。 二、分析任务,讲授新课 (一)if 语句的基本形式 if 语句有三种基本形式:单分支选择语句,双分支选择语句,多分支选择语句。 1、 if 单分支选择语句 ? 格式:if(表达式) 语句体 ? 执行过程: Step1: 计算圆括号里表达式的值。 Step2: 若表达式的值为 1(条件成立) ,则执行语句体,否则执行语句体后的 下一个语句。 ? 例题:2、 if 双分支选择语句 ? 格式:if(表达式) 语句体 1 else 语句体 2 ? 执行过程: Step1: 计算圆括号里表达式的值。 Step2: 若表达式的值为 1(条件成立) ,则执行语句体 1,否则执行语句体 2。 ? 例题:例.分析下列程序的输出结果 main() { int a=4,b=3,c=5,t=0; if(a&b) t=a;a=b;b=t; if(a&c) t=a;a=c;c=t; printf(“%d %d %d\n”,a,b,c); } main() { int a=4,b=3,c=5,t=0; if(a&b){ t=a;a=b;b=t;} if(a&c) {t=a;a=c;c=t;} printf(“%d %d %d\n”,a,b,c); } 交换的思想:若要交换 a 和 b 的值,通常的做法是: {t=a;a=b;b=t;}注意: (1)if 后的表达式必须用()括起,else 后没有表达式。 (2)if 和 else 都只能控制紧跟它的一条语句,若要控制多条语句,必须用一对{}括 起构成一条复合语句。 3、if 多分支选择语句 ? 格式:if(表达式 1)语句体 1 else if(表达式 1)语句体 2 ?? else 语句体 n ? 执行过程: 如果满足条件 1,就执行语句体 1;如果满足条件 2,就执行语句体 2;依次类 推,最后如果上述条件都不满足,就执行语句体 n. (二) if 语句的嵌套 一般的 if 语句,若语句体中又是条件语句,则叫 if 语句的嵌套。 ? 格式: if (表达式 1) if (表达式 2) 语句 1 else 语句 2 else if (表达式 3) 语句 3 else ? 注意:语句 4执行过程:略(1) if 与 else 的配对关系。原则是 else 总是与它上面最近的、未配对的 if 配对。 (2) 如果 if 与 else 的数目不一样, 为了避免在 if 与 else 配对时出错, 建议使用 “{}” 来限定 if 语句的范围。 ? 例题:请分析下列程序的输出结果。(1) main() { int s,t,a,b; sanf(“%d%d”,&a,&b); s=1;t=1; if(a&0) {s=s+1; if(a&b) t=s+1;} else if(a==b) t=s; else t=2*s; printf(“%d\n”,t); } 若运行时输入 5 10 回车,则输出结果是? (2) main() { int s,t,a,b; sanf(“%d%d”,&a,&b); s=1;t=1; if(a&0) s=s+1; if(a&b) t=s+1; else if(a==b) t=s; else t=2*s; printf(“%d\n”,t); } 若运行时输入 5 10 回车,则程序的执行结果是? 三、解决任务,学生实践 1、输入一个整数 a,判断它是偶数还是奇数? 2、任给 a,b,c 三个数,按从大到小顺序输出 四、针对难点,重点突破 1、if 语句中表达式中值的判断,如 if(a=0) .。 2、if 与 else 的配对问题。 。 五、拓展任务,学生实践 1、 输入学生成绩, 对成绩进行等级评定, 如果成绩≥90 为优秀, 如果成绩≥80 为良好, 如果成绩≥70 为中,如果成绩≥60 为及格,如果成绩&90 为不及格。输出成绩等级。 六、检查任务,评价学生 【教学课题】 switch 语句、goto 语句 【目的要求】 掌握 switch 语句的执行原理及 break 语句的作用及 goto 语句的用法。 【教学重点】 运算符的优先级和结合性, switch 语句的执行原理。 【教学难点】switch 语句的使用。【教学方法】 任务驱动法,案例教学法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、 企业发放的奖金根据利润提成。利润 I&=10 万元,奖金可提 10%,利润高于 10 万低于 等于 20 万元,低于 10 万元部分按 10% 提成,高于 10 万元部分按 7.5% 提成。 200000&I&=400000 时,低于 20 万元的部分按上述办法提成(下同) 。高于 20 万元的部 分按 5%提成, 400000&I&=600000 时, 高于 40 万元的部分按 3%提成; 600000&I&=1000000 时, 高于 60 万元的部分按 1.5%提成; 当 I&1000000 时, 超过 100 万元的部分按 1%提成。 从键盘输入当月的利润 I,求应发奖金总数。 要求: (1)用 if 语句编程。 (2)用 switch 语句编程。 一、提出任务,引入课题 虽然 if 语句的规则嵌套可以实现多分支的选择,但不够直观简洁,特别是在分支较多的情 况下,if 语句的嵌套层次也会更深,增加了理解的难度,也不便于修改和扩充 二、分析任务,讲授新课 (一) 、switch 语句 1、格式: switch(表达式) { case 常量表达式 1:语句 1; case 常量表达式 2:语句 2; …… case 常量表达式 n:语句 n; [default: 语句组 n+1;] } 2、执行过程: 常量表达式常量 1 常量 2 常量 n 其他语句 1语句 2……语句 n语句 n+1先计算 switch 后面的表达式的值;然后使其顺次花括号内同各个 case 后的常量表达式 的值相比较,若找到相等的常量表达式 i,则执行该常量表达式冒号后的语句 i;若找不到 匹配的常量表达式,此时要考虑是否有 default 选项,若有,则执行 default 后面的语句直到 结束,否则什么也不执行。 3、switch 结构使用要注意以下几点: 1)switch 后面表达式的类型,一般为整型、字符型或枚举类型(枚举类型将在以后的 章节中介绍) 。 2)每个 case 后面常量表达式的值必须互不相同,即不允许对表达式的同一个值有两种 或两种以上的处理方案。 3)尽管各个 case 和 default 出现的次序不影响程序的执行结果,但是把 default 放在最 后是一种良好的程序设计习惯。 4)多个 case 可共有一组执行语句。 5)case 后面的常量表达式仅起语句标号的作用,并不进行条件判断。系统一旦找到入 口标号,就从此标号开始执行下去,不再进行判断。 6)switch 语句又称为开关语句。当仅需执行一个开关时,则在该 case 后面的语句中必 须包含一个 break 语句,让其执行后跳出 switch 语句,否则会一直执行到最后,或遇到下一 个 case 中的 break 语句为止。执行后遇 break 语句就退出 switch 语句; 7)当 case 后面包含一条以上的执行语句时,可以不用花括号括起来,系统会自动识别 并顺序执行所有语句 8)default 是可选项。 例 1:从键盘输入一个字符, 若为?a? 输出 abort ,若为?q?输出 quit,?f? 输出 fail,其他字符输 出出错信息?error?。 main() { ch=getchar() ;.3 switch(ch) /*变量为整型数的开关语句*/ { case ‘a’: printf(&abort\n&); /*退出开关语句*/ case ‘q’: printf(&quit\n&); case ‘f’: printf(&fail\n&); default: puts(&Error&); } } 例 2: 输入一个百分制成绩,输出对应的等级。 分析:解决本题的关键是如何将输入的百分制成绩与 case 常量联系起来,不难想到将 百分制成绩 (用 score 表示) 除以 10 之后再取整, 一定得到 0 到 10 之间的数。 9、 10 对应?a?,8 对应‘b‘,……,5、4、3、2、1、0 对应?e?既不及格。 #include&stdio.h& main() { printf(“please input a score\n”); scanf(“%f”,&score) ; switch((int)(score/10.0)) { case 10: case 9: grade=’a’; case 8: grade=’b’ ; case 7: grade=’c’ case 6: grade=’d’ ; default: greade=’e’ ; } printf(“score=%f,grade=%c”,score,grade) ; } 从以上两例的解决办法看,使用 switch 语句编写程序的关键是如何构造 switch 后的常 量表达式和 case 常量表 (二)语句标号 (二)程序举例 1、写程序,判断某一年否闰年 判断闰年的条件:能被 4 整除,但不能被 100 整除或能被 400 整除 程序如下: #include &stdio.h& main() { int year, scanf(“%d”,&year); if(year%4==0) {if(year%100==0) {if (year%400==0) leap=1; else leap=0;} else leap=1;} else leap=0; if(leap) printf(“%d 是闰年”,year); else printf(“%d 不是闰年”,year); } 另一种表示法 #include &stdio.h& main() { int year, scanf(&%d&,&year); if (year%4==0&&year%100!=0||year%400==0) leap=1; else leap=0; if(leap) printf(“%d 是闰年”,year); else printf(“%d 不是闰年”,year); }三、解决任务,学生实践 1、运输公司对用户计算运费。距离(s)越远,每公里运费越低。标准如下: S&250 公里,没有折扣; 250≤s&500 500≤s&1000 2%折扣; 5%折扣;1000≤s&2000 8%折扣; 2000≤s&3000 10%折扣; 3000≤s 15%折扣。设每公里每吨货物的基本运费为 p,货物重为 w,距离为 s,则总运费 f 的计算公式为 f=p*w*s(1-d).从键盘输入运费 p,重量 w,距离 s,编写出程序。 四、针对难点,重点突破 1、逻辑表达式的短路特性。 2、if 与 else 的正确配对。 3、在条件表达式中,表达式 1、2、3 的值不要求具有相同的类型,最后结果的类型为表达 式 2、3 中较高类型的一种。 如:(x=6)&(y=5)?1:1.5 表达式的值是 1.0 而不是 1。 4、 常见错误 if (x&0) ; y=3x+2; 五、检查任务,评价学生。 if (x=2) printf(“y&0”); if (1&=x&=10) y=x-1; 【教学课题】 选择结构程序设计复习 【目的要求】 掌握关系表达式和逻辑表达式的书写方法、if 语句的语法格式及应用,switch 及条件表 达式的应用。 【教学重点】 关系表达式、逻辑表达式,if 语句、swithch 语句应用。 【教学难点】 表达式的表达、if 嵌套。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、编写程序。输入一个整数,打印出它是奇数还是偶数。 2、编写程序。输入 a,b,c 三个数,打印出最大值。一、提出任务,引入课题 所有的程序都可是由顺序结构、选择结构和循环结构组合而成,前面我们已以学习了 顺序程序设计的方法,如何来编写选择结构程序? 二、分析任务,讲授新课 (一)关系表达式及逻辑表达式 1、运算符说明 ? ? ? ? 关系运算符: 〉 、 〉=、&、&=、= =、 != 注意关系运算符的优先级 逻辑运算符: ! 、&&、|| 注意逻辑运算符的优先级 ? 2、举例条件运算符:?:若 a=5,b=2,c=4,m=n=1 ? 5&3+4: ? a&b&c: ? m=a&b&&n=b&c ? m=a&b?a:b ? 等等 (二)选择结构语句的特点 1、主要有:if 语句,switch 语句 2、注意点: ? if 语句的格式 ? else 的配对原则 ? if 语句中判断条件的表达式可以是任意的 ? 表达式中++、--的使用 switch 语句中 break 的使用 3、举例 1)#include&stdio.h& main() { int a=4,b=3,c=5,t=0; if(a&b){t=a;a=b;b=t; } if(a&c)t=a;a=c;c=t; printf(&%d,%d,%d\n&,a,b,c); }2)#include&stdio.h& main() { int a=0,b=5,c=0,d=10; if(a) d+=10; else if(!b) if(!c) d=15; else d=25; printf(&d=%d\n&,d) }3) #include&stdio.h& main() { int x=1,y=0,a=0,b=0; switch(x) { case 1:switch(y) { case 0:a++; case 1:b++; } case 2:a++;b++; } printf(&a=%d,b=%d\n&,a,b); }三、解决任务,学生实践 如何根据要求书写表达式,编写选择结构程序。 四、针对难点,重点突破 表达式的表达,if 语句的基本流程,if 的嵌套。 五、拓展任务,学生实践 六、检查任务,评价学生 【教学课题】 用 While 语句构成的循环结构 【目的要求】 掌握 While 语句的一般形式,掌握 While 语句的执行过程。 【教学重点】 while 语句的执行原理及应用。 【教学难点】 While 语句的执行原理及应用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、猴子吃桃问题。猴子第一天摘下若干桃子,当即吃了一半,还不过瘾,又多吃了一 个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第十天早上想吃时,见只剩下了一个桃子了,求第一天共摘多少桃子。 2、输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。 说明:a)英文字母包括大写字母和小写字母 b)用换行符('\n?)来判定一行字符 c)用 if 语句进行分类统计 一、提出任务,引入课题 在一些循环程序中, 如果事先未知循环的次数而根据条件来决定循环是否循环, 我 们是否有更合适的循环语句来编写程序? 二、分析任务,讲授新课 (一)while 循环语句的一般形式 1、 【一般格式】 while(表达式) { } while 语句是一种先判断后执行的循环语句。 【注意】 ① “表达式”一般为关系表达式或逻辑表达式。称为循环条件 ② 循环体可以是单个语句,也可是多个语句;如果是多个语句必须使用大括号“{ }” 将多个语句括起来构成一个复合语句。 2、 【流程图及 N-S 图】 循环体语句假 表达式 真 循环体当表达式的值为真 循环体(二)while 循环语句的执行过程 1 先计算表达式的值并判断,若表达式的值为真(非零) ,则执行步骤? 2 ;若表达 ? 式的值为假(零)时,执行步骤? 4 。 2 执行循环体中语句 ? 3 转去执行步骤? 1 ? 4 结束循环,执行 while 循环之后的语句。 ? (三)例题 例 1 利用 while 语句“求 1+2+3+……+99+100 的和”参考程序如下: main( ) { int i, sum=0; i=1; while(i&=100) { sum=sum+i; i++; } }printf(&sum=%d\n&,sum);例 2:利用 while 语句计算 n!(即:1x2x3x……xn) 参考程序如下: main( ) { int i=1, n, s=1; scanf(“%d”, &n); while(i&=n) { s=s*i; i++; }printf(&s=%d\n&,s); } 三、解决任务,学生实践 计算 1!+2!+?+n! 四、针对难点,重点突破 1、若循环体包含一条以上的语句,应以复合语句的形式出现。 2、循环前,必须给循环控制变量赋初值。 3、循环体中,必须有改变循环控制变量值的语句。 (使循环趋向结束的语句) 。 4、循环体可以为空。 5、While 循环先判断,后执行,有可能一次也不执行。 五、拓展任务,学生实践 1、输入一行字符,分别统计其中的数字、字母、空格 和其它字符的个数。 六、检查任务,评价学生 【教学课题】 Do?While 语句构成的循环结构 【目的要求】 掌握 Do?While 语句的一般形式,掌握 Do?While 语句的执行过程。 【教学重点】 Do?while 语句的执行原理及应用。 【教学难点】 Do?While 语句的执行原理及应用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、编写一个程序,求 0-300 以内的奇数之和。 一、提出任务,引入课题 对于循环次数没有确定,除了用 do?while 语句外,我们是否还有其它的循环语句 来完成循环? 二、分析任务,讲授新课 (一)do?while 循环语句的一般形式 1、 【一般格式】 do { 循环体语句 } while(表达式); Do?while 语句是一种先执行后判断的循环语句。 【注意】 ① “表达式”一般为关系表达式或逻辑表达式。称为循环条件 ② 循环体可以是单个语句,也可是多个语句;如果是多个语句必须使用大括号“{ }” 将多个语句括起来构成一个复合语句。 3 在 if ,while 语句中,表达式后面不能加分号,而在 do?while 语句的表达式后面则 ? 必须加分号。 2、 【流程图及 N-S 图】循环体 真表达式循环体 当条件表达式为真假(二) 、DO?while 循环语句的执行过程 ? 1 执行 DO 的循环体语句。 ? 2 计算 whille 中表达式的值,若表达式的值为真(非零) ,再执行循环体的语句(即步 骤? 1) ;当表达式的值为假(零)时,结束循环。 ? 3 结束循环,执行 DO?While 循环后面的语句。 (三) 、例题 例:用 do―while 语句编程实现 求 1+2+3+……+99+100 的和 main( ) { int i, sum=0; i=1; do { sum=sum+i; i++; } while(i&=100); } printf(&sum=%d\n&,sum);(四)三种循环结构小结(P77) 1 ? 2 ? 三种循环结构都可以用来处理同一问题,一般情况下它们可以互相代替。 用 while 和 do―while 循环时, 循环变量初始化的应在 while 和 do―while 语句之前完成,而 FOR 语句可以在表达式 1 中完成。 3 while 和 do―while 循环,只在 while 后面指定循环条件,在循环体应包含使循环结 ? 束的语句。 4 do―while 语句和 while 语句的区别,do―while 是先执行后判断,循环体至少执行 ? 一次。而 while 语句是先判断后执行,循环有可能一次也不执行。 5 for 语句功能强大。 ? 6 for 适用固定的循环次数,do?while, ? 三、解决任务,学生实践 1、用 do―while 语句编程计算 n!(即:1x2x3x……xn) 四、针对难点,重点突破 1、循环前,必须给循环控制变量赋初值。 2、循环体中,必须有改变循环控制变量值的语句。 (使循环趋向结束的语句) 。 3、do?while 中 while 条件表达式语句后,需要加上“;” 。 4、do?While 循环先执行,后判断,至少执行一次。 五、拓展任务,学生实践 1、编写程序 while 一般用于随机的循环次数。六、检查任务,评价学生 【教学课题】 for 语句构成的循环结构 【目的要求】 掌握 for 语句的一般形式,掌握 for 语句的执行过程。 【教学重点】 for 语句的执行原理及应用。 【教学难点】 for 语句的执行原理及应用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、一球从 100m 高度自由落下,每次落地后反弹回原高度的一半,再落下。求它在第 10 次落地时,共经过多少 m?第 10 次反弹多高? 2、编写一个程序,要求计算 1 到 100 所有偶数的和。一、提出任务,引入课题 例 1:求 1+2+3+……+99+100 的和 例 2:求 10 的阶乘 利用计算机重复处理某些实际问题就构成了循环结构。在循环结构中将某些语句重复 执行,这些语句称为循环体;每重复一次都要判断是继续重复还是停止重复,这个判断所依 据的条件称为循环条件;循环体与循环条件一起构成了循环结构。 二、分析任务,讲授新课 (一)for 循环语句的一般形式 1、 【一般格式】 for(表达式 1;表达式 2;表达式 3) 循环体语句; 【注意】 循环体语句可以是单个语句, 也可是复合语句或空语句。 三个表达式之间用分号分隔。 2、 【流程图及 N-S 图】计算表达式1 表达式2 真 循环体 计算表达式3 假计算表达式1的值 当表达式2为真循环体计算表达式3的值表达式 1:一般为循环控制变量赋初值的语句。 表达式 2:循环条件语句。 表达式 3:循环控制变量变化语句 (二)for 循环语句的执行过程 (1)计算表达式 1 的值; (2)计算表达式 2 的值,若为真(非 0) ,则执行循环体; (3)计算表达式 3 的值;转回步骤(2)执行 (4)循环结束,执行循环的下一语句。 for 语句最简单的应用形式 : for (循环变量赋初值;循环条件;循环变量增值)语句体; (三)例题 利用 for 语句“求 1+2+3+……+99+100 的和”的参考程序如下: main( ) { int i, sum=0; for (i=1;i&=100;i++) { sum=sum+i; } printf(&sum=%d\n&,sum); } 说明: 1、省略表达式 1,语句格式为: 【for(;表达式 2;表达式 3)】→ 2、省略表达式 2,语句格式为 【for(表达式 1; ;表达式 3)】→ 3、省略表达式 3,语句格式为: 【for(表达式 1;表达式 2;)】 4、省略三个表达式,语句格式为 for(; ;) 5、表达式 2 一般是关系表达式或逻辑表达式,但也可以 数值表达式,只要其值不等于 0 就执行循环体。 如:for(k=1;k-4;k++) s=s+k; 仅当 K 的值等于 4 时终止。 k-4 是数值表达式。 三、解决任务,学生实践 用 for 语句计算出 10 的阶乘。 四、针对难点,重点突破 1、根据实际问题,确定程序中的循环变量、循环条件和循环体。 2、循环执行的次数。 五、拓展任务,学生实践 1、求 100 以内的奇、偶数的和 六、检查任务,评价学生 → for (i=1 ;i&=100;) { …… i++; } i=1; for ( ; ; ) { if (i&=100) …… i++; } for(i=1 ; ; i++) { if(i&=100) ……} i=1; for ( ;i&=100;i++) 【教学课题】 循环结构的嵌套、辅助控制语句 【目的要求】 掌握循环嵌套结构的简单应用,掌握 break、continue 语句及应用,了解 goto 语句。 【教学重点】 Break、Continue 语句及循环嵌套的应用 【教学难点】 循环嵌套的应用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、编写一个程序,输出从 2~n(n 由用户输入)中的所有素数 一、提出任务,引入课题 1、如果打印九九乘法表,如何用循环语句实现。 2、如果在执行循环时,要跳出循环,或结束本次循环如何实现。 二、分析任务,讲授新课 (一)循环嵌套的概念及应用 当一个循环结构中包含另一个循环结构时, 称为循环的嵌套或多重循环。 在循环嵌 套中。 例 1:编程输出乘法“九九表” 。 main ( ) { int m,n,k; for (m=1 ;m&=9;m++) { for(n=1;n&=m;n++) printf(&\n&); } } 【注意】 1、内循环变化快,外循环变化慢 2、外层循环应“完全包含”内层循环,不能发生交叉。 3、嵌套的循环控制变量一般不应同名,以免造成混乱。 4、嵌套的循环要注意正确使用缩进式书写格式来明确嵌套循环的层次关系,以增加程 序的可读性。 (二)Break 语句 【一般格式】 break; 【功能】使程序的执行从包含它的最内层循环或 switch 语句中跳出。 【注意】 break 只能用于 switch 语句或循环语句中。在循环结构中通常用 if 语句与之配合使用。 Break 语句只能从最内层循环跳到外层循环中。 【应用】 例 2【计算半径 r=1 到 r=10 的圆面积,直到面积大于 100 为止】 。 main() { /* i 作为外循环控制变量控制被乘数变化*/ /*j 作为内循环控制变量控制乘数变化*/printf(&%d*%d=%2d &,n,m,n*m);
for (r=1;r&=10;r++) { area=3.14*r*r; if(area&=100) printf(&r=%d area=%f\n&,r,area); } } (三)continue 语句 【一般格式】 continue;【功能】 结束本次循环,继续下一次循环。 【注意】 continue 语句只用于循环结构中,通常与 if 语句配合使用。 【应用】 例 3 输出 100 到 200 之间不能被 7 整除的数。 main() { for(n=100;n&=200;n++) { if(n%7= =0) printf(&%d\t&, n); } } (四) 、break 语句与 continue 语句区别 continue 是结束本次循环,进行下一次循环,而不是结束整个循环过程。对单层循 环,break 语句是结束整个循环,转到循环体外;对于多层循环,则是结束最内层循环。 例 4 将例 3 中的 continue;换成 break;执行程序,观察输出结果 (五)goto 语句 【一般格式】 goto 语句标号;【功能】 无条件地转到标号所指的语句。 【注意】 1、 语句标号: 用于定义程序中的某个位置上,用标识符表示不能用数字。 2、 goto 语句通常与条件语句配合使用,可用来实现条件转移,构成循环、跳出循 环体等功能。 3、 尽量少用。 【应用】 例 5:见教材例题。 三、解决任务,学生实践 1、编程输出乘法“九九表” 。 四、针对难点,重点突破 1、嵌套的循环控制变量不能相同。 2、内循环变化快,外循环变化慢。 3、对于单层循环,break 语句是结束整个循环,转到循环体外;对于多层循环,则是结 束最内层循环。 4、continue 是结束本次循环,进行下一次循环,而不是结束整个循环过程。 五、拓展任务,学生实践 1、一个数如果恰好等于它的因子之和,这个数就称为“完数” ,例如,6 的因子为 1、 2、3,而 6=1+2+3,因些 6 是“完数” 。编程找出 1000 以内的所有完数,并按下面格式 输出其因子: 6 的因子是:1,2,3 六、检查任务,评价学生 【教学课题】 程序举例 【目的要求】 掌握循环程序结构的编写方法和技巧。 【教学重点】 编写程序一般方法。 【教学难点】 编程的技巧。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 例一: 求 100-200 之间的所有素数 分析:首先了解素数的概念,其次掌握判断素数的几种方法,最后加上循环求需要的素数。 程序: #include&stdio.h& main() {int x,i,f; for(x=100;x&=200;x++) {f=1; for(i=2;i&x;i++) if(x%i==0) {f=0;} if(f==1) printf(&%d 是素数\n&,x); } }例二、编程输出以下形式的乘法九九表。#include&stdio.h& main( ) { int i,j; for (i=1;i&=9;i++) { printf(&\n &); for (j=1;j&=9;j++) /*j 作为内循环控制变量控制乘数变化*/ printf(&%1d*%1d=%2d &,i,j,i*j); } } /* i 作为外循环控制变量控制被乘数变化*/ 【教学课题】 循环程序设计复习 【目的要求】 掌握三种循环程序结构的工作原理及执行过程和编程方法 【教学重点】 三种循环程序的工作原理及执行过程。 【教学难点】 循环的嵌套。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手 【作业布置】 1、教材 p66 5.19 一、循环结构语句的特点 1、主要有:for 语句,while 语句,do?while 语句,break 语句,continue 语句 2、注意点: ? ? ? ? ? ? ? 循环结构程序的执行流程 三种循环语句的格式和特点 while 语句:先判断表达式,后执行循环体 do…while() ;语句:先执行循环体,后判断表达式 for 语句的执行:使用非常灵活 其他;如与 while(!A)等价的语句 注意语句分号,如: ? ? while(x==0) ; do x++; while(++x&=10); ? for(x=1;x&=3;x++); printf(“%d”,x); ? if(x&=0); 判断以上语句的正误 ? ? ? ? 无限循环(三种格式) break 语句的特点:退出当前循环或 switch continue 语句的特点:提早结束本次循环 注意循环的嵌套二、举例 例 1、 main() { int num,c; printf(“请输入一个整数:“); scanf(“%d”,&num); do { c=num%10; printf(“%d”,c); } while((num/=10)&0); printf(“\n”); } 例 2、 main( ) { int a,y; a=10,y=0; do { a+=2;y+=a; if (y&50) } while (a=14); printf(&a=%d,y=%d\n&,a,y); } 【教学课题】 字符型数据 【目的要求】 了解字符型变量、常量的概念字符的输入和输出函数及使用方法。 【教学重点】 字符常量及输入输出函数。 【教学难点】 字符常量和字符串常量,字符数据的输入。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手一、提出任务,引入课题 对于程序中如何输入字符及字符如何输出,字符变量如何进行运算? 二、分析任务,讲授新课 (一)字符型常量 1、字符常量 定义:在程序中用单引号把一个字符括起来,这个字符就成为字符常量。一个字符常 量代表 ASCII 码字符集中的一个字符。 说明: (1)单引号中的大写字母和小写字母代表不同的字符常量。 (2)单引号中的空格符也是一个字符常量。 (3)字符常量只能包含一个字符,因此?abc?是非法的。 (4)字符常量只能用单引号括起来,不能用双引号。如”a”是字符串而不是字符常量。 (5)字符常量在内存中占 1 个字节。 (6)所有字符常量都作为整型来处理,数值就是该字符在 ASCII 码表中的序号 2、转义字符常量 转义字符:又称反斜线字符,总是以一个反斜线开头,后面跟一个特定的字符,用来 代表某一个特定的 ASCII 字符,这些字符常量也必须括在一对单引号内。 注意: (1)转义字符常量只代表一个字符。如?\101?,?\n? (2)反斜线后的 8 进制数可以不用 0 开头。如?\102?表示字符 B,即在一对单引号内可 用反斜线后跟一个 8 进制数表示 ASCII 字符。 (3)反斜线后的 16 进制数只能以小写 x 开头,不能用大写 X 或 0x 开头。如?\x41?表 示字母 A,?\x6d?表示字母 m。 3、字符串常量 字符串常量是由双引号括起来的一串字符。 例:”abcdEG ”、”string“ 是字符串常量 在 C 语言中,系统在每个字符串的最后自动加入一个字符?\0?作为字符串的结束标志。 4、字符量进行的运算 ? ? 字符量可参加任何整数运算。 可进行关系运算。(二)字符变量 1 概述 程序运行中,其值可以改变的字符型数据,用来存放字符常量(不是字符串常量) ,在 内存中所占的空间为 1 个字节,以 ASCII 码的形式存储(一个整数) ,所以字符型数据与整 型数据可以通用。 (可以理解为是一类特殊的整型数据) 2 字符型变量的定义 格式:char 变量名列表 赋值:c1=?A? 或者 c1=67 (三)字符的输入和输出 1、调用 printf 和 scanf 函数输出和输入字符 1)输出字符 c 格式符 (1)%c:用来输出一个字符,%mc:类似于%md(字符型数据与整型数据通用) (2)举例: (见教材 P69) 2)输入字符 char a,b,c; scanf(&%c%c%c&,&a,&b,&c); 说明: ? 当使用 scanf 函数输入,格式说明中%c 一个紧挨一个时,输入字符时不应有间隔 符,这时空格、回车符和跳格符都将作为字符输入。 ? 当交叉输入数据和字符数据时, 即在输入列表中交替出现字符变量和数值变量, 由 于它们从终端读取数据的方式不同,不注意就会出现错误。 2、调用 puchar 和 getchar 函数输出和输入 (1) putchar 函数用来输出字符,调用形式为: putchar(ch); 其中 ch 可以是字符变量或是字符常量。 如:putchar(?A?); (2) getchar 函数用来输入字符,调用形式为: ch=getchar(); 表示从终端读入一个字符并赋给变量 ch,输入时空格、回车符都作为字符输入, 只有读入 enter 时,读入才开始执行。三、解决任务,学生实践 体验转义字符的使用 四、针对难点,重点突破 ◆ ?1?与 1、?a?与”a”的区别; ◆ 单引号、双引号必须是英文状态下的符号。 五、拓展任务,学生实践 (一)写如下程序的执行结果 main() {printf(“ ab c\t de\rf\tg\n”); Printf(“h\ti\b\bj k”);} (二)将“China”译成密码,密码规律是:用原来字母后面第 4 个字母代替原来的字 母。如“A”就用“E”代替,因此, “China”应译成“Glmre” ,编程实现。 六、检查任务,评价学生 【教学课题】 程序举例 【目的要求】 输入和输出函数及使用,字符数据的编程应用。 【教学重点】 字符数据的编程应用。 【教学难点】 转义字符及字符函数的应用。 【教学方法】 任务驱动法,问题引导法 【教学手段】 讲授+多媒体演示+学生动手一、提出任务,引入课题 对于程序中如何输入字符及字符如何输出,字符数据如何进行编程处理? 二、分析任务,讲授新课 例 1、以下程序把从终端读入的一行字符中所有的小写字母转换成大写字母,其它字符 不变 程序如下: #include &stdio.h& main() { while((c=getchar())!='\n') {if(c&='a' && c&='z') putchar(c); c=c-'a'+'A'; } putchar('\n'); } 例 2、 编写程序统计输入的字符中空格符、换行符和横向跳格(制表)符的个数,用! 结束输入。 #include &stdio.h& #include &ctype.h& main() { long n=0; while((ch=getchar())!='!') if(isspace(ch)) n++; printf(&n=%ld&,n); }例 3 把一串密码译成正文,密码以字符@结束。译码规则如下: (1)如果是字母,转换成字母序列的下一个字母。如 A 译成 B (2)如果是字母 Z 译成 A (3)无论是大写小写字母都译成小写字母 (4)其它字符一律按原样译出。 #include &stdio.h& #include &ctype.h& main() { c=getchar(); while(c!='@') {if(isalpha(c)) {c=tolower(c); c=(c-'a'+1)%26+'a'; } putchar(c); c=getchar(); } printf(&\n&); }三、解决任务,学生实践 上机实验例 6-1 程序 四、针对难点,重点突破 五、拓展任务,学生实践 编写程序统计输入的行数,用!号结束输入, !号所在的行不计入行数 六、检查任务,评价学生 【教学课题】 函数的定义 【目的要求】 了解库函数的功能,掌握库函数的调用;掌握函数的定义、函数参数的类型及功能、 函数返回值的传递方法。 【教学重点】 库函数的调用方法;函数的定义及其在实际编程中的应用;函数参数的类型及其功能; 函数返回值的传递方法。 【教学难点】 函数参数的类型以及参数及返回值传递的方法,并在实际编程中的

我要回帖

更多关于 python else错误 的文章

 

随机推荐