C语言程序设计多媒体课件完整版电子教案_第1页
C语言程序设计多媒体课件完整版电子教案_第2页
C语言程序设计多媒体课件完整版电子教案_第3页
C语言程序设计多媒体课件完整版电子教案_第4页
C语言程序设计多媒体课件完整版电子教案_第5页
已阅读5页,还剩366页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 数据类型、运算符与表达式C语言程序设计2本章主要内容2.1 基本字符、标识符和关键字2.2 数据类型与变量2.3 基本类型与数据表示2.4 运算符与表达式2.5 计算和类型32.1 基本字符、标识符和关键字 2.1.1 基本字符 一个C程序就是C语言基本字符的一个符合规定形式的序列。C语言的基本字符包括: (1)数字字符(0,1,2,3,4,5,6,7,8,9)。 (2)大小写英文字母(az,AZ)。 (3)其他一些可打印(可以显示)的字符(如各种标点符号、运算符号、括号等),包括: ! % & * ( ) _ - + = : ; “ , . ? / | (4)还有一些特殊字符(如空格

2、符、换行符、制表符等)。 空格符、换行符、制表符等统称为空白字符。空白字符在程序中主要用于分隔其他成分。按规定,C 程序中大部分地方增加空白字符都不影响程序的意义。因此用户写程序时常利用这种性质,通过加入一些空白字符,把程序排成适当的格式,以增强程序的可读性。 4例如:算术运算符:+ - * / % + -关系运算符: = 条件运算符: ?: 和赋值运算符:= 其他分隔符: ( ) . , ;2.1 基本字符、标识符和关键字5 2.1.2 名字(标识符)的构成 一个标识符是字母、数字字符和下划线的一个连续序列,其中不能有空白字符,而且要求第一个字符必须是字母或下划线。如果一个字符序列中出现了非

3、字母、数字、下划线的字符,那么它就不是一个标识符了。下面是一些非标识符的字符序列: += 3set a32 $ sin(2+5) :ab4= C语言还规定,标识符中同一字母的大写形式和小写形式将看作不同字符,这样,a和A不同,name、Name、NAME、naMe 和nMAE 是互不相同的标识符。 下面是一些标识符的例子: abcd Beijing C_Programming_f2048 sia a3b06 xt386ex A_great_machine Small_talk_80 FORTRAN_90 以下划线开始的标识符保留给系统使用,用户不要使用这种标识符,以免与系统内部的名字冲突造成程

4、序问题。2.1 基本字符、标识符和关键字6 2.1.3 关键字 所谓关键字就是已被Turbo C 2.0本身使用,不能作其他用途使用的名字。如关键字不能用做变量名、函数名等。Turbo C 2.0有以下关键字: (1)扩展的11个 asm _cs _ds _es _ss cdecl far near huge interrupt pascal (2)由ANSI标准定义的32个 auto double int struct break else long switch case enum register typedef char extern return union const float

5、short unsigned continue for signed void default goto sizeof volatile do if while static2.1 基本字符、标识符和关键字72.2 数据类型与变量 2.2.1 数据类型 字符型(char) 整型(short,int,long,unsigned) 基本类型 数值类型 单精度型(float) 实型 双精度型(double) 枚举类型(enum) 数据类型 数组类型( ) 构造类型 结构体类型(struct) 共用体类型(union) 指针类型(*) 空类型(void)8表2-1 ANSI标准中的数据类型及其范围类

6、型 长度(字节) 范 围char(字符型) 1ASC字符 unsigned char(无符号字符)10255signed char(有符号字符型)1-128127int(整型)2-32 76832 767unsigned int(无符号整型)2065 535 signed int(有符号整型)2同 intshort(短整型)1-128127unsigned short int(无符号短整型)10255signed short int(有符号短整型)1同short intlong int(长整型)4-2 147 483 6482 147 483 649signed long int(有符号长整型

7、)4-2 147 483 6482 147 483 649unsigned long int(无符号长整型)404 294 967 296float(单精度型)4提供7位有效数字double(双精度型)8提供16位有效数字double(长双精度型)10提供19位有效数字void(空值)0无值9 说明:表中的长度和范围的取值是在假定CPU的字长为16 bit的情况下。 注意: (1)程序中书写的、执行中处理的每个基本数据都属于某个确定的数据类型。 (2)类型确定了属于它的数据对象的许多性质,特别是确定了数据的表示范围。在具体的C语言系统中,每种类型都有确定的表示(编码)方式,这就确定了可能表示的

