c语言的设计与导引_第1页
c语言的设计与导引_第2页
c语言的设计与导引_第3页
c语言的设计与导引_第4页
c语言的设计与导引_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、第七讲第七讲 C程序设计导引程序设计导引I)北京大学信息科学技术学院北京大学信息科学技术学院关于规矩关于规矩 做任何事情,都需要按照一定的规矩来,即所谓的“不依规矩,不成方圆”。自然语言:字、词、句子;主谓宾、定状补语法);讲究搭配语义);有段落、有结构; 形成不同的文章,不同的人都能看懂程序设计语言:有同样的规范要求, 可以编制解决不同问题的程序,不同人能看懂,机器也能够执行程序设计语言程序设计语言n用高级语言书写的程序不可能直接在计算机上执行,需要将它转换成机器语言指令程序。n为什么能够转换?因为它有一定的规矩n在计算机上将高级语言书写的程序转换成机器语言指令程序,有两种基本方法:n编译C

2、ompilation方式n解释Interpretation方式p 任何程序设计语言,都是由语言规范和一系列开发库组成的。p C语言,是一种编译方式的语言,它同样包括语言规范,以及方便人们进行程序开发的函数库;MS Visual C+更是提供了庞大的APIs和MFC。p 学习任何程序设计语言,都是要从这两方面着手,尤其是要能够熟练地使用开发库。程序设计语言程序设计语言开发库p 程序结构p 基本元素:标识符和关键字p 变量、常量和数据类型p 运算符和表达式p 语句及控制流p C语言标准库函数语言规范语言规范开发库开发库C程序设计语言程序设计语言p C语言程序基本框架语言程序基本框架p 标识符和关键

3、字标识符和关键字p 数据类型、变量、常量数据类型、变量、常量p 运算符和表达式运算符和表达式p 标准库函数:输入与输出标准库函数:输入与输出p 程序示例程序示例主要内容主要内容/*求圆的面积求圆的面积*/#define PI 3.14159 /*预编译:宏定义预编译:宏定义*/#include /*预编译:文件包含预编译:文件包含*/#include float getArea(float r); /*自定义函数:求面积函数自定义函数:求面积函数*/*主函数主函数*/int main(int argc, char* argv) float s1,s2; /*定义变量定义变量*/ float r

