107
第第第 第第第第第第第第第第第

C 程 序 设 计

  • Upload
    petra

  • View
    158

  • Download
    0

Embed Size (px)

DESCRIPTION

C 程 序 设 计. 第三版 计算机学院基础教学中心. 课程教学安排. 学时分配:课堂 —— 48 学时 实验 ——30 学时; ( 包括大作业上机 ) 学习目标: 掌握 C 语言基本语法、语义、数据类型; 掌握程序设计的基本方法、常用算法; 掌握调试程序的基本技能 : 能够熟练应用 Turbo C 、 Visaul C++ 集成环境或其它集成开发环境进行 C 语言的编写、编译与调试. 考核内容和方式. 内容 1 :习题集和课后内容编程题 方式:在本地机调试后,在指定时间内上传到服务器,由计算机改题。 - PowerPoint PPT Presentation

Citation preview

Page 1: C    程   序   设   计

第三版计算机学院基础教学中心

Page 2: C    程   序   设   计

学时分配:课堂—— 48 学时 实验—— 30 学时; ( 包括大作业上机 ) 学习目标:

◦ 掌握 C 语言基本语法、语义、数据类型;◦ 掌握程序设计的基本方法、常用算法;◦ 掌握调试程序的基本技能 : 能够熟练应用 Turbo

C 、 Visaul C++ 集成环境或其它集成开发环境进行 C 语言的编写、编译与调试

计算机学院基础教学中心

Page 3: C    程   序   设   计

内容 1 :习题集和课后内容编程题 方式:在本地机调试后,在指定时间内上传到服务

器,由计算机改题。

内容 2 :习题集中的客观题(选择题,填空题,程序修改题)

方式:在本学期内由教师收取习题集批改检查。

计算机学院基础教学中心

Page 4: C    程   序   设   计

内容 3 :实验编程题 方式:在实验课上完成提交给服务器后由计算机批

改 内容 4 :技能测试题 方式:在最后一次实验课上用 1 个半小时时间进行

测试。 内容 5 :提交大作业

计算机学院基础教学中心

Page 5: C    程   序   设   计

理论成绩:平时作业( 30%) + 期末考试( 70% )

实验成绩:大作业成绩( 30%) + 技能测试成绩( 70% )

计算机学院基础教学中心

Page 6: C    程   序   设   计

第 1 章 C 语言概述 第 2 章 程序的灵魂—算法 第 3 章 数据类型、运算符与表达式 第 4 章 最简单的程序设计—顺序程序设计 第 5 章 选择结构程序设计 第 6 章 循环控制

计算机学院基础教学中心

Page 7: C    程   序   设   计

第 7 章 数组 第 8 章 函数 第 9 章 预处理命令 第 10 章 指针 第 11 章 结构体 第 12 章 位运算 第 13 章 文件

计算机学院基础教学中心

Page 8: C    程   序   设   计

1.1 C 语言出现的历史背景 1.2 C 语言的特点 1.3 简单 C 程序介绍

计算机学院基础教学中心

Page 9: C    程   序   设   计

1963 年,剑桥大学将 ALGOL 60 语言发展成为CPL(Combined Programming Language) 语言。

1967 年,剑桥大学的 Matin Richards 对 CPL 语言进行了简化,于是产生了 BCPL 语言。

1970 年,美国贝尔实验室的 Ken Thompson将 BCPL进行了修改,并为它起了一个名字“ B 语言”。

1973 年,美国贝尔实验室的 D.M.RITCHIE在 B 语言的基础上最终设计出了一种新的语言,他取了 BGPL 的第二个字母作为这种语言的名字,这就是 C 语言

计算机学院基础教学中心

Page 10: C    程   序   设   计

1978年 Brian W.Kernighian和 Dennis M.Ritchie 出版了名著《 The C Programming Language 》,从而使 C 语言成为目前世界上流行最广泛的高级程序设计语言

计算机学院基础教学中心

Page 11: C    程   序   设   计

