第2章 数据类型、运算符与表达式 本章要点: 基本数据类型 常量和变量 算术运算符和算术表达式 关系运算符和关系表达式

Slides:



Advertisements
Similar presentations
C语言程序设计 主讲教师 :张群燕 电话:
Advertisements

氧气的制法 装置 原理 练习 随堂检测.
第一章 C语言概述 计算机公共教学部.
第一单元 人在社会中生活 综合探究一 从地图上获取信息 第1课时 带着地图定向越野间.
第1节 光的干涉 (第2课时).
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
C语言程序设计 第十二章 位运算.
循环结构又称为重复结构:用来处理需要重复处理的问题,它是程序中一种很重要的结构。
第3章 顺序结构程序设计 本章要点: 格式化输出函数──printf() 格式输入函数——scanf() 字符输出函数——putchar()
C++程序设计 第二讲 清华大学软件学院.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
第五章 选择结构程序设计 一、关系运算符和表达式 1、关系运算符 在程序中经常需要比较两个量的大小关系, 以决定程序下一步
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
第七章 函数 目录 有参的加法函数的开发 函数定义的一般形式 函数参数和函数的值 函数的调用
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
QQ: 李祥 QQ: 欢迎多种方式的学习交流,祝大家学有所成.
第7章 编译预处理 本章要求: 本章重点: 本章难点: 掌握用#define定义无参数宏和带有参数宏定义和调用方法;
第二章 基本元素、类型和概念 七、输出函数printf 八、输入格式转换函数scanf.
算法的基本概念.
C++语言程序设计 第二章 C++简单程序设计.
第三节 整数类型.
第三章 顺序结构程序设计 主讲教师 贾月乐 电话:
第3章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 3.1 格式化输出——printf()函数 3.2 格式化输入——scanf()函数.
第三章 数据类型、运算符与表达式.
2.1 C语言的数据类型 2.2 常量与变量 2.3 变量赋初值 2.4 各类数值型数据间的混合运算 2.5 C语言的运算符和表达式
第七章 函数及变量存贮类型 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环境)
第 二 章 数据类型、运算符与表达式.
MICROMEGAS位置编码 读出研究 胡荣江, 段利敏, 杨贺润, 鲁辰桂, 李祖玉, 靳根明, 马朋 中科院近代物理研究所
C语言程序设计 教案 崔武子制作
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第十四章 若干深入问题和C独有的特性 作业: 函数指针 函数作参数 函数副作用 运算 语句 位段 存储类别 编译预处理
C语言程序设计 李祥 QQ:
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第2章 数据类型、运算符与表达式 2.1 程序设计概述
第3章 数据类型、运算符与表达式.
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
第2章 基本数据及其运算 本章学习的目标: 1、掌握基本数据的各种表示,基本数据常数的书写方法;
THE C PROGRAMMING LANGUAGE
第二章 类型、对象、运算符和表达式.
第2章 数据类型与表达式 学习目的与要求: 掌握C 语言的基本数据类型及使用方法 掌握C程序中常用的运算符和表达式 了解数据类型的转换.
习 题 课(作业).
第二章 基本数据类型 ——数据的表示.
第四章 基本平面图形 线段、射线、直线.
第4章 顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输入到计算机中;计算机处理结束后,再将目标数据信息以人能够识别的方式输出。C语言中的输入输出操作,是由C语言编译系统提供的库函数来实现。 4.1 格式化输出——printf()函数 4.2 格式化输入——scanf()函数.
第3章 最简单的C程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.3 C语句 3.4 数据的输入输出.
本节内容 指针类型.
第五章 逻辑运算和判断选取控制 §5.1 关系运算符和关系表达式
Introduction to the C Programming Language
第十二章 位运算.
目录 12.1 位运算符 12.2 位域(位段) 1.
第二章 数据类型、运算符和表达式 §2.1 数据与数据类型 §2.2 常量、变量和标准函数 §2.3 基本运算符及其表达式 目 录 上一章
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
VB语言基础 一、 常量 1 定义:在程序运行过程中不能发生改变的量 2 分类 整型常量: 整数 不带小数点的数 数值常量
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
函式庫補充資料 1.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第2章 数据类型、运算符与表达式 本章要点: 基本数据类型 常量和变量 算术运算符和算术表达式 关系运算符和关系表达式 逻辑运算符和逻辑表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式 数据类型转换 学习方法建议:   本章主要内容是基本概念和定义,大部分内容需要记忆,学习时应注意归纳,列出记忆要点。本章重点掌握基本数据类型、各种运算符和表达式的用法,本章的难点是自增/自减运算符的用法。

