1、C语言全册 完整课件 第1章 程序设计和C语言 一、计算机能做什么 计算机的应用领域已渗透到社会的各行各业,正在计算机的应用领域已渗透到社会的各行各业,正在 改变着传统的工作、学习和生活方式,推动着社会改变着传统的工作、学习和生活方式,推动着社会 的发展。举几个例子:的发展。举几个例子: 曙光曙光4000A能在能在1小时小时 内同时完成内同时完成4次次36小时小时的的 中国周边、北方大部、中国周边、北方大部、 北京周边、北京市的北京周边、北京市的 2008年奥运会需要的气年奥运会需要的气 象预报计算,包括风向、象预报计算,包括风向、 风速、温度、湿度等,风速、温度、湿度等, 精度精度1公里,即
2、精确到每公里,即精确到每 个奥运会场馆。个奥运会场馆。 一、计算机能做什么 新药研究是国际公认的周期长、耗资大的工程项新药研究是国际公认的周期长、耗资大的工程项 目。在神威系列目。在神威系列(国家并行计算机工程技术研究中心国家并行计算机工程技术研究中心 研制研制)高性能计算机上运行的高性能计算机上运行的计算机辅助药物设计软计算机辅助药物设计软 件能全面模拟预选药物反应过程件能全面模拟预选药物反应过程,为抗“非典”、,为抗“非典”、 抗“爱滋病”等创新药物研制提供宝贵依据,缩短抗“爱滋病”等创新药物研制提供宝贵依据,缩短 药物研制周期。药物研制周期。 2008年年06月月11日报道了美国日报道了
3、美国IBM公司与美国能源公司与美国能源 部最新开发的超级计算机,它的运算速度达到部最新开发的超级计算机,它的运算速度达到每秒每秒 1000万亿次万亿次,是迄今全球运算速度最快的超级计算,是迄今全球运算速度最快的超级计算 机。这台名为“走鹃”的超级计算机将主要用于美机。这台名为“走鹃”的超级计算机将主要用于美 国核武器等政府机密研发项目,如国核武器等政府机密研发项目,如模拟核弹头爆炸模拟核弹头爆炸 时的情况和测算核弹头老化信息时的情况和测算核弹头老化信息等。等。 一、计算机能做什么 计算机技术应用非常广泛,像信息浏览、信息管计算机技术应用非常广泛,像信息浏览、信息管 理、娱乐、智能设备、网络电话
4、、计算机辅助学习理、娱乐、智能设备、网络电话、计算机辅助学习 与教学、智能化楼宇,随处可见,与教学、智能化楼宇,随处可见,计算机能做什么,计算机能做什么, 关键在人的想向力关键在人的想向力。 实现这一切的关键是:硬件与配套的软件。应用实现这一切的关键是:硬件与配套的软件。应用 推动着计算机技术的发展,而软件推动着计算机技术的发展,而软件(程序程序)决定着计决定着计 算机技术应用的效果。从某种程度看,是软件改变算机技术应用的效果。从某种程度看,是软件改变 了我们社会,是软件提供了我们工作和学习的便利。了我们社会,是软件提供了我们工作和学习的便利。 二、程序设计语言与C语言 无论任何信息无论任何信
5、息(包括程序与数据包括程序与数据),在计算机内部都是,在计算机内部都是 以以二进制表示二进制表示的,为了的,为了与计算机交流与计算机交流,人们发明了程,人们发明了程 序设计语言。程序设计语言经历了序设计语言。程序设计语言经历了机器语言、汇编语机器语言、汇编语 言和高级语言言和高级语言的阶段。现在常用的高级语言有多种,的阶段。现在常用的高级语言有多种, 比如:比如:C、Delphi、C+、Java、C#、VB等等。等等。 不同的语言有不同的语法规则,我们所编写的程序,不同的语言有不同的语法规则,我们所编写的程序, 必须遵守所使用语言的语法规则必须遵守所使用语言的语法规则,不然所用的编译器,不然所
6、用的编译器 无法识别,从而得不到计算机能够识别运行的目标代无法识别,从而得不到计算机能够识别运行的目标代 码。换句话说,码。换句话说,编写程序的过程是先找到解决问题的编写程序的过程是先找到解决问题的 方案和步骤,在限定的语法规则下,写出合乎要求的方案和步骤,在限定的语法规则下,写出合乎要求的 源代码,由编译器翻译成计算机能识别的二进制代码。源代码,由编译器翻译成计算机能识别的二进制代码。 二、程序设计语言与C语言 一般都是把一般都是把C语言作为程序设计的入门语言,到语言作为程序设计的入门语言,到 目前为止,目前为止,C语言在基础软件中的作用没有哪样语语言在基础软件中的作用没有哪样语 言能够代替
7、言能够代替。 基础软件基础软件是指这样一类软件,其主要任务是把计是指这样一类软件,其主要任务是把计 算机的潜能充分发挥出来,面向上层应用软件提供算机的潜能充分发挥出来,面向上层应用软件提供 一个高效、可靠的功能集。这些软件会被密集地调一个高效、可靠的功能集。这些软件会被密集地调 用,用,性能性能上的一点点滞后都会在实践中被成百上千上的一点点滞后都会在实践中被成百上千 倍的放大。倍的放大。 可以说,在操作系统、虚拟机和设备驱动程序开可以说,在操作系统、虚拟机和设备驱动程序开 发方面,发方面,C语言可能是永远的王者。语言可能是永远的王者。 三、C语言在大学学习中的作用 C语言是学习其它语言的基础,
8、比如:语言是学习其它语言的基础,比如: C+。 某些计算机课程采用某些计算机课程采用C语言作为描述语言,语言作为描述语言, 比如:数据结构、计算机图形学、操作系统比如:数据结构、计算机图形学、操作系统 等。等。 国际和国内的大型程序设计竞赛支持国际和国内的大型程序设计竞赛支持C/C+ 编程。编程。 四、怎样学好程序设计 程序设计的核心是程序设计的核心是算法算法。要写好算法,必须要有。要写好算法,必须要有 牢固的数学基础牢固的数学基础。国际国内著名的程序设计大师,。国际国内著名的程序设计大师, 无不是有坚实的数学基础,甚至很多是学数学出身。无不是有坚实的数学基础,甚至很多是学数学出身。 程序设计
9、重在训练,重在创新。大家平时除了完程序设计重在训练,重在创新。大家平时除了完 成教材后面典型的习题,也可以自己试着用成教材后面典型的习题,也可以自己试着用C语言语言 编程来编程来解决一些实际问题解决一些实际问题。比如,学习矩阵,可以。比如,学习矩阵,可以 试着编写通用的矩阵运算函数。试着编写通用的矩阵运算函数。 现代软件一般是由项目组集体力量完成,在平常现代软件一般是由项目组集体力量完成,在平常 练习中,试着与别的同学练习中,试着与别的同学讨论、协作讨论、协作,可以增强自,可以增强自 己的合作能力与精神。另外,为己的合作能力与精神。另外,为 维护代码,编写代维护代码,编写代 码一定要注重码一定
10、要注重格式与可读性格式与可读性,而不能图快或方便。,而不能图快或方便。 五、课程学习的要求 多媒体教学信息量大,要求课前预习,课堂注重多媒体教学信息量大,要求课前预习,课堂注重 学习效率,课后归纳总结。学习效率,课后归纳总结。 完成教学指定的作业。完成教学指定的作业。 实验上机前要求完成该次实验的程序,上机时只实验上机前要求完成该次实验的程序,上机时只 是输入程序与调试程序,分析运行结果。是输入程序与调试程序,分析运行结果。 1.1 C语言出现的历史背景 产生背景产生背景 产生过程产生过程 时间时间:19721973 地点地点:美国贝尔实验室美国贝尔实验室 目的目的:UNIX操作系统操作系统
11、设计人设计人: Ken.Thompson和和 Dennis.M.Ritchie C标准标准 标准标准C: K 主函数主函数 把函数把函数 体括起体括起 来来 换行符换行符 This is a program. 执行结果:执行结果: 1.3 简单的C语言程序介绍 例子例子2 2 main( ) int a,b,sum; a=123;b=456; sum=a+b; printf (“sum is %d n”, sum); /* */* */ 定义变量定义变量 /* /* 赋值语句赋值语句 * */ / 十进制形式输出十进制形式输出 sum is 579 1.3 简单的C语言程序介绍 main( )
12、 int a,b,c; scanf (“%d, %d” , c= max (a, b); prinf (“max= %d” , c) /*输入变量输入变量a和和b的值的值*/ int max( int x , int y) int z; if (xy) z=x; else z=y; return (z); /*调用函数调用函数 max,将得将得 到的值赋给到的值赋给c /*定义定义max函数,函数值为整型函数,函数值为整型*/ /*声明部分,定义变量声明部分,定义变量*/ /*max函数的声明部分,定义本函数的声明部分,定义本 函数用到的变量函数用到的变量z为整型为整型*/ /*将将z的值返回
13、,通过的值返回,通过max带回调用带回调用 处处*/ 1.3 简单的C语言程序介绍 C程序构成:程序构成: 1、C程序是由函数构成的。(函数是程序是由函数构成的。(函数是C程序的基本程序的基本 单位)单位) 2、一个函数由、一个函数由函数首部函数首部和和函数体函数体两部分组成。两部分组成。(函数函数 体包含声明部分与执行部分体包含声明部分与执行部分 3、一个、一个C程序总是从程序总是从main函数开始执行的,函数开始执行的,main函函 数的位置在整个程序中并不固定。数的位置在整个程序中并不固定。 4、C程序书写格式自由,一行内可以写几个语句,程序书写格式自由,一行内可以写几个语句, 一个语句
14、可以分写在多行上。)一个语句可以分写在多行上。) 5、每个语句和数据定义的最后必须有一个分号。、每个语句和数据定义的最后必须有一个分号。 1.3 简单的C语言程序介绍 6、C语言本身没有输入输出语句。语言本身没有输入输出语句。 7、可以用、可以用/*/对对C程序中的任何部分作注释。(注程序中的任何部分作注释。(注 释是给人看的,对编译和运行不起作用)释是给人看的,对编译和运行不起作用) 优秀程序员应该具备的素质之一:优秀程序员应该具备的素质之一: 使用使用TAB缩进缩进 对齐对齐 有足够的注释有足够的注释 有合适的空行有合适的空行 1.4 运行C语言的步骤与方法 编辑 链接 编译 执行 第2章
15、 算法-程序的灵魂 简介 数学科学学院:汪小平数学科学学院:汪小平 什么是算法 一个著名的公式:一个著名的公式: 程序程序 = = 算法算法 + + 数据结构数据结构 形象的说:算法就是形象的说:算法就是解决问题的详细步骤解决问题的详细步骤。 C语言课程中几乎不涉及到复杂的数据结构,所以语言课程中几乎不涉及到复杂的数据结构,所以 以以C语言课程中:语言课程中: 程序程序 算法算法 算法怎么表达 如何来考虑并表达算法,首先应该明白现代程序的如何来考虑并表达算法,首先应该明白现代程序的 的构成:的构成: 顺序顺序 分支(判断)分支(判断) 循环循环 这就要求我们在考虑问题的解决方案时,尽量把解这就
16、要求我们在考虑问题的解决方案时,尽量把解 决的步骤对应到顺序、分支和循环这三种结构。决的步骤对应到顺序、分支和循环这三种结构。 特别注意的是,大家善于把一些具有重复性处理的特别注意的是,大家善于把一些具有重复性处理的 顺序结构转化为循环结构。顺序结构转化为循环结构。 下面举两个例子说明算法的一种简单表达方式。下面举两个例子说明算法的一种简单表达方式。 算法怎么表达 例例1 判闰年问题判闰年问题 满足下面两个条件之一的年份是闰年:满足下面两个条件之一的年份是闰年: 能被能被4整除但不能被整除但不能被100整除的年份是闰年;整除的年份是闰年; 能被能被400整除的年份是闰年。整除的年份是闰年。 要
17、求从键盘读入输入的年份,程序判断出该年份要求从键盘读入输入的年份,程序判断出该年份 是否是闰年,输出判断的结果。是否是闰年,输出判断的结果。 流程图流程图 输入输出输入输出 处理框处理框 判断框判断框 流程控制流程控制 Y 算法怎么表达 读入年份读入年份n n能被能被4整除?整除? n能被能被100整除?整除? n能被能被400整除?整除? 不是闰年不是闰年 是闰年是闰年 Y Y N N N 算法怎么表达 例例2 求下面表达式的值:求下面表达式的值: 111111 1 2349899100 你怎么求这些项的和?你怎么求这些项的和? 用顺序结构?用顺序结构? 用循环结构?用循环结构? 算法怎么表
18、达 i = 100? Y N sum = 0, i = 1 f = 1 f = -1 * f sum=sum+f*1/i i = i + 1 输出输出sum 习题习题 P36:4、(3)(6) 第3章 顺序程序设计 数学科学学院:汪小平数学科学学院:汪小平 一、C语言的数据类型(1) C 数数 据据 类类 型型 基本类型基本类型 构造类型构造类型 指针类型指针类型 空类型空类型 void 字符型字符型 char 枚举类型枚举类型 enum 整型整型 实型实型 单精度型单精度型 float 双精度型双精度型 double 数组数组 结构体结构体 struct 共用体共用体 union 短整型短整
19、型short 长整型长整型 long 整型整型 int 一、C语言的数据类型 -为什么需要多种数据类型? (2) 程序要能够执行,程序要能够执行,必须要读入内存必须要读入内存。内存可以想像。内存可以想像 为由位由字节构成的一长条,而数据和代码就是存储为由位由字节构成的一长条,而数据和代码就是存储 在这长条上。在这长条上。 数据存储在计算机中,总是以二进制形式存在的。数据存储在计算机中,总是以二进制形式存在的。 当把这些二进制拿来运算时,必须知道它代表着什么,当把这些二进制拿来运算时,必须知道它代表着什么, 而要知道它代表什么,通常从数据的长度和格式判知。而要知道它代表什么,通常从数据的长度和格
20、式判知。 综上,综上,C语言基本类型反映了数据的存储格式,从语言基本类型反映了数据的存储格式,从 而执行效率高,而丰富的构造类型使得而执行效率高,而丰富的构造类型使得C语言可表语言可表 达复杂的数据结构,完成复杂系统的构造。达复杂的数据结构,完成复杂系统的构造。 二、常量与变量-C语言中的常量(1) 在程序运算中,其值不能改变的量称为在程序运算中,其值不能改变的量称为常量常量,反之,反之 称为称为变量变量。 123、a、#、3.1416 都是常量都是常量 常量也可用标识符表示,但必须用以下方式定义:常量也可用标识符表示,但必须用以下方式定义: #define 标识名标识名 常量值常量值 #de
21、fine PI 3.1416 #include #include int main( ) double s; s=sin(PI/3); printf(sin(pi/3)=%lf,s); return 0; 二、常量与变量- C语言中的变量(2) C语言常量不占用内存,标识符在编译器预处理时语言常量不占用内存,标识符在编译器预处理时 就替换成所代表的值。而变量对应着内存存储空间,就替换成所代表的值。而变量对应着内存存储空间, 因此可以在程序运行时填入和修改。因此可以在程序运行时填入和修改。 右边定义了一个整型变量:右边定义了一个整型变量:int price; price = 12345; “pr
22、ice”代表代表 四个字节四个字节整体整体 C语言的标识符要求只能由英文字母、语言的标识符要求只能由英文字母、10个数字个数字 和下划线构成,而且标识符的第一个字符不能是数和下划线构成,而且标识符的第一个字符不能是数 字。字。 12345 二、常量与变量- C语言中的变量(3) 关于标识符的几点注意:关于标识符的几点注意: 标识符中不能出现除字母、数字和下划线以外的字符,下面标识符中不能出现除字母、数字和下划线以外的字符,下面 都是不合法的标识符都是不合法的标识符 M.R.John、123、#33、3D34、ab C语言要区分大小写,下面是几个不同的标识符语言要区分大小写,下面是几个不同的标识
23、符 student和和Student、int和和Int、Sin和和sin 标识符不能与系统预定义标识符相同标识符不能与系统预定义标识符相同 比如不能用比如不能用float作为变量名,但作为变量名,但Float可以可以(但不建议但不建议) 标识符尽量做到“见名知意”,增强程序的可读性标识符尽量做到“见名知意”,增强程序的可读性 i、j、k、student_name、StudentName、MsgBox 三、整型数据-整型常量的表示方法(1) C语言中,整型数据有十进制、十六进制、八进制三语言中,整型数据有十进制、十六进制、八进制三 种表示方法。种表示方法。 r进制的数转化为十进制的公式如下:进制
24、的数转化为十进制的公式如下: 10 01 2 2 1 10121 arararaaaaa n n r n 十进制数转化为十进制数转化为r进制的方法举例如下:进制的方法举例如下: 123 8 3 15 8 1 7 1 8 10 173123 模模r取余法取余法 三、整型数据-整型变量的存储(2) 数据在内存中是以二进制表示。数据在内存中是以二进制表示。10的二进制是的二进制是1010, 实际上,整数在内存中是以实际上,整数在内存中是以补码补码表示。表示。正整数的补码正整数的补码 就是它的原码就是它的原码,而,而负整数的补码是其负整数的补码是其相反数的原码求相反数的原码求 反再加反再加1(即反码加
25、即反码加1)。 例如求例如求- -1的补码如下:的补码如下: - -1 1的相反数为:的相反数为:1 1 1 1的原码为:的原码为:000000000000000000000000000000000000000000010001 取反可得:取反可得: 111111111111111111111111111111111111111111101110 再加再加1 1可得:可得:11111111111111111111111111111111 三、整型数据-整型变量的分类(3) C语言的整型变量类型分为以下几种:语言的整型变量类型分为以下几种: 基本整型:基本整型:int (4字节字节) signe
26、d int 与与 unsigned int 短整型:短整型:short int,可以简写为,可以简写为short (2字节字节) signed short int 与与 unsigned short int 长整型:长整型:long int,可以简写为,可以简写为long (4字节字节) signed long int 与与 unsigned long int 三、整型数据-整型变量的分类(4) 容易得出各类数据的表示范围:容易得出各类数据的表示范围: int: -231231-1 -2147483648 2147483647 unsigned int:0232-1 04294967295 s
27、hort: -215215-1 -3276832767 unsigned short:0216-1 065535 long:-231231-1 -2147483648 2147483647 unsigned long:0232-1 04294967295 三、整型数据-整型变量的定义、运算与 溢出(5) #include int main( ) int a,b; a=2147483647; b=a+1; printf(na=%d,b=%d,a,b); return 0; 输出结果为:输出结果为:a=2147483647,b=-2147483648 01111111111111111111111
28、111111111 + 00000000000000000000000000000001 10000000000000000000000000000000 三、整型数据-整型常量的类型(6) 一般整型常量主要以数的范围来区分,例如一般整型常量主要以数的范围来区分,例如123可可 认为认为int、short、long、unsigned long等等 在一个整常量后加在一个整常量后加u或或U,则认为是,则认为是unsigned int型型 如:如:123u 或或 123U 在一个整常量后加在一个整常量后加l或或L,则认为是,则认为是long 如:如:123l 或或 123L 四、浮点型数据-浮点型
29、常量的表示方法 (1) 十进制小数表示:十进制小数表示:0.123、.123、- -.234、123.23 指数形式:指数形式:123E3、1.23e+5和和123e3均代表均代表123103 1.23e+5 是是规范化的指数形式规范化的指数形式,C语言的输出是规语言的输出是规 范化的指数形式。范化的指数形式。 浮点型数据在内存分为两部分存放:小数部分浮点型数据在内存分为两部分存放:小数部分 和指数部分,小数部分位数越多,数据越精确;和指数部分,小数部分位数越多,数据越精确; 而指数部分位数越多,表示数的范围越大。而指数部分位数越多,表示数的范围越大。 在在float类型中,一般类型中,一般2
30、4位表示小数位表示小数(包括符号包括符号)。 四、浮点型数据-浮点型变量分类及常量 类型(2) float:4字节,有效数字字节,有效数字67位,范围位,范围(阶数阶数)-38+38 double:8字节,有效数字字节,有效数字1516,范围,范围(阶数阶数)-308+308 long double:16字节,有效数字字节,有效数字1819位,范围位,范围(阶数阶数) -4932+4932 浮点数存储与运算时有舍入误差。通常不用浮点数浮点数存储与运算时有舍入误差。通常不用浮点数 比较相等比较相等。 C编译系统一般把浮点常量看作双精度作运算,这编译系统一般把浮点常量看作双精度作运算,这 样运算结
31、果更精确,但速度慢。若在常量后加上样运算结果更精确,但速度慢。若在常量后加上f 或或F,可强制要求看作单精度常量。,可强制要求看作单精度常量。 123.12 与与 123.12f的区别?的区别? 五、字符型数据-字符型常量(1) 字符型常量中用单引号括起来的一个字符。字符型常量中用单引号括起来的一个字符。 如如a、A、等。等。 另外一种类型的常量称为转义字符,以另外一种类型的常量称为转义字符,以开始。开始。 n:换行,:换行,ASCII代码为代码为10 t:水平制表符:水平制表符(跳到一下跳到一下tab位置位置),ASCII代码为代码为9 b:退格,:退格,ASCII代码为:代码为:8 r:回
32、车,回到本行开头,:回车,回到本行开头,ASCII代码为:代码为:13 f:换页,移到下页开头,:换页,移到下页开头,ASCII代码为:代码为:12 :代表反斜杠,:代表反斜杠,ASCII代码为:代码为:92 :代表单引号,:代表单引号,ASCII代码为:代码为:39 ”:代表双引号,:代表双引号,ASCII代码为:代码为:34 ddd:1到到3位八进制代表的字符,位八进制代表的字符,012代表回车代表回车 xhh:1到到2位十六进制代表的字符,位十六进制代表的字符,xa代表回车代表回车 五、字符型数据-字符型常量(2) #include #include int main()int main
33、() printf(“ ab cprintf(“ ab c t det de tgtg n”);n”); printf(“hprintf(“h titi b b bj kbj k n”);n”); return 0;return 0; 例:分析下面程序的输出。例:分析下面程序的输出。 五、字符型数据-字符变量及存储(3) 一个字符变量用一个字节的内存存放,它在内一个字符变量用一个字节的内存存放,它在内 存中是以其存中是以其ASCII码表示的。下面两句等效:码表示的。下面两句等效: char a; a=a; printf(a=%cn,a); a=97; printf(a=%cn,a); C语言中
34、的字符数据可以与数值进行混合运算语言中的字符数据可以与数值进行混合运算 五、字符型数据-字符变量及存储(4) #include int main(void) char a; printf(nInput a char:); scanf(%c, if(a=A printf( %c,a); return 0; 例:完成从外界读入一个字符进行大小写转换例:完成从外界读入一个字符进行大小写转换 五、字符型数据-字符串常量(5) 字符作为数值类型使用时字符作为数值类型使用时(比如图像处理中的比如图像处理中的 颜色颜色),也分有符号或无符号,即,也分有符号或无符号,即signed和和 unsigned,它们
35、的值域范围分别为,它们的值域范围分别为: -128127和和0255 字符串常量是用双引号括起来的字符序列。字符串常量是用双引号括起来的字符序列。 ”how are you?”、”a”、”123”、”1.123E+123” C语言没有专门的字符串类型,字符串的表示是用字符语言没有专门的字符串类型,字符串的表示是用字符 数组来实现。注意数组来实现。注意C语言字符串的末尾是字符语言字符串的末尾是字符0。 六、变量赋初值 变量在定义时,可以预先赋初值:变量在定义时,可以预先赋初值: int a=12,b=0123,c=0 xff; float f=3.56; char ch=t; int i1,i2
36、,i3=2; 定义变量时,不能这样写:定义变量时,不能这样写:int a=b=c=3; 变量赋初值是在程序运行时进行的,如变量赋初值是在程序运行时进行的,如 int a=3; 等价于等价于 int a; a=3; 七、各类数值型数据间的混合运算(1) 当数据进行运算时,若数据之间的类型不一样,则当数据进行运算时,若数据之间的类型不一样,则 按以下规则进行转换再进行运算:按以下规则进行转换再进行运算: double float long unsigned int char,short 低低 高高 七、各类数值型数据间的混合运算(2) 例:假设有以下定义:例:假设有以下定义: char ch; i
37、nt i; long e; float f; double d; 试分析下列表达式的计算过程。试分析下列表达式的计算过程。 1、ch/i + f*d - (f+i) 2、 10+a+i*f-d/e 注意上述转换在系统自动进行的,称为注意上述转换在系统自动进行的,称为隐式转换隐式转换。 八、运算符与表达式-C语言运算符简介 (1) C语言的运算符可以分为语言的运算符可以分为13类:类: 算术运算符:算术运算符:+ 、-、*、/、%、+、- 关系运算符:关系运算符:、=、!= 逻辑运算符:逻辑运算符:!、 k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; pr
38、intf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b; 八、算术运算符和算术表达式(4) +、- 不能用于常量和表达式,如不能用于常量和表达式,如5+,(a+b)+ +、 -结合方向:结合方向: 自右向左自右向左 优先级:优先级:-、+、- *、 / 、% +、 - -i+ i=3; printf(“%d”,-i+); j+k; 等价于等价于 -(i+) 输出输出-3 等价于等价于 (j+)+k; +、-一般用于循环语句,或简单的自增、自减运算,一般一般用于循环语句,或简单的自增、自减运算,一般 避免运用避免运用+、-构造复杂的语句,如:构造复杂的
39、语句,如: (i+)+(i+)+(i+) 这样容易产生一些不必要的副作用。这样容易产生一些不必要的副作用。 八、算术运算符和算术表达式(5) 3、强制类型转换运算符、强制类型转换运算符 一般形式:(类型名)(表达式)一般形式:(类型名)(表达式) (int)(x+y) (int)x+y (double)(3/2) (double)3/2 (int)3.6 14.5%3 int(14.5)%3 说明:强制转换得到所需类型的中间变量,原变量类型不说明:强制转换得到所需类型的中间变量,原变量类型不 变变。较高类型向较低类型转换时可能发生。较高类型向较低类型转换时可能发生精度损失问题精度损失问题。 九
40、、赋值运算符(1) 赋值运算的作用是将一个数据(常量或表达式)赋给赋值运算的作用是将一个数据(常量或表达式)赋给 一个变量,格式为:一个变量,格式为:变量标识符变量标识符=表达式;表达式; 结合方向是自右向左,先运算表达式,再把结果赋给结合方向是自右向左,先运算表达式,再把结果赋给 变量变量 赋值转换规则:使赋值号右边表达式值自动转换成其赋值转换规则:使赋值号右边表达式值自动转换成其 左边变量的类型,基本规则为:左边变量的类型,基本规则为: 高类型向低类型数据之间赋值,按存储单元中的存储高类型向低类型数据之间赋值,按存储单元中的存储 形式直接传送形式直接传送(低字节对齐低字节对齐) 低类型数据
41、向高类型数据之间赋值,低字节对齐直接低类型数据向高类型数据之间赋值,低字节对齐直接 传送,并进行符号扩展传送,并进行符号扩展 类型之间转换的详细分类,大家可参看谭浩强的教材类型之间转换的详细分类,大家可参看谭浩强的教材 6062页页 九、复合赋值运算符(2) 种类:种类:+=、-= 、*=、 /= 、%=、=、 说明赋值表达式可以作为左值说明赋值表达式可以作为左值 下面是几个例子:下面是几个例子: 十、逗号运算符和逗号表达式 形式:表达式形式:表达式1,表达式表达式2,表达式表达式n 结合性:自左向右结合性:自左向右 优先级比赋值运算符低,逗号表达式的值是最后一优先级比赋值运算符低,逗号表达式
42、的值是最后一 个表达式的值,常用于个表达式的值,常用于for循环中循环中 a=3*5,a*4 a=3*5,a*4,a+5 x=(a=3,6*3) x=a=3,6*a a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); /a=15,表达式值表达式值60 /a=15,表达式值表达式值20 /赋值表达式,表达式值赋值表达式,表达式值18,x=18 /逗号表达式逗号表达式,表达式值表达式值18,x=3 /1,2,3 /3,2,3 C语句概述 先来看看先来看看C程序的构成:程序的构成: C程序程序 源程序文件源程序
43、文件1 源程序文件源程序文件2 源程序文件源程序文件n 预处理命令预处理命令 数据声明数据声明 函数函数1 函数函数n 函数首部函数首部 函数体函数体 数据声明数据声明 执行语句执行语句 十一、C语句概述 C语言的语句用来产生操作指令,所以变量的声明和语言的语句用来产生操作指令,所以变量的声明和 函数的声明都不是语句。函数的声明都不是语句。C语言中的语句分为语言中的语句分为5类:类: 控制语句控制语句:用于控制程序的走向:用于控制程序的走向 if()else for() while() dowhile() continue break switch goto return 函数调用语句函数调用
44、语句:调用其它函数模块的功能:调用其它函数模块的功能 例如:例如:y=sin(x);ch=getchar(); 表达式语句表达式语句:出现最多,由表达式加一个分号。而且任何:出现最多,由表达式加一个分号。而且任何 表达式加一个分号都能构成一个语句表达式加一个分号都能构成一个语句 空语句空语句:不做什么,单独一个分号构成一个语句:不做什么,单独一个分号构成一个语句 复合语句复合语句:用一对:用一对把一些语句括起来成为一个整体,又称把一些语句括起来成为一个整体,又称 分程序。分程序。 十二、关于赋值语句与C语言中的输入输 出 C语言中的“语言中的“=”是一个运算符,而其它语言一般不是是一个运算符,
45、而其它语言一般不是 赋值表达式可以存在其它表达式中赋值表达式可以存在其它表达式中 例如:例如:if(a=b)0) t=a; 赋值语句与赋值表达式是有区别的赋值语句与赋值表达式是有区别的 例如下面这一句错误的:例如下面这一句错误的: if(a=b;)0) t=a; C语言本身没有输入输出语句,避免编译阶段处理与硬件有语言本身没有输入输出语句,避免编译阶段处理与硬件有 关的问题,可移值性好。关的问题,可移值性好。C语言的输入输出通常由具体的语言的输入输出通常由具体的C编编 译系统提供的,可能有些差异,但有些是标准的函数。译系统提供的,可能有些差异,但有些是标准的函数。 使用别的函数,一般要包含声明
46、该文件的头文件,比如要使用别的函数,一般要包含声明该文件的头文件,比如要 使用标准输入输出函数,要在文件头添加:使用标准输入输出函数,要在文件头添加: #include 或或 #include “stdio.h” 语句不能嵌套语句不能嵌套 十三、字符数据的输入输出 首先介绍标准首先介绍标准IO中的单字符输入输出函数。中的单字符输入输出函数。 1、putchar(char ch):向终端输出一个字符。注意:向终端输出一个字符。注意 字符可以是转义字符。字符可以是转义字符。 例如:例如:putchar(n); 2、ch=getchar():从终端输入一个字符:从终端输入一个字符 例如:例如:putchar(getchar(); 十四、格式输入与输出(一) C语言的格式输入输出比较烦琐,重点掌握最常用的语言的格式输入输出比较烦琐,重点掌握最常用的 规则。规则。 一、一、printf函数函数 一般格式:一般格式:printf(格式字串,输出表列格式字串,输出表列);