常见的高级语言◦ FORTRAN—— 数值计算、丰富的数学库;◦ BASIC—— 解释型、编译型;◦ PASCAL—— 第一个系统体现结构化的语言;◦ C—— 可用于系统软件、应用软件的开发;◦ C + +—— 面向对象的方法; C 的超集;◦ JAVA—— 与操作平台无关,适于编写网络异构

环境应用软件

计算机学院基础教学中心

Page 12: C    程   序   设   计

C 语言允许直接访问物理地址,能进行位运算,可以直接对硬件进行操作。

计算机语言的分类◦ 机器语言——二进制机器指令、可直接执行、依赖具体计算机硬件;◦ 汇编语言——助记符号、需经汇编处理、依赖具体计算机硬件;◦ 高级语言——需经编译处理、与硬件无关,可移植性好;

计算机学院基础教学中心

Page 13: C    程   序   设   计

输出 hello,world main() {

printf(“hello,world”);}

计算机学院基础教学中心

编译 运行Hello.c Hello.exe

Page 14: C    程   序   设   计

计算两个数中的较大数 main( )

{ int a , b , c ; scanf (”%d,%d”, &a, &b) ; c = max(a , b) ; /* 调用 max 函

数 */ printf (“max=%d\n”, c) ; } int max(int x , int y) /*自定义函数

*/ { int z ; if (x>y) z=x ; else z=y ; return(z) ; }

计算机学院基础教学中心

YS

Page 15: C    程   序   设   计

函数是构成 C 程序的基本单位;被调用函数可以是用户自定义函数、也可是系统提供的函数;

函数的构成 : 函数类型 函数名 ( 函数参数 ) 函数首部 {…………} 函数体

计算机学院基础教学中心

Page 16: C    程   序   设   计

一个 C 程序中必须有一个而且只能有一个 main 函数;一个程序总是从 main 函数开始执行。

每个语句最后必须有一个分号。 可以用 /*…*/在 c程序中加以注释 .

计算机学院基础教学中心

Page 17: C    程   序   设   计

C 程序的关键特点 C 程序由函数构成 , 优点

计算机学院基础教学中心

Page 18: C    程   序   设   计

2.1 算法的概念 2.2 简单算法举例 2.3 算法的特征(自学) 2.4 算法的表示 2.2 算法举例 2.5 结构化程序设计方法

计算机学院基础教学中心

Page 19: C    程   序   设   计

算法——求解问题的方法和步骤; 算法设计——要考虑到是否正确、质量优劣、 表

达明确清晰; 算法类别——数值运算算法、非数值运算算法;

计算机学院基础教学中心

Page 20: C    程   序   设   计

算法的表示方法 :◦自然语言◦ 传统流程图◦ N-S 结构化流程图◦伪代码

结构化程序设计的三种基本结构:◦ 顺序结构◦ 选择结构◦ 循环结构

计算机学院基础教学中心

Page 21: C    程   序   设   计

顺序结构

A

B

计算机学院基础教学中心

A

B

开始

结束传统流程图 N-S 流程图

Page 22: C    程   序   设   计

选择结构(分支结构)

计算机学院基础教学中心

A B

PT F

入口

出口

BA

P T F

传统流程图 N-S 流程图

Page 23: C    程   序   设   计

例:对学生成绩 s进行判断,及格则输出 PASS 字样

计算机学院基础教学中心

s>=60?T F

输出 "PASS"

s<60?T F

输出 "PASS"

Page 24: C    程   序   设   计

循环结构

计算机学院基础教学中心

P

A

当 P为真

A

出口

其中: P 为循环判断条件; A 为要重复执行的操作 ,称为循环体

Page 25: C    程   序   设   计

自顶向下:由整体到具体逐步细化:逐层划分功能模块化设计:每个模块各司其值实现具体功能 结构化编程:用结构化语句描述控制过程

特点:结构清晰,可靠性强,易于调试,验证,扩充

计算机学院基础教学中心

Page 26: C    程   序   设   计

3. 1 C 的数据类型 3. 2 常量与变量 3. 3 整型数据 3. 4 实型数据 3. 5 字符型数据