8、数据范围。例如,一个整数类型中的所有整数只是数学中整数的一个子集,其中只包含有限个整数值,存在该类型能表示的最小和最大整数。其他整数在这个类型中没有容身之地,无法在此类型中表示。2.2 数据类型与变量 10 2.2.2 变量 1变量说明。所谓变量,就是在程序运行中其值可以变化的量,从赋值的角度讲,它在不同时期可以赋予不同的值。 Turbo C 2.0规定所有变量在使用前都必须首先说明。一条变量说明语句由数据类型和其后的一个或多个变量名组成。变量说明的形式如下: 类型 ; 此处类型是指Turbo C 2.0的有效数据类型。变量表是一个或多个标识符名,每个标识符之间用“,”分隔。 例 2.1 in

9、t i,j,k; unsigned char c,str5,*p; float a,b; double x,y;2.2 数据类型与变量 11 2变量的初始化。变量的初始化是指变量在被说明的同时赋给的一个初值。Turbo C 2.0中外部变量和静态全局变量在程序开始处被初始化, 局部变量(包括静态局部变量)是在进入定义它们的函数或复合语句时才作初始化。所有全局变量在没有明确的初始化时将被自动清零,而局部变量和寄存器变量在未赋值前其值是不确定的。 对于外部变量和静态变量,初值必须是常数表达式,而自动变量和寄存器变量可以是任意的表达式,这个表达式可以包括常数和前面说明过的变量和函数。 2.2 数据类

10、型与变量 12例2.2float f0,f1=0.2; /*定义全局变量,在初始化时f0被清零,f1被赋0.2*/ main() static int i=10,j; /*定义静态局部变量,初始化时i被赋10,j不确定*/ int k=i*5; /*定义局部变量,初始化时k被赋10*5=50*/ char c=y; /*定义字符型变量并初始化*/ 2.2 数据类型与变量 13 3变量的赋值 变量赋值是给已说明的变量赋予一个特定值。 (1)整型变量和浮点型变量 这两种变量采用下列格式赋值: 变量名=表达式; 例2.3 main() int a,m; /*定义局部整型变量a,m*/ float n

11、; /*定义局部浮点变量f*/ a=100,m=20; /*给变量赋值*/ n=a*m*0.1; 说明:Turbo C 2.0中允许给多个变量赋同一值时用连等的方式。 2.2 数据类型与变量 14 (2)字符型变量 字符型变量可以用三种方法赋值。 例2.4 main() char a0,a1,a2; /*定义局部字符型变量a0,a1,a2*/ a0=b; /*将字母b赋给a0*/ a1=50; /*将数字2(十进制ASC值为50)赋给a1*/ a2=x0d; /*将回车符赋给a2*/ 2.2 数据类型与变量 15 2.3.1 整数类型和整数的表示 C语言提供了多个整数类型以适应不同需要。不同整

12、数类型间的差异在于它们可能具有不同的二进制编码位数,因此表示范围可能不同。程序中用得最多的是一般整数类型(简称为“整数类型”或“整型”)和长整数类型(简称为“长整型”)。整数类型的类型名是int;长整型的类型名为long int,可简写为long。int 和long 都是关键字。 1整数类型 整数(int 类型的数据)有几种书写形式,程序中的整数一般采用十进制写法。 (1)十进制数:用十进制方式写出的一个整数就是普通数字字符组成的一个连续序列,其中不能有空格、换行或其他字符。C 语言规定十进制表示的数字序列的第一个字符不是0,除非要写的整数本身就是0。 2.3 基本类型与数据表示 16 (2)

13、八进制数: 用八进制形式写出的整数是由数字0 开始的连续数字序列,在序列中只允许0-7这8个数字。下面是用八进制写法写出的一些整数和长整数: 0236 0527 06254 0531 0765432L (3)十六进制数:整数的十六进制形式是由0 x 或0X 开头的数字序列。由于数字只有10 个,而在十六进制写法中需要16 个数字,C语言采用计算机领域通行的方式,用字母a-f 或A-F 表示其余的6 个十六进制数字,其对应关系如下。 字母:a/A b/B c/C d/D E/E f/F 数字: 10 1 1 12 13 14 15 下面是用十六进制形式写出的一些整数和长整数: 0 x2073 0

14、 xA3B5 0XABCD 0XFFFF 0XF0F00000L2.3 基本类型与数据表示 17 2表示范围 C语言没有规定各种整数类型的表示范围,也就是说,没有规定各种整数的二进制编码长度。对于int 和long,只规定了long 类型的表示范围不小于int ,但也允许它们的表示范围相同。具体C语言系统则会对整型和长整型规定明确的表示方式和表示范围。例如,早期微型机的一些C系统采用16位二进制表示的整数(一个int 占2个字节)和32位表示的长整数(一个long占4个字节)。这样,整型的表示范围就是-32 76832767,即-215215-1。长整型表示范围是-2147483 648214