4、1,r2; /*计算第计算第1个圆的面积个圆的面积*/ printf(“请输入第一个圆的半径:请输入第一个圆的半径:”); /*调用调用stdio.h中的函数中的函数printf(),将相关内容输出到屏幕中去,将相关内容输出到屏幕中去*/ scanf(%f, &r1); /*调用调用stdio.h中的函数中的函数scanf(),从键盘中输入半径,从键盘中输入半径r1的值的值*/ s1 = 3.14159f * r1 * r1; /*求面积求面积*/ printf(“n第一个半径为第一个半径为%f的圆的面积为:的圆的面积为:%fn”, r1,s1); /*调用函数调用函数printf(),将计算

5、的面积输出到平面中去,将计算的面积输出到平面中去*/ /*计算第计算第2个圆的面积个圆的面积*/ r2 = 104.6f; /*半径为半径为104.6*/ s2 = getArea(r2); /*调用自定义函数求圆的面积调用自定义函数求圆的面积*/ printf(n第二个半径为第二个半径为%f的圆的面积为:的圆的面积为:%fn, r2,s2); /*调用函数调用函数printf(),将计算的面积输出到平面中去,将计算的面积输出到平面中去*/*自定义函数:求半径为自定义函数:求半径为r的圆的面积的圆的面积*/float getArea(float r) float s; s = (float)(

6、PI * pow(r, 2); /*利用所定义的宏利用所定义的宏PI替换替换3.14159,调用,调用math.h中的求幂函数中的求幂函数pow()*/ return s;C程序基本框架程序基本框架/*主函数*/int main(int argc, char* argv) float s1,s2; /*定义变量*/ float r1,r2; /*计算第1个圆的面积*/ printf(请输入第一个圆的半径:); /*调用stdio.h中的函数printf(),将相关内容输出到屏幕中去*/ scanf(%f, &r1); /*调用stdio.h中的函数scanf(),从键盘中输入半径r1的值*/

7、s1 = 3.14159f * r1 * r1; /*求面积*/ printf(n第一个半径为%f的圆的面积为:%fn, r1,s1); /*调用函数printf(),将计算的面积输出到平面中去*/ /*计算第2个圆的面积*/ r2 = 104.6f; /*半径为104.6*/ s2 = getArea(r2); /*调用自定义函数求圆的面积*/ printf(n第二个半径为%f的圆的面积为:%fn, r2,s2); /*调用函数printf(),将计算的面积输出到平面中去*/ return 0;/*求圆的面积*/#define PI 3.14159 /*预编译:宏定义*/#include /

8、*预编译:文件包含*/#include float getArea(float r); /*自定义函数声明:求面积函数*/*主函数*/int main(int argc, char* argv)./*自定义函数定义:求半径为r的圆的面积*/float getArea(float r) float s; s = (float)(PI * pow(r, 2); /*利用所定义的宏PI替换3.14159,调用math.h中的求幂函数pow()*/ return s;时总是从主函数开始,在主函数内结束。时总是从主函数开始,在主函数内结束。int main() 1、C程序基本框架程序基本框架函数函数/主

9、函数主函数1、C程序基本框架程序基本框架函数函数/主函数主函数其他函数其他函数标准库函数:随标准库函数:随C语言环境一起提供的各种标语言环境一起提供的各种标准的通用功能函数,只能调用准的通用功能函数,只能调用(先文件包含:先文件包含:#include ) 。例:。例:#include #include s = (float)(PI * pow(r, 2); pow(x, y) 求求xy (math.h,数学函数),数学函数)scanf(%f, &r1);scanf(“%f”, ) 从键盘中输入数据从键盘中输入数据stdio.h,输入输出函数),输入输出函数)printf(n第一个半径为第一个半

10、径为%f的圆的面积为:的圆的面积为:%fn, r1,s1);printf(“%f”, ) 往屏幕中输出数据往屏幕中输出数据stdio.h,输入输出函数),输入输出函数)1、C程序基本框架程序基本框架函数函数/主函数主函数其他函数其他函数自编定义函数:必须先定义声明),后自编定义函数:必须先定义声明),后调用,例:调用,例:float getArea(float r); /函数声明函数声明 s2 = getArea(r2); /函数调用函数调用float getArea(float r) /函数实现函数实现 float s; s = (float)(PI * pow(r, 2); /*利用所定义

11、利用所定义的宏的宏PI替换替换3.14159,调用,调用 math.h中的求幂中的求幂函数函数pow()*/ return s;1、C程序基本框架程序基本框架函数函数/主函数主函数1、C程序基本框架程序基本框架函数函数/主函数主函数主函数main()标准库函数自定义函数自定义函数自定义函数函数的调用函数的调用函数的一般形式函数的一般形式返回值类型 函数名(参数列表) 语句1、C程序基本框架程序基本框架函数函数/主函数主函数float getArea(float r) float s; s = (float)(PI * pow(r, 2); /*调用math.h中的求幂函数*/ return s

12、;n变量:存放数据的容器对应于内存空间),有不同的数据变量:存放数据的容器对应于内存空间),有不同的数据类型。类型。n语句:一个由分号(语句:一个由分号(;)结尾的单一命令是一条语句)结尾的单一命令是一条语句Statement),一条语句可以完成一条或若干条指令功能。),一条语句可以完成一条或若干条指令功能。为了完成不同的功能,为了完成不同的功能,C语言中有多种不同类型的语句将语言中有多种不同类型的语句将在第在第8讲中讲述),如:讲中讲述),如:nfloat s, r; / 变量定义语句变量定义语句nr = 10; / 变量赋值语句变量赋值语句ns = 3.1416*r*r; / 执行乘法运算

13、并赋值的语句执行乘法运算并赋值的语句n代码段:用大括号(代码段:用大括号( )围起来的多条语句构成一个)围起来的多条语句构成一个代码段代码段Code block);有时代码段同时也包括大括号前的);有时代码段同时也包括大括号前的一些修饰性描述,如:一些修饰性描述,如:nint i;nfor (i=0; i=1; i+) nn1、C程序基本框架程序基本框架变量变量/语句语句/代码段代码段用用意义:直观意义:直观/多次使用多次使用/便于修改便于修改注意:注意: #define 可出现在程序的任一位置作可出现在程序的任一位置作用范围:由此行到程序末尾),宏定义不是用范围:由此行到程序末尾),宏定义不

