北京大学计算概论(C语言)经典课件Lecture6——C语言基础.ppt_第1页
北京大学计算概论(C语言)经典课件Lecture6——C语言基础.ppt_第2页
北京大学计算概论(C语言)经典课件Lecture6——C语言基础.ppt_第3页
北京大学计算概论(C语言)经典课件Lecture6——C语言基础.ppt_第4页
北京大学计算概论(C语言)经典课件Lecture6——C语言基础.ppt_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

计算概论 (Introduction to Computing),主讲人:马思伟 北京大学数字媒体研究所 /,第六讲 C语言基础,复习,程序设计语言 机器语言:机器直接可执行 汇编语言:需要通过汇编转换成机器语言程序执行 高级语言 通过解释程序,逐步执行 通过编译、链接转换成可执行程序执行,复习,程序的基本框架 编译预处理(宏、头文件)自定义函数声明 主函数 自定义函数 程序的基本元素 标识符和关键字 数据类型、常量和变量 运算符和表达式 语句,提纲,程序的基本框架 程序的基本元素 程序设计一般过程 程序书写规则 编程环境 学习程序设计五要素,程序的基本框架,程序的基本框架,变量:存放数据的容器,有不同的数据类型 语句:由分号结尾的单一命令,可以一条语句完成一条或若干条指令功能 float s, r; / 变量定义语句 r = 10; / 变量赋值语句 s = 3.1416*r*r; / 执行乘法运算并赋值的语句 代码段:用大括号()围起来的多条语句构成一个代码段 int i; for (i=0; i=1; i+) ,程序的基本框架,程序的基本框架,基本元素 变量:存放数据的容器,有不同的数据类型 语句:由分号结尾的单一命令,可以一条语句完成一条或若干条指令功能 float s, r; / 变量定义语句 r = 10; / 变量赋值语句 s = 3.1416*r*r; / 执行乘法运算并赋值的语句 代码段:用大括号()围起来的多条语句构成一个代码段 int i; for (i=0; i=1; i+) ,程序的基本框架,编译预处理-文件包含 #include /stdio.h 标准前导文件,输入输出函数库头文件 #include “myhead.h” /自定义前导文件 C语言是一种“装配式”语言,许多常规的工作如输入、输出、数学函数等,往往事先由人做成各种“程序模块”(.lib),并将其定义存放在各种所谓“头文件”(.h)中 用户也可以将自己设计的程序模块等做成“程序模块”及“头文件”,供其他程序“包含”(调用) 文件包含的作用,就是根据需要把相应的某个“头文件”定义所涉及的“程序模块”在编译时先整体嵌入所编的程序中,程序的基本框架,编译预处理-宏定义 用一个简单的符号代替宏体部分内容,例 #define PI 3.14159 PI 符号常量(宏名,最好用大写,以区别一般变量) 3.14159宏体(可以是一个表达式) 作用:用简单符号代表宏体部份内容(编译时会先自动替换),可用作常量定义或其他作用 意义:直观/多次使用/便于修改 注意:#define 可出现在程序的任一位置(作用范围:由此行到程序末尾),宏定义不是C语句,不必在行未加分号,否则会连分号一起置换。,程序的基本框架,主函数:main() 程序执行从主函数开始,从主函数结束 每个程序有一个主函数且只能有一个 主函数可以调用其它函数(标准库函数,用户自定义函数) 其它函数不能调用主函数,但其他函数相互之间遵循一定的规则可以相互调用,程序的基本框架,标准库函数 C语言提供的各种标准的通用功能函数,调用前必须在程序开始的地方用include语句包含含该函数的定义文件 例: s = (float)(PI * pow(r, 2); pow(x,y) /求xy(math.h,数学函数) scanf(“%f”, /printf(“%f”, ) 往屏幕中输出数据(stdio.h,输入输出函数),程序的基本框架,自定义函数 必须先定义,后调用 例:s2 = getArea(r2); 定义 float getArea( float r); int main(); int main(int argc, char *argv); 注释 单行注释 / 段注释 /*/,程序的基本框架,总结 有且只有一个主函数main() 用#include 包含头文件 每条语句必须以分号结束 函数可以调用其他函数 用#define定义宏 由大括号组成语句段,提纲,程序的基本元素 标识符和关键字 数据类型、常量和变量 运算符和表达式 语句,标识符和关键字,标识符 程序员对程序中的各个元素加以命名时使用的命名记号,包括:数据类型名、变量名、常量名、函数名、宏名称、 C语言中,标识符是以字母,下划线( _ ) 开始的一个字符序列,后面可以跟字母,下划线,数字。 合法的标识符 identifier userName User_Name definesys_ value _Name name1 非法的标识符 2mailroom# a%bc !abc2,标识符和关键字,关键字 具有专门的意义和用途,不能当作一般的标识符使用。C语言中的关键字有: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、line 分类 基本数据和返回值类型:int, void, return 构造数据类型定义:typedef, struct, union 控制流: if, switch, for, break, goto 编译预处理: include, define 变量长度: sizeof 注意: C语言标识符区分大小写,name和Name表示不同的标志符,提纲,程序的基本元素 标识符和关键字 数据类型、常量和变量 运算符和表达式 语句,数据类型、常量和变量,数据类型(Data Type) 基本数据类型(Primary Data Types) 构造数据类型(Composite Data Types) 常量(Constant) 变量(Variable),数据类型,数据类型(Data Type) 基本数据类型(Primary Data Types) 字符的存储通常用其二进制编码(如ASCII码/8位、汉字内码/16位)来表示,所以字符数据类型char只占8位,它可以表示一个ASCII字符,对于汉字字符,则需要将2个char数据当作一个整体。 构造数据类型 由一个或多个基本数据类型组合而成 包括:数组、结构、链表等,数据类型,数据类型(Data Type) 基本数据类型(Primary Data Types) 一个数据类型所占的具体字节数,可以通过sizeof运算符来确定。,常量和变量,数据是计算机程序处理的主要对象,在程序中数据是以常量和变量的形式出现 常量和变量的区别 仅在于程序执行过程中变量的值是可以改变的,而常量的值不能改变。,常量,用文字串表示的,它区分为不同的类型: 整型常量:123,-123 长整型常量:123l,-123L 单精度浮点常量:1.23f,-1.23e12f 双精度浮点常量:1.23,-1.23e12 字符常量:用单引号对括起来的一个字符,如a字符串常量:用双引号对括起来的一个字符序列,如This is a constant string. 在C中,除了直接写出常量的值之外,还可以通过预编译命令“#define”把一个标识符定义为常量,其定义格式为:#define PI 3.14159,变量,和数学中的变量区别 在程序中定义变量时,会在内存中为它开辟一块区域,用来放置它所代表的数据。 程序中的变量代表某个内存中某个存储单元的名字或某块内存区域的名字, 用于指定一个所要访问的存储单元在整个存储空间中所处的位置。 不同的变量可以占用不同大小的内存空间,一个变量所占内存空间的大小是在变量定义时决定的。,显然,存储单元所存储的数据在程序执行过程中是可能变化的。,变量的定义、赋值和引用,变量的定义就是在程序中声明将要使用一块内存区域保存数据。 这块区域的大小是由变量所属的数据类型决定的 变量的定义包括变量数据类型、变量的名字、变量的初始化几个部分,其形式为: DataType varName= value , varName=value; int n, n1 = 4; 变量的名字必须是一个合法的标识符,每个变量的名字作为它的唯一标识。变量名所对应的就是内存区域的地址。,变量的定义、赋值和引用,在程序执行过程中,变量的值(内存单元中的内容)是可以变化的。给变量指定一个新的数值的过程称为变量的赋值,通过赋值语句完成: n = 26; 一般使用变量前要对其进行初始化赋值,如果不对变量进行初始化,变量的初值是不确定的(内存空间中内存单元里是有内容的),可能会造成程序运行错误,变量的定义、赋值和引用,变量里存储的数据可以用来参与运算,这一过程称为变量的引用。例如: int totalFee= 0 ; /变量赋值 int tuitionFee= 5000 ; /变量赋值 int travelExpense= 300 ; /变量赋值 int livingExpense= 1000 ; /变量赋值 int others = 1000 ; /变量赋值/变量引用 totalFee = tuitionFee+ travelExpense+ livingExpense+ others ;,变量的定义、赋值和引用,变量的定义、赋值和引用,变量定义示例 字符型变量:代表8位的字符,ASCII字符,定义示例 char c1;无初值 char c2 = 0;赋初值为字符0 char c3 = 33;用整数赋初值,是字符的ASCII码,此处为! 特殊字符的常量表示法: 反斜线(Backslash) 退格(Backspace)b 回车(Carriage return)r 进纸符(Form feed)f 制表符(Form feed)t 换行(New line)n 单引号(Single quote),变量的定义、赋值和引用,变量定义示例 整型变量: int num1, num2; long len1, len2 = 3L; 必须在数字后加l或L int x = 123, y = 321; short s = 10;long y = 123L; 必须在数字后加l或L long z = 123l; 必须在数字后加l或L3,变量的定义、赋值和引用,变量定义示例 实型变量定义示例: double d1 = 127.0;赋初值为127 double d2 = 127;赋初值为127 float f1 = 127.0f;必须在数字后加f或F float f2 = 4.0e38f;错误!32位浮点数不能超过3.4028234663852886e38,变量的定义、赋值和引用,变量定义使用实例:,提纲,程序的基本元素 标识符和关键字 数据类型、常量和变量 运算符和表达式 语句,运算符与表达式,表达式(Expression):由操作数(常量和变量)和运算符按一定的语法形式组成的符号序列 一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值,比如: int i; i =5; 表达式的值还可以用作其他运算的操作数,形成更复杂的表达式 if (i=5) i=10; 表达式的计算结果称为表达式的值,运算符与表达式,运算符(Operator)规定了对操作数的处理规则,C语言中的运算符有: 算术运算符:(负号),+,*,/,%,+, 关系运算符:,=,&,|, 赋值运算符:=,及其扩展赋值运算符如+=,=,*=,/=等。 条件运算符:? :,运算符与表达式,其它运算符 分量运算符,(在结构数据类型及指针中用到) 下标运算符index(在数组中用到) 数据长度运算符sizeof (以字节为单位) int a;sizeof(int); sizeof(a); 分隔符, (函数参数分隔,变量定义等) inta, b, c;intmax( inta, intb, intc); 强制类型转换运算符(DataType) year = (int) ceil(x/2); 函数调用运算符() ,运算符与表达式,分类,根据运算符的不同,表达式也有不同的类型: 算术表达式 关系表达式 逻辑表达式 位运算表达式 赋值表达式 条件表达式 在一个复杂的表达式中,往往包含有其他类型的表达式。,运算符与表达式,算术表达式:使用算术运算符和括号将操作数连接起来的表达式称为算术表达式 (负号),+ (加法),(减法),* (乘法),/ (除法),% (取余数,只对整型数据有效),如: -3+a-b*5,(x+y)/z +(3*r/5),运算符与表达式,算术表达式 +(自加)、(自减):只适合于变量,不适合于常量或表达式,例如:5+ 或(a+b)-都是不正确的 这两个运算符可用在变量之前或变量之后,如i+ 和+i。对变量来说,这二种情况的效果都是一样的,都是使变量i加1,但在表达式中,则它们的含义不同。 j = +i; 表示先将i的值加1,再赋给j,如果i的值是5,则j的值是6。(先给变量加1,再使用变量) j = i+; 表示先将i的值赋给j,再把i的值加1,如果i的值是5,则j的值是5。(先使用变量,再给变量加1),运算符与表达式,关系表达式:使用关系运算符和括号将操作数连接起来的表达式称为关系表达式: (大于),=(大于等于), y,(x+1) = 4,(-3+a-b*5) = (x+y)/z +(3*r/5) = = (等于)、!= (不等于),如: x = = y, (x+y) != z 在关系运算中,若规定的关系不成立,则表达式的值为0,否则为1。0和1都看作是整型量。在C语言中,没有其他语言中的布尔量(真:true,假:false),而是将0看作假,非0看作真。,运算符与表达式,逻辑表达式:使用逻辑运算符和括号将操作数连接起来的表达式称为逻辑表达式: &(逻辑与):当2个操作数都为非0或真时,结果为1(真),否则为0(假),如: (x1) & (x20) !(逻辑非):将一个非0或为真的操作数变为0,或将0或为假的操作数变为1,如: !(xy) 逻辑运算&和|连接的表达式是自左向右求值的,一旦知道结果的真、假值,求值马上停止: (a+1c)&(b+11),若(a+1c)为0,则表达式的值为0 (a+1c)|(b+11) ,若(a+1c)为1,则表达式的值为1,运算符与表达式,位运算表达式:使用位运算符和括号将操作数连接起来的表达式称为位运算表达式: &(按位与),|(按位或), (按位异或),!(按位非):二进制位逻辑运算 (右位移),将左侧操作数的二进制数值向右移动若干位(由右侧的操作数给出),移出去的位丢弃,空出的位用符号位(对有符号数)或0(对无符号数)来填补。,运算符与表达式,位运算符的操作数必须是整型数据。在C中,整型数据分有符号整数和无符号整数,是用一定长度的二进制位来表示。以32位整数为例来说明位移动运算: 有符号数:有符号整数做位移运算时,符号位是不参与移动的。左移时,空出的位用0填补;右移时,空出的位用符号位填补。(机器内数据的补码表示) 无符号数:没有符号位,不管左移或右移,空出的位用0填补。 位移运算的实质(在不发生溢出时): 左移:xn,相当于x/2n,运算符与表达式,赋值表达式 “”是C语言中基本的赋值运算符,基本的赋值表达式形式为:“变量表达式”,它将表达式的值赋给变量。如: x = y+1, a=b=c=1 C语言中除了基本的赋值运算符外,还有一系列复合赋值运算符:+=,=,*=,/=,%=,=,=,&=,=,|=,它们是由2个运算符组成,相应的赋值表达式形式为: x *= 2 等价于x = x*2 x += y+1 等价于x = x + (y+1) “变量op=表达式”,它等价于基本赋值表达式:“变量=变量op表达式”,运算符与表达式,条件表达式 C语言中的条件运算符“? :”可以构成条件表达式,其形式为:“表达式1?表达式2:表达式3” 该表达式的求值过程为:先求表达式1的值,若它不等于0(为真),则求表达式2的值,此时,该值就是整个条件表达式的值;若表达式1的值等于0,则求表达式3的值,并作为整个条件表达式的值。即表达式2和表达式3之中,只有一个表达式被求值。如将x和y中最大的值赋给z,可以写成: z = (xy)? x : y,运算符与表达式,运算符的优先级和结合性 一个复杂的表达式值,往往要涉及不同的运算符,在表达式求值时,其计算次序是要符合一定的规则的,即不同运算符的先后次序是不同的。(不用死记,复杂表达式中多用“()”运算符),运算符优先级,最高优先级: ,-, , () /左右结合 单目运算:-, , !, +, -, !(), sizeof /右结合 算术乘除运算: *, /, % /左结合 算术加减运算:+, - /左结合 移位运算: , , = /左结合 相等关系运算:=, != /左结合 按位与:& /左结合 按位异或: /左结合 按位或: /左结合 逻辑与:& /左结合 逻辑或: | /左结合 条件运算:?: /右结合 赋值:=, +=, -=, *=, /=, %=, =, &=, |= /右结合,运算符与表达式,数据类型转换 在表达式中,整型、实型、字符型数据可以混合运算 运算中,不同类型的数据需要先强制转化为同一类型(利用强制类型转换运算符),然后进行运算。但是,在把容量大的类型转换为容量小的类型时必须注意:转换过程中可能导致溢出或损失精度 double a = 4.0e40; int b = (int)a; /ba浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入(int)23.7 = 23(int)-45.89f = -45,数据类型转换,两种方式 强制转换,使用 (DataType) 强制转换,例 int a, b=1; float c=4.3; a = b + (int) c; 赋值表达式也会进行强制转换 a = b + c; 自动转换,表达式运算中低精度变量自动向高精度转换 区别上面的a = b + (int) c;与a = b + c; 区别 c = 5/2; 与 c = 5.0/2; a = 5.0/2;与a = 5/2;,提纲,程序的基本元素 标识符和关键字 数据类型、常量和变量 运算符和表达式 语句,输入输出语句,输入语句 scanf(格式控制,地址列表) scanf(%. , ) 输入整数 int a, b,c; scanf(%d%d%d, 注意:变量要先定义,变量前要加&号取地址,输入输出语句,输出语句 printf (格式控制,输出列表) printf(%. ,) 输出整数 printf(a is %d; b is %d; c is %d, a,b,c); 输出浮点数 printf(%f, b); 输出一个字符 printf(%c, c);,输入输出,scanf() 和printf()的基本格式控制符有: %d:整数(int) %ld:整数(long) %hd:整数(short) %c:字符(char) %s:字符串(字符数组) %f:单精度浮点数(float) %lf:双精度浮点数(double),输入输出,在scanf()中的格式控制中,还可以控制多个输入数据之间的分隔标记,如:scanf(“%c,%d,%f”, 如果n的值为10,则输出效果为,提纲,程序的基本框架 程序的基本元素 编程环境,VC+编程环境,VC+编程环境 - 基本概念,Project(工程) 在VC编程环境下,编写程序的工作是以Project为单位。在开始一个新程序时,要先建立一个Project,之后在程序编写过程中所有与这个程序有关的文件都会包含在这个Project中。编制的程序可以有各种不同类型,编程环境为每种类型的程序准备了一个模版,用来生成程序的最初框架。在我们这本书里只介绍编写Win32 Console Application类型的程序。这类程序的特点是:程序运行中会打开一个类似于DOS操作系统的界面,所有键盘输入都是通过DOS界面进行的,而所有输出都是输出到DOS窗口中。,VC+编程环境 - 基本概念,Source File(源程序) 源程序是我们用高级程序设计语言书写的程序。源程序必须经过编译连接变成可执行程序(机器代码)才能运行。在下面的章节中,我们主要用介绍C语言编写程序。,VC+编程环境 - 基本概念,Compile(编译) 把源程序变成机器代码的过程称为编译。不同的高级语言有不同的编译器。,VC+编程环境 - 基本概念,Link(连接) 各种高级语言都会提供一些常用的功能函数,我们自己编写的程序里会调用这些功能函数。同时要把我们写的程序装载到内存里运行,也需要加载一定的与环境相关的信息。所以将我们自己写的与那程序编译成机器代码后,还需要一个连接的过程以生成最后的可执行程序。,VC+编程环境 - 基本概念,Build(编译并连接) 编译并连接是把源程序编译,如果没有错误则连接,否则给出编译错误信息。,VC+编程环境 - 基本概念,Debug(调试) 当程序出错时,可用调试工具发现错处的代码,进行改正。所谓调试是指逐条执行或部分执行程序代码,并在执行过程中查看变量的值。当发现变量的值并非如我们预期或程序的执行逻辑并非我们预期时,就发现了错误,可以进行有针对性的改正。,VC+编程环境 - 基本概念,Run(运行) 启动一个可执行程序使其开始执行称为运行。,VC+编程环境 基本功能,创建新工程 编辑源程序 编译 / 连接 运行 调试,VC+编程环境 - 创建新工程,VC+编程环境 - 创建新工程,VC+编程环境

温馨提示

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

评论

0/150

提交评论