2.1 引例 1.问题分析——计算圆面积 假设圆的半径用radius表示,若半径的值为10,利用公式,计算圆面积。 2.程序代码 2.1 引例 1.问题分析——计算圆面积 假设圆的半径用radius表示,若半径的值为10,利用公式,计算圆面积。 2.程序代码 #include "stdio.h" #define PI 3.1415926 /*定义符号常量PI*/ void main() { double radius,area=0.0; /*定义变量radius和area分别为半径和面积*/ radius=10; /*半径赋值为10*/ area=PI*radius*radius; /*计算面积*/ printf("The area of circle is %lf\n",area);}

2.2 常量与变量   任何程序都涉及到待处理的数据,数据可以是常量和变量。C语言可以处理的数据类型有很多,可分为基本类型、构造类型、指针类型和空类型。C语言的所有数据类型如图所示。

2.2 常量与变量 2.2.1 常量   在程序运行过程中,其值不能被改变的量,称为常量。在C语言中,常量有不同的类型,有整型常量、实型常量、字符常量和字符串常量、符号常量等,即使是整型常量也还有基本型、短整型、长整型……之分。 整型常量,如:5、-8、0等;实型常量,如:2.5、-1.98等;字符型常量,如:‘a’、‘b’等;字符串常量,如:“abc”、“this is a book”等。 另外,还可以用标识符(即符号)来表示常量,称符号常量。在C语言中有两种方法定义符号常量。 (1)使用编译预处理命令define,例如:#define PI 3.14159 (2)使用常量说明符const,例如:const float PI=3.14159

2.2 常量与变量 2.2.2 变量 指在程序运行过程中其值可以被改变的量。 定义变量形式: 类型名 变量名1,变量名2,…,变量名n; 2.2 常量与变量 2.2.2 变量 指在程序运行过程中其值可以被改变的量。 定义变量形式: 类型名 变量名1,变量名2,…,变量名n; 其中变量名必须遵循标识符的命名规则。 在C语言中,要“先定义,后使用”。

2.2 常量与变量 (1)凡未被事先定义的,系统不把它认作变量名,这就能保证程序中变量名使用得正确。 2.2 常量与变量 (1)凡未被事先定义的,系统不把它认作变量名,这就能保证程序中变量名使用得正确。 例如:如果在声明部分有语句:int student;而在执行语句中错写成stadent。例如:stadent=30 (2)每一个变量被指定为一个确定类型,在编译时就能为其分配相应的存储单元。 (3)指定每一变量属于一个类型,这就便于在编译时据此检查在程序中要求对该变量进行的运算是否合法。例如,整型变量a和b,可以进行求余运算:a%b,如果将a、b指定为实型变量,则不允许进行“求余”运算,在编译时会给出有关“出错信息”。

2.3 整型数据 2.3.1 整型常量 整型常量的三种表示形式: (1)十进制数表示形式:如23、0、-16。 2.3 整型数据 2.3.1 整型常量 整型常量的三种表示形式: (1)十进制数表示形式:如23、0、-16。 (2)八进制数表示形式:以0开头是八进制数。如023,即八进制数的23。 (3)十六进制数表示形式:以0x开头作为十六进制数。如0x23,即十六进制数的23。

2.3 整型数据 2.3.2 整型变量 整型变量的基本类型符为int。可以根据数值的范围将变量定义为基本整型、短整型或长整型。 2.3 整型数据 2.3.2 整型变量   整型变量的基本类型符为int。可以根据数值的范围将变量定义为基本整型、短整型或长整型。 (1)基本整型,以int表示。 (2)短整型,以short [int]表示。 (3)长整型,以long [int]表示。 若加上unsigned,可用来存储无符号整数。 (4)无符号基本整型,以unsigned [int]表示。 (5)无符号短整型,以unsigned short [int]表示。 (6)无符号长整型,以unsigned long [int]表示。