14、是C语句,不必在行未加分号,否则会连分号一语句,不必在行未加分号,否则会连分号一起置换。起置换。1、C程序基本框架程序基本框架预编译处理预编译处理编译预处理编译预处理文件包含文件包含形式:形式:#include #include “stdafx.h”stdio.h “头文件头文件”,标准库前导,标准库前导文件文件stdafx.h “头文件头文件”,自定义前导,自定义前导文件文件C语言是一种语言是一种“装配式装配式语言,许多常规的语言,许多常规的工作如输入、输出、数学函数等,往往事工作如输入、输出、数学函数等,往往事先由人做成各种先由人做成各种“程序模块程序模块”(.lib),并将,并将其定义存

15、放在各种所谓其定义存放在各种所谓“头文件头文件”(.h)中。中。文件包含的作用,就是根据需要把相应的某文件包含的作用,就是根据需要把相应的某个个“头文件头文件定义所涉及的定义所涉及的“程序模块程序模块在编译时先整体嵌入所编的程序中。在编译时先整体嵌入所编的程序中。用户也可以将自己设计的程序模块等做成用户也可以将自己设计的程序模块等做成“程序模块程序模块及及“头文件头文件”,供其他程序,供其他程序“包含包含”(调用)。(调用)。1、C程序基本框架程序基本框架预编译处理预编译处理使用使用“文件包含文件包含功能的优点功能的优点支持程序模块的共享支持程序模块的共享提高程序设计效率和程序可靠性提高程序设

16、计效率和程序可靠性减少程序员重复劳动量减少程序员重复劳动量 C提供了三百多个标准库函数,由若干个头提供了三百多个标准库函数,由若干个头文件包含函数定义文件包含函数定义声明声明、数据类型定义、数据类型定义、宏定义等的文件进行说明宏定义等的文件进行说明(第第8讲中介绍讲中介绍) :stdio.h 标准输入标准输入/输出函数输出函数math.h 数学函数数学函数stdlib.h 常用函数常用函数 一个优秀的程序员不应是事无巨细都要从头一个优秀的程序员不应是事无巨细都要从头做起的做起的“工匠工匠”,而应是一个,而应是一个“策划师策划师” + “组装师组装师”。所以。所以 ,逐步熟悉并掌握常用函,逐步熟

17、悉并掌握常用函数等现有功能模块,是学习数等现有功能模块,是学习C程序设计的一个程序设计的一个重要内容。重要内容。1、C程序基本框架程序基本框架预编译处理预编译处理/stdio.h/宏定义#define EOF (-1)#define NULL 0/数据类型定义typedef struct fpos_t unsigned int lopart; int hipart; fpos_t;/函数定义_CRTIMP int _cdecl scanf(const char *, .);_CRTIMP int _cdecl printf(const char *, .);_CRTIMP int _cdecl

18、 getchar(void);_CRTIMP int _cdecl putchar(int);1、C程序基本框架程序基本框架预编译处理预编译处理stdio.h中的部分内容中的部分内容n注释:为了增加程序的可读性而附加的说明性注释:为了增加程序的可读性而附加的说明性文字,它们在编译时会被忽略。文字,它们在编译时会被忽略。n/ 单行注释,简单的解释语句含义单行注释,简单的解释语句含义.n/*单行注释,简单的解释语句含义单行注释,简单的解释语句含义. */n/* 多行注释,用来说明更多的内容,包括算法多行注释,用来说明更多的内容,包括算法等等.nn*/n/* C文档注释文档注释n * 这是一个生成帮

19、助文档的函数这是一个生成帮助文档的函数n * 它的输入参数是一个它的输入参数是一个C源程序源程序n */1、C程序基本框架程序基本框架注释注释n一个C程序是由一个固定名称为main的主函数和若干个自定义函数可缺省组成。编译预处理宏、头文件)自定义函数声明int main( )说明部分 /*变量定义等*/执行部分 /*输入/输出/计算*/ 自定义函数1、C程序基本框架程序基本框架总结总结C语言是一种函数式语言,其程序基本组成是函数。每个C程序必须有一个、也只能有一个主函数main()。不管主函数在程序中的位置如何,程序执行总是从主函数开始,在主函数内结束。C程序的复杂功能是通过函数调用来完成的。

