《C语言》教案_第1页
《C语言》教案_第2页
《C语言》教案_第3页
《C语言》教案_第4页
《C语言》教案_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

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

文档简介

1、c语言程序设计总课时数:64+32计算机科学与技术学院名称v徐乾20xx年10月修订时间20xx 级4班授课日期:周一 3、4 周三7、8 周五5、6授课类型:演示、讲解、练习、辅导课时:64教 材:高级语言程序设计(c语言描述第二版)c程序设计.第四版教学过程:内容讲授 一学生实践一作业布置一新课内容预告教学手段:整体授课+多媒体教学软件+个别辅导+作业第 1 章 c 语言概述c 语言是国际上广泛流行的一门高级程序设计语言, 具有语言简洁、 使用方便灵活、移植性好、能直接对系统硬件和外围接口进行控制等特点。本章将简要地介绍它的产生过程和特点、c程序结构及c程序的上机步骤,以便对 c语言有一个

2、概括的认识。1.1 c 语言的历史和特色一、历史1. 1960 年出现了 algol 60。2. 1963年和1967年,在algol 60勺基础上推出了 cpl和bcpl语言更接近于硬 件。3.1970年美国贝尔实验室对 bcpl语言做了进一步简化,设计了b语言,并用b语言编写了第一个unix操作系统。4.在1972年至1973年间,贝尔实验室的d.m.ritchie在b语言的基础上设计出 c 语言。二、特色1. 简洁紧凑,使用方便灵活c 语言一共只有32 个关键字、 9 种控制语句,程序书写自由,压缩了一切不必要的成分,语言简练。2. 运算符丰富c语言有34种运算符和15个等级的运算优先顺

3、序,使表达式类型多样化,可以实 现在其它语言中难以实现的运算。3. 数据类型丰富c 语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、联合体类型及枚举类型等,能用来实现各种复杂的数据结构的运算。4. 模块化结构c 语言用函数作为程序的模块单位,便于实现程序的模块化,而且便于模块间相互调用及传递数据。5. 语法限制少和程序设计自由度大c 语言允许程序编写者有较大的自由度,放宽了以往高级语言严格的语法检查,较好地处理了“限制”与“灵活”这一对矛盾。6. 比较接近硬件c 语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。7. 生成目标代码质

4、量高、程序执行效率高一般只比汇编程序生成的目标代码效率低10 % 20 %。8. 可移植性好基本上不做修改就能用于各种型号的计算机和各种操作系统。1.2 c 程序结构下面列出几个简单的c程序来说明c程序的结构特征 例 1.1 输出一行信息。main ( )printf (this is first c programme! n);该程序的作用是输出一行信息: this is first c programme!main 表示“主函数” ;函数体用大括号 括起来。本例题中主函数仅包含一个语句,该语句由 printf () 输出函数构成。括号内双引号中的字符串按原样输出;n是换行符,即在输出thi

5、s is first c programme! 后回车换行;语句后面有一个分号,表示该语句结束,这个分号 必不可少。例 1.2 计算两个数之和。求两个数之和*/定义 3 个整型变量*/以下3行为c语句*/main ( )/*int a ,b,sum ;/*a=123;/*b=321;sum=a+b;printf (sum is %dn,sum)该程序的作用是求两个整数a 和 b 之和 sum , 并在屏幕上输出 sum 。程序中,/*/表示注释部分,对编译和运行不起作用。第 3行是变量说明,使用的a、b和 sum为整型(int)变量。第4行是两个赋值语句,使a的值为123, b为321。第5行

6、使 sum的值为a+b,第6行的d是输入输出的“格式说明”,表示“十进制整数类型,printf 函数中括号内最右端的sum是要输出的变量,当然它的值为 444。例 1.3 比较两个数的大小。main ( ) /* 主函数,功能输入两个整数,判断后输出较大的数*/int a ,b,c ;/*定义 3 个整型变量*/scanf (%d,%d,&a,&b) ;/* 输入变量 a 和 b 的值 */c=max(a,b) ;printf (max= %dn,c);/* 输出 c 的值 */int max (int x,int y)/* 定义max() 函数,函数值为整型,x,y 为形式参数、整形变量*/

