第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章

Slides:



Advertisements
Similar presentations
12 届减数分裂复习(蔡志敬) 给你一双翅膀,让你自由翱翔!. ※真核细胞分裂的方式 有丝分裂 无丝分裂 减数分裂.
Advertisements

Loops.
2017/3/16 上 (興) 櫃 公 司 僑外資持股情形申報作業.
电在我们日常生活、现代化社会中的应用: 电 是 什 么?.
C语言程序设计 第八章 函数.
C语言程序设计 第十二章 位运算.
第一章 程序设计入门.
第一章 C语言概述.
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
C++程序设计 第二讲 清华大学软件学院.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
C程序设计.
Chap 2 用C语言编写程序 2.1 在屏幕上显示 Hello World! 2.2 求华氏温度 100°F 对应的摄氏温度
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第二章 基本元素、类型和概念 七、输出函数printf 八、输入格式转换函数scanf.
C++语言程序设计 第二章 C++简单程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第三章 顺序结构程序设计 主讲教师 贾月乐 电话:
第3章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 3.1 格式化输出——printf()函数 3.2 格式化输入——scanf()函数.
第三章 数据类型、运算符与表达式.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第4章 顺序程序设计.
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
C语言概述 第一章.
第1讲 C语言基础 要求: (1) C程序的组成 (2) C语言的标识符是如何定义的。 (3) C语言有哪些基本数据类型?各种基本数
第2章 数据类型及表达式 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
第 二 章 数据类型、运算符与表达式.
Introduction to the C Programming Language
C语言程序设计 教案 崔武子制作
函式庫補充資料.
指標
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
Chap 5 函数 5.1 计算圆柱体积 5.2 数字金字塔 5.3 复数运算.
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C程序设计.
C语言程序设计 李祥 QQ:
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++程式設計入門 變數與運算子 作者:黃建庭.
第2章 数据类型、运算符与表达式 2.1 程序设计概述
第3章 数据类型、运算符与表达式.
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
第2章 数据类型、运算符与表达式 本章要点: 基本数据类型 常量和变量 算术运算符和算术表达式 关系运算符和关系表达式
第2章 基本数据及其运算 本章学习的目标: 1、掌握基本数据的各种表示,基本数据常数的书写方法;
THE C PROGRAMMING LANGUAGE
第二章 类型、对象、运算符和表达式.
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
Introduction to the C Programming Language
第二章 基本数据类型 ——数据的表示.
第四章 基本平面图形 线段、射线、直线.
第4章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 4.1 格式化输出——printf()函数 4.2 格式化输入——scanf()函数.
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
本节内容 指针类型.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
Introduction to the C Programming Language
結構、檔案處理(Structure, File)
第十二章 位运算.
目录 12.1 位运算符 12.2 位域(位段) 1.
變數、資料型態、運算子.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
函式庫補充資料 1.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章 第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章 下一章 习题

2.1 数据类型 C语言的基本数据类型 实型: 包括单精度实型、双精度实型 float,double 2.1 数据类型 基本类型 构造类型 指针类型 空类型 自定义 是C语言数据类型的基本型,其值不可再分解为其他类型。 一种由单种或多种数据类型构造而成的数据类型。 数组 结构 共用体 枚举类型 一种特殊的 数据类型, 其值为某个 量的内存地 址。 一种无返回值函数的数据类型。 void 用新的类型名替代已有类型名使用。 用typedef 定义 C语言的基本数据类型 整型: 包括有、无符号的基本整型、短整型、长整型 实型: 包括单精度实型、双精度实型 float,double 字符型: 用于表示和存储ASCII字符。 char

2.2 常量、变量和标准函数 2.2.1 常量 2.2.2 变量 2.2.3 标准函数 目 录 第二章 下一节 习题

2.2.1 常量 常量 (Constants / Literals) 在程序执行期间其值保持不变的量 C语言有以下几种类型的常量: 整型常量 2.2.1 常量 常量 (Constants / Literals) 在程序执行期间其值保持不变的量 C语言有以下几种类型的常量: 整型常量 实型(浮点型)常量 字符常量 字符串常量 https://www.tutorialspoint.com/cprogramming/c_constants.htm