15、7483 647,即-231231-1。在许多新的微机C语言系统中,整数和长整数都采用32 位的二进制数表示。 C语言允许在整数的前面写正负号,加上负号的整数就表示负整数。 2.3 基本类型与数据表示 18 2.3.2 实数类型和实数的表示 1实数类型 C语言提供了三种表示实数的类型:单精度浮点数类型(简称浮点类型),类型名为float;双精度浮点数类型(简称双精度类型),类型名为double;长双精度类型,类型名为long double 。这些类型的数据也分别称做“浮点数”、“双精度数”和“长双精度数”。所有整数类型和实数类型统称为算术类型。 (1)浮点类型的数用4个字节32 位二进制表示。

16、这样表示的数大约有7 位十进制有效数字,数值的表示范围约为(3.410-383.41038 )。2.3 基本类型与数据表示 19(2)双精度类型的数用8个字节64 位二进制表示,这样表示的数大约有16 位十进制有效数字,数值的表示范围约为(1.710-308 1.710308 ) 。(3)长双精度类型的数用10个字节80位二进制表示,这样表示的数大约有19位十进制有效数字,其数值的表示范围约为(1.210-4932L 1.2104932 L)。对于浮点数也有类似情况。例如,在一些C 语言系统中,long double 采用与double 同样的表示方式。有关具体C 语言系统中浮点数表示的情况,

17、也应查阅系统手册,还可以查阅名为float.h 的标准文件。2.3 基本类型与数据表示 202实型常数表示C语言中最基本的实数类型是双精度类型。双精度数书写形式中的基本部分是一个数字序列,在序列中或者包含了一个表示小数点的圆点“.”(可以是第一个或最后一个字符),或者在表示数值的数字序列后面有一个指数部分。指数部分是以e 或E 开头的另一(可以包括正负号的)数字序列,指数以10为底,这种形式称为科学记数法。也可以既有小数点,又有指数部分。下面是一些双精度数的例子:3.2 3.2E-3 2.45e17 0.038 105.4E-10 304.24E82.3 基本类型与数据表示 21浮点数的写法与

18、双精度数类似,只是在数最后应附后缀字符f 或者F。表示长双精度数的后缀用l 和L。下面是一些浮点数类型和长双精度类型数的例子:13.2F 1.7853E-2F 24.68700f .32F 0.337f。12.869L 3.417E34L .05L 5.E88L 1.L。负实数同样通过在数前加负号表示。说明:(1)实型常数只有一种进制(十进制)。(2)所有实型常数都被默认为double。 (3)绝对值小于1的实型数,其小数点前面的零可以省略。如0.22可写为.22,0.0015E-3可写为-.0015E-3。(4)Turbo C默认格式输出实型数时,最多只保留小数点后6位。2.3 基本类型与数

19、据表示 222.3.3 字符类型和字符的表示字符类型数据主要用于程序的输入输出。此外,文字处理也是计算机的一个重要应用领域,该应用领域的应用程序必须能使用和处理字符形式的数据。由于大部分程序都需要与用户打交道,需要接收用户的输入信息(如用户给程序发的命令,或者提供的数据),还需要给用户输出信息,因此字符类型的数据在程序中的使用很广泛。1字符类型加上不同的修饰符,可以定义有符号和无符号两种类型的字符型变量。 char a: /*a被定义为有符号字符变量*/ unsigned char l; /*l被定义为无符号字符变量*/ 2.3 基本类型与数据表示 23 字符在计算机中是以其ASC码方式表示的

20、,其长度为1个字节,有符号字符型数的取值范围为-128-127,无符号字符型数的取值范围是0-255。因此在Turbo C语言中,字符型数据在操作时将按整型数处理,如果某个变量定义成char,则表明该变量是有符号的,即它将转换成有符号的整型数。 Turbo C中规定ASC码值大于0 x80的字符将被认为是负数。如ASC码值为0 x8c的字符,定义成char时,被转换成十六进制的整数0 xff8c。这是因为当ASC码值大于0 x80时,该字节的最高位为1,计算机会认为该数为负数,对于0 x8c表示的数实际上是-74(8c的各位取反再加1),而-74转换成两字节整型数并在计算机中表示时就是0 xf

21、f8c(对0074各位取反再加1)。因此只有定义为unsigned char 0 x8c,转换成整型数时才是8c。这一点在处理大于0 x80的ASC码字符时(如汉字码)要特别注意。一般汉字均定义为unsigned char(在以后的程序中会经常碰到)。2.3 基本类型与数据表示 24 另外,也可以定义一个字符型数组(关于数组后面再作详细介绍),此时该数组表示一个字符串。 例如: char str10; 计算机在编译时,将留出连续10个字符的空间,即str0 str9共10个变量,但只有前9个供用户使用。第10个str9用来存放字符串终止符NULL(即“0”),但终止符是编译程序自动加上的,这一