整型数据类型 所占位数 所占字节数 数的表示范围 表2-1列出了VC6.0中定义的整型数所占的字节数和数值范围。 表2-1 整型数据类型 所占位数 所占字节数 数的表示范围 [signed] int 32 4 -2147483648~214748367,即-231~231-1 [signed] short [int] 16 2 -32768~32767,即-215~215-1 [signed] long [int] unsigned [int] 0~4294967295,即0~232-1 unsigned short [int] 0~65535,即0~216-1 unsigned long [int] 在一个整型常量后加一个字母u或U,则认为是unsigned int型。 例如:123u。 在一个整型常量后加一个字母l或L,则认为是Long int型。  例如:0L,123L。

2.3.3 整型变量的使用 不同的整型数据,应根据其特征和取值范围,将其定义成不同的整型变量。 例如: 2.3.3 整型变量的使用 不同的整型数据,应根据其特征和取值范围,将其定义成不同的整型变量。 例如: int a,b; /*定义a,b为整型变量*/ unsigned short c,d; /*定义c,d为无符号短整型变量*/ long e,f; /*定义e,f为长整型变量*/ 【例2.1】 整型变量的定义与使用。 源程序 #include <stdio.h> void main() { int a,b,c,d; /*定义a,b,c,d为整型变量*/ unsigned u; /*定义u为无符号整型变量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf("a+u=%d,b+u=%d\n",c,d); } 运行结果为: a+u=22,b+u=-14

【例2.2】 短整型数据的溢出。 #include <stdio.h> void main() { short int a,b; a=32767; b=a+1; printf("a=%d,b=%d\n",a,b); }

【例2.3】编写程序,计算一个正方体容器的体积,假设正方体边长分别为75cm。 利用公式“体积=边长×边长×边长”计算正方体体积。 # include “stdio.h” main( ) { int sidel; /*定义int型变量sidel保存正方体边长*/ long vol; /*定义long型变量vol保存正方体体积*/ sidel=75; /*把75赋给变量sidel*/ vol= sidel* sidel* sidel; /*计算正方体体积*/ printf(“volume=%ld”,vol); /*输出正方体体积*/ }

2.4 实型数据 2.4.1 实型常量 (1)十进制形式:   它由整数部分、小数点和小数部分三部分组成。当整数部分为0或小数部分为0时都可省略,但小数点不能省略。例如3.14、10.8、123.、 .12、0.0等。 (2)指数形式:   它由三部分组成:尾数、大写字母E(或小写字母e)、整型指数。它适合表示比较小或比较大的数。字符E前必须有数字,且E后的指数必须为整数。例如3.0E+5或3.0e+5都表示3.0×105。1.23E-2表示1.230×10-2或0.0123。   注意: 字母e或E之前(即尾数部分)必须有数字。 字母e或E后面的指数部分必须是整数。

2.4.2 实型变量   实型变量又称为浮点型变量,按能够表示数的精度,又分为单精度(float型)、双精度(double型)和长双精度(long double型)在Turbo C中有关浮点型的数据如表2-2所示。 表2-2 浮点型数据 类型 所占位数 所占字节数 有效数字 数值范围 float 32 4 6~7 -3.4×10-38~3.4×1038 double 64 8 15~16 -1.7×10-308~1.7×10308 long double 128 16 18~19 -1.2×10-4932~1.2×104932 对每一个浮点型变量都应在使用前加以定义。 例如:    float a,b;    /*定义a,b为单精度浮点数*/    double z;  /*定义z为双精度浮点数*/    long double t; /*定义t为长双精度浮点数*/

【例2.4】 假设银行定期存款的年利率是3.25%,并已知存款期限为n年,存款本金为x元,编写程序计算n年后得到的本利之和是多少。利用公式“”计算n年后的本利之和。定义变量x和n分别保存本金和存款年限。 #include "stdio.h" #include "math.h" main() { float x=8451; /*定义变量x保存本金*/ int n; float sum1=0.0; /*定义单精度实型数据sum1保存本利之和*/ double sum2=0.0; /*定义双精度实型数据sum2保存本利之和*/ printf("\nEnter the number of years:"); scanf("%d",&n); /*输入存款年限*/ sum1=x*pow((1+0.0325),n);/*计算本利之和并使用单精度*/ sum2= x*pow((1+0.0325),n);/*计算本利之和并使用双精度*/ printf("\nsum1=%.8f,sum2=%.8lf",sum1,sum2); /*输出本利之和*/ }