1. 整型常量 有三种形式: 十进制整数: 八进制整数: 由数字 0 开头 如: 11, -13 , 0 , 65535 , … √ × 八进制整数: 由数字 0 开头 十六进制整数: 由前缀 0x 或 0X 开头 如: 11, -13 , 0 , 65535 , … √ 1,000 21/3 104 54. 10*3 01 9 9 × 如: 014 -011 0177777 如: 0x11 0XAFBDE √ 0X00FFH ×

整数又可分为: 长整型整数: 用后缀 L/l 表示。 012L , 65536L , 0XCL 无符号整数: 用后缀 U/u 表示。 017u, 0xfdbU 无符号长整数: 用后缀 UL/ul 表示。 15uL

2. 实型常量——浮点数 实型常量又称实数, 指带有小数部分的数。C语言中的实数 是以十进制表示的, 有两种表示形式: 十进制小数形式: 由数字、数符和小数点组成。 例: 0.123, .123, 123. ,0.0 , -2.5,… 指数形式: 又称科学记数法。用E(或e)表示以10为底的指数。 如: 100000000→ 1×108 →1E+8 0.0000125 → 1.25×10-5 →1.25E-05 0.91×10-3 → 0.91E-03 尾数部分 指数部分 字母E/e前必须有数字, 而E后面的阶码必须为整数。

例: 下列不合法的指数形式: ①单独的小数点和单独的指数部分 如: . E-5 E10 ②阶码只能是整数,不能带小数点。 如: 1234E1.5 2.E 6.5e (2*3)E-3 5*E4 ③1012不能写成 E12,必须写成: 1E12 1.0E12

3. 字符常量 字符常量: 是用单引号括起来的一个字符 如: ‘a’, ‘A’, ‘9’, ‘+’, ‘?’, ‘ ’ 合法 字符常量: 是用单引号括起来的一个字符 如: ‘a’, ‘A’, ‘9’, ‘+’, ‘?’, ‘ ’ 合法 “a”, ‘99999’, ‘’ 非法 在内存中, 字符常量以ASCI I码存储, 一个字符占一个字节。 由于字符常量是按整数存储的, 可以像整数一样在程序中参与相关的运算。如: ‘ a ’-3 2 ; // 执行结果9 7- 32 = 65 ‘ 9 ’-9; // 执行结果5 7- 9 = 48

转义字符 以“\”开头的字符序列, 有特定的含义。 如: ‘\\’ 表示输出一个反斜杠符 ‘\”’ 表示输出一个双引号 以“\”开头的字符序列, 有特定的含义。 如: ‘\\’ 表示输出一个反斜杠符 ‘\”’ 表示输出一个双引号 \ddd (ddd表示八进制的ASCII码) \xhh (hh表示十六进制的ASCII码) 例: ‘\n’ (回车换行) → ‘\12’ → ‘\xa’ ‘A’ → ‘\101’ → ‘\x41’ 注: ‘\0’或‘\000’是代表ASCII码为0的字符,即空字符(NULL), 表示整数0。

“CHINA”, “a”, “$12.5”, “”, “w\x53\\\np\103q” 4. 字符串常量 字符串常量: 用一对双引号括起的字符序列。例: “CHINA”, “a”, “$12.5”, “”, “w\x53\\\np\103q” 字符串长度: 字符串中所有字符的个数 系统自动在每个字符串的末尾加上一个空字符NULL, 即’\0’ 作为字符串的结束。’\0’是一个ASCII码为0的字 符。 例: “CHINA”在内存中所占的字节为:

字符串常量和字符常量的主要区别: 字符常量由单引号括起来, 字符串常量由双引号括起来。 字符常量只能是单个字符,字符串常量可以含有多个字符。 字符常量占一个字节, 字符串常量占的字节数等于字符个数加1。 比较: ’A’与”A”的区别 ‘A’ A 占一个字节 “A” 占两个字节 \0

5. 符号常量 符号常量: 用标识符表示的常量 格式: #define 标识符 常量 功能: 用该标识符代表后面的常量值 5. 符号常量 符号常量: 用标识符表示的常量 格式: #define 标识符 常量 功能: 用该标识符代表后面的常量值 例: #define PI 3.1415926 #define STAR ‘*’ 预处理命令#define也称为宏定义, 一个#define命令只能定义一个符号常量, 用一行书写, 不用分号结尾。