22、点应特别注意。2.3 基本类型与数据表示 25 2字符常数表示 能用符号表示的字符可直接用单引号括起来表示,如a、9、Z,也可用该字符的ASC码值表示,例如,十进制数85表示大写字母U,十六进制数0 x5d表示,八进制数0102表示大写字母B。 一些不能用符号表示的控制符,只能用ASC码值来表示,如十进制数10 表示换行, 十六进制数0 x0d表示回车,八进制数033表示Esc。Turbo C 2.0中也有另外一种表示方法, 如033表示Esc,这里0符号后面的数字表示十六进制的ASC值,当然这种表示方法也适用于可直接用符号表示的字符。 2.3 基本类型与数据表示 26 3转义字符转义字符意

23、义ASC码值(十进制)a响铃(BEL)007b退格(BS)008f换页(FF)012n换行(LF)010r回车(CR)013t水平制表(HT)009v垂直制表(VT)011反斜杠092?问号字符063单引号字符039”双引号字符0340空字符(NULL)000ddd任意字符三位八进制xhh任意字符二位十六进制2.3 基本类型与数据表示 27 字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。 在C程序中使用转义字符ddd或者xhh可以方便灵活地表示任意字符。ddd为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制ASC码

24、值。x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制ASC码值。 使用转义字符时需要注意以下问题: (1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。 (2)v垂直制表符和f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。 (3)在C程序中,使用不可打印字符时,通常用转义字符表示。2.3 基本类型与数据表示 28 4字符串 字符串是C 程序中可以直接写出来的另一类数据,其形式是用双引号括起的一系列字符。下面是几个字符串的例子:CHINA Beijing Daxue Welcomen 在字符串中的特殊字符也用转义序列的形式书写,如上面第4个字符串的最后是一个转义序

25、列,表示了一个换行字符。 程序中的字符串主要用于输入输出,例如: printf(Good morning!n); 小括号里就是一个字符串。 C语言规定程序不能在字符串中间换行,否则编译会出错。2.3 基本类型与数据表示 29 2.3.4 数据的外部表示及内部表示 数据的外部表示指的是用户在写出的C语言源程序中写数据所用的形式,或者用户给正在运行中的程序提供数据时所用的形式,或者用户从程序中得到的输出所具有的形式。内部表示指程序运行中,各种数据在计算机内部的二进制编码形式,也就是计算机内部存储和处理数据时所用的形式。显然这是两种不同的形式。例如,如果我们在源程序中写整数123,而在程序运行时实际

26、使用的则是存在内存某(几)个单元中的二进制形式1111011。如果在程序中写字符a,程序运行中将会把字符a 的编码的二进制形式保存在计算机的某个地方。 2.3 基本类型与数据表示 302.4 运算符与表达式运算符的分类 分类依据:运算符的功能分类:算术运算符关系运算符逻辑运算符赋值运算符按位运算符其它运算符表达式:是由操作数和运算符组成的序列。312.4.1 算术运算符和算术表达式1、算术运算符+:加法-:减法*:乘法/:除法%:取余或模3+51+1+33-51-1-33*5aba.b3/5=03./5=0.63/5.=0.63%5=3a%b=a-n*b a、b必须为整数5%(-3)=5-(-

27、1)*(-3)=2(-12)%(-5)=(-12)-2*(-5)=-2322、算术表达式用算术运算符和括符将操作数连接起来的式子。优先级:( )* / %+ -结合性自左向右,与数学上一致。表达式的值:数值型:int、long、unsigned、double结合性是指同级运算时运算符的结合方向。如a#b#c (#代表某一运算符)若先运算a#b,再将其结果与c运算,称为左结合性;从左至右运算规则若先运算b#c,再将a与其结果运算,则称右结合性。从右至左运算规则33例2.5 已知: float a=2.0; int b =6,c =3;求解: a*b/c-1.5+ A +abs(-5)=?12.0

28、/34.0 - 1.52.5+65(int)67.5572.5343.自增与自减运算符 (重点和难点)+i,-i先增(减)1,再使用ii+,i-先使用i,再增(减)1(1) 单独使用时+i;等 价i+;等 价i=i+1;(2) j=+i;(3) j=i+;若i的初始值为3i=4;j=4;i=4;j=3;35结合性:自右向左例:i = 2; j = -i+;分析:(1)+、-、+(正号)、-(取负)是同级运算符,结合方向:自右向左。(2) -i+等价于-(i+)(3) 对于括号内的自增运算,又要先使用i,再使i增加1。运算结果: i的值为3,j的值为-2。362.4.2 关系运算符和逻辑运算关系

29、运算 关系运算:比较运算,比较两个操作数,看是否满足给定的关系。(1) 关系运算符:小于 ,53, 35=:小于等于,5=3,3:大于,53,35=:大于等于,5 =3,3 =5 ,与数学上()不同=:等于,5=3 ,与数学上(=)不同!=:不等于,5!=3 ,与数学上()不同37(2) 关系表达式用关系运算符将表达式连接起来的式子优先级 =高 低= !=结合方向自左向右表达式的值关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符高 低C语言中,真:非0值,假:0值 第二章 2.3 运算符和表达式382. 逻辑运算符(1)逻辑运算符!:逻辑非,一元运算符运算规则:取反,真假,

30、假真&:逻辑与 。又称逻辑乘。运算规则:两个操作数均为真,结果为真。|:逻辑或 。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。39逻辑量或逻辑表达式的值非0 值:真0值:假整型实型字符型指针类型00.00NULL第二章 2.3 运算符和表达式40(2) 逻辑表达式用逻辑运算符将表达式连接起来的式子。优先级关系运算符高 低&逻辑与算术运算符高 低!逻辑非高 低高 低|逻辑或结合性!:自右向左&、|:自左向右41例2.6int a=5; float b=3.5;!a0!b0a&b1a|b1 !a&!b 0424、注意在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行

31、下一个逻辑运算符才能求出表达式的解时,才执行该运算符。43例2.7a=0; b=1; c=2; d=a+&b+&- -c;d=(a+)&(b+)&(- -c);运算结果: d=0,a=1,b=1,c=2(1)a & b & c求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。44(2)a | b | c求解方法:只要a为真(非0),就不必判断b和c;只有a 为假,才判断b;a和b都为假,才判断c。例2.8 a=0; b=1; c=2; d=a+|b+|- -c; d=(a+)|(b+)|(- -c); 运算结果: d

32、=1,a=1,b=2,c=2 452.4.3 赋值 1、赋值运算符= (数学上的等号)功能:将一个表达式的值赋给一个变量。2、简单的赋值表达式用赋值运算符将变量和表达式连接起来的式子形式: =求值规则: 将“=”右边表达式的值赋给左边的变量。结合性:自右至左 463.赋值语句 在语言中也可以组成赋值语句,按照语言规定,任何表达式在其未尾加上分号就构成为语句。因此如x=8和a=b=c=5;都是赋值语句,在前面各例中已大量使用过了。 如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型转换成左边的类型。具体规定如下: (1)实型赋予整型,舍去小数部分。 (2)整型赋予实

33、型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。 (3)字符型赋予整型,由于字符型为一个字节,而整型为两个字节,故将字符的ASC码值放到整型量的低8位中,高8位为0。 (4)整型赋予字符型,只把低8位赋予字符量。47例2.9 (1) x=(y=12)/4y值为12,x值为3,表达式的值为3(2) x=y=12/4y值为3,x值为3,表达式的值为3 (3) x=(y=12/4)(y值为3,x值为3,表达式的值为3 (4) (x=y)=12/4该赋值运算符左边不是变量,而是一个表达式484.复合赋值 *=、/=、%=、+=、-=、=、&=、=、=共10个由赋值运算符与算术、位

34、移、位逻辑运算符组成。复合运算符是一个运算符,但功能上,是两个运算符功能的组合。例2.10 a+=b 相当于 a=a+ba*=b+c 相当于 a=a*(b+c)a=2; a+=a*=a;492.4.4 逗号运算 形式:逗号表达式1,逗号表达式2,逗号表达式n 求值规则:从左至右依次计算各表达式的值优先级最低 结合性:自左至右 表达式的值最后一个表达式的值。50例2.11 a b y 逗号表达式 y=a=4,b=5,a+b; 4 5 4 9 y=(a=4,b=5,a+b); 4 5 9 9 y=(a=4,b=5),a+b; 4 5 5 9 y=a=(4,b=5),a+b; 5 5 5 10注意:

35、C语言常用逗号作为分隔符, 例如: int a=3,b=4,c=5; printf(%d,%d,%d,(a,b,c); printf(%d,%d,%d,a,(a,b,c),c); 512.4.5 条件运算1.条件运算符有两个符号:?、:,它与三个操作数组成三元运算。2.条件表达式 ? :求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值52优先级:逻辑 条件 赋值结合性: 自右至左例2.12 int max,a=5;b=3; max=ab?a:b-a=b+ ? a+ : b+ y = x10 ? x/10 : x0 ? x: -x;53求字节运算 形式:si

36、zeof 变量名sizeof (类型名)功能:求得变量或某种数据类型所需的字节数。运算结果:整型数例2.13 int a;float x;sizeof a,sizeof x,sizeof(int),sizeof(float) 54 2.5 计算和类型 2.5.1 类型对计算的限制 两个int 类型的数据经过计算,得到的还是int 类型的结果。对长整数 类型、各种实数类型,情况也一样。这个事实将带来许多问题。 首先,int 类型(以及long 类型)数据的除法是整除,计算得到的商仍为整数,余数将被丢掉。这种情况有时会带来一些容易迷惑用户的结果。 例如,1/3*3和1*3/3, 这两个表达表计算得

37、到的结果是不同的,前一个表达式计算出的值是0。对所有整数类型都有这个问题,在写程序时必须注意。下面的程序也不能正确地算出平均值: #include main() printf(Average of %d and %d is %dn“,68,39,(68+39)/2); 55intunsigned intlong intdoublefloatchar, short2.5.2 混合类型计算和类型转换存储长度较短存储长度较长总趋势:56例2.14 int x=2;float y=1.6;char c=A;c+x*y=?65(int)2(int)1.6 (double)3.2(double)68.2(

38、double)57赋值转换在赋值时,将赋值符右边值的类型转换成与其左边变量类型一致的类型。几种情况:(1) 实型整型(字符型)取整数部分,去掉小数部分(2) 整型、字符型实型补足有效位float f=23; 23.00000 (7位)double f=A; 65.00 000 000 000 000 (16位)58(3) 对char、int、short、long、unsigned型数据赋值符右边数据(a位)赋值符左边变量(b位)a=b 原样照赋ab 截断高a-b位,送低b 位a实际宽度,补空格。指定宽度实际宽度,按实际输出。不指定宽度,按实际输出。如:10d输出精度指示符。对整数,表示至少要输

39、出的数字个数,不足补数字,多出则原样输出。对实数,表示小数点后至多输出的数字个数,不足补数字,多出则舍入处理。对字符串,表示最多输出的字符个数,不足补空格,多出则丢弃。输出长度修饰符:F:输出远指针存放的地址。N:输出近指针存放的地址。H或h:输出短整型数据的值。L或l:输出长整型或双精度值。格式字符,用来进行格式转换。(重点掌握)95()格式字符(type)一鉴表:字符说明d(或i)以带符号的十进制形式输出整数,不输出(+)号o以八进制无符号形式输出整数(不输出前导符数字O)x(或X)以十六进制无符号形式输出整数(不输出前导符Ox)u以无符号十进制形式输出整数c输出一个字符s输出字符串f以小

40、数形式输出单、双精度数,隐含输出6位小数e(或E)以指数形式输出单、双精度数,小数位数为6位g(或G)由给定的值和精度自动选用%f或%e或%E格式 %输出百分号(%)96例3.4printf (%dn,100);printf(%5dn,100);printf(%8dn%8d,100,100*100);01001000097例3.5printf (%on,-1);177777printf (%x,%Xn,-1,-1);177777ffff,FFFFprintf (%u,%d,-1, -1);177777ffff,FFFF65535,-198printf (%4c,%cn,A, A);printf

41、 (%-8s,%8.2s, Name , Name ); A,A例3.6 A,AName-,-Na99printf (%fn%10.3fn,100.7654321, 100.7654321);printf (%en%10.9e, 100.7654321,100.7654321);例3.7100.765432 100.765100.765432100.7651.00765e+21.00765432e+2100#includestdio.hmain() int i=8;printf(%dt%dt%dn,+i,-i,i-);例3.8计算方向输出结果为: 7 6 8 101注意:使用函数printf时

42、要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。Turbo C是按从右到左进行的。 102#include stdio.hmain() int a=3,b=4;printf(%dn,(a=b,b,a+3); /*输出序列是一个逗号表达式*/printf(%dn,a=b,b,a+3); /*输出第一个参数变量a的值*/例3.9输出结果为: 7 41031、字符输入函数(1)函数原型int getchar(void);函数返回值类型函数的名称无参数(2)函数功能从标准输入设备(一般为键盘)读入一个字符,返回该字符的ASCII码值,并且将敲入的字符“

43、回显”到屏幕上。3.2.3 getchar()函数和putchar()104例3.10#include /*说明函数getchar的原型包含在哪个文件中*/main()int a; char b; a=getchar(); b=getchar(); printf(a=%cta=%dtb=%ctb=%dn,a,a,b,b); 从键盘输入字符, 该字符的ASCII编码值赋给a105程序运行情况如下:13 a=1a=49b=3b=51 106注意:调用函数getchar时,程序执行被中断,等待用户从键盘输入数据。当用户键入字符并敲回车键以后,程序继续运行。若用户输入字符后未按回车键,则键入的内容一直

44、保留在键盘缓冲区中,只有用户键入回车键后,字符输入函数getchar才进行处理。 函数getchar将回车键作为一个字符读入。如果程序中有两个以上函数getchar时,应该一次性输入所需字符,最后再按回车键,如上例所示。无论输入的是英文字母或标点符号还是数字,都是作为字符输入 。107(1)函数原型int putchar(int);函数返回值类型函数的名称函数的参数(2)函数功能向标准输出设备(一般为显示器)输出一个字符,并返回输出字符的ASCII码值。2、字符输出函数108例3.11#include 程序运行结果为:ABBCmain( ) int a=65; char b=B; putcha

45、r(a); putchar(65+1); putchar(b); putchar(B+1); 包含函数putchar的头文件1093.2.4 数据输入/输出程序举例例3.12 输入一个华氏温度,输出对应的摄氏温度。输出取1位小数。转换公式为 #include stdio.hmain()float c,f;scanf(%f,&f);c=5.0/9*(f-32);printf(%.1fn,c); 注意数学表达式到C语言表达式的转换 110例3.13 输入两个整数a、b,将它们交换,例如a为3,b为5,交换后a为5,b为3。 #include stdio.hmain()int a,b,t; /*t就

46、相当于空杯子*/scanf(%d,%d,&a,&b);printf(a=%d,b=%dn,a,b); /*观察原来的值*/t=a;a=b;b=t;printf(a=%d,b=%dn,a,b); /*观察交换后的值*/用于交换变量a、b的方法通常称为两两交换法。 111例3.14 从键盘输入圆半径,求圆的面积和周长,结果保留两位小数 。#include stdio.h#include math.hmain()float r,area,peri; scanf(%f,&r);area=3.14*pow(r,2);/*函数pow(x,y)表示xy */peri=2*3.14*r;printf(area

47、=%.2f,peri=%.2fn,area,peri); 112问题提出:计算分段函数: y=3-x x02/x x0解题的步骤:输入xx0是 y=3-xy=2/x否 输出y的值 第四章 问题的提出 C语言用来设计条件选择结构程序的选择语句有两种: if语句、switch语句。 3.3 条件控制语句1133.3.1 if语句 1、单分支选择if语句if语句有三种形式:单分支选择if语句、双分支选择if语句、多分支选择if语句。 语句形式: if (表达式) 语句; 语句执行流程: 表达式语句真(非0)假(0)一、 if语句的三种形式114例3.15 从键盘输入两个整数a和b,如果a大于b则交换

48、两数,最后输出两个数。 #include 输入a,bab交换a、b输出结束真假 main() int a,b,t; scanf(%d,%d,&a,&b); if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 115注意: (1)if语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号 将需要执行的多个语句括起,形成一个复合语句。 (2)if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。 1162、双分支选择if语句语句形式:if (表达式) 语句1;else 语句2 ;

49、 语句执行流程: 表达式语句1真(非0)假(0)语句2117例3.16 输入两个整数,输出其中较大的数。 #include #include main() int x,y,max; scanf(%d,%d,&x,&y); if(xy) max=x; else max=y; printf(max=%dn,max); 输入x,yxymax=x输出最大值结束真假max=y118注意if和else语句之间只能有一个语句,当ifelse之间的语句不只一句时,应用一对将语句括起。 if(ab) a+;b+;else a=0;b=10; 1193、多分支选择if语句语句形式:if (表达式1) 语句1;el

50、se if (表达式2)语句2; else if (表达式n)语句n; else 语句n+1;120语句执行流程: 表达式2表达式1语句1真(非0)假(0)语句2真(非0)表达式2语句n语句n+1假(0)假(0)121例3.17 计算分段函数。假输入xX=1真X10y=3/(x-10)y=2xy=x+5假真122#include main()float x,y; printf(enter x:); scanf( %f ,&x); else if (x=1) y=x+5; else if (x=60n);break; default:printf(grade60);各case和default子句

51、的先后顺序可以变动,而不会影响程序执行结果。 132default语句可以省略不用。case和default与其后面的常量表达式间至少有一个空格。switch语句可以嵌套,break语句只跳出它所在的switch语句。 133例3.19 企业发放的奖金根据利润提成。从键盘输入当月利润,求应发放奖金总数? 134利润xx=1010 x2020 x4040 x6060 x100100 x (int )x/10 常量0,11,22,3,44,5,66,7,8,9,1010以上 用这种方法转换后,n出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种是可以采用当x为10的整数倍时,将计算出的n

52、值减1。 使用switch解题的关键,通过分析找到表达式,将问题分成几种情况。135#include stdio.hmain()float x,y; int n; scanf(%f,&x); n=(int)x/10; if(int)x%10=0) n-; switch(n) case 0:y=x*0.1;break; case 1:y=x*0.12;break; case 2:case 3:y=x*0.14;break; case 4:case 5:y=x*0.16;break; case 6:case 7:case 8:case 9:y=x*0.18;break; default:y=x*0

53、.2; printf(y=%.2fn,y); 程序如下:1363.3.3 条件控制语句程序应用例3.20 将任意三个整数按从大到小的顺序输出。 #include stdio.hmain()int x,y,z,t;scanf(%d,%d,%d,&x,&y,&z);if(xy) t=x;x=y;y=t; /*交换x,y的值*/if(xz) t=x;x=z;z=t; /*交换x,z的值*/if(yc&a+cb&b+ca) if(a=b&b=c) printf(equalateral triangle.n); else if(a=b|a=c|b=c) printf(isoscelestriangle.

54、n); else printf(other triangle.n); else printf(can notn);139例3.23 从键盘输入一个年份,判断是否是闰年。#include stdio.hmain()int year; scanf(%d,&year); if(year%400=0|(year%4=0&year%100!=0) printf(%d is a leap yearn,year);else printf(%d is not a leap yearn,year);1.main()int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y)