2.5 字符型数据 2.5.1 字符常量 C语言中用一对单引号括起来的单个字符,称为字符常量。 2.5 字符型数据 2.5.1 字符常量   C语言中用一对单引号括起来的单个字符,称为字符常量。 例如:‘a’、‘A’、‘1’等,其中‘a’、‘A’是两个不同的字符常量。   一个字符常量的值是该字符集中对应的编码值。 例如:在ASCII字符集中,字符常量'0'~'9'的ASCII编码值是48~57。显然,'0'与数字0是不同的。   C语言还有一种特殊形式的字符常量,即转义字符型常量。   常用的以“\”开头的特殊字符如表2-3所示。P24

表2-3 转义字符及其功能表 转义字符 功能 ASCⅡ代码 \n 换行,将当前位置移到下一行开头 10 \t 水平制表符(TAB) 9 \b 退格,将当前位置移到前一列 8 \r 回车,将当前位置移到本行开头 13 \f 换页,将当前位置移到下页开头 12 \\ 代表一个反斜杠字符”\” 92 \ ' 代表一个单引号字符 39 \ " 代表一个双引号字符 34 \ddd 1到3位八进制所代表的字符 \xhh 1到2位十六进制数所代表的字符

【例2.5】 转义字符的应用。 #include <stdio.h> void main() { printf("please\t\x48\n"); } 运行结果为: please□□H   可以看出printf函数直接原样输出双引号内的普通字符please,然后遇到转义字符“\t”其作用是横向跳到下一个输出区(每个输出占8列),即在第9列输出字符H。(因为please占了6列,所以第一个输出区还剩2列,H字符输出在第9列。

2.5.2 字符变量 char c1, c2; /*定义两个字符变量c1,c2*/ 2.5.2 字符变量   字符变量是用来存放字符常量的,并且只能放一个字符,而不是一个字符串。它的类型关键字用char,占用1字节的内存单元。例如:   char c1, c2; /*定义两个字符变量c1,c2*/   c1= ‘a’; c2= ‘b’; /*给字符变量赋值*/   将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值存储到内存单元中。

【例2.6】 将字母进行大、小写转换,并输出转换结果和字母的ASCII码值。 #include <stdio.h> void main() { char c1,c2; c1='a'; c2='B'; c1=c1-32; c2= c2+32 ; /*字母的大、小写转换*/ printf("c1=%c,c2=%c\n",c1,c2); /*以字符形式输出字符变量*/ printf("c1=%d,c2=%d\n",c1,c2); /*以整数形式输出字符变量*/ } 运行结果为: c1=A,c2=b c1=65,c2=98

2.5.3 字符串常量 1.字符串常量的定义 字符串常量是用一对双引号括起来的字符序列。 字符串中字符的个数称为字符串长度。 2.5.3 字符串常量 1.字符串常量的定义 字符串常量是用一对双引号括起来的字符序列。 字符串中字符的个数称为字符串长度。 长度为0的字符串称为空串,表示为""。   例如:"How are you."、"Good morning."等,都是字符串常量,其长度分别为12和13(空格也是一个字符)。   如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。 2.字符串的存储    C语言规定:在存储字符串常量时,由系统在字符串 的末尾自动加一个‘ \0’作为字符串的结束标志。

如果有一个字符串为"CHINA",它在内存存储如图2-2所示。 注意:字符常量'a'与字符串常量"a"是两回事,两者不同之处: 定界符不同:字符常量使用单引号,字符串常量使用双引号; 长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,可以是某个整数;   存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志'\0'。

2.6 运算符与表达式   运算符是表示某种操作的符号,在C语言中,除控制语句和输入输出函数外,其他所有基本操作都作为运算符处理。C语言运算符可分为以下几类: (1)算术运算符:+ - * / % ++ -- (2)关系运算符:> >= < <= == != (3)逻辑运算符:&& || ! (4)赋值运算符:= += -+ *= /= %= &= |= ^= <<= >>= (5)条件运算符:? : (6)逗号运算符:, (7)位运算符:& | ^ ~ << >> (8)指针运算符:* & (9)求字节数运算符:sizeof (10)强制类型转换运算符:(类型标识符) (11)分量运算符:. -> (12)下标运算符:[ ] (13)圆括号:( )