【例2.2】求半径为r的圆面积和圆周长 #include <stdio.h> #define PI 3.1415926 //用预处理命令定义符号常量 int main() { float r, area, l; //定义变量类型为实型 scanf("%f", &r); //输入r的值 area = PI * r * r; l = 2 * PI * r; printf("area=%f\nl=%f\n", area, l); return 0; }

5. 符号常量 说明: 符号常量名习惯用大写字母表示 该命令通常放在文件头 在程序中, 符号常量不允许重新赋值。 例: #define PI 3.1415926 PI=5.6; × 或 scanf( “%f ”, &PI ); ×

使用const定义常量 const type variable = value; #include <stdio.h> int main() { const int LENGTH = 10; const int WIDTH = 5; const char NEWLINE = '\n'; int area; area = LENGTH * WIDTH; printf("value of area : %d", area); printf("%c", NEWLINE); return 0; }

2.2.2 变量 变量概述 整型变量 实型变量 字符型变量 变量的初始化

变量概述 变量: 在程序执行期间其值可以改变的量 变量在使用之前必须被声明 每一个变量有名字,类型,长度和值。 对变量赋值过程是“覆盖”过程,用新值去替换旧值。 从内存中读出变量的值,该变量保持不变。 int x =23; 23 0000FF02 4Bytes RAM x = 90; 声明的作用 为变量分配内存单元,变量名作为内存单元的符号地址,这件事是在程序编译链接时完成的。 变量赋值特点 (1)先定义,后使用 int d,e,f; 定义三个变量为整数类型 如未定义,则在编译时被查出,认为非法 (2)变量未被赋值前,值为0 (3)对变量赋值过程是“覆盖”过程,用新值去替换旧值 (4)读出变量的值,该变量保持不变 (5)参与表达式运算的所有变量都保持原来的值不变 90 printf(“%d”, x);

变量概述 定义变量的形式: 类型说明符 变量名表; 例: int a, b; /*定义两个整型变量a和b*/ 类型说明符 变量名表; 例: int a, b; /*定义两个整型变量a和b*/ char c; /*定义字符型变量c*/ float f1, f2; //定义单精度实型变量f1和f2 变量类型(type) 变量名(name)是一个标识符

1. 整型变量 ─用来存放整型数据的变量 整型变量的分类表 类型名称 类型说明符 字节数 数值范围 基本整型 int >=2 -32768~32767 短整型 short [int] 长整型 long [int] >=4 -2147483648~ 2147483647 无符号基本整型 unsigned [int] 0~65535 无符号短整型 unsigned short [int] 无符号长整型 unsigned long [int] 0~4294967295 与操作系统、编译系统、机器字长有关。

有符号的整数 ─ 最高位是符号位 正整数在内存中以二进制原码形式存放。 负整数在内存中以二进制补码的形式存放。 有符号正整数 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 有符号负整数 -10 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 符号位 00000000 00001010 RAM -10的原码 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 按位取反 加1后得到-10的补码 符号位 11111111 11110110 RAM

无符号整数的所有二进制位全部用来存放数值, 不能存放负数。 无符号整数 无符号整数的所有二进制位全部用来存放数值, 不能存放负数。 无符号整数 65535u 1 1 1 1 1 1 1 1 11111111 RAM

例: 求50的三次方 #include <stdio.h> void main( ) { short int x; x=50*50*50; printf(“%d\n”, x ); } 程序运行结果为: -6072 (错)

将以上程序改为: #include <stdio.h> void main( ) { int x ; x=50*50*50 ; printf(“%d\n”, x) ; } 运行结果:125000 因此,在定义整型变量时,要注意数据类型允许的 数值范围。

2. 实型变量 用来存放实型数据的变量 分单精度型、双精度型和长双精度型三类

【例2.3】实型变量的使用 d=33333333333333.332000 #include <stdio.h> void main( ) { float f ; // f为单精度实型变量 double d ; // d为双精度实型变量 f=33333.33333 ; d=33333333333333.333333; printf(“f=%f\nd=%f\n”, f, d); } 输出结果: f=33333. 332031 d=33333333333333.332000 f; 无 效 数 字