计算机学院基础教学中心

Page 27: C    程   序   设   计

3. 6 变量赋初值 3. 7 各类数值型数据间的混合运算 3. 8 算术运算符和算术表达式 3. 9 赋值运算符和赋值表达式 3. 10 逗号运算符和逗号表达式

计算机学院基础教学中心

Page 28: C    程   序   设   计

计算机学院基础教学中心

数据类型

基本类型

构造类型

指针类型

空类型

整型

字符型

实型

枚举类型

单精度

双精度

数组类型

结构体类型

共用体类型

Page 29: C    程   序   设   计

常量◦ 符号常量的使用

变量◦变量三要素◦ 标识符命名规则

计算机学院基础教学中心

Page 30: C    程   序   设   计

常量 : 其值不能改变的量 形式上 : 程序序中直接书写的数据 例如: a=100; b=a+12; 常量类型:以字面形式区分 例如: 12 (基本整型)

3.5 (实型) 123L (厂整型)

‘A’ (字符型)

计算机学院基础教学中心

Page 31: C    程   序   设   计

符号常量 : 用标识符代表的常量例如 :#define PRICE 30 /* 定义符号常量 */main( ){ int num1, num2, num3, cost1, cose2, cost3; ┇ cost1=num1*PRICE; /*引用符号常量 */ cost2=num2*PRICE; cost2=num2*PRICE; ┇ }

计算机学院基础教学中心

Page 32: C    程   序   设   计

定义符号常量的意义 : 在程序中多处引用同一个常数时,采用符号常量便于参数的修改、减少较长数据的输入工作量。注意: 符号常量名可用大写或小写字母,为了便于与变量名区分,通常用大写。

在符号常量作用域内,不得出现符号常量被赋值 现象。如: PRICE=20 非法。

计算机学院基础教学中心

Page 33: C    程   序   设   计

定义 : 其值可以改变的量

计算机学院基础教学中心

Page 34: C    程   序   设   计

标识符命名规则◦ 由大或小写字母、数字、下划线组成,且第一个字符必须

是字母或下划线。变量命名举例:合法: sum、 SUM、 Average、 toal、 cost_1、 _1非法: for、 num-1、 1a、 ABC#

计算机学院基础教学中心

Page 35: C    程   序   设   计

C变量名中字母可大小写,但有大小写之分,

SUM、 sum、 Sum被视为不同的变量。有效字符相同的变量名被视为是同一个变量;◦如MS C中 student_name 与

student_number 。 在实际应用中命名应尽量见名知义。 C 中变量必须先定义后引用。

计算机学院基础教学中心

Page 36: C    程   序   设   计

变量名变量值变量的地址 :

◦ 给变量分配的存储单元第一个字节的地址 (变量的指针 )

计算机学院基础教学中心

n的地址→ 202

m的地址→ 20410

25

例如: int n, m; n=10; m=25;

Page 37: C    程   序   设   计

变量被赋值的物理意义是向它的存储单元存数; 变量可多次被赋值,新值将覆盖旧值;例如: n=10; /*赋值:破坏性的 */ n=45;

变量被引用的物理意义是从它的存储单元中读数; 例如: n=10; m=n+2; /*引用:非破坏性的 */

定义变量的时候用数据类型定义例如: int a ;

计算机学院基础教学中心

Page 38: C    程   序   设   计

整型常量整型变量整型数据的溢出

计算机学院基础教学中心

Page 39: C    程   序   设   计

有三种表示形式: 十进制 八进制——以数字 0 开头; 十六进制——以 0x 或 0X 开头 ; 其中 0: 数字 0例: 53 0123 0x53 -127 -0177 -0X7F

计算机学院基础教学中心

Page 40: C    程   序   设   计

类型名称 类型标识符 性质

存储格式

基本整型 int 有符号 补码、高位符号位

短整型 short int " "

长整型 long int " "

无符号整型

unsigned int 无符号 全部作为数

据位无符号短整型

unsigned short " "

无符号长整型

unsigned long " "