2.6.1 算术运算符和算术表达式 1.基本的算术运算符有: (1)+(加法运算符或取正值运算符,如1+2、+2); 2.6.1 算术运算符和算术表达式 1.基本的算术运算符有: (1)+(加法运算符或取正值运算符,如1+2、+2); (2)-(减法运算符或取负值运算符,如2 -1、-2); (3)*(乘法运算符,如1*2); (4)/ (除法运算符,如5/2); (5)%(求余运算符,或称模运算符,如7%5的值为2)。 注意: C语言规定: 两个整数相除,其商为整数,小数部分被舍弃。例如,5 / 2 = 2。 如果操作数中有负数,取整通常采取“向零取整”的方法。例如,5/-3=-1。 求余运算符的两边要求是整数,否则出错。如: 9%5,结果为4。 如: 9.5%5,结果出错。

2.算术表达式和运算符的优先级与结合性   由算术运算符、括号以及操作对象组成的符合C语言语法规则的表达式称为算术表达式。   C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于a-(b*c)。 如果一个运算对象两侧的运算符的优先级别相同,C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右。“自左至右的结合方向”又称“左结合性”,即运算对象先和左边的运算符结合。

【例2.7】 计算 ,x为整数,要求从键盘输入。 #include "stdio.h" void main() { int x=0; float y=0.0; printf("\ninput an integer x(x<2 or x>2):"); scanf("%d",&x); /*从键盘输入一个整数值,赋值给变量x */ y=(float)(x*x-5*x+3)/(x-2); /*计算表达式*/ printf("\nx=%d,y=%f\n",x,y); /*输出x和y的值 */ }

3.自增、自减运算符 (1)前置运算──运算符放在变量之前 运算式为:++变量、--变量 先使变量的值增(或减)1,然后再以变化后的值参与其他运算,即先增减、后运算。 例如:j=++i,其中i=2,先计算i=i+1=3,后赋值j=3,所以结果是i=3,j=3。

(2)后置运算──运算符放在变量之后 运算式为:变量++、变量-- 变量先参与其他运算,然后再使变量的值增(或减)1,即先运算、后增减。 例如:j=i++,其中i的初值还是2,但此时是先赋值j=i,后计算i=i+1=2+1=3,所以结果是i=3,j=2。

【例2.8】 自增、自减运算符应用。 #include <stdio.h> void main() { int x=1, y; printf("x=%d\n",x); /*输出x的初值*/ y=++x; /*前置运算*/ printf("x=%d, y=%d\n",x,y); y=x--; /*后置运算*/ printf("x=%d, y=%d\n", x, y); }

2.6.2 赋值运算符和赋值表达式 赋值符号“=”,将赋值运算符右边表达式的值赋给左边的变量。 例如:a=5 /*将5赋给变量a*/ 2.6.2 赋值运算符和赋值表达式 1.赋值运算符 赋值符号“=”,将赋值运算符右边表达式的值赋给左边的变量。 例如:a=5 /*将5赋给变量a*/ x=(a+3)*5/2 /*将表达式(a+3)*5/2的值赋给变量x*/ 注意: 如果“=”两侧的类型不一致,在赋值时要进行类型转换。例如:a=b;执行该语句时,b的结果转换为a的类型后才能进行赋值运算。

2.复合赋值运算符 在赋值运算符“=”之前加上一个其他运算符,可以构成复合赋值运算符。如: i+=1 /*等价于i=i+1*/ a*=b-2 /*等价于a=a*(b-2)*/ r%=3 /*等价于r=r%3*/ C语言规定了如下10种复合赋值运算符: +=,-=,*=,/=,%=;&=,^=,|=,<<=,>>=;

3. 赋值表达式 (1)赋值表达式 赋值表达式的一般格式: <变量> <赋值运算符 > < 表达式 > 它的功能是将赋值运算符右边“表达式”的值赋给左边的变量。 注意:赋值表达式左边必须是变量。