每个字符变量分配一个字节用于存放一个字符。 (存放的是字符的ASCII码值) 3. 字符变量 ‘A’的ASCII码(值)为65 ‘\n’的ASCII码(值)为10 0 1 0 0 0 0 0 1 0 0 0 01 0 1 0 c1 c2 用来存放字符常量的变量 例: char c1, c2, c3 ; c1=‘A’; c2=‘\n’; c3=97; 每个字符变量分配一个字节用于存放一个字符。 (存放的是字符的ASCII码值) 字符数据与整型数据可相互赋值,直接运算。 可以把字符变量按整型量输出, 也允许把整型量按字符量输出。

{ int a=‘b’; //给一个整型变量赋一个字符值 char c1=97; //给一个字符变量赋一个整数值 【例2.4】字符型变量的使用 #include <stdio.h> void main( ) { int a=‘b’; //给一个整型变量赋一个字符值 char c1=97; //给一个字符变量赋一个整数值 c1=c1-32; // 将小写字母转换为大写字母 printf(“%d %d\n”, a , c1); printf(“%c %c\n”, a , c1); } 字符存放在内存中是以ASCII码的形式存放的,因此,用赋值语句 c1 = ‘A’; c1 = 65; 两者是等效的,在内存中存的都是65。 可以做实验,如下例所示 // 例 s2_2.c #include <math.h> // 包含头文件 void main( ) // 主函数 { char thisman; // 声明字符变量 thisman=‘A’; // thisman 赋值为’A’ printf(“thisman=%c\n”,thisman); // 输出thisman的值 printf(“ 65==‘A’ ----取值为%d\n”,65==‘A’); // 验证 // 65是否等于‘A’,并输出结果 编译链接后运行,输出结果为: thisman=A 65==‘A’----取值为1 输出结果: 98 65 b A

注意: 只能将一个字符常数赋给一个字符变量, 不能 把一个字符串常量赋予字符变量。 例: char c=“abc” ; 只能将一个字符常数赋给一个字符变量, 不能 把一个字符串常量赋予字符变量。 例: char c=“abc” ; 在C语言中没有字符串变量 (但可以用一个字符数组来存放一个字符串常量) ×

4. 变量的初始化 在说明变量的同时给变量赋初值 格式: 类型说明符 变量 = 常数 ; 例: int a=5; //定义并初始化 类型说明符 变量 = 常数 ; 例: int a=5; //定义并初始化 char c1=‘a’, c2=‘B’ ; double area, r=23.e-2 ; int x=10, y=10, z=10 ; //不能写成int x=y=z=10;

2.2.3 标准函数 包括: 输入输出函数、数学函数、字符和字符串函数等。 数学函数(math.h) sin(x) C编译系统提供的库函数 包括: 输入输出函数、数学函数、字符和字符串函数等。 数学函数(math.h) sin(x) cos(x) exp(x) log(x) log10(x) fabs(x) pow(x, y) sqrt(x) x为弧度, double x, double sin(x) cos(x)

area=√s(s-a)(s-b)(s-c) , s=(a+b+c)/2 【例2.5】求三角形面积 area=√s(s-a)(s-b)(s-c) , s=(a+b+c)/2 #include <stdio.h> #include <math.h> //预编译命令, 将系统提供的数学函数 //作为头文件包含到用户源文件中 void main( ) { double a, b, c, s, area; scanf(“%lf,%lf,%lf”, &a,&b,&c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“the area is%6.2f\n”, area); } 运行

2.3 运算符和表达式 算术运算符 赋值运算符 逗号运算符 基本运算符 逻辑运算符 条件运算符 求字节运算符 位逻辑运算符 C运算符 位移动运算符 位自反运算符 强制类型转换运算符 指针运算符 下标运算符 分量运算符 基本运算符 位运算符 特殊运算符 C运算符 本节 介绍

2.3 基本运算符及其表达式 2.3.1 算术运算符与算术表达式 2.3.2 不同数据类型的转换与运算 2.3.3 关系运算符与关系表达式 2.3.1 算术运算符与算术表达式 2.3.2 不同数据类型的转换与运算 2.3.3 关系运算符与关系表达式 2.3.4 逻辑运算符与逻辑表达式 2.3.5 条件运算符与条件表达式 2.3.6 赋值运算符与赋值表达式 2.3.7 逗号运算符与逗号表达式

1. 基本算术运算符 算术运算符用于各类数值运算。包括基本算术运算符、自增运算符、自减运算符。下表为基本算术运算符。 1

在C语言中,规定了运算符的优先级和结合性。 优先级: C语言中,运算符的优先级共分为15级。1级最高, 15级最 低。表达式求值时, 先做优先级高的操作。 如: d=a+b*c ; 当运算符的优先级别相同时,运算次序由结合性决定。 结合性: 左结合性(先左后右)例: d=3*5/4; 右结合性(先右后左)例: d=a=3;

/运算符 ① 整数相除截去余数, 此运算为整除。 5/2=2 (≠2.5) 1/3+1/3+1/3=0 ② 对于浮点数则为通常意义的除法 5.0/2.0=2.5 1./3+1./3+1./3=1

% 模运算符 用于计算两个数相除后得到的余数。 如: a%b 求a除以b以后得到的余数。 运算对象只能是整型量, 其结果也是整型量。 如: 5%2=1 3%3=0 3%5=3 ‘A’%2=1 3.0+10.0%5 所得结果的符号与运算符左侧操作数的符号相同 × -5%2=-1 5%-2=1

2. 自增、自减运算符 例: x = 10 ; y = ++x ; 此时, y = 11 含义 运算符 优先级 结合性 功能 自增 ++ 2 右结合 使变量的值增1 自减 -- 使变量的值减1 使用形式  ++i 或--i 变量i先自增或自减1,再引用i。  i++或i-- 先使用变量i,再自增或自减1。 例: x = 10 ; y = ++x ; 此时, y = 11 若: x = 10 ; y = x++ ; 则 y = 10 在这两种情况下, x都被置为11。

例: K=3; j=5; i=3; m=(++k)*j ; n=(i++)*j ; m= k= 20 4 n= i= 15 4

【例2.7】自增、自减运算符的使用。 i = ? 7 7 -6 i = 7 #include <stdio.h> int main() { int i = 6, a, b; printf("% d\n", ++i); printf("% d\n", i++); a = --i; printf("% d\n", a); b = i--; printf("% d\n", b); printf("% d\n", -i++); printf("i = %d\n", i); return 0; } 7 -6 i = 7 i = ? 7

注意: 自增、自减运算只能用于变量, 不能用于常量和表达式。 例: i++ 为合法的运算 ++6, ++(a+b) 为非法的运算 自增、自减运算符是两个+或两个-的一个整体, 中间不能 有空格。如果有多于两个+ 或两个-连写的情况,则编译 首先识别前两个+或-为增量或减量运算符。 表达式 x+++y 等价于 (x++)+y 自增、自减运算符的运算顺序是右结合,因此对-i++应理解为: -(i++),而 (-i )++ 是非法的。 例: i=3 ; printf(“%d”, -i++); 输出: -3

【例2.8】自增、自减运算符的使用 #include <stdio.h> int main() { int i, j, k; k = i++ + j; printf(“i = % d, j = % d, k = % d\n”, i, j, k); return 0; } 程序运行结果: i=2, j=1, k=2 k=(i++)+j;

3. 算术表达式 由算术运算符和括号将运算对象(如常量、变量、函数等)连接起来的一个有值的式子。 例: ‘A’*2-sqrt(4.)/-d (d=2) 表达式求值的优先次序: () 函数 - (负数) *、/、% +、- 高 低

书写问题: ① “/”号,如: → (a+b)/(c+d) ② “*”不能省略,如: 2(a+b) →2*(a+b) ③括号只能使用圆括号, 且成对出现,不能使用[ ] 和{ }。 如: a[x+b(y+c)] → a*(x+b*(y+c))

例: 将下列数学式子写成C算术表达式 ⑴ LN( -X) → log( sqrt( a+x*x )-x ) ⑵ │a│e-st → abs(a)*exp(-s*t ) ⑶ → sqrt(fabs(sin(x*3.14/180))) ⑷ xy → pow(x, y)

例: 与数学式子3乘以x的n次方除以(2x-1)对应的C语言表达式是____。 A> 3*x^n/(2*x-1) B> 3*x**n/(2*x-1) C> 3*pow(x,n ) *(1/(2*x-1) ) D> 3*pow(n, x) /(2*x-1) √

2.3.2 不同数据类型间的转换与运算 在C程序中, 当不同类型的量进行运算时, 要转换成同一种类型然后再进行运算。 例: 10+‘a’+1.5-8765.1234*‘b’ 转换方式: 自动转换:数据类型自动由低级向高级转换。 强制转换: 将表达式的运算结果强制转换成指定的数据类型。

自动类型转换 这种类型转换由编译系统自动完成 转换规则: float double long unsigned int char short 低 高 例: float f=3.5; int n=6; long k=21; double ss=f*n+k/2; 说明: 1. 横向的箭头表示必定的转换。 2. 纵向的箭头表示当运算对象 类型不同时转换的方向。

强制类型转换 格式: (数据类型说明符)(表达式) 注意: 强制转换属单目运算, 运算优先级为2。 强制转换得到的是中间结果类型,原变量类型不变。 数据类型说明符和表达式都必须加括号(单个变量除外) 例: int x, y ; float z ; (float)(x+y) ; (int)z+x ; (float)(5%3); (将5%3的值转换为float型)

#include <stdio.h> int main() { int x = 8; float f = 6.85; 【例2.12】强制类型转换的应用 (float)x=8.000000, x=8 (int)f=6, f=6.850000 X, f的类型并未改变 #include <stdio.h> int main() { int x = 8; float f = 6.85; printf("(float)x=%f, x=%d\n", (float)x, x); printf("(int)f=%d, f=%f\n", (int)f, f); return 0; } 2,

2.3.3 关系运算(比较运算) 即比较两个量的大小, 比较的结果为“真”或“假”。 例: a >3 如果a=8,则结果为“真”;如果a=1,则结果为“假”。 1. 关系运算符 含义 运算符 优先级 结合性 小于 < 6 左结合 小于等于 <= 大于 > 大于等于 >= 等于 == 7 不等于 !=

2. 关系表达式 用关系运算符将两个表达式连接起来的式子。 格式: <表达式1> <关系运算符> <表达式2> 其中: 表达式1和表达式2可以是任意表达式。 例: 5>(4<5) ‘a’> ‘b’+3 (a=4)>=(b=6) 5>2>7>8 值为: 1 例: m+n<=20, 测试此关系是否成立, 成立为真,不成立为假。 成 立 —— 关系表达式的值为1; 不成立 —— 关系表达式的值为0。 关系表达式的值是一个逻辑值: “真”或“假” C语言没有逻辑型数据, 因此, 用1表示“真”, 用0表示“假” 。 判断时, 0代表“假”, 非0即表示“真” 。

#include <stdio.h> int main() { int a, b, c; a = b = c = 10; 例2.13读程 输出结果: 1 , 10 , 10 1 , 20 , 11 0 , 20 , 11 #include <stdio.h> int main() { int a, b, c; a = b = c = 10; a = b == c; printf("%d , %d , %d \n", a, b, c); a == (b = c++ * 2); a = b > c >= 100; return 0; }

关系运算的不足 则不能用关系表达式表示。 关系表达式只能表达简单的关系,如: sum>=1500 即只能对一个条件进行测试。 y!=z 即只能对一个条件进行测试。 而以下关系: 0<x<5 则不能用关系表达式表示。 x>0&&x<5

2.3.4 逻辑运算符与逻辑表达式 1. 逻辑运算符 C逻辑运算符 含义 运算符 优先级 结合性 逻辑非 ! 2 右结合 逻辑与 && 11 左结合 逻辑或 || 12

逻辑运算真值表 逻辑非! 逻辑与&& a !a 1 逻辑或‖ a b a&&b 1 a b a||b 1 特点: 全真为真, 其余为假。 逻辑或‖ a b a&&b 1 a b a||b 1 特点: 全真为真, 其余为假。 特点: 全假为假, 其余为真。

[<表达式1>] <逻辑运算符> <表达式2> 表达式1和表达式2可以是任何表达式 2. 逻辑表达式 用逻辑运算符将表达式连接起来的式子。 形式: [<表达式1>] <逻辑运算符> <表达式2> 表达式1和表达式2可以是任何表达式 如: 5>3&&2||4-!'a' 逻辑表达式的值 整数 1: true 0: false 判断时, 0代表“假”, 非0即表示“真” 。

将下面的条件用C语言的逻辑表达式表示 例1: 1≤x≤10且x≠7 x>=1 && x<=10 && x!=7 例2: y能被4整除, 但不能被100整除或y能被400整除。 y%4==0 &&y%100!=0||y%400==0

运算顺序: ( )→!→算术运算→关系运算→&&→||→赋值运算 例: 若 a=2, b=‘a’, c=5, f=3.0 c>3&&8<4-!0 f/3&&a-b !( b-‘a’ ) (a=7)>6&&(b=-1)>6 1 1

逻辑与和逻辑或运算符具有短路能力 逻辑与: (表达式1) && (表达式2) && … 只有表达式1的值为“真”时才求表达式2的值 如: x=y=-1; ++x &&++y; /* x=? y=? */ -1

printf(“num=%d\n”, num); } 短路表达式 逻辑或: (表达式1) || (表达式2) ||… 只有表达式1为假时才判断表达式2的值 例: void main( ) { int num=3; 5>4||(num=0); printf(“num=%d\n”, num); } 输出: num=3