计算机学院基础教学中心

Page 41: C    程   序   设   计

在 TC 中各类型值的范围

类型标识符 存储位

表示范围

int 16 bit - 215 ~ (215 - 1)即- 32768 ~32767

short int 16 bit

long int或: long

32 bit - 231 ~ (231 - 1)即- 2147483648 ~ 2147483647

unsigned int 16 bit 0 ~ (216 - 1)即 0 ~ 65535unsigned short "

unsigned long 32 bit 0 ~ (232 - 1)即 0 ~4294967295

计算机学院基础教学中心

在 VC++ 6.0 中各类型值的范围

32bit - 231 ~ (231 - 1)即- 2147483648 ~ 2147483647

Page 42: C    程   序   设   计

C变量定义的一般形式: ( 适合于任何类型 ) 类型标识符 变量名表;

其中:变量名表——多个变量以逗号分隔 ;变量定义位置——通常在函数体内执行语句之前。

计算机学院基础教学中心

Page 43: C    程   序   设   计

例:main( ){ int i, j, k; static int m; long a, b=5; unsigned u; ┇ i=20; b=20; ┇ }

计算机学院基础教学中心

2byte

4byte

2byte

i 初值不定 j Km 初值为 0

a 初值不定

b 初值为 5

u

Page 44: C    程   序   设   计

int 型常数: - 32768~ 32767视为 int 常数 ,可赋给 int、 long 型变量。

long 型常数: 在 - 2147483648 ~ 2147483647之内、但超出

- 32768~ 32767 的数及带后缀 l / L 的视为long 型常数;可赋给 long 型变量。

一个整常量后面加上一个 U/u,认为是 unsigned int,例 :123u

计算机学院基础教学中心

Page 45: C    程   序   设   计

一个变量无法容纳下要存入的数,这种现象称为溢出,溢出将导致数据存储错误;在运算过程中也有可能产生溢出导致运算结果错,因此程序设计中应避免产生溢出。

计算机学院基础教学中心

Page 46: C    程   序   设   计

例: int a, b; a=65536; b=123*456; printf("a=%d, b=%d", a, b);

(溢出的错误结果 )

计算机学院基础教学中心

a=0, b=-9448

Page 47: C    程   序   设   计

a=65536;65535=(1 0000 0000 0000 0000 )2 a: 只存后 16 位

b=123*456;123×456=56088=( 1101 1011 0001 1000 )2b:

-9448 的补码

计算机学院基础教学中心

0000 0000 0000 0000

1101 1011 0001 1000

Page 48: C    程   序   设   计

修改后 : long a, b;

a=65536;b=123L*456; printf("a=%ld, b=%ld", a, b);

a=65536, b=56088 (正确 )

计算机学院基础教学中心

Page 49: C    程   序   设   计

实型常量 实型变量 实型量的舍入误差

计算机学院基础教学中心

Page 50: C    程   序   设   计

有两种表示形式:十进制小数、十进制指数◦例: 123.0 0.123 -14.2 0.0 0. .123

1.23e2 12.3e1例:表示 12亿 3 千万

数学方式—— 1230000000或 12.3×108 程序中—— 1230000000.0 ( 小数形式的实常数 ),12.3e+8、 1.23e9、 123e7 ( 指数形式 )

计算机学院基础教学中心

Page 51: C    程   序   设   计

指数形式说明: 12.3 e+8 指数部分 数值部分指数部分: e 表示以 10 为底,可大 /小写; 8 为指数值 (幂 ), 只能是整数; 指数符号为正可省略;数值部分 : 可是小数或整数 (不可省略);

计算机学院基础教学中心

Page 52: C    程   序   设   计

例:表示电子质量 0.91×10-30

◦ 小数形式: 0.0000 ……0091◦ 指数形式: 0.91e-30、 0.91E-30、 91e-32

错误的表示 :◦ e3 、 1e3.5 、 e

计算机学院基础教学中心

Page 53: C    程   序   设   计

类型名称 标识符 存储位数

存储格式

数值范围 有效位数