7、int z ;/* 定义 main () 函数内部用到的变量z 为整数 */if (xy)z=x ;/* 将 x,y 中较大的值赋给z*/elsez=y;return (z);/* 将 z 值返回。通过max() 函数带回调用处*/该程序的作用是从键盘输入两个整数,然后在屏幕上输出它们中较大值的数。程序的第5行是调用max()函数,在调用过程中将实际参数 a和b的值,分别传递 给max()函数中的形式参数x和y,然后得到一个返回值(z的值),并把这个值赋给变 量 c。运行情况如下:max=8从以上几个例题,可以看到c程序的结构特征。1. c 程序是由函数构成的。一个 c 程序至少有一个main

8、 () 函数,也可以包含一个main () 函数和若干个其它函数。2. 一个函数有两部分构成。函数说明部分,即函数的第一行,包括函数类型、函数名、形参类型、形参名。函数体,由一对大括号 括起来的语句集合。函数体一般包括有声明部分和执行部分,声明部分用于定义所用到的变量,执行部分由若干语句组成。3. 一个c程序总是从main ()函数开始执行,而不管 main ()在源程序中的位置, 执行完主函数中的所有语句后,程序就结束。4. 每个语句和变量定义的最后必须要有一个分号,分号是c语句的必要组成部分。5. c 语言本身没有提供输入和输出语句,输入输出操作是通过库函数scanf () 、printf

9、 () 等函数来实现的。6. c语言用/*/对程序进行注释,/和*之间不允许留有空格,/*和*/应当一一 对应匹配,注释部分允许出现在程序中的任何位置上。程序中加一些注释,可以增加程序的可读性。1.3 c 程序的开发过程用c语句编写的程序称为“源程序”o1. c 程序开发的 4个基本步骤一般c程序开发要经历4个基本步骤:编辑一一编译一一连接一一运行( 1)编辑使用字处理软件或编辑工具将源程序以文本文件形式保存到磁盘, 源程序文件名由用户自己选定,但扩展名必须为 .c 。( 2)编译编译的功能就是调用“编译程序” ,将已编辑好的源程序翻译成二进制的目标代码。如果源程序没有语法错误将产生一个与源程

10、序同名,以 .obj 为扩展名的目标程序。( 3)连接编译后产生的目标程序往往形成多个模块,还要和库函数进行连接才能运行,连接过程是使用系统提供的“连接程序”运行的。连接后,产生以程序。.exe 为扩展名的可执行( 4)运行可执行程序生成后, 就可以在操作系统的支持下运行, 若执行结果达到预期的目的, 则开发工作到此完成,否则,要进一步地经过以上过程以取得最终的正确结果。2. 使用 turbo c 开发程序的方法现在,多数的c程序开发使用一个集成turbo c开发工具来完成。下面简单介绍使 用 turbo c 开发程序的方法。( 1) turbo c 的目录及文件turbo c应装入磁盘的某一

11、目录下,例如,放在 c盘的根目录下一级tc子目录下, turbo c 安装完成后,磁盘上将增加以下目录及文件:tc子目录(c: tc ):其中包括tc.exe、tcc.exe、make.exe等执行文件。include?目录(c:tcinclude):其中包括 stdio.h 、string.h 、math.h 等头文件。lib 子目录(c:tclib) :其中包括graphlics.lib、 math.lib 、 math1.lib 等库函数文件。bgi 子目录(c:tc|bgi) :其中包括tc 运行时所需的信息。通过执行tc.exe命令就可以进入turbo c环境,如果用户的当前目录是t