2.3.5 条件运算符与条件表达式 条件运算符: ? : 三目运算符、右结合、13级。 条件表达式: 条件运算符: ? : 三目运算符、右结合、13级。 条件表达式: <表达式1> ? <表达式2> : <表达式3> 执行过程: 例: max=(a>b) ? a∶b; max= a>b ? a∶b ;

说明: 在程序中常把条件表达式的值赋给某个变量, 如: ①将ch中字母转换为小写字母 char ch=getchar( ); 在程序中常把条件表达式的值赋给某个变量, 如: ①将ch中字母转换为小写字母 char ch=getchar( ); ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32): ch ; ②将x 的绝对值赋给 y y= x>=0 ? x : -x ;

说明: 在条件表达式中, 各表达式的类型可以不同, 此时, 条件表达式值的类型为表达式2和表达式3中较高 的类型。 如: 在条件表达式中, 各表达式的类型可以不同, 此时, 条件表达式值的类型为表达式2和表达式3中较高 的类型。 如: x>y ?1∶1.5 条件表达式的值为浮点型

说明: 条件运算符可以嵌套, 这种嵌套是右结合的。 例: int a=15, b=20, c=25, d=30, e ; 条件运算符可以嵌套, 这种嵌套是右结合的。 例: int a=15, b=20, c=25, d=30, e ; e= a>b ? c : c>d ? b : d ; ( ) e=30