单精度实型 float 32 bit 浮点 ±(10 - 38~1038)

7 位

双精度实型 double

64 bit 浮点 ±(10 - 308~10308)

15 位

计算机学院基础教学中心

Page 54: C    程   序   设   计

例 3_1: float a, b; a=123456.789e5; /*赋值产生误差

*/ b=a+20; /*引用误差的

a*/ printf("%f", b);12345678848.000000 (前 7 位有效 )理论值应为:12345678900.0+20=12345678920.0解决办法: double a, b;

计算机学院基础教学中心

Page 55: C    程   序   设   计

字符常量 字符变量 字符数据的存储 字符串常量

计算机学院基础教学中心

Page 56: C    程   序   设   计

在程序中有两种表示形式: 单引号括起来的一个字符——

适合于可键入字符的表示;如:’ A’ ’3’ ’#’

单引号中右斜杠开头的转义字符——适用于所有字符,常用于控制字符和不可键入字符的表示。

计算机学院基础教学中心

Page 57: C    程   序   设   计

字符 编码值 (十进制 )

性质

控制字符 0~ 31 设备控制

DEL 127 设备控制

字母、数字、标点、运算、括号等

32~ 126 可键入

扩展的表格符、希腊字母等

128~ 254 不可键入

计算机学院基础教学中心

扩展 ASCII码字符分类: (P374)

Page 58: C    程   序   设   计

计算机学院基础教学中心

转义形式 含 义 转义形式 含 义\ n 回车换行 \ a 响铃

\ t 横向跳至标准列 \ \ 右斜杠字符

\ b 回退一列 \ ’ 单引号字符

\ r 回车到行首 \ ” 双引号字符转义形式 含 义\ ddd 用字符的 8 进制 ASCII码值代表字符;

ddd:1~ 3 位;取值 0 ~ 376 ;适于所有字符。

\ xhh hh: 1~ 2 位 16 进制字符;取值 0 ~ FE, x 小写,字母字符可大 /小写。适于所有字符。

Page 59: C    程   序   设   计

在程序中表示下列字符

字符 A : 字符 3: 单引号 : 空格 : 回车换行 :

计算机学院基础教学中心

'A' '\101' '\x41'

'3' '\63' '\x33'

'\''' ' '\40' '\x20'

'\n'

Page 60: C    程   序   设   计

例:不可键入字符的表示 main( ) { int a, b; char c; scanf(”%d,%d”, &a,&b) ; c=242; /*or c=’\

xf2’ */ if(a>=b) printf(” %d%c%d”, a,

c, b); else printf(” %d<%d”, a, b); } 8, 5↙ 输入 8≥5 输出

计算机学院基础教学中心

Page 61: C    程   序   设   计

在程序中的表示有两种类型;

标识符 存储位

以%d格式处理时的区别

char 8 bit 解释为定点补码数,高位符号位。

unsigend char

8 bit 解释为无符号数, 8 位都视视做数据位。

计算机学院基础教学中心

Page 62: C    程   序   设   计

例: char c1, c2 ; c1=’A’ ; c2=c1;存储 :c1:

若: c1按字符解读——字符 A c1按整数解读—— +65

0 1 0 0 0 0 0 1

计算机学院基础教学中心

Page 63: C    程   序   设   计

C 允许字符量与 0 ~ 255之间的整形量互相通用通用的范围包括:

◦互相赋值◦ I/O格式符通用◦ 进行算术、关系运算

计算机学院基础教学中心

Page 64: C    程   序   设   计

例:整型量、字符量互相赋值和通用格式符

main( ) { char c ; int i ; c=97; i=’ b’ ; printf (”%c,%d\n”, c, c); printf (”%c,%d\n”, i, i); } a,97 b,98

计算机学院基础教学中心

Page 65: C    程   序   设   计

例:字符量算术运算 (字母大小转换) main( ) { char c1, c2 ; c1=’A’ ; c2=’B’ ; c1=c1+32; c2=c2+32; printf(”%c%c”, c1, c2); } ab

计算机学院基础教学中心

