《jidaochap3程序设计语言初步》由会员分享,可在线阅读,更多相关《jidaochap3程序设计语言初步(118页珍藏版)》请在金锄头文库上搜索。
1、 jidao-chap3程序设计语言初步Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望 程序设计语言程序设计语言:用于书写计算机程序的语言,用:用于书写计算机程序的语言,用于表达和描述要加工的数据以及求解问题的步于表达和描述要加工的数据以及求解问题的步骤和过程。是根据预先定义的规则(语法)、骤和过程。是根据预先定义的规则(语法)、由一个有限字母表上的字符构成的字符串的总由一个有限字母表上的字符构成的字符串的总体。体。程序设计语言的基本成分程序设计语言的基本成分:数据成分。用以描数据
2、成分。用以描述程述程序中所涉及的数据。序中所涉及的数据。运算成分。用以描运算成分。用以描述程序中所包含的运算。述程序中所包含的运算。控制成分。用以表控制成分。用以表达程序中的控制构造。达程序中的控制构造。传输成分。用以表达传输成分。用以表达程序中数据的传输。程序中数据的传输。2 提纲提纲标识符标识符数据类型数据类型变量变量常量常量输入和输出输入和输出表达式表达式语句语句函数函数本章结合本章结合C语言语言向大家介绍结构向大家介绍结构化程序设计语言化程序设计语言的基本概念的基本概念数据成分数据成分传输成分传输成分运算成分运算成分控制成分控制成分运算成分运算成分3 先聊点先聊点C语言语言4 5 数据
3、总线 控制路线 输入设备输入设备输出设备输出设备存储器存储器中央处理器(中央处理器(CPU)运算部件运算部件控制部件控制部件地址总线 实例:编一个程序,从键盘读入两个整数,实例:编一个程序,从键盘读入两个整数,要求在屏幕上输出相乘运算结果。要求在屏幕上输出相乘运算结果。处理步骤:处理步骤:1.控制部件发命令从键盘读控制部件发命令从键盘读取数据并存储到内存储器中取数据并存储到内存储器中(输入输入)。)。2.控制部件发命令从内存储控制部件发命令从内存储器中取出这两个数,置入运器中取出这两个数,置入运算部件的寄存器中,让运算算部件的寄存器中,让运算器执行乘法运算,运算结果器执行乘法运算,运算结果写回
4、存储器中(写回存储器中(处理处理)。)。3.控制部件发命令将存储在控制部件发命令将存储在内存储器中的结果输出到显内存储器中的结果输出到显示器上(示器上(输出输出)。)。需要考虑的问题:需要考虑的问题:1.输入输入:如何从键盘读取这两个数并将其存放:如何从键盘读取这两个数并将其存放到内存中?程序如何约束输入的必须是整数?到内存中?程序如何约束输入的必须是整数?2.处理处理:计算时如何读取内存中的这两个数?:计算时如何读取内存中的这两个数?如何实现计算?计算结果如何写回内存?如何实现计算?计算结果如何写回内存?3.输出输出:如何将内存中的计算结果输出到显示:如何将内存中的计算结果输出到显示器?器?
5、6 数据总线 控制路线 输入设备输入设备输出设备输出设备存储器存储器中央处理器(中央处理器(CPU)运算部件运算部件控制部件控制部件内存中数据内存中数据的存取的存取:变量、变量、常量、常量、数据类型数据类型输入输入:输入输入语句语句输出输出:输出输出语句语句地址总线 计算的实现计算的实现:运算符运算符表达式表达式语句语句函数函数7 标识符标识符是由程序员定义的单词,用来给程序是由程序员定义的单词,用来给程序中的数据、函数和其他用户自定义对象命名。中的数据、函数和其他用户自定义对象命名。程序设计语言本身会定义一些专用名称,称程序设计语言本身会定义一些专用名称,称之为之为保留字保留字或或关键字关键
6、字,它们,它们具有特定含具有特定含义,程序员不能另做他用。如:程序员不能另做他用。如:C C语言规定了语言规定了3232个关键字。个关键字。3.1标识符标识符8 C语言规定的语言规定的32个关键字:个关键字:autodoubleintstructbreakelselongswitchcaseenumregistertypedefcharexternreturnunionconstfloatshortunsignedcontinue forsignedvoiddefaultgotosizeofvolatiledoifstaticwhile9 #includemain()intnumber1;/*
7、变量声明变量声明*/intnumber2;intresult;printf(“pleaseinputthetwonumbers:n”);/*显示提示信息显示提示信息*/scanf(“%d%d”,&number1,&number2);/*从键盘读取从键盘读取2个整数个整数*/result=number1*number2;/*赋值运算赋值运算*/printf(“theresultis:%dn”,result);/*输出结果输出结果*/return0;用户自定义用户自定义标识符标识符C语言语言关键字关键字3.1标识符标识符10 u 不同的程序设计语言标识符格式可能不同。不同的程序设计语言标识符格式可
8、能不同。u C C语言规定:语言规定:标识符由大写字母标识符由大写字母A A到到Z Z、小写字小写字母母a a到到z z、数字数字0 0到到9 9和下划线组成,且第一个字符和下划线组成,且第一个字符必须是字母或下划线,随后的字符必须是字母、必须是字母或下划线,随后的字符必须是字母、数字或下划线。且大小写敏感数字或下划线。且大小写敏感,如,如ageage和和AgeAge是两是两个不同的标识符。个不同的标识符。uPASCAL语言规定:和语言规定:和C语言类似,只是要求第语言类似,只是要求第一个字符只能是字母(比一个字符只能是字母(比C语言约束更强)。语言约束更强)。3.1标识符标识符思考:以下哪些
9、是合法的思考:以下哪些是合法的C语言标识符语言标识符age,_class_no,name1,name1,2name,#age11 数据数据是计算机处理的对象。是计算机处理的对象。数据依据其本身的特点可以归为不同的类:数据依据其本身的特点可以归为不同的类:整数、整数、小数、字符、字符串小数、字符、字符串等。等。(高级程序语言特点:按照人对于数据的表达方式)(高级程序语言特点:按照人对于数据的表达方式) 程序设计语言应该具备区分各种类型数据的能力,程序设计语言应该具备区分各种类型数据的能力,于是引入了数据类型的概念。于是引入了数据类型的概念。数据类型包括两层含义:定义了一系列的值数据类型包括两层含
10、义:定义了一系列的值( (属于属于该类型的数据能够取值的范围该类型的数据能够取值的范围)以及能应用于这)以及能应用于这些值上的一系列操作(些值上的一系列操作(数据操作数据操作)。)。 3.2数据类型数据类型12 u整数是由符号和一个或多个数字组成的正数、整数是由符号和一个或多个数字组成的正数、0 0或负数,又称为带符号的自然数或负数,又称为带符号的自然数,如,如+12,-38+12,-38。u注意:在数学中,整数是一个无限集合,但对注意:在数学中,整数是一个无限集合,但对于计算机来说,只能表示它的一个有限子集于计算机来说,只能表示它的一个有限子集(取决于存储空间的大小)(取决于存储空间的大小)
11、 。整型整型3.2数据类型数据类型程序设计语言一般包含四种程序设计语言一般包含四种标准数据类型标准数据类型:整型、字符型、浮点型和布尔型整型、字符型、浮点型和布尔型(补充)(补充)。13 3.2数据类型整型数据类型整型整型数据占用的内存单元数:整型数据占用的内存单元数:uC语言中整型数据细分为四类:语言中整型数据细分为四类:shortint、int、longint和和longlongint。(和教材不同)(和教材不同)uC语言标准没有规定每一种整数类型占用的内语言标准没有规定每一种整数类型占用的内存空间大小(存空间大小(即数的范围即数的范围),只是约束到:),只是约束到:shortint和和i
12、nt至少要占据至少要占据16位(位(2字节),而字节),而long数据至少要有数据至少要有32位(位(4字节);且数据长度字节);且数据长度上,上,shortint=int=longint=longlongint。u每一种整数类型占用的内存字节数由编译器根每一种整数类型占用的内存字节数由编译器根据所用机器的硬件情况来决定。据所用机器的硬件情况来决定。14 整型数据所允许的运算包括:整型数据所允许的运算包括: 二目算术运算二目算术运算 :+ +、- -、* *、/ /、(、(取余取余) ) ; 注意:两个整数进行二目运算后结果还是整数注意:两个整数进行二目运算后结果还是整数 如:如:125 /
13、10 = 12125 / 10 = 12(余数余数5 5被舍弃被舍弃), , 125 % 10 = 5 125 % 10 = 5 单目算术运算单目算术运算 :取负值等;:取负值等; 关系运算关系运算: ,= ,=,= =(= =(相等),相等), != !=(不相等)(不相等)C C语言中关系运算结果为语言中关系运算结果为1 1(真)或(真)或0 0(假)(假) 3.2数据类型整型数据类型整型15 字符型字符型u字符数据包括字符数据包括26*2个字母(大小写)个字母(大小写)+10个数字个数字+其它显示符号,总共其它显示符号,总共95种;还有种;还有33种控制符号,种控制符号,总共总共128种
14、符号;种符号;u字符型数据在内存中的存储:实际存放的是一字符型数据在内存中的存储:实际存放的是一个整数值。多数计算机系统采用个整数值。多数计算机系统采用ASCII(American Standard Code for Information Interchange)标准编码模式来对字)标准编码模式来对字符进行编码符进行编码。每个字符占用。每个字符占用8位内存(位内存(1个字节)个字节);3.2数据类型数据类型16 ASCII表表LH000000010010001101000101011001110000NULDLESP0Pp0001SOHDC1!1AQaq0010STXDC2“2BRbr001
15、1ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111BELETB,7GWgw1000BSCAN)8HXhx1001HTEM(9IYiy1010LFSUB*:JZjz1011VTESC+;Kk1100FFFSNn1111SIUS/?O_oDEL2000H2002H2004H2003H2001H01000001存储空间存储空间该存储区该存储区存放字符存放字符A思考:若从键盘上输入字符存储到内存,字符思考:若从键盘上输入字符存储到内存,字符到二进制编码的转换是由什么部件来实现的?到二进制编码的转换是由什么部件来实现的?17
16、 ASCIIASCII(AA)=65 A=65 A的的ASCIIASCII值是值是6565ASCIIASCII(aa)=97 =97 规律:大写字母的规律:大写字母的ASCIIASCII编码编码3232小写字母的小写字母的ASCIIASCII编码编码3.2数据类型字符型数据类型字符型18 3.2数据类型字符型数据类型字符型关系运算关系运算(按照(按照ASCII大小):大小):,=,=,!=例如:例如:Aa结果为真,因为结果为真,因为A的的ASCII是是65,a的的ASCII是是97,6597字符型所允许的运算包括(字符型所允许的运算包括(将字符型数据当作整型将字符型数据当作整型数据对待数据对待
17、):): 算术运算算术运算:ch2=ch1-32 (ch2=ch1-32 (若若ch1ch1值为值为b,b,则则ch2ch2为为B)B) ch2=ch1-1 (ch2=ch1-1 (若若ch1ch1值为值为b,b,则则ch2ch2为为a)a) ch2=ch1ch2=ch11 (1 (若若ch1ch1值为值为b,b,则则ch2ch2为为c)c) 19 浮点型浮点型u 浮点型是带小数部分的数字类型浮点型是带小数部分的数字类型,如,如3.14,1.575E5(科学计数法,即(科学计数法,即1.575*)。u抽象地讲,浮点型数据的值域是全体实数,但是由抽象地讲,浮点型数据的值域是全体实数,但是由于计算
18、机表示方面的原因,计算机只能表示它的一个于计算机表示方面的原因,计算机只能表示它的一个有限子集。有限子集。u同样由于计算机表示方面的原因,实数在计算机同样由于计算机表示方面的原因,实数在计算机内部的表示有时是不准确的。例如,存储圆周率时,内部的表示有时是不准确的。例如,存储圆周率时,只能表示成近似的值。只能表示成近似的值。3.2数据类型数据类型20 3.2数据类型数据类型uC语言支持三种不同长度的浮点数据类型:语言支持三种不同长度的浮点数据类型:float、double和和longdouble。其中其中float一般占一般占32位位(字节);字节);double一般占一般占64位(位(8字节)
19、,字节),longdouble占占96位(位(12字节)。字节)。u三者区别:越后面的类型运算精度越高,值域三者区别:越后面的类型运算精度越高,值域越大,但占用的内存单元越多。越大,但占用的内存单元越多。21 浮点型所允许的运算包括:浮点型所允许的运算包括: 二目算术运算二目算术运算 :+ +、- -、* *、/ /;浮点型数据进行二目运算结果还是浮点型。浮点型数据进行二目运算结果还是浮点型。 如:如:12.0/5.0=2.412.0/5.0=2.4 单目算术运算单目算术运算 :取负值:取负值 关系运算关系运算: ,= ,=,= = =,!=!=3.2数据类型浮点型数据类型浮点型注意:要避免做
20、两个实数相等或不相等的比较。由于计算注意:要避免做两个实数相等或不相等的比较。由于计算机表示方面的近似性,会使得本来应该相等的两个数不等。机表示方面的近似性,会使得本来应该相等的两个数不等。建议在比较两个浮点数建议在比较两个浮点数X和和Y是否相等时使用是否相等时使用|X-Y|,其中其中是一个绝对值较小的正浮点数。是一个绝对值较小的正浮点数。22 3.2数据类型布尔型(补充)数据类型布尔型(补充)布尔类型数据布尔类型数据:取值只有两种,真(取值只有两种,真(True)或)或者假(者假(False)。允许的运算包括:与、或、非。)。允许的运算包括:与、或、非。绝大多数程序设计语言中有绝大多数程序设
21、计语言中有布尔类型布尔类型这种数据这种数据类型,如类型,如Pascal语言。但是语言。但是C语言没有定义这语言没有定义这种数据类型。种数据类型。布尔型布尔型23 标准类型是原子的、不可再分的。程序员可标准类型是原子的、不可再分的。程序员可以以标准类型为基本构件,构造出以以标准类型为基本构件,构造出复杂复杂的数的数据类型。如据类型。如C C语言有:结构、数组、联合、语言有:结构、数组、联合、文件等复杂数据类型;文件等复杂数据类型;PASCALPASCAL语言有:结构、语言有:结构、数组、集合、文件等复杂数据类型。数组、集合、文件等复杂数据类型。 3.2数据类型复杂数据类型数据类型复杂数据类型24
22、 3.3变量变量数据总线 控制路线 输入设备输入设备输出设备输出设备存储器存储器中央处理器(中央处理器(CPU)运算部件运算部件控制部件控制部件输入数据、中间运输入数据、中间运算结果、最终结果算结果、最终结果程序需要将输入程序需要将输入数据、中间运算数据、中间运算结果以及最终结结果以及最终结果暂时保存在内果暂时保存在内存单元中。存单元中。地址总线 程序如何实现程序如何实现从内存单元存从内存单元存取数据?取数据?25 3.3变量变量程序运行时,通过内存地址对内存数据进行读程序运行时,通过内存地址对内存数据进行读写;写;程序员写源程序时,如果也是直接使用内存地程序员写源程序时,如果也是直接使用内存
23、地址来读写内存数据,会很麻烦!址来读写内存数据,会很麻烦!如果用名字来代替地址,在程序中出现的是代如果用名字来代替地址,在程序中出现的是代表内存空间的名字,让编译器来跟踪数据实际表内存空间的名字,让编译器来跟踪数据实际存放的物理内存地址,就可以简化编程存放的物理内存地址,就可以简化编程变变量;量;26 变量用来代表内存存储空间,该存储空间用来存变量用来代表内存存储空间,该存储空间用来存放被加工的数据或处理的结果。源程序中对变量放被加工的数据或处理的结果。源程序中对变量的操作(读和赋值)实际上是对存储空间的读写的操作(读和赋值)实际上是对存储空间的读写操作。操作。变量具有三个重要属性:名称、值和
24、数据类型。变量具有三个重要属性:名称、值和数据类型。2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore内存内存用用sex代表地址为代表地址为2001H的内存单的内存单元,元,score代表地址为代表地址为2004H2007H的一片内存空间。用变量的一片内存空间。用变量来实现对这些内存空间数据的存来实现对这些内存空间数据的存取。取。3.3变量变量27 一、变量定义一、变量定义u 使使用用变变量量来来对对内内存存数数据据进进行行存存取取前前,必必须须先先定定义变量,义变量,目的是目的是建立变量和存储空间的对应关系建立变量和存储空间的对应关系。u
25、变变量量定定义义指指明明变变量量的的名名称称和和数数据据类类型型(变变量量代代表表的的存存储储空空间间存存放放的的数数据据的的类类型型)。变变量量的的名名称称要要有有意意义义,要要遵遵循循标标识识符符命命名名原原则则,虽虽然然可可以以为为任任意意长长度度,但但C编编译译器器只只认认为为前前31个个字字符符有有效效。变变量量类类型可以告诉编译器应该留出几个字节用于保存数据。型可以告诉编译器应该留出几个字节用于保存数据。u不同语言中变量定义的写法不一样,不同语言中变量定义的写法不一样,C语言格式:语言格式:数据类型数据类型变量名变量名1,变量名变量名2,;3.3变量变量思考:变量定义时要指明哪些内
26、容?思考:变量定义时要指明哪些内容?charsex;intage1,age2;intheight;floatscore;数据类型数据类型变量名变量名分号必须分号必须多个同类型变多个同类型变量用逗号分割量用逗号分割28 注意,变量定义仅引起内存存储注意,变量定义仅引起内存存储空间分配,但此时变量中存储的空间分配,但此时变量中存储的值一般是无意义的(特殊情况除值一般是无意义的(特殊情况除外)!外)!变变量量定定义义将将引引起起内内存存空空间间的的分分配配。定定义义后后,变变量量就就用用来来代代表表内内存存中中的的一一片片存存储储单单元元(存存储储单单元元个个数数取取决于变量类型)。决于变量类型)。
27、3.3变量变量2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore存储空间存储空间charsex;intage;floatscore;29 二、变量赋值二、变量赋值C语言示例:语言示例:charsex;intage;floatscore;变量赋值:把一个值写入变量代表的存储空间。变量赋值:把一个值写入变量代表的存储空间。C语言变量赋值格式:语言变量赋值格式:变量名变量名=表达式表达式sex=F;age=18;score=89.5;2000H2002H2004H2005H2007H2006H2003H2001Hsexagescore存储空间存储空
28、间ASCII(F)=77)771889.5变量的值变量的值表达式是由表达式是由运算符、操作数和括号运算符、操作数和括号组成的、组成的、计算求值计算求值的基本单位。如:的基本单位。如:age*(i+10)3.3变量变量30 3.3变量变量变量使用特点变量使用特点对变量的操作:定义变量、读变量、写变量对变量的操作:定义变量、读变量、写变量先定义,后使用。先定义,后使用。如未定义就使用,则在编如未定义就使用,则在编译时被查出,认为非法。译时被查出,认为非法。变量未被赋值前,值一般是无意义的。变量未被赋值前,值一般是无意义的。对变量赋值过程是对变量赋值过程是“覆盖覆盖”过程,用新值去过程,用新值去替换
29、旧值。替换旧值。读取变量代表的存储空间数据(读取变量代表的存储空间数据(又称读取变又称读取变量的值量的值):):age=age+1;将变量将变量age的值加的值加1读取变量的值时,该变量保持不变。读取变量的值时,该变量保持不变。31 C C语语言言允允许许变变量量在在定定义义时时进进行行初初始始化化。初初始始化语句用来给变量赋初始值。例如:化语句用来给变量赋初始值。例如:charsex;intage=16;/变量初始化变量初始化floatscore;3.3变量变量2000H2002H2004H2005H2007H2006H2003H2001H16存储空间存储空间sexagescore32 3.
30、3变量变量试解释下列操作的含义试解释下列操作的含义读取变量的值读取变量的值写入变量写入变量给变量赋值给变量赋值修改变量的值修改变量的值33 #includemain()intnumber1;/*变量定义变量定义*/intnumber2;intresult;printf(“pleaseinputthetwonumbers:n”);/*显示提示信息显示提示信息*/scanf(“%d%d”,&number1,&number2);/*从键盘读取从键盘读取2个整数个整数*/result=number1*number2;/*赋值运算赋值运算*/printf(“theresultis:%dn”,result
31、);/*输出结果输出结果*/return0;3.3变量变量/*/:注释注释main()函数()函数变量定义部分变量定义部分操作部分操作部分34 3.3变量变量u找出下述变量定义有无错误:找出下述变量定义有无错误:floatf;charA,B;35 charsex;intage;floatscore;变量类型变量类型变量名变量名总结:总结:变变量量三三要要素素:变变量量名名(存存储储空空间间)、数数据据类类型型(存存储储空间存放的数据的类型空间存放的数据的类型)、变量值()、变量值(存储内容存储内容)3.3变量变量2000H2002H2004H2005H2007H2006H2003H2001H7
32、01889.5存储空间存储空间变量的值变量的值sexagescore36 一、一、文字常量文字常量 文字常量是指在程序中未被命名的值。文字常量是指在程序中未被命名的值。例:例:circumference=2*(length+width); 其中其中2 2就是一个文字常量,就是一个文字常量,lengthlength和和widthwidth是变量是变量三类常量:三类常量:文字常量文字常量、命名常量命名常量、符号常量符号常量3.4常量常量37 二、二、命名常量命名常量和和变变量量类类似似,命命名名常常量量也也是是内内存存存存储储空空间间的的名名字字,代代表表一一片片内内存存存存储储空空间间,但但一一
33、旦旦赋赋值值便便不不允许程序去改变该存储空间中的数据允许程序去改变该存储空间中的数据。 C C语言中定义一个命名常量:语言中定义一个命名常量: mainmain()() const const float float pi = 3.14;pi = 3.14; 3.4常量常量2000H2002H2004H2005H2007H2006H2003H2001H3.14存储空间存储空间pi说明说明pi是个命是个命名常量名常量;38 #includemain()constfloatpi=3.14;/*常量定义常量定义*/floatradius,area;/*变量定义变量定义*/printf(“please
34、inputtheradius:n”);/*显示提示信息显示提示信息*/scanf(“%f”,&radius);/*从键盘读取半径从键盘读取半径*/area=pi*radius*radius;/*赋值运算赋值运算*/printf(“theareais:%fn”,area);/*输出结果输出结果*/system(“pause”);return0;39 符号常量是仅含有符号名称的值。符号常量是仅含有符号名称的值。C C语语言言符符号号常常量量定定义义:#define标标识识符符替替换换文文本本#definePI3.14area=PI*radius*radius;编编译译时时,预预处处理理程程序序能能
35、够够将将所所有有出出现现该该符符号号名名称称的地方用的地方用值值替换替换: : area=3.14*radius*radius;使使用用符符号号常常量量的的好好处处:使使程程序序易易读读性性好好、容容易易维维护。护。三、三、符号常量符号常量3.4常量常量40 3.4常量常量#include#definePI3.14/常量定义,注意结束处无分号常量定义,注意结束处无分号main()floatradius;/*变量定义变量定义*/floatarea;printf(“pleaseinputtheradius:n”);/*显示提示信息显示提示信息*/scanf(“%f”,&radius);/*从键盘读
36、取半径从键盘读取半径*/area=PI*radius*radius;/*赋值运算赋值运算*/printf(“theareais:%fn”,area);/*输出结果输出结果*/system(“pause”);return0; 41 3.4常量常量思考:命名常量和符号常量的区别思考:命名常量和符号常量的区别内存分配上(命名常量会在内存的程序运行数内存分配上(命名常量会在内存的程序运行数据区分配到内存,而符号常量不会)据区分配到内存,而符号常量不会)类型检查上(编译器对命名常量会进行类型检类型检查上(编译器对命名常量会进行类型检查,排除程序的不安全性;对符号常量只是简查,排除程序的不安全性;对符号常
37、量只是简单的替换,不进行类型检查)单的替换,不进行类型检查)42 四、常量的类型四、常量的类型和和变变量量一一样样,常常量量也也有有类类型型。大大多多数数程程序序设设计计语语言言使使用用整整型、浮点型、字符型和字符串型常量。型、浮点型、字符型和字符串型常量。C C语言中四种常量:语言中四种常量:1515整型常量整型常量15.415.4浮点型常量浮点型常量AA字符型常量字符型常量 (用单引号括起字符)(用单引号括起字符)“Hello” Hello” 字符串型常量(用双引号括起字符序列)字符串型常量(用双引号括起字符序列)文字常量和符号常量的值体现了常量的类型文字常量和符号常量的值体现了常量的类型
38、3.4常量常量43 如果整型常量以如果整型常量以0开头,开头,C编译器会认为该常量编译器会认为该常量是八进制数。如是八进制数。如040即十进制的即十进制的32。如果整型常量以如果整型常量以0x开头,开头,C编译器会认为该常编译器会认为该常量是十六进制数。如量是十六进制数。如0xFF即十进制的即十进制的255。#include#defineX040#defineY0XFFmain()printf(“X=%d,Y=%d”,X,Y);system(pause);return0;3.4常量常量X=32,Y=255请按任意键继续请按任意键继续.44 常量小测试常量小测试下述常量定义哪些是错误的?为什么?
39、下述常量定义哪些是错误的?为什么?#defineratio=1/3#defineratio1/3;#define1st_character$#defineif71.不能有号;否则会用不能有号;否则会用=1/3替换替换ratio2.不能有语句结束符;号不能有语句结束符;号3.标识符只能以字符或者标识符只能以字符或者下划线开头下划线开头4.if是是C语言规定的关键语言规定的关键字,有特定含义,用户字,有特定含义,用户不能随便使用不能随便使用5.习惯上,常量名一般采习惯上,常量名一般采用大写字母。用大写字母。45 数据总线 控制路线 输入设备输入设备输出设备输出设备存储器存储器中央处理器(中央处理器
40、(CPU)运算部件运算部件控制部件控制部件地址总线 3.5输入和输出(输入和输出(I/O)一个真正有用的程一个真正有用的程序一般会从输入设序一般会从输入设备接收数据、并将备接收数据、并将运算结果输出到输运算结果输出到输出设备中。出设备中。为了实现和输入输出为了实现和输入输出设备的通信,程序必设备的通信,程序必须要有须要有输入和输出语输入和输出语句句。一个既无输入又。一个既无输入又无输出的程序是没有无输出的程序是没有用的。用的。46 输入和输出语句最基本的功能在于从外界环境将输入和输出语句最基本的功能在于从外界环境将值读入一个变量,或者将一个值写出到外界环值读入一个变量,或者将一个值写出到外界环
41、境中。境中。3.5输入和输出(输入和输出(I/O)47 一、输入一、输入 通过输入语句或者预先定义的函数可以从外界接收值。通过输入语句或者预先定义的函数可以从外界接收值。C C语言输入函数举例:语言输入函数举例: scanf(格式控制串,输入项地址表格式控制串,输入项地址表);格式控制串格式控制串:含有各种以百分号开头的格式控制符。:含有各种以百分号开头的格式控制符。输输入入项项地地址址表表:有有逗逗号号分分隔隔开开的的若若干干输输入入表表项项组组成成,每每一一个个表项是一个变量的地址。表项是一个变量的地址。scanf函函数数的的作作用用:从从标标准准输输入入设设备备(键键盘盘)上上读读取取一
42、一系系列列数数据据,按按格格式式控控制制串串的的要要求求进进行行转转换换并并送送到到输输入入项项地地址址表表所所列列的逐变量中。的逐变量中。3.5输入和输出(输入和输出(I/O)48 scanf(“%d”,&number1);u当当程程序序执执行行该该语语句句时时,等等待待用用户户从从键键盘盘输输入入数数据据并并转换成一个整数,存储到变量转换成一个整数,存储到变量number1中。中。ud:转换说明符(转换说明符(conversionspecifier),用于),用于告告诉程序键入的数据要转换成一个整数;诉程序键入的数据要转换成一个整数;u&:取变量地址的运算符,取变量地址的运算符,& &nu
43、mber1表示变量表示变量number1的的首首地址地址。注意:书写程序时不要遗漏注意:书写程序时不要遗漏&.&.3.5输入和输出(输入和输出(I/O)常用的转换说明符:常用的转换说明符:常用的转换说明符:常用的转换说明符:dd:整型;整型;整型;整型;c c:字符型;:字符型;:字符型;:字符型;f f:浮点型:浮点型:浮点型:浮点型格式控制串格式控制串输入项地址表输入项地址表49 3.5输入和输出(输入和输出(I/O)设设age为为int型变量,型变量,sex、ch为为char型变量,型变量,height为为float型变量。型变量。输入数据为:输入数据为:20M1.65若希望若希望age
44、得到值得到值20,sex得到值得到值M,height得到值得到值1.65,则函数调用为:,则函数调用为:scanf(“%d%c%f”,&age,&sex,&height);若希望若希望ch得到字符值得到字符值2,age得到整型值得到整型值0,sex得到得到字符值字符值M,height得到浮点值得到浮点值1.65,则函数调用为:,则函数调用为:scanf(“%c%d%c%f”,&ch,&age,&sex,&height);50 用用scanfscanf语句从键盘同时读入年龄和性别:语句从键盘同时读入年龄和性别:scanf(“%d scanf(“%d %c%c”,&age”,&age,&sex,&
45、sex););scanf(“%d,scanf(“%d,%c%c”,&age”,&age,&sex,&sex););3.5输入和输出(输入和输出(I/O)10S10,S格式控制串中除了转换说明符,还可以包含其他字符。格式控制串中除了转换说明符,还可以包含其他字符。从键盘输入的内容要和格式控制串匹配。如果在格式从键盘输入的内容要和格式控制串匹配。如果在格式控制串中除了转换说明符以外还有其它字符,则在输入控制串中除了转换说明符以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。如:数据时应输入与这些字符相同的字符。如:空格空格scanf(“age=%d, scanf(“age=%d, sex
46、=sex=%c%c”,&age”,&age,&sex,&sex););age=10,sex=S51 二、输出二、输出 通过语句或者预先定义的函数可以将值输出到外界。通过语句或者预先定义的函数可以将值输出到外界。C C输出函数举例:输出函数举例:printf(printf(格式控制串,输出项表格式控制串,输出项表格式控制串,输出项表格式控制串,输出项表); );功功能能:将将字字符符串串显显示示在在标标准准输输出出设设备备(一一般般为为显显示示器器)上上。程程序序员员可可以以将将常常量量、变变量量、表表达达式式、函函数数调用作为待输出字符串的一部分。调用作为待输出字符串的一部分。格格式式控控制制
47、串串:包包含含了了某某些些要要直直接接显显示示的的字字符符,也也包包含一些转换说明符。含一些转换说明符。输出项表:输出项表:可以是常量、变量、表达式、函数调用。可以是常量、变量、表达式、函数调用。3.5输入和输出(输入和输出(I/O)52 如:如: printfprintf(”Your age is : %d”,age”Your age is : %d”,age); ;注注意意,在在输输出出时时转转换换说说明明符符% %d d不不输输出出,而而是是被被变变量量ageage的的值值代代替替。假假设设变变量量ageage的的值值是是1818,则则显显示示器器上上将输出字符串将输出字符串“Your
48、age is : 18Your age is : 18” ” 注意:此处变量注意:此处变量ageage前面没有前面没有&!&!3.5输入和输出(输入和输出(I/O)上机练习:如果上述语句改写成上机练习:如果上述语句改写成printf(”Yourageis:”,age);输出将是怎样?输出将是怎样?53 3.5输入和输出(输入和输出(I/O)可以用可以用printf语句输出常量、变量、表达式、函语句输出常量、变量、表达式、函数调用的值:数调用的值:printf(“theageragescoreis%d”,SCORE);/输出常量输出常量printf(“yourageis%d”,age);/输出变
49、量输出变量printf(“thevalueof(2+3)10is:%dn”,(2+3)10);/输出表输出表达式的值达式的值printf(“thesizeofintis:%d”,sizeof(int);/输出函数返回输出函数返回值值54 若想同若想同时输出年出年龄和性和性别,则语句可写句可写为:printfprintf( “ Your Your age age is is : : %d%d,your your sex sex is is : : %c%c”,age,sex”,age,sex); ;显显示示器器上上将将输输出出字字符符串串“Your Your age age is is : :
50、18, 18, your sex is : F” your sex is : F” 3.5输入和输出(输入和输出(I/O)常用的转换说明符:常用的转换说明符:常用的转换说明符:常用的转换说明符:dd:整型;整型;整型;整型;c c:字符型;:字符型;:字符型;:字符型;f f:浮点型:浮点型:浮点型:浮点型输入输出后面会再详细讲解,有兴趣的同学可参见输入输出后面会再详细讲解,有兴趣的同学可参见C程程序设计教程序设计教程的的9.3和和9.11。55 #includemain()intnumber1;/*存放整数存放整数1*/intnumber2;/*存放整数存放整数2*/intresult;/*
51、存放结果存放结果*/printf(“pleaseinputthetwonumbers:n”);/*显示提示信息显示提示信息*/scanf(“%d%d”,&number1,&number2);/*读取整数读取整数*/result=number1*number2;/*赋值运算赋值运算*/printf(“theresultis:%dn”,result);/*输出结果输出结果*/return0;2000H2004Hresult2002H2005H2007H2006H2003H2001H存储空间存储空间number1number210 2010 20please input the two number
52、s:please input the two numbers:the result is : 200the result is : 2001020200任务描述:输入两个整数,任务描述:输入两个整数,求两数之积并输出。求两数之积并输出。编译后,源程序中出编译后,源程序中出现现number1、number2和和result的地方将会用的地方将会用内存相对地址(非真内存相对地址(非真正物理地址)替换。正物理地址)替换。思考:何时、在哪里思考:何时、在哪里得到真正的物理地址得到真正的物理地址?编译程序怎么处理变编译程序怎么处理变量?操作系统怎么分量?操作系统怎么分配内存?如何得到物配内存?如何得到物
53、理地址?深入学习:理地址?深入学习:编译原理编译原理操操作系统作系统计算机计算机组成原理组成原理假设操作系统已经分配如下内假设操作系统已经分配如下内存空间用于存放操作数和结果存空间用于存放操作数和结果程序运行过程演示程序运行过程演示56 找出以下程序的错误找出以下程序的错误1.include2.main()3.4.printf(“inputageandheightn”);5.scanf(“age=%d”,age);6.scanf(“%f”,height);7.printf(“age=%d,height=%f”,age);/输出输出8.return0;9.1.变量变量age和和height未定义
54、就使用;未定义就使用;2.scanf(“age=%d”,&age)3.scanf(“%f”,&height);4.3.printf(“age=%d,height=%f”,age,height);57 修正后的程序includemain()intagefloatheight;/变量定义变量定义printf(“inputageandheightn”);/输入提示输入提示scanf(“age=%d”,&age);/键盘输入变量键盘输入变量age的值的值scanf(%f,&height);printf(“age=%d,height=%f”,age,height);/输出输出system(pause);
55、return0;运行结果:运行结果:inputageandheightage=101.65age=10,height=1.65请按任意键继续请按任意键继续.58 输入输出练习:定义三个变量,分别是整型、输入输出练习:定义三个变量,分别是整型、浮点型、字符型。要求从键盘输入三个值存放浮点型、字符型。要求从键盘输入三个值存放到这三个变量里,并且输出这三个变量。到这三个变量里,并且输出这三个变量。#includemain()inti;floatf;charc;scanf(“%d,%f,%c”,&i,&f,&c);printf(“theresultis:n”);printf(“i=%d,f=%f,c=
56、%c”,i,f,c);system(“pause”);return0;说明:本程序中变量的命名没做说明:本程序中变量的命名没做到见名知义,这在同学们以后的到见名知义,这在同学们以后的编程中要注意避免。编程中要注意避免。59 #includemain()inti;floatf;charc;printf(inputi,fn);scanf(%d,%f,&i,&f);printf(inputcn);scanf(%c,&c);printf(theresultis:n);printf(i=%d,f=%f,c=%c,i,f,c);system(pause); return0;请同学们观察本程序的输出是什么?
57、请同学们观察本程序的输出是什么?inputi,f10,3.14inputctheresultis:i=10,f=3.140000,c=请按任意键继续请按任意键继续.程序并没有给用户输入字程序并没有给用户输入字符数据的机会。为什么?符数据的机会。为什么?【链接链接】60 解决方法:用解决方法:用getchar函数来读取回车符函数来读取回车符main()inti;floatf;charc;printf(inputi,fn);scanf(%d,%f,&i,&f);getchar();/*将存于缓冲区的回车符读入将存于缓冲区的回车符读入*/printf(inputcn);scanf(%c,&c);pr
58、intf(theresultis:结果是结果是n);printf(i=%d,f=%f,c=%c,i,f,c);system(pause);inputi,f10,3.14inputcytheresultis:i=10,f=3.140000,c=y请按任意键继续请按任意键继续.结果正确!结果正确!此外,还可以用此外,还可以用fflush函数函数来清空键盘缓冲区。见实来清空键盘缓冲区。见实验讲义附录验讲义附录1的第的第16个错误个错误(第(第130页),要求自学。页),要求自学。61 u表表达达式式是是由由运运算算符符、操操作作数数和和括括号号组组成成的的、计计算算求求值值的基本单位。的基本单位。u
59、操作数可以是:操作数可以是:常量、变量、函数调用和表达式;常量、变量、函数调用和表达式;u表达式举例:表达式举例:u2 2 表达式无运算符,操作数为常量表达式无运算符,操作数为常量ui i 表达式无运算符,操作数为变量表达式无运算符,操作数为变量usizeof(int) sizeof(int) 表达式无运算符,操作数为函数调用表达式无运算符,操作数为函数调用u2 + i 2 + i 操作数为常量和变量操作数为常量和变量ui * sizeof(int) i * sizeof(int) 操作数为变量和函数调用操作数为变量和函数调用u2+ 2+ i i * * sizeof(int) sizeof(
60、int) 加加法法运运算算的的第第2 2个个操操作作数数仍仍为为表达式表达式3.6表达式表达式62 3.6表达式表达式u典型的几类运算符和表达式典型的几类运算符和表达式:算术运算符和算术表达式;算术运算符和算术表达式;关系运算符和关系表达式;关系运算符和关系表达式;逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式;赋值运算符和赋值表达式赋值运算符和赋值表达式;63 3.6表达式表达式一、算术运算符和算术表达式一、算术运算符和算术表达式算术运算符:、算术运算符:、/ /、( (取余取余) ) 等;等;算算术术表表达达式式:由由算算术术运运算算符符、操操作作数数和和括括号号构构成成的的表表达达式式。如
61、如:(2 2 + + 8 8.2 .2 / / 3 3)* * 4 4 ,10 10 4 4(余数为(余数为2 2)+(加)加)-(减)(减)*(乘)(乘)/(除,取商)(除,取商)%(取模)(取模)+(自加,加自加,加1)-(自减,减(自减,减1)64 3.6表达式表达式算术表达式算术表达式(b*b-4*a*c)/(2*a)要注意编程序式,程序中对算术表达式的书写和要注意编程序式,程序中对算术表达式的书写和平时的书写方式可能是不一样的:平时的书写方式可能是不一样的:在程序中要写成在程序中要写成65 在在C语言中,算术运算的操作数可以是整数、字符语言中,算术运算的操作数可以是整数、字符或者浮点
62、数。如果表达式中的操作数全是字符或或者浮点数。如果表达式中的操作数全是字符或者整数,则表达式的值为整数;如果操作数至少者整数,则表达式的值为整数;如果操作数至少有一个是浮点数,则表达式的值为浮点数。有一个是浮点数,则表达式的值为浮点数。3.6表达式表达式算术表达式算术表达式求以下表达式的值:求以下表达式的值:1)102/202)102%203)1/24)1.0/25)x=A+32(x是整是整型变量)型变量)求以下表达式的值:求以下表达式的值:1)102/20=52)102%20=23)1/2=0值为整数值为整数4)1.0/2=0.5值为浮点数值为浮点数5)x=A+32x97提示:字符数据总是提
63、示:字符数据总是先转换成整型数据,先转换成整型数据,再参与运算的。再参与运算的。66 3.6表达式表达式算术表达式算术表达式C语言中,整型、字符型、浮点型数据可以进语言中,整型、字符型、浮点型数据可以进行行混合运算混合运算.如:如:5+1.0+A=71.000000混合运算涉及到混合运算涉及到数据类型的转换数据类型的转换,具体将在以,具体将在以后介绍。后介绍。自加运算符自加运算符+和自加运算符和自加运算符-是是C语言特有的语言特有的运算符,将在以后介绍。运算符,将在以后介绍。67 3.6表达式表达式二、关系运算符和关系表达式二、关系运算符和关系表达式关系运算符:用于比较两个数据的大小关系。关系
64、运算符:用于比较两个数据的大小关系。关关系系表表达达式式:用用关关系系运运算算符符将将两两个个表表达达式式连连接接起起来来构构成成的的表表达达式式,如如(2(23)10 3)10 ;运运算算结结果果是是逻逻辑辑“真真”或者或者“假假”。在在C C语语言言中中,若若运运算算结结果果是是逻逻辑辑“真真”,则则关关系系表达式的值为表达式的值为1 1;若为逻辑;若为逻辑“假假”,则值为,则值为0 0。 (小于)小于)(大于)(大于)=(大于等于)(大于等于)(等于)(等于)!(不等于)!(不等于)68 3.6表达式表达式关系表达式关系表达式思考:以下语句的输出结果是什么?思考:以下语句的输出结果是什么
65、?printf(thevalueof(2+3)10is:%dn,(2+3)10);printf(thevalueof(2+3)=10is:%dn,(2+3)=10);thevalueof(2+3)10is:1thevalueof(2+3)=10is:069 3.6表达式表达式三、逻辑运算符和逻辑表达式三、逻辑运算符和逻辑表达式逻辑运算符:与、或、非逻辑运算符:与、或、非 &(与)(与)a&b:当且仅当操作数:当且仅当操作数a和和b的值都为的值都为“真真”时,运算结果为时,运算结果为“真真”,否则为,否则为“假假”(如何判断操作数是否为真?如何判断操作数是否为真?)|(或)(或)a|b:当且仅当
66、操作数:当且仅当操作数a和和b值都为值都为“假假”时,运算结果为时,运算结果为“假假”,否则为,否则为“真真”。!(非)!(非)!a:当操作数当操作数a的值为的值为“真真”时,运算结果时,运算结果为为“假假”;当操作数;当操作数a的值为的值为“假假”时,时,运算结果为运算结果为“真真”C语言中,只要操作语言中,只要操作数值为非数值为非0,即为真。,即为真。值为值为0,即为假,即为假70 3.6表达式表达式逻辑表达式逻辑表达式逻逻辑辑表表达达式式:用用逻逻辑辑运运算算符符将将表表达达式式(一一般般为为关关系系表表达达式式)连连接接起起来来构构成成的的表表达达式式 ;运运算算结结果果是逻辑是逻辑“
67、真真”或者或者“假假”; 在在C C语语言言中中,若若运运算算结结果果是是逻逻辑辑“真真”,则则逻逻辑辑表达式的值为表达式的值为1 1;若为逻辑;若为逻辑“假假”,则值为,则值为0 0。逻辑表达式求值的两个要点:逻辑表达式求值的两个要点:判断操作数判断操作数值是是“真真”还是是“假假”;当当逻辑表表达达式式求求值结束束后后,将将运运算算结果果的的逻辑“真真”或或“假假”转换为整型整型值1 1或或0 0。 71 3.6表达式表达式逻辑表达式逻辑表达式intmain()inta=1,b=2,c=4,f;printf(“a=%d,b=%d,c=%dn,a,b,c);f=(ab)&(bc);print
68、f(“f=(ab)&(bb)|(bc);printf(f=(ab)|(bc),f为为%dn,f);printf(!(ab)is:%dn,!(ab);printf(!ais:%dn,!a);system(pause);return0;输出结果?输出结果?a=1,b=2,c=4f=(ab)&(bb)|(bc),f为为0!(ab)is:1!ais:072 3.6表达式表达式逻辑表达式逻辑表达式注意连续的关系运算:注意连续的关系运算:数学上的数学上的abc,在,在C语言中虽然也允许这语言中虽然也允许这么写,但其含义数学中完全不同。么写,但其含义数学中完全不同。请思考:在请思考:在C程序中的表达式程序中
69、的表达式352的值?的值?数学中的该类表达式在数学中的该类表达式在C语言中应该写成:语言中应该写成:(ab)&(b20&a%5=0的值?的值?优先级:优先级:算术运算符算术运算符高于高于关系运算符关系运算符高于高于逻辑运算符逻辑运算符高于高于赋值运算符赋值运算符如:如:i=a20&a%5=0相当于:相当于:i=(a20)&(a%5)=0)如何理解:对算术运算结果进行关系运算,关如何理解:对算术运算结果进行关系运算,关系运算结果进行逻辑运算,以上运算结果赋值系运算结果进行逻辑运算,以上运算结果赋值给变量(赋值运算)。给变量(赋值运算)。后续会详细介绍后续会详细介绍。75 表达式小测试u将下列描述
70、表示为将下列描述表示为C语言表达式:语言表达式:1)整数)整数i被整数被整数j整除整除(即余数为即余数为0);2)整数)整数m是偶数;是偶数;3)y-100,-10,且且y10,100;4)判断)判断x年是否是闰年年是否是闰年,闰年的条件:闰年的条件:a)能被)能被4整除但不能被整除但不能被100整除;整除;或或b)能被)能被400整除;整除;5)将整型变量)将整型变量i和和j相除后的结果赋值相除后的结果赋值给整型变量给整型变量t;1.i%j=02.m%2=03.y-10&y1004.(x%4=0&x%100!=0)|(x%100=0&x%400=0)5.(x%4=0&x%100!=0)|(x
71、%400=0)6.5.t=i/j76 字符型数据操作测试字符型数据操作测试#includemain()charch1=A,ch2=S;/*A、a、S的的ASCII分别是分别是65,97,83*/printf(%c,%dn,ch1,ch1);printf(%c,%dn,ch2,ch2);printf(%c,%dn,ch1+32,ch1+32);printf(%dn,ch1=a&c=A&c=Z)字符型数据操作测试字符型数据操作测试请思考:请思考:1和和1的区别的区别78 u语句用于向计算机发出操作指令。语句用于向计算机发出操作指令。u一条语句经编译后产生一条或多条机器指令。一条语句经编译后产生一条
72、或多条机器指令。u一个实际的程序可能包括若干条语句。一个实际的程序可能包括若干条语句。uC语言规定了语言规定了6类语句:类语句:表达式语句、复合语句表达式语句、复合语句、选择语句、选择语句、循环语句循环语句、标记语句、跳转语句、标记语句、跳转语句3.7语句语句79 一、一、表达式语句表达式语句 表表达达式式:算算术术表表达达式式、关关系系表表达达式式、逻逻辑辑表表达达式式、 赋值表达式。赋值表达式。 表表达达式式语语句句:在在一一个个表表达达式式末末尾尾加加上上分分号号“;”(分号是(分号是C语言中语句的结束符)语言中语句的结束符)。i ij;(一个表达式语句,但无意义)(一个表达式语句,但无
73、意义)i=i+10*j;(赋值表达式语句)(赋值表达式语句)printf(“age=%d”,age);(表表达达式式语语句句,表表达达式式为为函函数数调用)调用)3.7语句语句80 如如果果表表达达式式涉涉及及到到赋赋值值(存存在在赋赋值值运运算算符符或或运运算算符符+或或-,如如i=i+10*j;),则则将将计计算算得得到到的的值保存到变量中。值保存到变量中。如果不涉及赋值(如语句如果不涉及赋值(如语句ij;),则值将被丢弃),则值将被丢弃. .3.7语句语句81 二、二、复合语句复合语句 复复合合语语句句是是包包含含零零个个或或多多个个语语句句的的代代码码单单元元,使使得得一组语句一组语句
74、成为一个整体成为一个整体,也被称为,也被称为块块。在在C C语语言言中中,复复合合语语句句由由一一个个左左大大括括号号、可可选选语语句段、一个右大括号句段、一个右大括号组成。如:组成。如: i = 1;i = 1;j = 2 * i;j = 2 * i; 3.7语句语句82 三、三、选择语句选择语句3.7语句语句u 在在写写程程序序时时,有有时时往往往往需需要要测测试试某某一一个个条条件件 是是否否成成立立,然然后后根根据据测测试试结结果果来来控控制制程程序序后后续续执执行路径。此时要用到选择语句。行路径。此时要用到选择语句。u C C语言中选择语句有:语言中选择语句有: 1)if-else语
75、句语句2)switch语句语句(以后再讲以后再讲)83 1)if-elseif-else 实现双路选择实现双路选择if(表达式表达式)语句语句1else语句语句2b)C语句语句a)流程图流程图表达式表达式语句语句1语句语句2真(非真(非0)假(为假(为0)3.7语句语句84 3.7语句语句1.if-else语语 句句 中中 的的 “表表 达达 式式 ”必必 须须 用用 “(”和和“)”括括起起来来;表表达达式式可可以以是是任任一一种种表表达达式式,关关系系表表达达式式和和逻逻辑辑表表达达式式较较常常见见;表表达达式式的的值值为非零时,为为非零时,为“真真”,否则为,否则为“假假”。2.语语句句
76、可可以以是是任任何何语语句句:表表达达式式语语句句、复复合合语语句句、选择语句和循环语句。选择语句和循环语句。3.else子子句句是是if语语句句的的一一部部分分,必必须须与与if配配对对使使用用,不能单独使用。不能单独使用。4.可以没有可以没有else子句(但必须有子句(但必须有if子句),即:子句),即:if(表达式表达式)语句语句85 例例3.3输入一个整数,判别它是否能被输入一个整数,判别它是否能被3整除。整除。若能被若能被3整除,输出整除,输出YES;若不能被;若不能被3整除,输出整除,输出NO。#include#include/system函数的原型函数的原型main()intn;
77、/*变量变量n用于存放输入的整数用于存放输入的整数*/printf(inputn:);/*输入提示输入提示*/scanf(%d,&n);/*输入整数到变量输入整数到变量n中中*/if(n%3=0)/*判断判断n能否被能否被3整除整除*/printf(n=%dYESn,n);/*若若n能被能被3整除,则输出整除,则输出“YES”*/elseprintf(n=%dNOn,n);/*若若n不能被不能被3整除,则输出整除,则输出“NO”*/system(pause);return0;inputn:2020n=20NO请按任意键继续请按任意键继续86 #includemain()intn;/*定义变量定
78、义变量n*/printf(inputn:);/*输入提示输入提示*/scanf(%d,&n);/*输入整数到变量输入整数到变量n中中*/if(n=0)printf(nerrorinput!thenumbershouldbepositive);elseif(n%3=0)printf(nn=%d,YES,n);/*若若n能被能被3整除,则输出整除,则输出“YES”*/elseprintf(nn=%d,NO,n);/*若若n不能被不能被3整除,则输出整除,则输出“NO”*/system(pause);return0;else和离它最和离它最近的近的if匹配匹配改动:输入一个改动:输入一个正整数正整数
79、,判别它是否能被,判别它是否能被3整除。整除。若输入的不是正整数,则提示出错信息;否则,若输入的不是正整数,则提示出错信息;否则,若能被若能被3整除,输出整除,输出YES;若不能被;若不能被3整除,输出整除,输出NO。1)通过缩进来更好地展示代码结构;)通过缩进来更好地展示代码结构;2)if-else是一条语句,不用加是一条语句,不用加87 #includemain()intn;/*定义变量定义变量n*/printf(inputn:);/*输入提示输入提示*/scanf(%d,&n);/*输入整数到变量输入整数到变量n中中*/if(n=0)printf(nerrorinput!thenumbe
80、rshouldbepositive);elseif(n%3=0)printf(nn=%d,YES,n);/*若若n能被能被3整除,则输出整除,则输出“YES”*/elseprintf(nn=%d,NO,n);/*若若n不能被不能被3整除,则输出整除,则输出“NO”*/system(pause);return0;嵌套的嵌套的ifelse语句的另外一种写法语句的另外一种写法88 练习练习1:输入一个字符,如果是小写字母,则输出输入一个字符,如果是小写字母,则输出为:为:thisisalower-caseletter;如果是大写如果是大写字母,则输出为:字母,则输出为:thisisaupper-ca
81、seletter;如果是数字,则输出为:;如果是数字,则输出为:thisisadigit;若是其他,则输出为:;若是其他,则输出为:thisisneitheraletternoradigit.89 #include#includemain()charch;printf(inputachar:);scanf(%c,&ch);if(ch=a&ch=A&ch=0&ch0)解题思路:解题思路:1.题目本质上就是要反复输出一个数,题目本质上就是要反复输出一个数,因此可以考虑使用循环结构。因此可以考虑使用循环结构。2.由于每次输出的值不同,但是有规由于每次输出的值不同,但是有规律(加律(加1),因此可以考
82、虑把要输),因此可以考虑把要输出的值保存到变量出的值保存到变量i中,每一次循中,每一次循环即是输出变量环即是输出变量i的值。每次输出的值。每次输出后令后令i值加值加1。3.i初始值为初始值为0。2000H2002H2004H2003H2001H存储空间存储空间i0 1 2 95 #include#include#defineN10main()inti;i=0;while(i0)循环初始化;循环初始化;while(循环条件)(循环条件)本次循环本职工作;本次循环本职工作;修改相关变量,为下一次修改相关变量,为下一次循环做准备;循环做准备;循环体:每次循环做相同的操作,循环体:每次循环做相同的操作
83、,只是操作的是不同的数据。只是操作的是不同的数据。循环问题分析要点:循环问题分析要点:96 程序运行效果:程序运行效果:请输入正整数请输入正整数:-24请输入正整数:请输入正整数:-5请输入正整数请输入正整数:5练习练习2:输入一个正:输入一个正整数。若输入的不整数。若输入的不是正整数,则提示是正整数,则提示出错信息,并请用出错信息,并请用户重新输入,直到户重新输入,直到输入一个正整数。输入一个正整数。分析:只要输入不是正整数,就给出提示信息,要求重分析:只要输入不是正整数,就给出提示信息,要求重新输入;新输入;反复反复这么做,因此可以使用循环结构。这么做,因此可以使用循环结构。97 程序主体
84、:程序主体:main()intnum;printf(“请输入正整数请输入正整数:n”);scanf(“%d”,&num);while(num=0)printf(“请输入正整数请输入正整数:n”);scanf(“%d”,&num);练习练习2:输入一个正整数。:输入一个正整数。循环初始化;循环初始化;while(循环条件)(循环条件)本次循环本职工作;本次循环本职工作;修改相关变量,为下修改相关变量,为下一次循环做准备;一次循环做准备;循环结构分析:循环结构分析:98 #includemain()intnum;/*变量变量num存储读入的整数存储读入的整数*/printf(inputn(n0):
85、);/*输入提示输入提示*/scanf(%d,&num);/*输入整数到变量输入整数到变量n中中*/while(num0):);scanf(%d,&num);练习练习3:输入一个正整数,判别它是否能被:输入一个正整数,判别它是否能被3整整除。若输入的不是正整数,则提示出错信息,除。若输入的不是正整数,则提示出错信息,并请用户重新输入;否则,若能被并请用户重新输入;否则,若能被3整除,输出整除,输出YES;若不能被;若不能被3整除,输出整除,输出NO。99 练习练习3:判断正整数能否被:判断正整数能否被3整除。整除。if(num%3=0)/*若若n能被能被3整除,则输出整除,则输出YES”*/p
86、rintf(nnum=%d,YES,num);else/*若若n不能被不能被3整除,则输出整除,则输出“NO”*/printf(nnum=%d,NO,num);system(pause);return0;100 分析:分析:C程序设计语言只能提供求两个数的和的算数运程序设计语言只能提供求两个数的和的算数运算。如何利用这个基本能力求得算。如何利用这个基本能力求得n个数的和?考虑到:个数的和?考虑到:sum(a1,a2)=a1+a2sum(a1,a2,a3)=sum(a1,a2)+a3sum(a1,a2,an)=sum(a1,a2,an-1)+an那就是进行那就是进行n-1次的两数求和次的两数求和
87、,每一次的求和都是把一个每一次的求和都是把一个数加到已经得到的和中。数加到已经得到的和中。因此可以考虑使用循环结构解题。因此可以考虑使用循环结构解题。练习练习4:输入一个正整数:输入一个正整数n,求,求1n之间的整数的和。之间的整数的和。101 练习练习4:求:求1n之间的整数的和之间的整数的和每一次求和,两个数都是在变的,因此需要使用每一次求和,两个数都是在变的,因此需要使用变量来保存这两个数。假设用变量变量来保存这两个数。假设用变量sum来保存来保存已经求得的和,已经求得的和,i保存另一个数。保存另一个数。1sum2i初始状态初始状态3sum3i第第1次求和:次求和:i的值的值2加入加入s
88、um中中6sum4i第第2次求和:次求和:i的值的值3加入加入sum中中102 练习练习4:求:求1n之间的整数的和之间的整数的和循环初始化循环初始化:i=2;sum=1;while(循环条件(循环条件:i=n)本次循环本职工作:本次循环本职工作:求两数之和求两数之和sum=sum+i;修改相关变量,为下一次循环做准备:修改相关变量,为下一次循环做准备:i=i+1;103 练习练习4:求:求1n之间的整数的和之间的整数的和#includemain()intn,i;/n:存放读取的整数存放读取的整数intsum;/存放求得的和存放求得的和printf(inputn(n0):);/*输入提示输入提
89、示*/scanf(%d,&n);/*输入整数到变量输入整数到变量n中中*/i=2;sum=1;/循环初始化循环初始化while(i=n)sum=sum+i;i=i+1;printf(sumis:%dn,sum);system(pause);return0;104 练习练习5:打印三角形打印三角形(要求采用循环结构)(要求采用循环结构)*(5个个*)*(7个个*)*(9个个*)105 练习练习5:打印三角形打印三角形#include#defineLINES3main()intline;intcount;line=1;while(line=LINES)/输出第输出第line行行:输出输出line个
90、个*号号count=1;while(count0)。#include#defineN10main()inti=0;doprintf(%d,i);i=i+1;while(i0)。#include#defineN10main()inti;for(i=0;i=N;i=i+1)printf(“%d”,i);system(pause);return0;111 表达式表达式1和表达式和表达式3可以是用逗号格开的表达式列表。可以是用逗号格开的表达式列表。如:如:for(i=1,j=50;i=20;i+,j-=5)在在for结构中,表达式结构中,表达式1和表达式和表达式3部分应该只放置包含部分应该只放置包含控
91、制变量的表达式。对其他变量的操作应该放在循环控制变量的表达式。对其他变量的操作应该放在循环体之前或循环体之后;体之前或循环体之后;for结构中的三个表达式是可有可无的:如果在程序的结构中的三个表达式是可有可无的:如果在程序的其他地方初始化了控制变量,则可以省去表达式其他地方初始化了控制变量,则可以省去表达式1;如;如果省略了表达式果省略了表达式2,则假定条件为真,建立了一个,则假定条件为真,建立了一个“无无限循环限循环”;如果在;如果在for结构体中计算了递增(递减)表结构体中计算了递增(递减)表达式或者不需要递增(递减)表达式,则可以省去表达式或者不需要递增(递减)表达式,则可以省去表达式达
92、式3。for(表达式表达式1;表达式表达式2;表达式表达式3)112 3.8函数函数u函函数数是是封封装装并并给给以以命命名名的的一一段段程程序序代代码码,完完成成明明确的功能,可供调用。确的功能,可供调用。u函函数数是是C语语言言程程序序设设计计的的基基本本单单位位。一一个个C语语言言程程序序是是由由一一个个主主函函数数(main)和和其其他他若若干干个个子子函函数数组成的。组成的。u程程序序的的运运行行都都从从主主函函数数开开始始,也也是是由由主主函函数数结结束束。主主函函数数可可以以调调用用其其他他函函数数(子子函函数数)来来完完成成一一些些特定任务,而子函数还可以调用其他子函数。特定任
93、务,而子函数还可以调用其他子函数。u主主函函数数由由操操作作系系统统调调用用,其其他他函函数数由由主主函函数数调调用用,当主函数执行结束,控制便交还给操作系统。当主函数执行结束,控制便交还给操作系统。113 3.8函数函数#includemain()intnumber1;intnumber2;intresult;printf(“pleaseinputthetwonumbers:n”);scanf(“%d%d”,&number1,&number2);result=number1*number2;printf(“theresultis:%dn”,result);return0;局部定义局部定义语句
94、语句函数头函数头函数函数函数头函数头函数体函数体局部定义局部定义语句语句关于函数的更详细内容将在后面专门介绍关于函数的更详细内容将在后面专门介绍114 includeintsum(intnum1,intnum2);intmain(void)total=sum(x,y);return0;intsum(intnum1,intnum2)return(num1+num2);函数调用函数调用函数定义函数定义函数声明函数声明void:函数不:函数不接收任何参数接收任何参数返回值类返回值类型型函数参数函数参数115 总结与回顾总结与回顾掌握了:掌握了:输入、输出语句;输入、输出语句;表达式;表达式;赋值语句
95、;赋值语句;在此基础上再增加:在此基础上再增加:控制结构控制结构在此基础上增加:在此基础上增加:函数函数就可以编写简单的程序;就可以编写简单的程序;就可以编写任意复杂的程序;就可以编写任意复杂的程序;就可以编写易于管理、理解和就可以编写易于管理、理解和维护的程序;维护的程序;116 思考题:思考题:u为什么说高级语言是与机器无关的?为什么说高级语言是与机器无关的?u同一个同一个C语言程序,如果想在两台具有不同指语言程序,如果想在两台具有不同指令系统的机器上运行,编译后得到的目标程序令系统的机器上运行,编译后得到的目标程序是否一样?能否用同一个编译器进行编译?是否一样?能否用同一个编译器进行编译?117 118