20、所有变量、函数必须先定义后使用,并且有一定的作用范围。调用标准库函数或其他人编制的现成函数时,必须使用“文件包含”。(这是遵循“先定义后使用的原则)每条语句必须用分号“;”完毕。编译预处理命令(宏定义、文件包含)不是语句,行末不能用分号结束。C语言本身没有输入/输出语句,其功能须通过调用相关函数来实现。1、C程序基本框架程序基本框架总结总结n标识符标识符Identifier)n 程序员对程序中的各基本元素加以命名时使用程序员对程序中的各基本元素加以命名时使用的命名记号,包括:数据类型名、变量名、常量的命名记号,包括:数据类型名、变量名、常量名、函数名、宏名称、名、函数名、宏名称、n2、标识符和

21、关键字、标识符和关键字n标识符的组成规则标识符的组成规则n C语言中,标识符是以字母,下划线语言中,标识符是以字母,下划线( _ ) 开始的开始的一个字符序列,后面可以跟字母,下划线,数字。一个字符序列,后面可以跟字母,下划线,数字。n合法的标识符合法的标识符nidentifier userName User_Name definen sys_ value _Name name1n非法的标识符非法的标识符n2mailroom# a%bc !abc2、标识符和关键字、标识符和关键字n关键字关键字(Key words):具有专门的意义和用途,不能:具有专门的意义和用途,不能当作一般的标识符使用。当

22、作一般的标识符使用。C语言中的关键字有:语言中的关键字有:n int、 char、 float、 double、 short、 long、 unsigned、 struct、 union、 enum、 auto、 extern、 register、 static、 typedef、 goto、 return、 sizeof、 break、 continue、 if、 else、 do、 while、 for、 switch、 case、 default、 void、 entry、 include、 define、 undef、 ifdef、 ifndef、 endif、linen 在在C+中,

23、还会有一些新的关键字。不同语言的中,还会有一些新的关键字。不同语言的关键字不完全相同,但基本相似。关键字不完全相同,但基本相似。2、标识符和关键字、标识符和关键字关键字基本分类关键字基本分类基本数据和返回值类型:基本数据和返回值类型:int, void, return构造数据类型定义:构造数据类型定义: typedef, struct, union, 控制流:控制流:if, else, switch, case, for, break, goto, 编译预处理:编译预处理:include, define, undef, 变量长度:变量长度:sizeof2、标识符和关键字、标识符和关键字n在C语

24、言中,标识符是区分大小写的。name和Name是不同的标识符。n所有的关键字都是小写字母构成的。n不必死记这些关键字,当理解每个关键词的含义后,自然就记住了所有的关键词。2、标识符和关键字、标识符和关键字3、数据类型、变量和常量、数据类型、变量和常量q 数据类型Data Type)q 基本数据类型Primary Data Types)q 构造数据类型Composite Data Types)q 常量Constant)q 变量Variable)p 基本数据类型Primary Data Types)p 构造数据类型Composite Data Types)3、数据类型、变量和常量、数据类型、变量和

25、常量数据类型数据类型 C语言中支持的基本数据类型包括:3、数据类型、变量和常量、数据类型、变量和常量基本数据类型基本数据类型一个数据类型所占的具体字节数,可以通过sizeof运算符来确定。数据类型说明数据类型标识符所占位数其他字符类型char8位(1字节)还可以用unsigned来限定char类型和所有整数类型。 unsigned限定的数总是正数或零。整数类型int与机器相关,现在通常为32位(4字节)短整数类型shortint的一半长整数类型longint的2倍,但现在与int一样,为32位 单精度浮点类型float32位(4字节)双精度浮点类型double64位(8字节)无类型void函数

26、无返回值3、数据类型、变量和常量、数据类型、变量和常量基本数据类型基本数据类型 字符的存储通常用其二进制编码如ASCII码/8位、汉字内码/16位来表示,所以字符数据类型char只占8位,它可以表示一个ASCII字符,对于汉字字符,则需要将2个char数据当作一个整体。 对于字符的显示,则需要操作系统的协助才能完成。 printf(“北京大学 Peking University”); char a = a; /a = 97, a的ASCII码 printf(“%c”, a);n一个构造数据类型是由一个或多个基本数据类型组合而成的。nC语言中的构造数据类型包括:n数组n构造n指针n链表nn相关内

27、容,将在后面的讲义中介绍。3、数据类型、变量和常量、数据类型、变量和常量构造数据类型构造数据类型3、数据类型、变量和常量、数据类型、变量和常量 数据是计算机程序处理的主要对象,在程序中数据是以常量和变量的形式出现。常量和变量的区别仅在于程序执行过程中变量的值是可以改变的,而常量的值不能改变。 C中的常量值是用文字串表示的,它区分为不同的类型:整型(int)常量:123,-123长整型(long)常量:123l,-123L单精度(float)浮点常量:1.23f,-1.23e12f双精度(double)浮点常量:1.23,-1.23e12字符(char)常量:用单引号对括起来的一个字符,如a字符