Page 66: C    程   序   设   计

例:字符量关系运算(判断字母大小写) main( ) { char c1; scanf(”%c”; &c1); if(c1>=97&&c1<=122) c1=c1-

32; pintf(”%c”, c1); } a↙ 输入 A 输出

计算机学院基础教学中心

Page 67: C    程   序   设   计

例: unsigned char 类型的使用 main( ) { char c; c=254; /*or c=’\xfe’ */ printf(” %c\t%d”, c, c); } ■ ■ -2为什么用 %d格式解读 c 输出的不是 254?因%d 是按有符号补码解读 c的。 c: 相当于 -2 的补码 1 1 1 1 1 1 1 0

计算机学院基础教学中心

Page 68: C    程   序   设   计

上例改为: main( ) { unsigned char c; c=254; /*or c=’\xfe’

*/ printf(” %c\t%d”, c, c); } ■ 254即: %d输出 char型——按有符号数解读; %d输出 unsigned char型——按无符号数解读。

计算机学院基础教学中心

Page 69: C    程   序   设   计

表示——由一对双引号括起来的字符序列” How do you do.” ”123.456” ”a” 例:在程序中表示下列字符串:x≥y ”x\xf2y” 长度: 3C:\DOS ”C:\\DOS” 长度: 6”OK!” ”\”OK!\” ” 长度: 5

计算机学院基础教学中心

Page 70: C    程   序   设   计

存储——双引号内每个字符占用一个字节,所有字符按顺序连续存储,自动在最后加入字串结束标志:空字符

例:“ How do you do.”

H o w d o y o u d o . \0

计算机学院基础教学中心

Page 71: C    程   序   设   计

注意:空字符与空格字符是不同的字符‘ ‘ 0010 0000 32‘\0’ 0000 0000 空字符:名为 NUL 的控制字符 , 其 ASCII码值: 0 程序中表示:’ \0 ’

计算机学院基础教学中心

Page 72: C    程   序   设   计

在定义变量时给变量赋值叫做赋初值。 例: int a=10, b=5, c ; 例: int x=y=z=0 ; 编译时将指出错误 可改为: int x, y, z=x=y=0 ; 或: int x, y, z; x=y=z=0; /*初始化变量 */

计算机学院基础教学中心

Page 73: C    程   序   设   计

包括: 整型常量 / 变量 实型常量 / 变量 混合运算 字符型常量 / 变量例:混合表达式 8+2+‘a’+ i*f- d/l 若有如下定义 int i; float f; long l; double d; 且每个变量已赋值:。

计算机学院基础教学中心

Page 74: C    程   序   设   计

通常类型相同直接运算,结果保持原类型; 类型不同,系统自动转换为同一类型再进

行运算,结果为转换后的类型。不同类型运算时的自动转换规则: 高级 double float long unsigned 低级 int char、 short

计算机学院基础教学中心

Page 75: C    程   序   设   计

注意:因类型越高,数值范围越大、精度越高,因此这种转换无精度损失,是安全的;

表达式中只要有一个实型量 ( 单或双 ),表达式结果为双精度实型量;

对变量而言,仅仅是将读出的变量值进行了转换,变量的类型和变量存储内容保持不变。

计算机学院基础教学中心

Page 76: C    程   序   设   计

例: i f

i×f : 10.0… × 1.20…

计算机学院基础教学中心

10 1.2

Page 77: C    程   序   设   计

例: 10 + ’a’ + i * f – d / e 其中 i为整形, f为float 型, d为 double 型, e为 long 型。

表达式结果类型为: double 型注意:类型转换为系统自动完成

计算机学院基础教学中心

Page 78: C    程   序   设   计

算术运算符和算术表达式优先级和结合性强制类型转换运算符自增、自减运算符

计算机学院基础教学中心

Page 79: C    程   序   设   计

C 算术运算符简介 34 种、 13 类、 15 个优先级;1) 算术 6 ) 条件 11 ) 分量2) 关系 7 ) 逗号 12 ) 下标3) 逻辑 8 ) 指针 13 ) 函数调用4) 位 9 ) 求字节数 5) 赋值 10 ) 强制类型转换