12、urbo c所 在的子目录tc ,则只需从键盘输入“ tc ”命令即可。c:tctc /( 2) turbo c 集成环境作简单介绍,它包括以下几个方面的内容:主菜单窗口编辑窗口信息窗口功能键提示行3.用turbo c运行第一个c程序下面介绍使用turbo c编辑和运行一个简单的c程序的操作步骤:( 1)编辑或修改源程序。在编辑窗口键入一下源程序:main ( )printf ( this is my first c program);然后执行“ file/save ”命令;或按“ f2”键存盘。( 2)编译与连接源程序。执行“ compile/make exe file ”命令或直接按下 f

13、9 键,即可一次完成编译与连接。( 3)运行程序。按“f10”键返回主菜单,用光标移动键将亮条移到“run”菜单选项回车或按下“ ctrl+f9 ”键,即可运行刚生成的可执行文件。此时turbo c 工作窗口消失,屏幕上显示程序运行结果:this is my first c program若发现运行结果不对,可再按“ f10”键回工作窗口,重复上述步骤。( 4)运行程序后查看程序的运行结果。( 5)退出turbo c, 按“ alt+x ”键,系统即退出 turbo 环境。本章小结本章对c语言进行了总体介绍,对学生的要求是掌握基本概念,学习的过程要紧密结合本章的知识要点:1. 程序的构成, m

14、ain () 函数和其他函数。2. 头文件、数据说明、函数的开始和结束标志。3. 源程序的书写格式。4. c 语言的风格。第 2 章 顺序结构程序设计顺序结构是一组按书写顺序执行的语句。 本章将主要介绍程序中用到的一些基本要素(常量、变量、运算符、表达式和输入输出语句等) ,以及基本的数据类型(整型、实型和字符型) 。2.1 常量和变量一、常量1. 常量:在程序运行的过程中,其值不能被改变的量。如2、 4、 -1.6 等。2. 分类:普通常量和符号常量。3. 符号常量:用一个标识符代表一个常量,这样的标识符称为符号常量。如用 pi 代表 3.1415926。4. 注意:符号常量的值在其作用域内

15、不能改变,也不能再被赋值。如在程序中,对pi重新赋值:pi =2;这样是不允许的。二、变量1. 变量c 语言规定在程序运行的过程中,其值可以改变的量,称为变量。2. 标识符:用来标识变量名、符号常量名、函数名、数组名、类型名和文件名的有效字符序列。3. c语言规定:标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。一般变量名的长度不能超过8 个字符。如下面是合法的标识符, 也是合法的变量名:sum, average , day, month, student ,_above, k_1_2_3, basic ;下面是不合法的标识符和变量名: m.d.john , $12

16、3, #33, 3d64, a, -ab 。在c语言中,要求对所有用到的变量作强制定义,也就是先定义,后使用。2.2 整型数据一、 整型常量c 语言整型常数可用以下三种形式表示:1. 十进制整数:数码直接开头的十进制数。2. 八进制整数:以 0 开头的常量是八进制数。3. 十六进制整数:以 0x 开头的数是16进制数。二、整型变量1. 整型变量的分类整型变量可分为: 基本型、 短整型、 长整型和无符号型四种, 其定义的关键字如下:(1)基本型,以int表示。范围为-3276832767,即-215(215-1)。( 2)短整型,以short int 或 short 表示。范围与基本型相同。(

17、3) 长整型,以 long int 或 long 表示。 若一个整型常量后面加上一个字母l 或 l,则认为是long int 型常量。范围为-2147483648214783647即-231(231-1)( 4)无符号型,在实际应用中变量的值常常是正的,如年龄、工资、成绩等,因此可以将变量定义为无符号类型。无符号型又分为: 无符号整型,以 unsigned int 或unsigned表示。 范围:065535,即0 ( 216-1 ) 。 无符号短整型,以 unsigned short 表示。范围:065535即0(216-1)。无符号长整型,以unsigned long表示。范围:04294