#include<stdio.h> void main( ) { int a=1, b=1, c=1; 例2.15 读程, 写出运行结果。 运行结果: (1)2 (2)3 b (4)2, 2, 4 #include<stdio.h> void main( ) { int a=1, b=1, c=1; a = a+b ; b=b+c ; c = c+a ; printf(“(1)%d\n”, a>b ? a : b ); printf(“(2)%d\n”, a>c ? a-- : c++); (a>=b>=c) ? printf(“a\n”) : printf(“b\n”); printf(“(4)%d, %d, %d\n”, a, b, c ); }

#include<stdio.h> void main( ) { int a,b,c,max ; 例2.16:任意输入三个数,输出最大值。 #include<stdio.h> void main( ) { int a,b,c,max ; scanf(“%d%d%d”, &a, &b, &c); max= a>=b ? a>=c ? a : c : b>=c ? b : c ; printf(“最大数为: %d\n”,max) ; } ( ) ( ) 程序运行如下: 25 -7 48↙ 最大数为: 48

2.3.6 赋值运算符和赋值表达式 赋值运算符分两种: 简单赋值运算符: = 复合赋值运算符: 如 +=、-=、*=、/=、%= 等 复合赋值运算符: 如 +=、-=、*=、/=、%= 等 优先级14,右结合性。 赋值表达式: 由赋值运算符连接起来式子 作用: 将表达式的值赋给变量