28、串常量:用双引号对括起来的一个字符序列,如 This is a constant string.。 在C中,除了直接写出常量的值之外,还可以 通 过预编译命令“ #define” 把 一 个 标 识 符 定 义 为 常 量,其定义格式为:#define PI 3.141593、数据类型、变量和常量、数据类型、变量和常量常量常量n和数学中的变量有所不同,程序中的变量代表内存中某个“存储单元或某块内存区域若干个连续的存储单元),可以用来保存数据,通常用一个名字来标识。显然,存储单元或内存区域所存储的数据在程序执行过程中是可能变化的。 n在程序中,有三种情况涉及到变量:n变量的定义:根据给定的数据类

29、型,在内存中分配一个连续的内存区域,并用一个标识符来对它命名,这个标识符就是变量名n变量的赋值:把数值存放到某个变量所指示的内存区域n变量的引用:使用某个变量中存储的数据3、数据类型、变量和常量、数据类型、变量和常量变量变量n变量的定义就是在程序中声明将要使用一块内存区域保存数据。这块区域的大小是由变量所属的数据类型决定的。变量的定义包括变量数据类型、变量的名字、变量的初始化几个部分,其形式为:nDataType varName , varName;nchar a;nint n;nint x, y, z;n变量的名字必须是一个合法的标识符,每个变量的名字作为它的唯一标识。变量名所对应的就是内存

30、区域的地址。3、数据类型、变量和常量、数据类型、变量和常量变量定义变量定义3、数据类型、变量和常量、数据类型、变量和常量变量变量xlenmaxnumber内存区域a存储单元/变量变量char a; /字符字符short x; /短整数短整数int len: /整数整数long max; /长整数长整数float number; /单精度单精度浮点数浮点数变量与内存空间;变量的值与地址变量与内存空间;变量的值与地址a的地址:0000 (0)x的地址:0001 (1)len的地址:0011 (3)max的地址:0111 (7)number的地址:1011 (11)n变量定义后,其初值是不确定的内存

31、区域里可能是有内容的)。n在程序执行过程中,变量的值内存区域中的内容是可以变化的。n给变量指定一个数值的过程称为变量的赋值,这个过程可以通过赋值语句完成:n n = 26;n x = 19;n也可以在变量定义时对变量进行初始化:nchar a = a;nint n = 5;nint x, y=4, z;nfloat score = 95.5;3、数据类型、变量和常量、数据类型、变量和常量变量赋值变量赋值n 变量里存储的数据可以用来参与运算,这一过程称为变量的引用。但在引用变量前,一定要先对变量进行赋值,例如:n int totalFee = 0 ; /变量赋值n int tuitionFee

32、= 5000 ; /变量赋值n int travelExpense = 300 ; /变量赋值n int livingExpense = 1000 ; /变量赋值n int others = 1000 ; /变量赋值n /变量引用n totalFee = tuitionFee + travelExpense + livingExpense + others ;3、数据类型、变量和常量、数据类型、变量和常量变量引用变量引用p 整型变量定义示例:pshort s = 10;pint num1, num2;pint x = 123, y; plong len1, len2 = 3L; 必须在数字后加

33、l或Lplong y = 123L; 必须在数字后加l或Lplong z = 123l; 必须在数字后加l或L3、数据类型、变量和常量、数据类型、变量和常量整型变量整型变量(short/int/long/longlong)整型变量的数值范围整型变量的数值范围n字符型变量代表8位的字符,通常是ASCII字符。对于一个汉字字符,需要2个字节编码,不能简单地用一个字符变量来表示,需要使用数组。n字符型变量定义示例:nchar c1; 无初值nchar c2 = 0; 赋初值为字符0nchar c3 = 100; 用整数赋初值,是字符的ASCII码,n 此处为d3、数据类型、变量和常量、数据类型、变量

34、和常量字符类型变量字符类型变量(char)n一些特殊字符的常量表示法:n反斜线Backslash)n退格Backspace)bn回车Carriage return)rn进纸符Form feed)fn制表符Form feed)tn换行New line)nn单引号Single quote)3、数据类型、变量和常量、数据类型、变量和常量字符类型变量字符类型变量(char) 字符型数据的运算 一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII代码放到存储单元中。这样使字符型数据和整型数据之间可以通用。注意: 一个字符数据既可以以字符形式输出,也可以