18、967295即0(232-1 )。2. 整型变量的定义变量的定义格式为:数据类型变量表列;其中若定义多个同类型的变量,则用逗号分开。例: int a,b ; (指定变量 a,b 为整型 )unsigned short c,d ; (指定变量 c,d 为无符号短整型)long e,f ; ( 指定变量 e,f 为长整型 )3. 整型数据的输入整型变量键盘输入,是通过scanf 函数实现的, scanf 函数是数据输入函数,格式为:scanf (格式控制,地址表列 ) ;例如:scanf ( %d%d ,&a,&b); 1) 格式控制是用双引号括起来的字符串,由 和格式字符组成,作用是将输入数据转

19、换为指定的格式输入。 2) 2) 格式字符,对于不同的数据用不同的格式字符。 d 格式符是用来输入十进制整数的。因为本节问题中变量a, b 是整型变量,所以输入时,用了 d 格式符。 3) &a,&b中的 &是地址运算符,&a是指a在内存中的地址。上面scanf函数的作用是:将a、 b 的值放到 a, b 在内存的地址单元中去。所以,在该问题中,若输入:3 5/则输出结果为 a +b = 84. 整型数据的输出整型数据的输出用printf函数来实现。如printf ( a+ b=%d , c);printf 函数的格式为:printf (格式控制,输出表列) ;( 1)格式控制和输入函数sca

20、nf 的格式控制基本一致。( 2)输出表列是需要输出的数据或表达式。( 3)在输出整型数据时,格式字符如下:d,按整型数据的实际长度输出。mdl m为输出字段的宽度,如果输出数据的位数小于 m则左端补以空格,若大 于m,则按实际位数输出。例如:printf ( %4d,%4dt ,a,b);若a=123, d=12345,则输出2果为:v123,12345 (注:v表示空格字符,下同) %ld ,输出长整型数据。如:long a =135790;printf ( %8ld ,a);输出结果为: vv135790一个int型数据可以用%或%的格式输出。%u,输出unsigned型数据,即无符号类

21、型,如unsigned u;那么u在输出的时候,应该用 u 格式控制符,那么输出时应使用语句:printf ( %u ,u);例 2.1 从键盘输入任意一个整数,输出这个数的平方的值。main( ) int a;long s;scanf( %d ,&a);s = a*a;printf( s = %ldn ,s);2.3 实型数据一、实型常量实数在c语言中,又称浮点数。实数有两种表示形式:1 . 十进制数形式。由数字和小数点组成(注意必须有小数点) 。2 .指数形式。但注意字母e (或e)之前必须有数字,且e后面指数必须为整数, 如e3、2.1e3.5、.e3、e都不是合法的指数形式。二、实型变

22、量在本节问题中,已知两个数是实数,那么两数之和与积也必定为实数,所以需要设四个实型变量,分别为 a,b,sum,mul 。定义语句为:float a,b,sum,mul ;c 实型变量分为:1. 单精度型( float 型)一个float型数据在内存中占4个字节(32位),在turbo价,单精度实数的范 围约为10381038之间并提供7位有效位;小于10-38的数被处理成零值。2. 双精度型( double 型)一个double型数据在内存中占8个字节,双精度实数的数值范围约为一10308 10308。并提供1516位有效位,具体精确多少位与机器有关;小于 10-308的数被处 理成零值。三

23、、 实型数据的输入和输出1. 实型数据的输入实型数据的输入也用 scanf 函数实现的,格式符使用的是f 字符,以小数的形式输入数据,也可以使用 e 字符,以指数的形式输入数据。如本节问题中的scanf( %f%f,&a,&b);2. 实型数据的输出实型数据的输出用 printf 函数实现,格式符使用 f 字符,以小数的形式输出数据。输出时应注意:(1) %f:不指定字段宽度,整数部分会全部输出,并输出 6位小数。(2) %m.n指定输出数据共占m列,其中有n位小数。如果数值长度小于 则左 端补空格。(3) %- m.n:指定输出数据共占m列,其中有n位小数。如果数值长度小于 m,则 右端补空