(2)赋值表达式的值 赋值表达式的求解过程是:将赋值运算符右侧的表达式的值赋给左边的变量。赋值表达式的值就是被赋值变量的值。 例如:x=5 这个赋值表达式的值为5(x变量的值也是5) 又例如:a+=a-=a*a,设a=5,求a的值。 右结合 a+=a=a-a*a,先计算a=a-a*a。 a=5-5*5=-20,再计算a+=a。 a=a+a=-20+(-20)=-40。所以a等于-40整个赋值表达式的值也等于-40。

使用赋值表达式的过程中可能遇到下列问题。 (1)赋值表达式中的“表达式”又可以是一个赋值表达式。例如:a=(b=1),把b=1的值赋给a,所以整个赋值表达式值就等于1,即a=1。赋值运算符按照“自右向左”的组合顺序,因此“a=(b=1)”就等价于“a=b=1”。 (2)赋值表达式也可以包含复合的赋值运算符。如a+=a-=a*=a,如果a的初值是2,此赋值表达式的运算过程是: 先计算“a*=a”的值,即相当于a=a*a=2*2=4。 再计算“a-=4”的值,即相当于a=a-4=4-4=0。 最后计算“a+=0”的值,即相当于a=a+0=0+0=0。

【例2.9】 求二次方程的根。 #include "stdio.h" #include "math.h" void main() { float a,b,c,x1,x2; printf("input a,b,c(b*b-4*a*c)>=0:"); scanf("%f%f%f",&a,&b,&c); x1=(-b+sqrt(b*b-4*a*c))/(2*a); /*sqrt函数的功能是求一个数的平方根*/ x2=(-b-sqrt(b*b-4*a*c))/(2*a); printf("x1=%f,x2=%f\n",x1,x2); }

2.6.3 关系运算符和关系表达式 1.关系运算符 C语言提供以下6种关系运算符: 2.6.3 关系运算符和关系表达式 1.关系运算符 C语言提供以下6种关系运算符: <(小于) <=(小于或等于) >(大于) >=(大于或等于) ==(等于) !=(不等于) 前4种关系运算符优先级高于后2种关系运算符优先级。 注意:在C语言中,“等于”关系运算符是双等号“==”,而不是单等号“=”(赋值运算符)。

2.关系表达式 (1)关系表达式 由关系运算符连接起来的式子,称为关系表达式。 (2)关系表达式的值 关系表达式的值是一个逻辑值。即“真”或“假”。用整数“1”代表“真”,用整数“0”代表“假”。 例如:假设n1=3,n2=4,n3=5,则: ①n1>n2的值为0。 ②(n1>n2)!=n3的值为1。 ③n1<n2<n3的值为1,因为n1<n2的值为1,1<5的值为1。 ④(n1<n2)+n3的值为6,因为n1<n2的值为1,1+5的值为6。 注意: C语言中用整数“1”表示“真”,用整数“0”表示“假”。

2.6.4 逻辑运算符和逻辑表达式 1.逻辑运算符 (1)逻辑运算符 C语言提供以下3种逻辑运算符: && 逻辑与(相当于“同时”) 2.6.4 逻辑运算符和逻辑表达式 1.逻辑运算符 (1)逻辑运算符 C语言提供以下3种逻辑运算符: && 逻辑与(相当于“同时”) || 逻辑或(相当于“或者”) ! 逻辑非(相当于“否定”)

(2)运算规则 &&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。 ||:当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。 !:当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。逻辑运算符的真值表如表2-5所示。

表2-5 逻辑运算符的真值表 a b a&&b a||b !a 真 假

(3)逻辑运算符的优先级 ①逻辑非的优先级最高,逻辑与次之,逻辑或最低,即: !(非) → &&(与) → ||(或) !(非) → &&(与) → ||(或) ②与其他运算符的优先级相比(由高到低) !→ 算术运算 → 关系运算 → &&→ || → 赋值运算

2.逻辑表达式 (1)逻辑表达式 所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。 例如:(a>b)&&(x>y)||(a<=b) 逻辑表达式的值也是一个逻辑值(非“真”即“假”)。 (2)逻辑量的真假判定──0和非0 C语言中用整数“1”代表“真”、用“0”代表“假”。但在判断一个数据的“真”或“假”时,却以0和非0为根据:如果为0,则判定为“假”;如果为非0,则判定为“真”。

注意: 逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其他任何类型的数据,如实型、字符型等。 在计算逻辑表达式时,并不是所有的逻辑运算符都被执行,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。