35、以整数形式输出。例2.5向字符变量赋以整数。 #include void main() char c1,c2; c1=97; c2=98; printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); 运行结果:运行结果: 97 98 97 98例2.6大小写字母的转换 #include void main()char c1,c2; c1=a; c2=b; c1=c1-32; c2=c2-32; printf(“c c”,c1,c2); 运行结果:运行结果: 3、数据类型、变量和常量、数据类型、变量和常量浮点数浮点数(实型实型)变量变量(float/doubl

36、e)n浮点数变量定义示例:nfloat len;nfloat len1 = 127.0f; 必须在数字后加f或Fnfloat len2 = 4.0e38F; 错误!32位浮点数不能超过 3.4028234663852886e38n(数值常量的科学计数法:1.0 x108, 1.0e8 或 1.0E8)ndouble score1; ndouble score2 = 127.0; 赋初值为127浮点数常量的表示形式两种表两种表示形式示形式小数小数指数指数0.1230.1233e-33e-3注意注意: :字母字母e(e(或或E)E)之前必须有数字,且之前必须有数字,且e e后面的后面的指数必须为整

37、数指数必须为整数 在字母e或E之前的小数部分中,小数点左边是零,后面第一位非零的数字. 例如: 123.456可以表示为: 123.456e0, 12.3456e1, 1.23456e2, 0.123456e3, 0.0123456e4, 0.00123456e5 其中的0.123456e3是“标准化的指数形式”。标准化的指数形式:1819位浮点型变量分类 浮点型变量分为单精度float型)、双精度double型和长双精度型long double三类形式。浮点型数据在内存中的存放形式浮点型数据在内存中的存放形式 一个浮点型数据一般在内存中占一个浮点型数据一般在内存中占4 4个字节个字节(32(

38、32位位) )。与整型数据的存储方。与整型数据的存储方式不同,浮点型数据是按照指数形式式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。数部分采用规范化的指数形式。实型数据的舍入误差#include void main()float a,b; a = 123456.789e5; b = a + 20 ; printf(“%fn”,b); 运行结果:运行结果: 123456.789e5123456.789e53、数据类型、变量和常量、数据类型、变量和常量变量的

39、使用变量的使用1 int main()2 int USDollar = 0;3 int RMB = 0;4 USDollar = 20 ;5 RMB = USDollar * 8 ;6 return 0;7 主存储器USDollar0主存储器USDollar0RMB0主存储器USDollar20RMB0主存储器USDollar20RMB160运行变量赋值语句运行变量赋值语句对内存数据的改变对内存数据的改变#define PI 3.14159int main (int argc, char* argv ) char c ; int x , y ; float r = 1.234f ; doubl

40、e len, s; c = A ; x = 12 ; y = x + 300; len = 2*PI*r; s = PI*r*r; . return 0;3、数据类型、变量和常量、数据类型、变量和常量变量的使用变量的使用 表达式(表达式( Expression )是由操作数常量和变量)是由操作数常量和变量和运算符按一定的语法形式组成的符号序列与我和运算符按一定的语法形式组成的符号序列与我们在高中时学过的表达式相类似),主要用于表示们在高中时学过的表达式相类似),主要用于表示对数据进行的处理。对数据进行的处理。表达式的计算结果称为表达式的值。表达式的计算结果称为表达式的值。一个常量或一个变量名字

41、是最简单的表达式,其值即一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值;该常量或变量的值;表达式的值还可以用作其他运算的操作数,形成更复表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。杂的表达式。4、运算符与表达式、运算符与表达式 运算符(运算符( Operator )规定了对操作数的处理规则,)规定了对操作数的处理规则,C语言中的运算符有:语言中的运算符有:算术运算符:算术运算符:(负号负号), +,*,/,%(取余数取余数),+, 关系运算符:关系运算符: ,=, (在结构数据类型及指针中用到)q下标运算符 index (在数组中用到)q数据长度运算符 sizeo