55、case 0: a+;break; case 1:b+;break; case 2: a+;b+;break; case 3:a+;b+; printf(“a=%d,b=%dn”,a,b); 结果:a=2,b=1课堂练习2.程序填空: 以下程序判断输入的整数能否被3或7整除.main()int x,f=0;scanf( “%d”,&x );if( 1 ) ( 2 ) if(f=1) printf(“YESn”);else printf(“NOn”);142在C语言中可以用以下语句来实现循环:1. 用goto语句和if语句构成循环;2. 用while语句;3. 用do-while语句;4. 用f

56、or语句。第五章 循环结构程序设计 循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。3.4 循环控制语句1433.4.1 while语句真(非零)表达式 循环体假(零)1、while 语句的形式: while (表达式) 循环体; 2 、 while 语句 常称为“当型”循环语句。1443、说明:先判断表达式,后执行语句。表达式同if语句后的表达式一样,可以是任何类型的表达式。 循环体多于一句时,用一对 括起。while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。 145例3.24 分析下列程序段的循环次数i=1; while (i0)

57、printf( + ); else printf( - ); scanf( %f ,&x); 判断正负号 第五章 5.1 while语句147#include stdio.h main() char ch;int num=0; ch=getchar();例3.26 统计从键盘输入的一行字符的个数(以回车键作为输入结束标记)。while(ch!=n) 判断是否输入结束 num+; ch=getchar(); printf(num=%dn,num); 148注意表达式在判断前,必须要有明确的值。 循环体中一般有改变条件表达式的语句。 while (表达式)后面没有分号。 1493.4.2 do-w