计算机学院基础教学中心

Page 80: C    程   序   设   计

基本算术运算符: + 加 / 取正 (双目运算符 / 单目运算符) - 减 / 取负 (双目运算符 / 单目运算符) * 乘 (双目运算符) / 除 (双目运算符) % 整除取余 (双目运算符)

计算机学院基础教学中心

Page 81: C    程   序   设   计

注意: + 、 -为复用运算符;如: int a, b, c; a=5; b=a-3; /*减:两个运算目标 */ c=-a; /* 取负:一个运算目标 */

计算机学院基础教学中心

Page 82: C    程   序   设   计

两整数相除结果仍为整数如: 5/2 2 -5/3 -1 1/2 0要依实际应用情况加以利用或避免。求余运算要求两运算元素均为整型,余数仍为整型;如: int a, b; a=11%3; /*2 a*/ b=5%a; /*1 b*/若有 : a=11.0%3; 编译时将视为语法错。

计算机学院基础教学中心

Page 83: C    程   序   设   计

算术表达式: C 表达式——由运算符、括号将运算元素连接起来

的有值的式子。 算术表达式——由算术运算符、括号将数值型的运

算元素连接起来,其值为数值量的式子。其中:运算元素可为常量、变量、函数调用等。

计算机学院基础教学中心

Page 84: C    程   序   设   计

例如: 28+a sin(1.0)*10+y

计算机学院基础教学中心

Page 85: C    程   序   设   计

注意: 为保证表达式运算关系的正确性,需加入必要的括号,并注意括号的层次及配对关系;

乘号不得省略; 2a 2*a

应避免整型量相除可能带来的不良影响; 函数调用是以函数的返回值来参与运算的。

计算机学院基础教学中心

Page 86: C    程   序   设   计

C 运算符优先级: 15 个 结合性:两个 运算规则:

◦ C 在处理表达式时,不同级别运算符的运算顺序按优先级别由高到低进行。同一级别运算符的运算顺序按本级别的结合性进行。

结合性:◦左结合性——自左而右顺序◦右结合性——自右而左顺序

计算机学院基础教学中心

Page 87: C    程   序   设   计

C 算术运算符优先级及结合性: *、 /、% ——同为 3 级,自左而右 + 、 - ——加减同为 4 级,自左而右 ( ) ——1 级,自左而右 取负 —— 2 级

如: 100+(a+2)*3-b/3.0

计算机学院基础教学中心

Page 88: C    程   序   设   计

运算一般形式: ( 类型名 ) ( 表达式 ) 其值是被转换对象, 可以是常量、变量、 表达式

类型转换运算符, 2 级、单目

计算机学院基础教学中心

Page 89: C    程   序   设   计

类型转换运算符, 2 级、单目。强制类型转换的意义: 当自动类型转换不能达到目的,人为强制转换;

函数调用时,为了使实参、形参类型匹配,可采用强制类型转换。

计算机学院基础教学中心

Page 90: C    程   序   设   计

例: float a=11.0; int b; b=a%2; /* 编译出错 */修改后: b=(int)a%2;

注意被转换对象的范围 : b=(int)(a%2); 仍有错;

计算机学院基础教学中心

Page 91: C    程   序   设   计

例:将一个实数的整数和小数部分分开main( ){ float x=123.456, f; int w; f=x-(int)x; w=(int)x; printf("%d\n%f\n", w, f); } 123 0.456001

计算机学院基础教学中心

Page 92: C    程   序   设   计

自增 1 :++自减 1 :– –

含义: ++i 前置自增;先自加 1 ,后引用; i++ 后置自增;先引用,后自加 1 ;

计算机学院基础教学中心

优先级 2级、单目、自右而左

Page 93: C    程   序   设   计

– –i 前置自减;先自减 1 ,后引用; i– – 后置自减;先引用,后自减 1 ;意义:可提高执行效率。

计算机学院基础教学中心

Page 94: C    程   序   设   计