1. 简单赋值运算符和赋值表达式 简单赋值运算符为“=” ; 由“=”连接的式子为 (简单) 赋值表达式。 1. 简单赋值运算符和赋值表达式 简单赋值运算符为“=” ; 由“=”连接的式子为 (简单) 赋值表达式。 格式: <变量> = <表达式> 作用: 把右边表达式的值,赋给左边的变量。 例: k=i+++--j (i=2, j=3, k的值为 ) x=(a=5)+(b=8) (x的值为 ) d=e=2.1 执行顺序是: 先计算,再赋值。 4 13

⑸ cos(β)=a/sqrt(a*a+b*b) ⑹ y=int(i) ⑺ k=12.3%4 ⑻ a=a+7; 例: 指出下列赋值表达式的错误 ⑴ -s=x+y ⑵ 5=n ⑶ a=a*3=2 ⑷ w=3.64E2.1/5.87 ⑸ cos(β)=a/sqrt(a*a+b*b) ⑹ y=int(i) ⑺ k=12.3%4 ⑻ a=a+7;

赋值运算的类型转换, 规则为: 实型数据赋给整型变量时,只取整数部分。 如: int i=1.5*2/2 ; ( i值为1 ) 赋值运算的类型转换, 规则为: 实型数据赋给整型变量时,只取整数部分。 如: int i=1.5*2/2 ; ( i值为1 ) 整型数据赋给实型变量时,以浮点形式取值。 如: float x=1/4+1/4+1/4 ; ( x的值为0.000000 ) 字符型数据赋给整型变量时, 整型变量的高位补的数与 char的最高位相同, 低八位为字符的ASCII码值。 k: 0000 0000 0100 0001 如: K=‘A’ (k值为65) 整型数据赋给字符型时,只把低8位赋给字符变量。