58、hile语句1、 do-while的形式: do 循环体; while (表达式);2、 do-while语句 常称为“直到型”循环语句。真(非零)表达式 循环体假(零)1503、说明:先执行语句,后判断表达式。第一次条件为真时,while,do-while等价;第一次条件为假时,二者不同。151 例3.27 用do-while语句编写程序统计从键盘输入的一行非空字符的个数(以回车键作为输入结束标记)。 #include stdio.hmain()char ch; int num=0; ch=getchar(); do num+; ch= getchar(); while(ch!=n); pr

59、intf(num=%dn,num); 152注意在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。do-while和while语句相互替换时,要注意修改循环控制条件 。1533.4.3 for语句1、for的形式:for (初始表达式1;条件表达式2;循环表达式3) 循环体 ; 表达式1:用于循环开始前为循环变量设置初始值。表达式2:控制循环执行的条件,决定循环次数。表达式3:循环控制变量修改表达式。循环体语句: 被重复执行的语句。154表达式3计算表达式1循环体判断表达式2零非零for的下一条语句2、执行过程155 for(i=1;i=100;

60、i+) sum=sum+i; 例如:它相当于以下语句: i=1; while (i=100) sum=sum+i; i+; 表达式1;while(表达式2)表达式3;1563、 说明三个表达式都可以是逗号表达式。 三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。 157 1、for语句中表达式省略的形式(1)for语句一般形式中的“表达式1”可以省略; 如: sum=0;i=1; for ( ; i100) break; sum=sum+i; 自学辅导1591、for语句中表达式省略的形式(3)表达式3也可以省略,但此时保证循环能正常结束如: for(sum=0,i

温馨提示

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

评论

0/150

提交评论