24、格。( 4)若是双精度型变量输出时应用%lf 格式控制,如 double f ;输出时应使用语旬:printf ( %lf ,f);2.4 字符型数据一、字符常量1. 字符常量c语言的字符常量是用一对单引号括起来的单个字符。如:a、b、x、d、?、$等都是字符常量。2. 转义字符除了这样的字符常量外,c语言还允许用一种特殊形式的字符常量,就是以一个 开头的字符序歹九例如,前面已经用到,在printf 函数中的n ,它表示一个换行 符。例 2.2 字符常量的输出。main ( ) printf ( ab cntde );运行结果 : ab cde二、字符变量在本节问题中,设了两个字符型变量 cl

25、和c2。定义形式如下:char c1,c2 ;它表示 c1 和 c2 为字符型变量,各可以放一个字符。可以用下面语句对c1,c2 赋值:c1 = a ; ; c2= b;因此在内存中一个字符变量只占一个字节。三、字符数据的存储形式字符在内存中存储的不是字符本身,而是它的 ascii码,例如字符a的ascii码 为97, b的ascii码为98。那么字符的存储形式与整数的存储形式是类似的。c语言使字符型数据和整型数据是通用的。例 2.3 main ( )char a1,a2 ;al =97; a2=98;printf ( %c %cn ,a1,a2);printf ( %d %dn ,a1,a2

26、);程序运行时输出如下:a b 97 98字符型数据和整型数据是通用的,但应该注意字符数据只占一个字节,它只能存放0255范围内的整数。例 2.4 大小写字母的转换main ( )char a1,a2 ;al =,a ; a2=,b,;a1 = a1 32; a2=a2 32;printf ( %c %cn ,a1,a2);运行结果为:a b程序的作用是将两个小写字母 a和b转换成大写字母a和b。a的ascii码为97, 而a为65, b为98, b为66。从ascii码表中可以看到每一个小写字母比它相应的 大写字母的 ascii 码大 32。四、字符型数据的输入和输出1. getchar 函

27、数和 putchar 函数例 2.5 #include stdio.h main ( )char c ;getchar ( )putchar (c); 在运行时,如果从键盘输入字符a a/(输入a后,接回车键)a(输出变量c的值a)注意: getchar ( ) 只能接收一个字符。 putchar ( ) 也只能向终端输出一个字符。在使用getchar函数和putchar函数时,程序的首部需使用预编译命令#include stdio.h 。2. scanf 函数和 printf 函数例 2.6 main ( ) char c1,c2 ;scanf ( %c%c ,&c1,&c2);printf

28、 ( %c%c ,c1,c2);若输入为ab /则输出为 ab在使用scanf函数和printf函数输入输出字符型数据时,使用d格式控制,用来输入输出单个字符。注意,在用 c格式输入字符时,空格将以有效字符输入:scanf ( c%c%c,&c1,&c2,&c3);若输入avbvc /则将字符a送给c1,字符空格v送给c2,因为空格也是一个有效字符,字符b 送给c3。必需要读入一个字符,用了空格做间隔,所以会出现这样的问题。五、字符串常量字符串常量是用双引号括住的字符序列。如: how do you do, china , a等都是字符串常量。可以输出一个字符串,如 printf ( how

29、do you do.);注意:不要将字符常量与字符串常量混淆。a是字符常量, a是字符串常量, 二者不同。c 规定:在每个字符串的结尾加一个“字符串结束标志”以便系统据此判断字符串是否结束。以0 作为字符串结束标志。0 是ascii码为0的字符,从ascii码表中可以看到 ascii 码为 0 的字符是“空操作字符”不引起任何操作。2.5 变量的初始化变量的初始化, 就是在定义变量的同时给变量赋予初值。 可以采用说明变量的类型,然后再赋值的方法,也可以对变量类型说明的同时,给变量赋初值。1. 先定义后赋值int a,b,c ;a =2;b =5;c= 10;2. 定义和赋值同时进行int a