例; int i , j;

i = 3; j = ++i;

printf(“j = %d”, j);

j = 4

i++.c

例 int i, j; I = 3; j = i++;

printf(“j = %d”, j);

j = 3

计算机学院基础教学中心

Page 95: C    程   序   设   计

注意:只能对变量进行自增、自减运算; ++、 -- 、取负同为二级,结合性:自右而左; 如: i=3; j= -i++; /* -3j , i: 4 */

计算机学院基础教学中心

Page 96: C    程   序   设   计

赋值运算符 = 优先级 14 级、双目、自右而左;

赋值表达式 变量 = 表达式表达式可是 C 任何形式的表达式,包括算术、 条件、逗号、赋值等表达式;特殊形式:单独的常量、变量、函数调用。

计算机学院基础教学中心

Page 97: C    程   序   设   计

例: b=20 c=sin(1.0) d=pow(2, b)/2 e=a>b a=(b=5) a=b=c=d=0 c=b=a*2; a=(b=10)/(c=2)

计算机学院基础教学中心

Page 98: C    程   序   设   计

赋值过程中转换规则:◦被赋值变量的类型与表达式值的类型一致,直接赋值;不

一致系统自动以被赋值变量的类型为准进行转换,然后赋值。

计算机学院基础教学中心

Page 99: C    程   序   设   计

例: int i=10, j; float f; double d; i=i-5; /* 5 i */ j=i+3.56; /*8 j */ f=23; /* 单精度 23.0 f */ d=j+f; /*双精度 31.0 d */总结:按存储单元中地存储形式直接传送

计算机学院基础教学中心

Page 100: C    程   序   设   计

在赋值运算符前加上其它双目运算符构成;算术复合赋值运算符: + = 和赋值 -= 差赋值 * = 积赋值 优先级 14 级、自右

而左 / = 商赋值 %= 模赋值 意义:提高编译效率、目标代码的质量

计算机学院基础教学中心

Page 101: C    程   序   设   计

例: a=a+3 a+=3 x=x%3 x%=3 x=x*(y+8) x*=y+8 a=a*b-3 ≠ a*=b-3 a=a*(b-3) 注意:复合赋值运算符针对右边整个表达

式。 例: a=6; a+=a*=a-1; /*60 a*/

计算机学院基础教学中心

Page 102: C    程   序   设   计

逗号运算符 (也称为顺序求值运算符) , 优先级 15 级、双目、自左而右; 逗号表达式 表达式 1 ,表达式 2 ,……表达式 n 其中:表达式是 C 合法的任何表达式;它的值为表达式n的值

意义:在规定的只能是一个表达式的位置,实现多个表达式的计算或多个变量的赋值

计算机学院基础教学中心

Page 103: C    程   序   设   计

例: a=3*5, a*4例:两个表达式的比较 x=(a=3, 6*3) x=a=3, 6*a 例: a=5, b=3, c=a*b

计算机学院基础教学中心

X=18

X=3

Page 104: C    程   序   设   计

逗号运算符常见用法例: for 循环语句格式: for(e1; e2; e3) 内嵌语句; for(i=0, j=10; i<10; i++, j++) ~

计算机学院基础教学中心

Page 105: C    程   序   设   计

补充:求字节数运算符一般形式: sizeof (被测对象 ) 形式: 类型标识符 各类常量、变量 各种表达式 数组名等;优先级: 2 级、自右而左;运算结果:被测对象的存储字节数。

计算机学院基础教学中心

Page 106: C    程   序   设   计

例: sizeof (int) 结果: 2 a=sizeof (double) 8 sizeof (sum) sum变量的类型长

sizeof (40+25) 2 sizeof(40.0+25) 8 sizeof(123) 2 sizeof(123L) 4 sizeof(123*456) 2 例: char c1; int l1, l2; exe3-3.c l1=sizeof (c1); l2=sizeof (”Hello!”) - 1;

计算机学院基础教学中心

Page 107: C    程   序   设   计

大家辛苦了!

计算机学院基础教学中心