2.6.5 逗号运算符和逗号表达式 1. 逗号运算符   C语言提供一种特殊的运算符,即逗号运算符。逗号运算符的优先级是C语言中所有运算符中最低的,结合方向为左结合。 2. 逗号表达式   逗号表达式的一般形式:   表达式1, 表达式2, ……, 表达式n   求解过程:由逗号隔开的一对表达式从自左至右依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的值。例如:   逗号表达式“a = 2 + 3, a=a * 6, a/10”,先求解a = 2 +3,得a = 5;再求a * 6 ,得a=30,再求a/10 ,即30/10=3。所以,最后逗号表达式的值等于3,而a = 30。

2.6.6 位运算符 C语言提供了六种位运算。 1.“按位与”运算符(&) 格式:x&y 2.6.6 位运算符 C语言提供了六种位运算。 1.“按位与”运算符(&) 格式:x&y 规则:参与运算的两数各对应的二进位相与,只有对应的两个二进位均为1时,结果位才为1 ,否则为0。 例如:3&9=1: 2. “按位或” 运算符(|) 格式:x|y 规则:参与运算的两数各对应的二进位相或,只要对应的两个二进位有一个为1时,结果位就为1。 例如:3|9=11:

3.“异或”运算符(^) 格式:x^y 规则:参与运算的两数各对应的二进位相异或,当两个对应的二进位相异时结果为1,相同时为0。 例如:3^9=10: 4.“取反” 运算符(~) 格式:~x 规则:参与运算的数的各个二进位按位求反,即将0变1,将1变0。 例如:~14= 1

5.“左移”运算符(<<) 格式:x<< 位数 规则:把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。 例如:5<<2=20 6.“右移”运算符(>>) 格式:x>>位数 规则:把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。 例如:20 >> 2=5

2.7 数据类型转换 2.7.1 自动类型转换   在C语言中,整型、实型和字符型数据间可以混合运算。如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。   横向向左的箭头表示必须的转换。char和short 型必须先转换成 int 型,float型数据运算时首先要转换成double型,以提高运算的精度。   纵向向上的箭头表示当对象为不同类型数据时的转换方向。数据总是由低级别向高级别转换的。 注意:   箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,最后转换成double型。正如上所述,int型和double型混合运算,只要直接将int型数据转换成double型。

2.7.2 强制类型转换 (类型名)(表达式) 其一般格式为: 2.7.2 强制类型转换   可以利用强制类型转换运算符将一个表达式转换成所需类型。如: (double)a (等价于(double)(a)) /*将变量a的值转换成double型*/ (int)(x + y) /*将x+y的结果转换成int型*/ (float)5 / 2(等价于(float)(5) / 2           /*将5转换成实型,再除以2(结果为2.5)*/ (float)(5 / 2)  /*将5整除2的结果(2)转换成实型(2.0)*/ 其一般格式为: (类型名)(表达式)   当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。

上机实验

一、实验目的 1.掌握C语言的数据类型,熟悉变量的定义和使用; 2.掌握并会使用C语言的有关运算符;

二、实验内容 1.运行以下程序,体会程序运行时变量值的变化情况。 #include"stdio.h" void main() { int x; float y; char c; x=5.0/3; y=5.0/3; printf("x=%d,y=%f \n",x,y); x=4/9;y=4/9; x=30%4;y=30%4; x=10*x;y=10*y; c='A'; printf("x=%d,y=%f;c=%c\n",x,y,c+3);}

2.运行下面程序,观察输出结果。 #include <stdio 2.运行下面程序,观察输出结果。 #include <stdio.h> void main() { int a=5,b=7; float x=12.3456,y=-789.124; char c= 'A'; long n=1234567; unsigned u=65535; printf("%d%d\n",a,b); printf("%3d%3d\n",a,b); printf("%f,%f\n",x,y); printf("%-10f,%-10f\n",x,y); printf("%8.2f,%8.2f,%4f,%4f,%.3f%.3f\n",x,y,x,y,x,y); printf("%e,%10.2e\n",x,y); printf("%c,%d,%o,%x\n",c,c,c,c); printf("%ld,%lo,%lx\n",n,n,n); printf("%u,%o,%x,%d\n",u,u,u,u); }