30、=5;short b =10;char c = a;float d =7.8;3. 对几个变量同时赋一个初值int a1 =10, a2=10, a3=10;不可以写成: int a1=a2 = a3=10;但是也可以写成: int a1 , a2, a3;a1=a2=a3= 10;初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋以初值的。相当于一个赋值语句。例如:int a =10;相当于:int a ; a=10;又如:int a,b,c =20; 相当于: int a,b,c ; c = 20;2.6 运算符和表达式一、算术运算符和表达式1. 2.7 已知正方形的长和宽,求正方

31、形的周长。分析正方形的周长公式为:l=2* (a+b),已知正方形的长和宽可以计算周长。main ( )int a,b,l ;a =3;b =4;l =2*(a+b);printf ( l=%dn ,l);2. 基本的算术运算符 (加法运算符,或正值运算符)(减法运算符,或负值运算符)*(乘法运算符)/(除法运算符)% (模运算符,或求余运算符)注意: ( 1)两个整数相除结果为整数。但是如果相除的两个数中,至少有一个为实数,则结果为带小数的商。( 2) % 模运算符,要求操作数均为整型数据,如7%4的值为3。3. 算术表达式用算术运算符和括号将操作数连接起来的,符合c语法规则的式子,称c算术

32、表达式。在表达式求值时,按运算符的优先级别高低次序执行。例如:10+ a +1.5 8765.12* b在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。4. 强制类型转换可以用强制类型转换运算符将一个表达式转换成所需类型。例如:( 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 仍然是

33、float 类型, 而整个表达式 (int)x为整型。二、赋值运算符和赋值表达式1. 赋值符号赋值符号=就是赋值运算符,将一个数据赋给一个变量。如 a = 3。2. 类型转换如果赋值运算符两侧的类型不一致,要进行类型转换。(1)将实型数据赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行 i = 3.56 的结果是使i的值为3。( 2)将整型数据赋给实型变量时,数值不变,但以浮点数形式存储到变量中。3. 复合的赋值运算符常用的赋值运算符有以下几种:+ = , = , * = , / =,险例如:a+ = 3 等价于a =a+3x*=y + 8 等价于 x =x* (y+8)x%=3 等价

34、于x =x%34. 赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。例如:a= b= c = 5a = 5+(c = 6)a= (b =4)+(c = 6)(赋值表达式值为5,a、 b、 c 值均为 5)(表达式值为 11,a 值为 11, c 的值为 6)10,a 值为 10, b 等于 4, c 等于6)三、逗号运算符和逗号表达式逗号运算符将两个表达式连接起来。如:3+5 , 6+8称为逗号表达式。逗号表达式的格式为:表达式 1,表达式 2逗号表达式的求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。例如逗号表达式a =3*5, a*4

35、,先求解a = 3*5,得a的值为15, 然后求解 a*4 ,得 60。整个逗号表达式的值为 60。课堂练习综合实例例 1 输入三角形的三条边长,求三角形面积。 (为了简单起见,设输入的三边长a,b,c 能构成三角形)#include math.hmain ( )float a,b,c,s,area ;scanf ( f,%f,%f,&a,&b,&c);s=1.0/2*(a+b+c);area = sqrt(s*(s-a)*(s-b)*(s-c);printf ( a=%7.2f, b =%7.2f, c =%7.2f, s =%7.2fn ,a,b,c,s);printf ( area =

36、%7.2fn ,area);运行情况如下:3, 4, 6a= 3.00, b = 4.00, c = 6.00, s = 6.50area = 5.33例 2 从键盘输入一个大写字母,要求改用小写字母输出。#include stdio.h main ( )char c1,c2 ;c1 = getchar ();printf ( %c,%dn ,c1,c1);c2 = c1+32;printf ( %c,%dn ,c2,c2);运行情况如下:a/a, 65a, 97本章小结本章在讲解顺序结构程序设计方法的同时,介绍了三种数据类型。1. 整型数据。主要了解整型数据的定义方法,根据使用整数的范围选用