42、f (以字节为单位)qint a;qsizeof(int); sizeof(a);q分隔符 , (函数参数分隔,变量定义等)qint a, b, c;qint max( int a, int b, int c);q强制类型转换运算符 (DataType)qint year = (int) ceil(x/2);q函数调用运算符 () qscanf(“%d”, &a);q 4、运算符与表达式、运算符与表达式4、运算符与表达式、运算符与表达式 根据运算符的不同,表达式也有不同的类型:算术表达式 (算术运算)关系表达式 (主要用于条件判断)逻辑表达式 (主要用于条件判断)位运算表达式 (二进制逻辑运算

43、)赋值表达式 (与存储访问相关)条件表达式 (用于条件判断)在一个复杂的表达式中,往往包含有其他类型的表达式。4、运算符与表达式、运算符与表达式算术表达式算术表达式 使用算术运算符和括号将操作数连接起来的表达式称为算术表达式: (负号), + (加法), (减法),* (乘法),/ (除法),% (取余数,只对整型数据有效),如:-3+a-b*5, (x+y)/z +(3*r/5) ,a % b + (自加)、 (自减):只适合于变量,不适合于常量或表达式,例如:5+ 或 (a+b)- 都是不正确的。这两个运算符可用在变量之前或变量之后,如i+ 和+i。对变量来说,这二种情况的效果都是一样的,

44、都是使变量i加1。但在表达式中,则它们的含义不同,如: j = +i; 表示先将i的值加1,再赋给j,如果i的值是5,则j的值是6。(先给变量加1,再使用变量) j = i+; 表示先将i的值赋给j,再把i的值加1,如果i的值是5,则j的值是5。(先使用变量,再给变量加1)4、运算符与表达式、运算符与表达式关系表达式关系表达式 使用关系运算符和括号将操作数连接起来的表达式称为关系表达式: (大于), = (大于等于), y, (x+1) = 4, (-3+a-b*5) 1) & (x=20) | (逻辑或):当2个操作数有一个为非0或真时,结果为1真),否则结果为0假),如:(x 20) !

45、(逻辑非):将一个非0或为真的操作数变为0,或将0或为假的操作数变为1,如:!(xy) 逻辑运算&和|连接的表达式是自左向右求值的,一旦知道结果的真、假值,求值马上停止: (a+1c)&(b+11),假设(a+1c)为0,则表达式的值为0 (a+1c)|(b+11) ,假设(a+1c)为1,则表达式的值为14、运算符与表达式、运算符与表达式位运算表达式位运算表达式 使用位运算符和括号将操作数连接起来的表达式称为位运算表达式: & (按位与),| (按位或), (按位异或),! (按位非):二进制位逻辑运算 (右位移),将左侧操作数的二进制数值向右移动若干位由右侧的操作数给出),移出去的位丢弃,

46、空出的位用符号位对有符号数或0对无符号数来填补。4、运算符与表达式、运算符与表达式位运算表达式位运算表达式 位运算符的操作数必须是整型数据。在C中,整型数据分有符号整数和无符号整数,是用一定长度的二进制位来表示。以32位整数为例来说明位移动运算: 有符号数:有符号整数做位移运算时,符号位是不参与移动的。左移时,空出的位用0填补;右移时,空出的位用符号位填补。(机器内数据的补码表示) 无符号数:没有符号位,不管左移或右移,空出的位用无符号数:没有符号位,不管左移或右移,空出的位用0填补。填补。位移运算的实质在不发生溢出时):位移运算的实质在不发生溢出时):左移:左移:xn,相当于,相当于 x/2

47、n1 1 1 1 1 x x 11 1 1 011 0 10 1 1 0 1 1 0 10 0 0 1 1 x x 1右移右移2位位4、运算符与表达式、运算符与表达式赋值表达式赋值表达式 “”是C语言中基本的赋值运算符,基本的赋值表达式形式为:“变量 表达式”,它将表达式的值赋给变量。如: x = y+1, a=b=c=1 C语言中除了基本的赋值运算符外,还有一系列复合赋值运算符: +=,=,*=,/=,%=,=,y)? x : y运算符的优先次序:一个复杂的表达式值,往往要运算符的优先次序:一个复杂的表达式值,往往要涉及不同的运算符,在表达式求值时,其计算次序涉及不同的运算符,在表达式求值时,其计算次序是要符合一定的规则的,即不同运算符的先后次序是要符合一定的规则的,即不同运算符的先后次序是不同的。(不用死记,复杂表达式中多用是不同的。(不用死记,复杂表达式中多用“( )”运算符)运算符)1). , , , ()

温馨提示

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

评论

0/150

提交评论