2. 复合赋值符及表达式 复合赋值运算符是在简单赋值运算符前加双目运算符构成。 共10种: +=, -= *=、/=、%= 等。 例: c=c+3 c += 3 x*=y+7 x=x*(y+7) 设x, y, z的初始值分别为: 10, 20, 30 x+=y+=z*z x=x+(y=y+z*z) 结果为: 930 设 t 的值为5 t+=t-= t*t t=t+(t=t-t*t) 结果为: -40

例2-14 void main( ) { int a, b, c; a=b=c=5; 运行结果: a=5, b=5, c=5 a=10, b=4, c=6 a=20, b=4, c=6 a=0 void main( ) { int a, b, c; a=b=c=5; printf(”a=%d, b=%d, c=%d\n”, a,b,c); a=(b=4)+(c=6) ; a+=b+c ; a+=a-=a*=a ; printf(”a=%d\n”,a) ; }

2.3.7 逗号运算符和逗号表达式 <表达式1> , <表达式2> , … , <表达式n> 逗号运算符运算符: “ , ” 优先级15级 最低,左结合 用逗号运算符将各表达式连接起来的式子为逗号表达式。 格式: 如: a=3*5, a*10, a+8 求解过程: 先求表达式1的值, 再求表达式2的值, 最后求 表达式n的值, 表达式n的值作为整个逗号表达式的值。 <表达式1> , <表达式2> , … , <表达式n>

#include<stdio.h> void main( ) { int a=2, b=4, c, y; 例: 逗号表达式的应用 #include<stdio.h> void main( ) { int a=2, b=4, c, y; y=(c=a*b , b+c) ; printf(“y=%d\n”, y ); } 输出结果: y=12

例: 1) (a=3*5, a*4), a+5 2) a=5, a*=a , a+5 3) int a, b; a=2, b=5, a++, b++, a+b; 4) int x=10, y=3, z; printf(“%d\n”, z=(x%y, x/y)); 20 30 9 3

说明: (1) 用一个逗号表达式语句,可代替多个赋值语句, 如 a=0; b=1; c=2; 可写成: a=0, b=1, c=2 ; (2) 在变量说明和函数参数表中逗号只是起分隔符作用 printf(“%d,%d,%d” , a , b ,c ); printf(“%d,%d,%d” , (a, b, c) , b ,c);

例: 交换变量a, b的值。 a=1.0, b=2.0 void main( ) ② { float a, b, c; a=1.0; printf(“a=%f b=%f”,a,b); c=a; a=b; b=c; printf(“a=%f b=%f”, a,b); } a 2.0 1.0 2.0 1.0 b ① ③ 1.0 c a 1.0 2.0 b x y a b

上机作业: 1. 取圆周率为3.1415926, 半径r为40, 求圆面积。 要求: ① 圆周率定义为符号常量 ② 半径用scanf( )输入 ③ 分两行输出, 先输出圆周率和半径, 再输出面积。 2. 输入两个数分别赋予整型变量a, b。然后, 交换变量 a, b 的值再输出。

上机作业: ⑵ 编程: 输入一个三位正整数,然后反向输出对应的数。如输入123,则输出321。 要求: 用 / % 运算符