37、定义整数变量的类型。掌握整型数据的输入输出方法,主要使用 d 格式控制符。2. 实型数据。主要掌握实型变量的不同定义方法,单精度数和双精度数的表示范围,实型数据的输入输出方法,主要使用 f 格式控制符。3. 字符型数据。是由一对单引号括起来的单个字符,要注意,字符与字符串的区别。还讲解了各种运算符和表达式,主要掌握算术运算符,在混合运算中,要按照运算符的优先级,结合方向运算。作业:1 .编程序,用getchar函数读入两个字符给cl、c2,然后分别用putchar函数和 printf 函数输出这两个字符。上机运行此程序,比较putchar 和 printf 函数输出字符的特点。2 . 试编写程

38、序,从键盘输入一个大写字母,要求改用小写字母输出。第 3 章 选择结构程序设计选择结构,或称分支结构,是指对所给定的条件进行判断,然后决定选择执行不同的操作。本章主要介绍如何用 c语言实现选择结构。c语言的选择语句有两类,一类是if 语句,另一类是switch 语句,本章将分别进行介绍。在介绍选择结构程序设计的同时,还要介绍关系运算符和关系表达式,逻辑运算符和逻辑表达式等内容。3.1 关系运算符和关系表达式一、关系运算符及其优先次序1. 关系运算符c 语言提供6 种关系运算符: (小于) (大于) =(大于或等于) = =(等于) != ( 不等于 )优先级相同(高)优先级相同(低)2. 关于

39、优先次序:(1)前4种关系运算符,=)的优先级别相同,后两种也相 同。前4种高于后2种。例如, 优先于=。而与b+c 等效于 a( b+c)a= =bc等效于a= = ( b=c等效于a=( b=c)4. 3)关系运算符的结合方向是“自左向右”。注意: “等于”关系的运算符“ = = ”和“不等于”关系的运算符“ != ”与数学中的表示方法不同。例如,欲判断x是否等于0,若写成:x=0则表示把0赋值给变量x,正确的写法为: x= =0二、关系表达式5. 关系表达式用关系运算符将两个表达式 (算术表达式、 关系表达式、 逻辑表达式、 赋值表达式、 字符表达式等)连接起来的式子,称关系表达式。例:

40、xy, a+b18, ab 的值为“真” ,表达式的值为 1。关系表达式a= =b 的值为“假” ,表达式的值为0。可以将关系表达式的运算结果(0 或 1)赋给一个整型变量或字符型变量, 如 a=4,b=1,下面的赋值语句是将1 赋给变量 c:c=ab c 的值为 1例 3.1 试求 x=531 的值。 分析 x=531 相当于 x=(53)1=11=0 说明 根据关系运算符的优先级别高于赋值运算符。3.2 逻辑运算符和逻辑表达式一、逻辑运算符及其优先次序1. 逻辑运算符c 语言提供了 3 种逻辑运算符:!逻辑非 &逻辑与i逻辑或其中“&和“ | ”为“双目(元)运算符”,要求有两个操作数(即

41、运算量),如 (ab)&(x=y),(ab)| (x=y)。!” 是“一目(元)运算符”,只需一个操作数,如!a或!(a=b)&(xy)可写成: a=b&xy(a= =b)(x= =y)可写成:a= =b x= =y( 3)逻辑运算的结合方向是“自左向右” 。二、 逻辑表达式1. 逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。例如:a&b*c,(a+b) i (cb 分析要比较两个数的大小就要用到关系表达式,定义两个变量则将 a 的值赋给m, 若 ab) m=a ;else m=b ;printf (m=%dn,m);程序运行结果:m=10 说明 在该问题中我们借用了

