1、C 语言程序设计教 案总课时数: 114 适用专业:计算机应用技术、计算机网络系(部)名称: 软件工程系 教研室名称: 修订时间: 1授课日期:第 1 周 周一 58 周三 12 第 2 周 周一 58 周三 12授课类型:演示、讲解、练习、辅导 课时:12教学内容:1、C 语言的历史和特色2、C 程序结构3、C 程序的开发过程 教学目标:1、了解 C 语言的产生过程2、掌握 C 程序结构3、掌握 C 程序开发过程4、掌握用 Turboc C 运行一个 C 程序教学重点:1、掌握 C 程序的基本结构构成2、学会用 Turbo C 运行一个 C 程序教学难点:掌握 C 程序的开发过程教学过程:内
2、容讲授 学生实践 作业布置 新课内容预告教学手段:多媒体教学软件 + 个别辅导作 业: 2第 1 章 C 语言概述C 语言是国际上广泛流行的一门高级程序设计语言,具有语言简洁、使用方便灵活、移植性好、能直接对系统硬件和外围接口进行控制等特点。本章将简要地介绍它的产生过程和特点、C 程序结构及 C 程序的上机步骤,以便对 C 语言有一个概括的认识。1.1 C 语言的历史和特色一、历史1. 1960 年出现了 ALGOL 60。2. 1963 年和 1967 年, 在 ALGOL 60 的基础上推出了 CPL 和 BCPL 语言更接近于硬件。3. 1970 年美国贝尔实验室对 BCPL 语言做了进
3、一步简化,设计了 B 语言,并用 B语言编写了第一个 UNIX 操作系统。4. 在 1972 年至 1973 年间,贝尔实验室的 D.M.Ritchie 在 B 语言的基础上设计出C 语言。二、特色1. 简洁紧凑,使用方便灵活C 语言一共只有 32 个关键字、9 种控制语句,程序书写自由,压缩了一切不必要的成分,语言简练。2. 运算符丰富C 语言有 34 种运算符和 15 个等级的运算优先顺序,使表达式类型多样化,可以实现在其它语言中难以实现的运算。3. 数据类型丰富C 语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、联合体类型及枚举类型等,能用来实现各种复杂的数据结构的运
4、算。4. 模块化结构C 语言用函数作为程序的模块单位,便于实现程序的模块化,而且便于模块间相互调用及传递数据。5. 语法限制少和程序设计自由度大C 语言允许程序编写者有较大的自由度,放宽了以往高级语言严格的语法检查,较好地处理了“限制”与“灵活”这一对矛盾。36. 比较接近硬件C 语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。7. 生成目标代码质量高、程序执行效率高一般只比汇编程序生成的目标代码效率低 1020。8. 可移植性好基本上不做修改就能用于各种型号的计算机和各种操作系统。1.2 C 程序结构下面列出几个简单的 C 程序来说明 C 程序的结
5、构特征。例 1.1 输出一行信息。main ( )printf (“This is first C programme! n“);该程序的作用是输出一行信息:This is first C programme!main 表示“主函数”;函数体用大括号括起来。本例题中主函数仅包含一个语句,该语句由 printf ()输出函数构成。括号内双引号中的字符串按原样输出;n是换行符,即在输出“ This is first C programme! “后回车换行;语句后面有一个分号,表示该语句结束,这个分号必不可少。例 1.2 计算两个数之和。main ( ) /*求两个数之和*/int a ,b,sum
6、; /*定义 3 个整型变量*/a=123; /*以下 3 行为 C 语句*/b=321; sum=a+b;printf (“sum is %dn“,sum);该程序的作用是求两个整数 a 和 b 之和 sum ,并在屏幕上输出 sum。程序中,/*/表示注释部分,对编译和运行不起作用。第 3 行是变量说明,使用的 a、b 和4sum 为整型(int)变量。第 4 行是两个赋值语句,使 a 的值为 123,b 为 321。第 5 行使sum 的值为 a+b,第 6 行的%d 是输入输出的“格式说明” ,表示“十进制整数类型” ,printf 函数中括号内最右端的 sum 是要输出的变量,当然它
7、的值为 444。例 1.3 比较两个数的大小。main ( ) /*主函数,功能输入两个整数,判断后输出较大的数*/int a ,b,c; /*定义 3 个整型变量*/scanf (“%d,%d“,7然后执行“File/save”命令;或按“F2”键存盘。(2)编译与连接源程序。执行“compile/make exe file”命令或直接按下 F9 键,即可一次完成编译与连接。(3)运行程序。按“F10”键返回主菜单,用光标移动键将亮条移到“Run”菜单选项回车或按下“Ctrl+F9”键,即可运行刚生成的可执行文件。此时 Turbo C 工作窗口消失,屏幕上显示程序运行结果:This is m
8、y first C program若发现运行结果不对,可再按“F10”键回工作窗口,重复上述步骤。(4)运行程序后查看程序的运行结果。(5)退出 Turbo C,按“Alt+X”键,系统即退出 Turbo 环境。本章小结本章对 C 语言进行了总体介绍,对学生的要求是掌握基本概念,学习的过程要紧密结合本章的知识要点:1. 程序的构成,main ()函数和其他函数。2. 头文件、数据说明、函数的开始和结束标志。3. 源程序的书写格式。4. C 语言的风格。8授课日期:第 3 周 周三 12 第 4 周 周一 58 周三 12第 5 周 周一 58 周三 12 授课类型:演示、讲解、练习、辅导 课时
9、:14 教学内容:1、常量和变量2、整型数据3、实型数据4、字符型数据5、变量的初始化6、运算符和表达式教学目标:1、掌握常量与变量的书写和定义2、掌握三种基本数据类型3、掌握运算符和表达式的使用4、掌握顺序结构程序设计的方法教学重点:1、三种基本数据类型的定义和使用2、各种运算符的使用教学难点:1、运算符的使用2、使用顺序结构编程教学过程:内容讲授 学生实践 作业布置 新课内容预告9教学手段:多媒体教学软件 + 个别辅导作 业:1、编程序,用 getchar 函数读入两个字符给 c1、c2,然后分别用 putchar 函数和 printf 函数输出这两个字符。上机运行此程序,比较 putch
10、ar 和 printf 函数输出字符的特点。2、试编写程序,从键盘输入一个大写字母,要求改用小写字母输出。10第 2 章 顺序结构程序设计顺序结构是一组按书写顺序执行的语句。本章将主要介绍程序中用到的一些基本要素(常量、变量、运算符、表达式和输入输出语句等) ,以及基本的数据类型(整型、实型和字符型) 。2.1 常量和变量一、常量1. 常量:在程序运行的过程中,其值不能被改变的量。如 2、4、-1.6 等。2. 分类:普通常量和符号常量。3. 符号常量:用一个标识符代表一个常量,这样的标识符称为符号常量。如用 PI代表 3.1415926。4. 注意:符号常量的值在其作用域内不能改变,也不能再
11、被赋值。如在程序中,对 PI 重新赋值: PI2;这样是不允许的。二、变量1. 变量C 语言规定在程序运行的过程中,其值可以改变的量,称为变量。2. 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名和文件名的有效字符序列。3. C 语言规定:标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。一般变量名的长度不能超过 8 个字符。如下面是合法的标识符,也是合法的变量名:sum,average,day,month,student,_above,k_1_2_3,basic;下面是不合法的标识符和变量名:M.D.John,$123,#33,3D64,a,-ab。在
12、C 语言中,要求对所有用到的变量作强制定义,也就是先定义,后使用。2.2 整型数据一、 整型常量C 语言整型常数可用以下三种形式表示:1. 十进制整数:数码直接开头的十进制数。2. 八进制整数:以 0 开头的常量是八进制数。113. 十六进制整数:以 0x 开头的数是 16 进制数。二、整型变量1. 整型变量的分类整型变量可分为:基本型、短整型、长整型和无符号型四种,其定义的关键字如下:(1)基本型,以 int 表示。范围为-3276832767,即-215(215-1) 。(2)短整型,以 short int 或 short 表示。范围与基本型相同。(3)长整型,以 long int 或 l
13、ong 表示。若一个整型常量后面加上一个字母 l 或L,则认为是 long int 型常量。范围为-2147483648214783647 即-231(231-1)(4)无符号型,在实际应用中变量的值常常是正的,如年龄、工资、成绩等,因此可以将变量定义为无符号类型。无符号型又分为: 无符号整型,以 unsigned int 或 unsigned 表示。 范围:065535, 即0(216-1) 。 无符号短整型,以 unsigned short 表示。范围:065535 即 0(216-1) 。 无符号长整型,以 unsigned long 表示。范围:04294967295 即 0(232-
14、1) 。2. 整型变量的定义变量的定义格式为:数据类型 变量表列;其中若定义多个同类型的变量,则用逗号分开。例: int a,b;(指定变量 a,b 为整型) unsigned short c,d;(指定变量 c,d 为无符号短整型)long e,f;(指定变量 e,f 为长整型)3. 整型数据的输入整型变量键盘输入,是通过 scanf 函数实现的,scanf 函数是数据输入函数,格式为:scanf (格式控制,地址表列);例如:scanf (dd,long s;13scanf(%d,sa*a;printf(sldn,s); 2.3 实型数据一、实型常量实数在 C 语言中,又称浮点数。实数有两
15、种表示形式:1. 十进制数形式。由数字和小数点组成(注意必须有小数点) 。2. 指数形式。但注意字母 e(或 E)之前必须有数字,且 e 后面指数必须为整数,如 e3、2.1e3.5、.e3、e 都不是合法的指数形式。二、实型变量在本节问题中,已知两个数是实数,那么两数之和与积也必定为实数,所以需要设四个实型变量,分别为 a,b,sum,mul。定义语句为:float a,b,sum,mul; C 实型变量分为:1. 单精度型(float 型) 一个 float 型数据在内存中占 4 个字节(32 位) ,在 TURBO C 中,单精度实数的范围约为10381038 之间并提供 7 位有效位;
16、小于 10-38 的数被处理成零值。2. 双精度型(double 型) 一个 double 型数据在内存中占 8 个字节,双精度实数的数值范围约为1030810308。并提供 1516 位有效位,具体精确多少位与机器有关;小于 10-308的数被处理成零值。三、 实型数据的输入和输出1. 实型数据的输入实型数据的输入也用 scanf 函数实现的,格式符使用的是 f 字符,以小数的形式输入数据,也可以使用 e 字符,以指数的形式输入数据。如本节问题中的 scanf(%f%f,;c2b;因此在内存中一个字符变量只占一个字节。三、字符数据的存储形式15字符在内存中存储的不是字符本身,而是它的 ASC
17、II 码,例如字符a的 ASCII 码为 97,b的 ASCII 码为 98。那么字符的存储形式与整数的存储形式是类似的。C 语言使字符型数据和整型数据是通用的。例 2.3 main ( )char a1,a2;a197;a298;printf (%c %cn,a1,a2);printf (%d %dn,a1,a2);程序运行时输出如下:a b97 98字符型数据和整型数据是通用的,但应该注意字符数据只占一个字节,它只能存放 0255 范围内的整数。例 2.4 大小写字母的转换main ( ) char a1,a2;a1a;a2b;a1a132;a2a232;printf (%c %cn,a1
18、,a2);运行结果为:A B程序的作用是将两个小写字母 a 和 b 转换成大写字母和。a的 ASCII 码为97,而A为 65,b为 98, B为 66。从 ASCII 码表中可以看到每一个小写字母比它相应的大写字母的 ASCII 码大 32。 四、字符型数据的输入和输出1. getchar 函数和 putchar 函数例 2.5 #include stdio.h16main ( ) char c;cgetchar ( );putchar (c);在运行时,如果从键盘输入字符aa (输入a后,按回车键)a (输出变量 c 的值a)注意:getchar ( )只能接收一个字符。putchar (
19、 )也只能向终端输出一个字符。在使用 getchar 函数和 putchar 函数时,程序的首部需使用预编译命令#include stdio.h。2. scanf 函数和 printf 函数 例 2.6 main ( )char c1,c2;scanf (%c%c,若输入 aVbVc则将字符a送给 c1,字符空格V送给 c2,因为空格也是一个有效字符,字符b送给 c3。%c 只需要读入一个字符,用了空格做间隔,所以会出现这样的问题。五、字符串常量字符串常量是用双引号括住的字符序列。如: How do you do,CHINA,a等都是字符串常 量。17可以输出一个字符串,如 printf (H
20、ow do you do.);注意: 不要将字符常量与字符串常量混淆。a是字符常量,a是字符串常量,二者不同。C 规定:在每个字符串的结尾加一个“字符串结束标志”以便系统据此判断字符串是否结束。以0作为字符串结束标志。0是 ASCII 码为 0 的字符,从 ASCII 码表中可以看到 ASCII 码为 0 的字符是“空操作字符”不引起任何操作。2.5 变量的初始化变量的初始化,就是在定义变量的同时给变量赋予初值。可以采用说明变量的类型,然后再赋值的方法,也可以对变量类型说明的同时,给变量赋初值。1. 先定义后赋值int a,b,c;a2;b5;c10;2. 定义和赋值同时进行int a5;sh
21、ort b10;char ca;float d7.8;3. 对几个变量同时赋一个初值int a110,a210,a310;不可以写成: int a1a2a310;但是也可以写成: int a1,a2,a3;a1a2a310;初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋以初值的。相当于一个赋值语句。例如:int a10; 相当于: int a;a10;又如:int a,b,c20; 相当于: int a,b,c;c20;182.6 运算符和表达式一、算术运算符和表达式例 2.7 已知正方形的长和宽,求正方形的周长。分析 正方形的周长公式为:l2*(a+b) ,已知正方形的长和宽可以
22、计算周长。main ( )int a,b,l;a3;b4;l2*(a+b);printf (l%dn,l);1. 基本的算术运算符 (加法运算符,或正值运算符) (减法运算符,或负值运算符)* (乘法运算符)/ (除法运算符)% (模运算符,或求余运算符)注意:(1)两个整数相除结果为整数。但是如果相除的两个数中,至少有一个为实数,则结果为带小数的商。(2)% 模运算符,要求操作数均为整型数据,如 7%4 的值为 3。2. 算术表达式用算术运算符和括号将操作数连接起来的,符合 C 语法规则的式子,称 C 算术表达式。在表达式求值时,按运算符的优先级别高低次序执行。 例如: 10+a+1.587
23、65.12*b在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。 3. 强制类型转换可以用强制类型转换运算符将一个表达式转换成所需类型。例如:19(double)a (将 a 转换成 double 类型)(int) (x+y) (将 x+y 的值转换成整型)(float) (5%3) (将 5%3 的值转换成 float 型)一般形式为: (类型名) (表达式)注意:(1)类型名应用括号括起来。如(int) (x+y)(2)已知 float x; 对于(int)x,x 仍然是 float 类型,而整个表达式(int)x为整型。二、赋值运算符和赋值表达式1. 赋值符号赋值符号就是赋值
24、运算符,将一个数据赋给一个变量。如a3。2. 类型转换如果赋值运算符两侧的类型不一致,要进行类型转换。(1)将实型数据赋给整型变量时,舍弃实数的小数部分。如 i 为整型变量,执行i3.56的结果是使 i 的值为 3。(2)将整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中。3. 复合的赋值运算符常用的赋值运算符有以下几种:,*,/,%例如:a3 等价于 aa3x*y8 等价于 xx*(y8)x3 等价于 xx%34. 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。例如:abc5 (赋值表达式值为 5,a、b、c 值均为 5)a5+(c6) (表达式值为
25、11,a 值为 11,c 的值为 6)a(b4)+(c6) (表达式值为 10,a 值为 10,b 等于 4,c 等于 6)三、逗号运算符和逗号表达式逗号运算符将两个表达式连接起来。 如:203+5,6+8称为逗号表达式。逗号表达式的格式为:表达式 1,表达式 2逗号表达式的求解过程是:先求解表达式 1,再求解表达式 2,整个逗号表达式的值是表达式 2 的值。例如逗号表达式 a3*5,a*4 ,先求解 a3*5,得 a 的值为 15,然后求解 a*4,得 60。整个逗号表达式的值为 60。课堂练习综合实例例 1 输入三角形的三条边长,求三角形面积。 (为了简单起见,设输入的三边长 a,b,c
26、能构成三角形)#include math.hmain ( )float a,b,c,s,area;scanf (%f,%f,%f,程序运行结果:m=10说明 在该问题中我们借用了 if 语句,通过条件来判断应该执行哪条语句,充分体现出选择结构程序设计的思想。二、if 语句的三种形式1. if 语句if 语句是条件分支语句最基本的形式。格式:if (表达式) 语句功能:首先计算表达式的值,若表达式的值为“真” (非 0) ,则执行语句,若表达式的值为“假” (0) ,不执行语句。其流程图 3.1(a)所示。例如:if (xy) printf (“%d“,x); 2. if-else 语句if-e
27、lse 语句是条件分支语句的标准使用形式。格式:if (表达式) 语句 1else 语句 2功能:首先计算表达式的值,若表达式的值为“真” (非 0) ,则执行语句 1,若表达式的值为“假” (0) ,则执行语句 2。例如:if (xy) printf (“%d“,x);28else printf (“%d“,y); 3. if-else-if 语句前面两种 if 语句一般都用于两个分支的选择结构。对于多个分支选择时,可采用if-else-if 语句。格式:if (表达式 1) 语句 1else if (表达式 2) 语句 2else if (表达式 3) 语句 3else if (表达式 n
28、-1) 语句 n-1else 语句 n功能:首先计算表达式 1 的值,若为“真” (非 0) ,执行语句 1,否则进行下一步判断;若表达式 2 为真,执行语句 2,否则进行下一步判断最后所有表达式都为假时,执行语句 n。 例如:if (score89) grade=A;else if (score79) grade=B;else if (score69) grade=C;else if (score59) grade=D;else grade=E;关于 if 语句的说明:(1)if 后面圆括号中的表达式一般是关系表达式或逻辑表达式,用于描述选择结构的条件,但也可以是任意的数值类型表达式(包括整
29、型、实型、字符型、指针型数据表达式) 。 例如: if (2) printf (“OK!“);是合法的,因为表达式的值为 2,非 0,按“真”处理,执行结果输出“OK!”(2)第二种、第三种格式的 if 语句中,在每个 else 前面有一个分号,整个语句结束处也有一个分号。这是由于分号是 C 语句中不可缺少的部分,这个分号是 if 语句中的内嵌语句所需要的。(3)在 if 和 else 后面可以只含有一个内嵌的操作语句,也可以含有多个操作语句,此时应用大括号“ ”将几个语句括29起来,构成一个复合语句,注意:复合语句的“”和“”之后不能加分号。例 3.2 输入两个实数,按代数值由小到大输出这两
30、个数。main ( )float a,b,c;scanf (“%f,%f“,&a,&b);if (ab)t=a;a=b;b=t;printf (“%5.2f,%5.2f“,a,b);程序运行结果:2.2,-5.7-5.70,2.20二、if 语句的嵌套在 if 语句中有包含一个或多个 if 语句称为 if 语句的嵌套。要处理多重分支选择结构问题,除了用 if-else-if 语句外,还可以利用 if 语句的嵌套来实现。说明:(1)if 和 else 的配对规则为:else 总是与它上面的最近的未配对的 if配对。(2)if 与 else 的个数最好相同,从内层到外层一一对应,以避免出错。(3)在嵌套内的 if 语句既可以是 if 语句形式,也可以是 if-else 语句形式,但最好使内嵌 if 语句也包含 else 部分。如果 if 与 else 的个数不同,可以用花括号来确定配对关系。例如:if ( ) if ( ) 语句 1 else 语句 2这时“ ”限定了内嵌 if 语句的使用范围,因此 else 与第一个 if 配对。例 3.3 有一函数:-1 (x0)y= 0 (x=0)