42、 if 语句,通过条件来判断应该执行哪条语句,充分体现出选择结构程序设计的思想。二、 if 语句的三种形式1. if 语句if 语句是条件分支语句最基本的形式。格式: if ( 表达式 ) 语句功能:首先计算表达式的值,若表达式的值为“真” (非0) ,则执行语句,若表达式的值为“假” (0) ,不执行语句。其流程图 3.1(a) 所示。例如:if (xy) printf (%d,x);2. if-else 语句if-else 语句是条件分支语句的标准使用形式。格式: if ( 表达式 ) 语句 1else 语句 2功能:首先计算表达式的值,若表达式的值为“真” (非 0) ,则执行语句 1,

43、若表达式的值为“假” ( 0) ,则执行语句2。例如:if (xy) printf (%d,x);else printf (%d,y);3. if-else-if 语句前面两种 if 语句一般都用于两个分支的选择结构。对于多个分支选择时,可采用if-else-if 语句。格式:if ( 表达式 1) 语句 1else if (表达式2) 语句2else if (表达式3) 语句31 1 ielse if (表达式n-1) 语句 n-1else 语句 n功能:首先计算表达式1 的值,若为“真” (非 0) ,执行语句 1,否则进行下一步判断;若表达式2为真,执行语句2,否则进行下一步判断最后所有

44、表达式都为假时,执行语句 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 后面圆括号中的表达式一般是关系表达式或逻辑表达式,用于描述选择结构的条件,但也可以是任意的数值类型表达式(包括整型、实型、字符型、指针型数据表达式) 。例如: if (2) printf (ok!);是合法的,因为表达式的值为2,非0,按“真”处理,执行结果输出“ok! ”( 2)第二种、第三种格式的if 语

45、句中,在每个else 前面有一个分号,整个语句结束处也有一个分号。这是由于分号是c 语句中不可缺少的部分,这个分号是 if 语句中的内嵌语句所需要的。( 3)在if 和 else 后面可以只含有一个内嵌的操作语句,也可以含有多个操作语句,此时应用大括号“ ”将几个语句括起来,构成一个复合语句,注意:复合语句的“”和“”之后不能加分号。例3.2输入两个实数,按代数值由小到大输出这两个数。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 /-

46、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这时“ ”限

47、定了内嵌if语句的使用范围,因此else与第一个if配对。 例3.3有一函数:-1(x0)编一程序,输入一个x值,输出y值。main ( )int x,y ;scanf (%d,&x);if (x0) y=-1;else if (x= =0) y=0;else y=1;printf (x=%d,y=%dn,x,y);三、条件运算符条件运算符由两个符号“?”和“: ”组成,要求有 3 个操作对象,称三目(元)运算符,它是c语言中唯一的三目运算符。条件表达式的格式为:表达式 1?表达式2:表达式3min=(ab)?printf (%d,a):printf (%d,b)等均为合法的条件表达式。( 2

48、)条件表达式的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式 2 的值就作为整个条件表达式的值。 若表达式 1 的值为0(假), 则求解表达式 3,表达式3 的值就是整个条件表达式的值。min=(ab)?a:b ;执行结果就是将a 和 b 二者中较小的赋给min。( 3)条件表达式的优先级别仅高于赋值运算符,而低于前面介绍过的所有运算符。因此,min=(ab)?a:b ;可直接写成:min=ab?a:b+1 等效于 ab?a:(b+1), 而不等效于 (ab?a:b)+1 4) 条件运算符的结合方向为“自右至左” 。例如: x0?1:x0?1:(x= a &ch=z )?(ch+32):ch ;printf (%c,ch);程序运行结果:please enter a charcter :a/a说明条件表达式中的(ch+32),其中32是小写字母和大写字母 asch码的差值。3.4 switch 语句一、问题的提出要求按照考试成绩的等级(grade)输出百分制分数段:键入a ,输出85100; 键入b,输出7084;键入c,输出6069;键入d,输出60;键入其他任意字 符,输出 error 。main ( )char grade ;scanf (%c,&grade);switch(grade)casea:printf (85100n) ;c

温馨提示

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

评论

0/150

提交评论