登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書

『簡體書』C语言程序设计教程

書城自編碼: 2777455
分類:簡體書→大陸圖書→教材研究生/本科/专科教材
作者: 黄迎久、庞润芳 主编,赵军富、徐扬、胡晓燕、贾茹 副主编
國際書號(ISBN): 9787302418528
出版社: 清华大学出版社
出版日期: 2016-01-01
版次: 1 印次: 1
頁數/字數: 276/419000
書度/開本: 16开 釘裝: 平装

售價:HK$ 57.0

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
意大利文艺复兴新艺术史
《 意大利文艺复兴新艺术史 》

售價:HK$ 958.8
2023年《咬文嚼字》合订本(精)
《 2023年《咬文嚼字》合订本(精) 》

售價:HK$ 93.6
世界银行营商环境成熟度方法论手册
《 世界银行营商环境成熟度方法论手册 》

售價:HK$ 321.6
观鹤笔记.全三册
《 观鹤笔记.全三册 》

售價:HK$ 179.3
Hello算法
《 Hello算法 》

售價:HK$ 155.8
变革时代的公司契约:法律能否与时俱进?
《 变革时代的公司契约:法律能否与时俱进? 》

售價:HK$ 93.6
我国城乡融合发展基本格局及典型形态研究
《 我国城乡融合发展基本格局及典型形态研究 》

售價:HK$ 82.8
写意兰竹树石课徒稿
《 写意兰竹树石课徒稿 》

售價:HK$ 110.4

 

編輯推薦:
本书以Visual C++ 6.0为开发平台,全面介绍了C语言的基础知识、程序结构及程序编写技巧。全书共分为12章,包括引言、C语言基础知识、顺序结构程序设计、选择结构程序设计、循环结构程序设计、函数、预处理、数组、指针、结构体与共用体、文件、位运算。

本书内容丰富、结构合理、思路清晰、语言简练流畅、示例翔实,在准确讲解概念的基础上力求通俗易懂,大量引入实例,分析程序设计思路,旨在培养学生的实践动手能力。每章均配有丰富的例题和习题,并附有参考答案。

本书既可作为普通高校非计算机专业计算机公共课的教材,也可作为学习C语言程序设计的自学用书。
內容簡介:
本书以Visual C++ 6.0为开发平台,全面介绍了C语言的基础知识、程序结构及程序编写技巧。全书共分为12章,包括引言、C语言基础知识、顺序结构程序设计、选择结构程序设计、循环结构程序设计、函数、预处理、数组、指针、结构体与共用体、文件、位运算。本书内容丰富、结构合理、思路清晰、语言简练流畅、示例翔实,在准确讲解概念的基础上力求通俗易懂,大量引入实例,分析程序设计思路,旨在培养学生的实践动手能力。每章均配有丰富的例题和习题,并附有参考答案。本书既可作为普通高校非计算机专业计算机公共课的教材,也可作为学习C语言程序设计的自学用书。
目錄
第1章 引言
1.1 C语言的发展过程及特点
1.1.1 C语言的发展过程
1.1.2 C语言的特点
1.2 简单的C语言程序
1.3 C语言程序的结构
1.4 C语言程序的执行
1.4.1 编译源程序
1.4.2 链接目标程序
1.4.3 C语言开发工具简介
本章小结
习题
第2章 C语言基础知识
2.1 C语言的数据类型
2.1.1 整型数据
2.1.2 浮点型数据
2.1.3 字符型数据
2.2 标识符、常量和变量
2.2.1 标识符
2.2.2 常量
2.2.3 变量
2.3 运算符与表达式
2.3.1 概述
2.3.2 算术运算符及算术表达式
2.3.3 赋值运算符及赋值表达式
2.3.4 自增、自减运算符
2.3.5 关系运算符及关系表达式
2.3.6 逻辑运算符及逻辑表达式
2.3.7 位运算符及位运算
2.3.8 条件运算符及条件表达式
2.3.9 逗号运算符及逗号表达式
2.3.10 数据类型的转换
2.4 小型实训案例
本章小结
习题
第3章 顺序结构程序设计
3.1 算法
3.1.1 算法的概念
3.1.2 算法的表示
3.2 结构化程序设计的三种基本结构
3.3 C语言的基本语句
3.4 数据的输入输出
3.4.1 格式输出函数printf()
3.4.2 格式输入函数scanf()
3.4.3 格式字符
3.4.4 字符输入输出函数
3.5 程序应用实例
3.6 小型实训案例
本章小结
习题
第4章 选择结构程序设计
4.1 if结构
4.1.1 if语句
4.1.2 if…else语句
4.1.3 if语句的嵌套
4.2 switch语句
4.2.1 switch语句的一般格式
4.2.2 break语句在switch语句中的应用
4.3 程序应用实例
4.4 小型实训案例
本章小结
……
第5章 循环结构程序设计
第6章 函数
第7章 预处理
第8章 数组
第9章 指针
第10章 结构体与共用体
第11章 文件
第12章 位运算
附录A C语言的关键字
附录B ASCII码表
附录C 常用库函数
附录D C运算符的优先级与结合性
內容試閱
第2章 C语言基础知识
【本章要点】
* C语言的基本数据类型
* C语言的标识符、变量和常量
* C语言程序的运算符与表达式
【学习目标】
* 掌握C语言的基本数据类型的特点及应用
* 掌握C语言的标识符、常量和变量的基本知识及应用
* 掌握C语言的各种运算符及表达式的应用
2.1 C语言的数据类型
数据类型是数据的基本属性,描述的是数据的存储格式和运算规则。不同类型的数据在内存中所需存储空间的大小是不同的,能够支持的运算、相应的运算规则也不同,因而在学习C程序时必须准确地掌握和运用数据的数据类型。
C语言的数据类型分类如图2-1所示。
图2-1 C语言的数据类型
2.1.1 整型数据
1. 基本概念
整型数据就是整数,整数又分为两大类:有符号型和无符号型。有符号的整数既可以是正数,也可以是负数;不带符号位只包含0和正数的整数为无符号整数。
整型int数据类型可以用4种修饰符的搭配来描述:signed有符号、unsigned无符号、long长型和short短型。
Visual C++ 6.0环境下整型数据的长度及取值范围如表2-1所示。
表2-1 整型数据的长度及取值范围
数据类型
占用字节
取值范围
整型int
4
-2147483648~2147483647
有符号整型signed int
4
-2147483648~2147483647
无符号整型unsigned int
4
0~4294967295
短整型short int
2
-768~767
有符号短整型signed short int
2
-768~767
无符号短整型unsigned short int
2
0~65535
长整型long int
4
-2147483648~2147483647
有符号长整型signed long int
4
-2147483648~2147483647
无符号长整型unsigned long int
4
0~4294967295
在C语言中,对整型数据类型的说明可以使用简写方式,如表2-2所示。
表2-2 整型数据的简写方式
完整方式
简写方式
short int、signed short int
short
signed int
int
long int、signed long int
long
unsigned short int
unsigned short
unsigned int
unsigned
unsigned long int
unsigned long
2. 整型数据的二进制表示
对于整型数据,其数值是以补码的形式存储的。正数的补码与其二进制原码相同。例如整数23,其二进制形式的存储结构如图2-2所示。在Visual C++ 6.0环境下,整型数据占4个字节的存储单元,每个字节含8个位。
图2-2 整数23的存储结构
若为负整数,将该数绝对值的二进制形式按位取反再加1便可得到该数的补码。
例如,求-23的补码的步骤如下。
第一步,求出23的二进制形式:00000000 00000000 00000000 00010111
第二步,按位取反:11111111 11111111 11111111 11101000
第三步,再加1:11111111 11111111 11111111 11101001
2.1.2 浮点型数据
1. 基本概念
在计算机的运算过程中,整型数据并不能适用于所有的应用,有时也需要存储带小数的数,这类数可以用浮点型数据即浮点数来表示。
浮点数的小数点位置是不固定的,可以浮动。C语言提供了三种不同的浮点格式。
* float:单精度浮点数。
* double:双精度浮点数。
* long double:长双精度浮点数。
当精度要求不严格时,比如某人的工资,需要保留两位小数,float类型就是很恰当的类型。double类型提供更高的精度,对于绝大多数用户来说已经足够用了。long double类型支持极高精度的要求,但很少会用到。
2. 浮点型数据的二进制表示
浮点型数据与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。例如浮点数58.625 的指数形式为58.625=5.8625×101。其中,5.8625称为尾数,10的幂次1称为指数。
计算机在存储浮点数的时候,也要将十进制数转化为二进制数来表示,转化方法是将浮点数分为整数部分和纯小数部分,再将整数部分和纯小数部分分别转化为二进制数。
浮点数的存储结构如图2-3所示,分为3个部分:符号位、指数位和尾数。符号位表示数值的正负;指数位用于计算阶码,代表2的幂次;尾数位为有效小数位数。尾数部分占的位数越多,浮点数的有效位越多;指数部分占的位数越多,表示数的范围就越大。
图2-3 浮点数的存储结构
例如,浮点数58.625的二进制存储格式如图2-4所示。
图2-4 浮点数58.625的二进制存储格式
提示:
* 对于float类型的浮点数,指数位占8位,尾数位占23位。
* 对于double类型的浮点数,指数位占11位,尾数位占52位。
3. 浮点型数据的长度与取值范围
单精度浮点数和双精度浮点数由于指数和尾数的位数不同,它们的取值范围也有所不同。浮点型数据的长度及取值范围如表2-3所示。
表2-3 浮点型数据的长度及取值范围
类 型
说 明
占用字节
有效位
取值范围
float
单精度浮点型
4
6~7
-3.4×10-38~3.4×1038
double
双精度浮点型
8
15~16
-1.7×10-308~1.7×10308
long double
长双精度浮点型
16
18~19
-1.2×10-49~1.2×1049
【实例2-1】 C语言浮点数精度示例。
#include
void main
{
float x; * x为单精度类型变量 *
double y; * y为双精度类型变量 *
x=123456789.1234; * 赋予x值 *
y=123456789.1234; * 赋予y值 *
printf"x=%f\n",x; * 输出x的值 *
printf"y=%f\n",y; * 输出y的值 *
}
运行结果如图2-5所示。
图2-5 实例2-1的运行结果
从程序的运行结果来看,x显示的结果并不等于赋予它的值,而y显示的结果等于赋予它的值,说明float单精度类型数据只能保证前7位是精确的,double双精度类型数据的精度可以为15~16位。
2.1.3 字符型数据
在C语言中,一个字符型数据在计算机的内存中占据一个字节的存储空间,但计算机并不是将字符本身存储到存储单元中存储单元只能存储二进制编码,而是将字符所对应的ASCII码值转换为二进制的形式存储到相应的存储单元中。如大写字母A的ASCII码值为65,因此,大写字母A在存储单元中的存储形式实际为整数65的二进制存储形式,如图2-6所示。
提示: C语言是将字符常量当作整数来进行处理的。字符常量与其对应的ASCII码值可以相互替代。字符型数据可以用字符形式输出,也可以用整数形式输出。字符型数据还可以作为整数参加运算。例如:
''A''+10
相当于65+10,结果为75。
通过这种关系,可以进行大小写字母之间的转换运算,大写字母的ASCII码值加上就是其对应的小写字母的ASCII码值,即大写字母=小写字母-。
【实例2-2】 将大写字母转换为小写字母并显示在屏幕上。
#include
void main
{
char ch1,ch2;
ch1=''M'';
ch2=ch1+;
printf"ch2=%c\n",ch2;
}
程序运行结果:
ch2=m
2.2 标识符、常量和变量
2.2.1 标识符
在编写程序时,需要对变量、函数、宏或其他实体进行命名,这些名字称为“标识符”。标识符只可以使用字母、数字和下划线,而且必须以字母或下划线开头。标识符的长度可以是一个或多个字符,最长不允许超过个字符。
下面是正确的用户标识符:
name、abc12、person_name
下面是不合法的用户标识符:
2piece 不能以数字开头
scorestudent 含有既非字母又非数字的字符
a value 含有空格
int 与关键字同名
C语言中的标识符区分大小写,因此,sum、Sum和SUM分别代表三个不同的标识符。用户在编程过程中要特别注意的是:标识符不能和C语言系统中的关键字相同关键字是C语言系统规定的具有特定意义的标识符,见附录A,也不能和用户自定义的函数或C语言库函数同名。
2.2.2 常量
常量是在程序运行过程中,其值不发生变化的量。在C语言中,常量分为符号常量和直接常量。
1. 符号常量
符号常量是指用一个标识符表示的常量。符号常量在使用前必须定义,定义的形式如下:
#define 标识符 常量
在这里,#define是C语言的预处理命令。在编辑C语言源程序时,可以直接使用已定义的符号常量,编译时会对程序中出现的符号常量进行替换。
【实例2-3】 了解符号常量的用法。
#include
#define PI 3.1416
void main
{
int r=10;
float area;
area=PI*r*r;
printf"area=%f\n",area;
}
程序运行结果:
area=314.160000
提示: 定义符号常量的目的是为了提高程序的可读性,方便程序的调试和修改,因此在定义符号常量时,应尽可能地表达它所代表的含义,如前面定义的PI就是代表圆周率3.1416。
2. 直接常量
直接常量是指直接用数值表示的量,如24、3.14、‘T’、“string”等。直接常量分为整型常量、实型常量、字符常量、字符串常量、枚举常量等不同类型的常量。
1 整型常量
可以采用十进制、八进制、十六进制来表示一个整型常量。
* 十进制:包含0~9中的数字,但是一定不能以0开头,如15、-255。
* 八进制:只包含0~7中的数字,必须以0开头,如017十进制的15、0377十进制的255。
* 十六进制:包含0~9中的数字和a~f中的字母,以0x或0X开头,如0xf十进制的15、0xff十进制的-1、0x7f十进制的127。
表2-4为整型常量在不同进制下的表示方法。
表2-4 整型常量的表示方法
整型常量
进 制
对应的十进制数值
17
十进制
17
017
八进制
15
0x17
十六进制
23
17L或17l
十进制
17
17LU或17lu
十进制
17
提示: 可以在十进制整型常量后面添加“l”或“u”“l”和“u”不区分大小写来修饰整型常量。若添加“l”或“L”则表示该整型常量为“长整型”,如“17l”;若添加“u”或“U”则表示该整型常量为“无符号型”,如“17u”;若添加“lu”或“LU”则表示该整型常量为“无符号长整型”,如“17lu”。
2 实型常量
实型常量常用浮点计数法或科学计数法两种方法表示,如231.46、7.36E-7。
科学计数法要求字母e或E的两端必须都有数字,而且右侧必须为整数。如下列科学计数法均是错误的:e3、2.1e3.2、e。
3 字符常量
字符常量是由一对单引号括起来的单个字符,如‘A’、‘9’、‘$’等均为字符常量。在这里,单引号只起定界作用,不代表字符。在C语言中,一个字符占用一个字节的存储空间,字符在ASCII表中按照其对应的ASCII码值依次排列。ASCII表详见附录B。
除了能直接表示和在屏幕上显示的字符外,还有一些字符是不能显示、用来表示不可打印的控制字符和特定功能的字符。如实例2-1中的“printf“x=%f \n”,x;”,其中的“\n”就是一个这样的控制字符。这种字符称为“转义字符”。转义字符用反斜杠 \ 后面跟一个字符或者一个八进制或十六进制数表示。表2-5所示为C语言中常用的转义字符。
表2-5 转义字符
转义字符
意 义
ASCII码值
\n
换行
10
\t
水平制表符
9
\b
退1格
8
\r
回到本行的开始
13
\f
换页
12
\反斜杠
92
\''
单引号字符
39续表
转义字符
意 义
ASCII码值
\"
双引号字符
34
\0
空字符
0
\ddd
1~3位八进制数所代表的字符
\xhh
1~2位十六进制数所代表的字符
提示:
* 字符码ddd表示1~3位八进制数字,可以不用前缀0。如‘\101’代表ASCII值为八进制数101的字符,八进制数101相当于十进制数65,ASCII值为65的字符是大写字母‘A’。
* 字符码hh表示1~2位十六进制数字,不能忽略前缀x。如‘\x47’代表ASCII值为十六进制数47的字符,十六进制数47相当于十进制数71,ASCII值为71的字符是大写字母‘G’。
* 单引号和反斜杠必须用转义字符表示。
4 字符串常量
字符串常量是由一对双引号括起来的字符序列。如“China”、“a”、“123”等都是字符串常量。双引号之间没有任何字符的字符串常量称为空字符串。
在C语言中,系统会自动在字符串常量的尾端加入一个字符‘\0’作为字符串的结束标记,因此,长度为n个字符的字符串常量,在内存中占用n+1个字节的存储空间。
例如,字符串常量china有5个字符,则其存储空间为6个字节,其存储形式如图2-7所示。
图2-7 字符串常量“china”的存储形式
在C语言中,处理字符串问题时经常要用到数组或指针,这部分内容将在后续章节中讲述。
注意: 不要混淆字符常量与字符串常量。字符常量是由一对单引号括起来的单个字符,占1个字节的存储空间,如‘s’、‘\101’等;而字符串常量是由一对双引号括起来的字符序列,如“china”,占6个字节的存储空间,其中最后一个字节用来存放字符‘\0’。
2.2.3 变量
1. 变量的定义
变量是指在程序运行过程中其值可以改变的量。在程序定义变量时,编译系统就会给它分配相应的存储单元,用来存储数据,变量的名称就是该存储单元的符号地址。
在使用变量之前必须对其进行声明,为了声明变量,首先要指定变量的类型,然后说明变量的名字。声明变量的格式如下:
类型名 变量名表;
提示:
* 类型名:必须是有效的C语言数据类型,如int、float、double、char等。
* 变量名表:可以是相同类型的若干个变量名,变量名之间用逗号隔开。
例如:
int number; *number为整型变量*
float score, avg ; *score、avg为单精度实型变量*
通常,变量定义的语句放在函数的开头,也可以放在函数的外部或复合语句的开头。
2. 变量的初始化
在程序中为变量赋值的时候,编译系统就会根据变量名称找到其对应的存储单元的地址,将所赋的值存放进去。
C语言允许在定义变量的同时对变量进行初始化。一般形式如下:
类型名 变量名=表达式, … ;
例如:
int a=3 ; *定义a为整型变量,初值为3*
float pi=3.1416,score; *定义pi、score为单精度实型变量,pi的初值为3.1416*
char ch=''t'' ; *定义ch为字符型变量,初值为''t''*
也可以对定义的变量的一部分赋初值。例如:
int length, width=10, area ;
表示定义length、width和area为整型变量,并且对width赋初值10。
若要对几个变量赋同样的值,每个变量应分别赋初值,如写成以下形式:
int a=10, b=10, c=10;
而绝不能写成如下形式:
int a=b=c=10;
2.3 运算符与表达式
C语言提供了丰富的运算符,除流程控制语句与输入输出操作之外的绝大多数基本操作都是由运算符来处理的。
2.3.1 概述
1. 运算符的分类
1 按运算符操作对象的数量分类
运算符能连接运算对象的个数称为运算符的目。C语言中运算符的目有如下三种。
* 单目运算符:只能连接一个运算对象,如++、--、等。
* 双目运算符:可以连接两个运算对象,如+、-等。C语言中的运算符大多数属于双目运算符。
* 三目运算符:可以连接三个运算对象。C语言中只有一个三目运算符,即条件运算符。
2 按运算符的性质分类
C语言的运算符极其丰富,根据运算符的性质分类,可分为算术运算符、关系运算符、逻辑运算符、赋值运算符、条件运算符、逗号运算符、求字节数运算符和位运算符等。
2. 运算符的优先级和结合方向
优先级是指在使用不同的运算对象进行计算时的先后次序。比如在算术运算符中,乘、除运算符的优先级要高于加、减运算符的优先级。C运算符的优先级共分为15级,1级最高,15级最低。当一个表达式中出现不同类型的运算符时,首先按照它们的优先级顺序进行运算,即先对优先级高的运算符进行计算,再对优先级低的运算符进行计算。当两类运算符的优先级相同时,则要按照运算符的结合性确定运算顺序。圆括号的优先级高于任何运算符。
C语言中运算符的优先级关系为:单目运算算术运算关系运算逻辑运算条件运算赋值运算逗号运算。
结合方向是指当一个运算对象连接两个同一优先级的运算符时,如果先结合左边的运算符,称为“自左向右”的结合方向;如果先结合右边的运算符,称为“自右向左”的结合方向。
各类运算符的优先级和结合性详见附录D。
3. 表达式
由C运算符和运算对象构成的式子称为“表达式”。运算对象可以是常量、变量或函数。单个的常量、变量和函数有时也可以看作表达式。
C语言表达式中的所有成分都必须以线性形式书写,没有分式,没有上下标。如数学表达式
转换成C表达式,应写成
sinx+ba*b+a+ba-b
2.3.2 算术运算符及算术表达式
1. 算术运算符
1??+:加法运算符,或正值运算符,如3+5、+3。
2??-:减法运算符,或负值运算符,如5-2、-5。
3??*:乘法运算符,如3*5。
4??:除法运算符,如53。
5??%:模运算符,或称求余运算符,用于计算两个整数相除后得到的余数,如5%2的值为1。
算术运算符的优先级与数学上的规定相同,先乘除后加减,同一级别的一般情况下按自左向右的顺序进行。
注意:
* 对于除法运算符“”,如果两个运算对象都为整数,其意义为“整除”,相除的结果为整数,如53的结果为整数1,舍去小数部分;如果有一个整数为负数,C语言编译系统将采取“向零取整”的方法,即-53=-1,取整后向零靠拢;如果两个运算对象中至少有一个为浮点数,则相除的结果为double型浮点数,如3.02的结果为1.5。
* 对于求余运算符“%”,其只能应用于整型数据,且计算结果的符号取决于左操作数的正负号。例如:
-10%3=-1
10%-3=1
2. 算术表达式
用算术运算符和括号将运算对象连接起来的符合C语法规则的式子,称为“C算术表达式”。运算对象包括常量、变量、函数等。下面是一个合法的C算术表达式:
a*bc-1.5+''a''-sinx
算术表达式的值就是它的计算结果,算术表达式的类型就是它的计算结果的类型。
2.3.3 赋值运算符及赋值表达式
1. 赋值运算符及赋值表达式
在C语言中,“=”称为赋值运算符,它的作用是将一个表达式的值赋给一个变量。由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。一般形式如下:
变量名=表达式
赋值运算符的结合性是“自右向左”,赋值运算符的左边必须是一个代表某一存储单元的变量名或是具备变量性质的、代表某存储单元的表达式,赋值运算符的右边可以是任意合法的C表达式。
赋值运算的功能是先求出右边表达式的值,然后再把此值赋给运算符左边的变量,也就是把数据放入以该变量名标识的存储单元中。例如:
a=10; * 把整型常量10赋给变量a *
变量、变量值与存储单元的关系如图2-8所示。
在程序中,可以多次给一个变量赋值,每赋一次值,相应的存储单元中的数据就被更新一次,存储单元总是存放最后一次所赋的数据。
说明:
* 赋值运算符的优先级只高于逗号运算符,比其他任何运算符的优先级都低。如对于下列表达式:
s=13+2*6+369
* 先计算赋值运算符右边表达式的值,再把计算的结果赋给变量s。
* 赋值运算符右边的表达式可以是一个赋值表达式。例如:
a=b=5;
是合法的。根据赋值运算符“自右向左”的结合性,它等价于a=b=5,最终的结果是a和b都等于5。
2. 复合赋值运算符
在赋值运算符“=”之前加上其他的运算符,可以构成复合的赋值运算符。C语言共有10种复合运算符:+=、-=、*=、=、%=为复合算术运算符,=、=、=、^=、|=为复合位运算符。
复合运算符是两种运算符的结合,它包含两种运算:赋值运算、和赋值运算符复合的其他运算符的运算。
例如:
x+=10; *等价于 x=x+10*
x%=3; *等价于 x=x%3*
如果复合赋值运算符的右边是一个表达式,则相当于它含有一对括号。例如:
x*=y10-25; *等价于 x=x*y10-25;*
可以借助以下步骤来理解其运算规则。
1 将“=”右侧的表达式用括号括起来:y10-25。
2 将“=”左侧的内容“x*”移到右侧:x*y10-25。
3 最后补上“=”左侧的变量名:x=x*y10-25。
2.3.4 自增、自减运算符
C语言提供了自增和自减运算符。
自增运算符++:功能是将变量的值加1。
自减运算符--:功能是将变量的值减1。
“++”和“--”运算符都是右结合方向的单目运算符,它们既可以作为变量的前缀,又可以作为变量的后缀。
例如:对于变量x,++x、--x表示“++”、“--”作为变量x的前缀,x++、x--表示“++”、“--”作为变量x的后缀。
粗略地看,++x和x++都是使x的值加1,但是++x和x++的区别在于:++x是先将x的值加1,再使用变量x;而x++则是先使用变量x,然后再将x的值加1。例如下面的语句:
x=5;
y=++x;
执行完语句后,x的值为6,y的值也为6。
这是因为语句“y=++x;”等价于“x=x+1; y=x;”。
又如下面的语句:
x=5;
y=x++;
执行完语句后,x的值为6,y的值为5。
因为语句“y=x++;”等价于“y=x; x=x+1;”。
注意:
* “++”和“--”运算符只能应用于变量,不能应用于常量或表达式。例如,12++、i*j -- 都是不合法的。
* “++”、“--”与单目运算符具有同一优先级,结合方向都是“自右向左”。因此,对于“-i++”要理解为“-i++”,而不能理解为“-i++”,这是因为-i是表达式,不能做“++”和“--”的操作对象。
2.3.5 关系运算符及关系表达式
1. 关系运算符
关系运算符用于关系运算。关系运算是对两个操作对象进行比较的运算,通过比较来判断两个操作数对象之间是否存在一定的关系。
C语言中的关系运算符共有6种,都是双目运算符,结合方向都是“自左向右”,如表2-6所示。
表2-6 关系运算符及其含义和优先级
关系运算符
含 义
优先级
=
大于等于


大于
=
小于等于

小于
= =
等于

!=
不等于
2. 关系表达式
用关系运算符将两个表达式连接起来的式子,称为“关系表达式”。
关系表达式的值是一个逻辑值,即“真”和“假”。关系表达式所表达的关系如果成立,其值为“真”;如果不成立,其值为“假”。
在C语言中没有专门的逻辑型数据,而是用0表示“假”,非0的值表示“真”,通常用1来表示“真”。
注意:
* 关系运算符连接的表达式可以是C语言中任意的合法的表达式。
* 关系运算符的操作对象可以是字符型数据。如表达式‘a’‘m’的结果为0,因为字符在存储单元中是按照ASCII码存储的‘a’的ASCII码为97,‘m’的ASCII码为109,因而字符型数据的关系运算比较的其实是它们的ASCII码。
* 若变量x、y都是实型数据,应当避免使用关系运算符“x==y”这样的表达式,因为通常存放在存储单元中的实型数据都是有误差的,因此不可能精确相等,这样会导致关系表达式的值总为0。
2.3.6 逻辑运算符及逻辑表达式
1. 逻辑运算符
逻辑运算符用于逻辑运算,也就是“真”“假”值的运算。C语言提供的逻辑运算符及其含义和优先级如表2-7所示。
表2-7 逻辑运算符及其含义和优先级
逻辑运算符
含 义
优先级

逻辑非

逻辑与
||
逻辑或
逻辑运算符中的“!”为单目运算符,其余都是双目运算符。
2. 逻辑表达式
用逻辑运算符将表达式连接起来的式子,称为“逻辑表达式”。逻辑表达式中的操作对象可以是C语言中任意合法的表达式。
逻辑运算符主要用于进一步明确关系表达式的关系,逻辑表达式的结果同关系表达式的结果一样,只有“真”和“假”。表2-8所示为逻辑运算规则。
表2-8 逻辑运算规则
A
B
AB
A||B
!A




















表2-8中的A、B均可以是其他关系表达式。
对于由关系表达式和逻辑表达式组成的复杂表达式,为了提高运行速度,编译系统会对下列特殊的情况作不同的处理。
1 表达式1 || 表达式2
根据语法规则,只要表达式1的值为真,不论表达式2的值为何值,最终表达式“表达式1 || 表达式2”的结果都为真,编译器不会对表达式2进行运算,但会检查其语法是否有错误。
例如有如下语句:

int x=10,y=20,z;
z=x printf"z=%d \n",z;

因为表达式x 2??表达式1 表达式2
根据语法规则,只要表达式1的值为假,不论表达式2的值为何值,最终表达式“表达式1 表达式2”的结果都为假,编译器不会对表达式2进行运算,但会检查其语法是否有错误。
例如有如下语句:

int x=10,y=20,z;
z=xy --y;
printf"z=%d \n",z;

因为表达式xy的结果为假,因而不论后面的表达式为何值,表达式xy--y的结果都为假,此时系统不会计算表达式--y,y的值也不会减少,程序运行后的结果为z=0、y=20。
2.3.7 位运算符及位运算
位运算是指二进制位的运算,主要针对整型和字符型数据而言。位运算符的属性如表2-9所示。
表2-9 位运算符的属性
位运算符
含 义
类 型
结合性
优先级
~
按位取反
单目
自右向左

位左移
双目
自左向右

位右移
双目
自左向右

位与
双目
自左向右
^
位异或
双目
自左向右
|
位或
双目
自左向右
位运算的结果只有0或1,位运算的规则如表2-10所示。
表2-10 位运算的规则
A
B
A|B
A^B
AB
~A
~B
1
1
1
0
1
0
0
1
0
1
1
0
0
1
0
0
0
0
0
1
1
0
1
1
1
0
1
0
关于位运算的详细内容,将在第12章中介绍。
2.3.8 条件运算符及条件表达式
条件运算符是C语言中唯一的三目运算符。由条件运算符和运算对象构成的表达式称为条件表达式,条件表达式由“?”和“:”组成,其结合方向是“自右向左”,一般形式如下:
表达式1? 表达式2:表达式3;
条件表达式的运算过程为:先计算表达式1的值,如果表达式1的值为真非0,则表达式2被求值,此时表达式2的值就是整个条件表达式的值;如果表达式1的值为假0,则表达式3被求值,此时表达式3的值就是整个条件表达式的值。
【实例2-4】 条件表达式示例。
#include
void main
{
int a=12,b=24,c;
c=ab ? a+b : a-b;
printf"c=%d\n",c;
}
程序运行结果:
c=-12
条件表达式是可以嵌套使用的,当多个条件表达式嵌套使用时,每个后续的“:”总是与前面最近且没有配对的“?”相联系。例如:
ab ? a: cd ? c:d
相当于:
ab ? a: cd ? c:d
如果a=6、b=8、c=12、d=24,则条件表达式的值为24。
2.3.9 逗号运算符及逗号表达式
逗号表达式是由逗号“,”将两个表达式连接起来组成的一个表达式。逗号表达式的一般形式如下:
表达式1,表达式2,…,表达式n;
逗号表达式的求解过程为:先计算表达式1,再计算表达式2……直至计算表达式n,整个表达式的结果就是表达式n的值。
逗号表达式的运算优先级是最低的,结合方向是“自左向右”。
【实例2-5】 逗号表达式示例。
#include
void main
{
int x,y;
y=x=3*5,x*3,x+12;
printf"y=%d\n",y;
}
程序运行结果:
y=27
2.3.10 数据类型的转换
在C语言程序中,若出现包括不同类型的常量和变量的一个表达式,那运算结果会是什么呢?C语言规定:不同类型的数据在参加运算时,要先转换成相同类型的数据,然后再进行运算。运算结果的类型就是转换后的类型。C语言的数据类型转换分为系统自动进行的类型转换和强制类型转换。
1. 系统自动进行的类型转换
自动类型转换的规则:取值范围较小的类型向取值范围较大的类型转换,如图2-9所示。
注意:
* 图中指向左侧的箭头表示必须进行的转换。char、short型数据必须要转换为int型,float型数据必须要转换为double型。
* 纵向箭头表示当运算对象为不同数据类型时转换的方向,由低向高转换。例如,int型数据与double型数据进行运算时,要先将int型转换为double型,然后两个double型数据进行运算,结果为double型。而不是int型先转换为unsigned型,再转换为long型,最后转换为double型。
【实例2-6】 数据类型转换分析。计算表达式120-‘m’+24.67的值。
1 计算120-‘m’:先将字符‘m’转换为整数109,再计算120-109,计算结果为11。
2 计算11+24.67:由于表达式中有实型数据,因而要先将11和24.67都转换为double型,再进行运算,结果为35.670000。
2. 强制类型转换
自动类型转换是编译系统自动进行的,不需要用户干预。C语言允许用户根据自己的需要将运算对象的数据类型转换为所需的数据类型。强制转换的形式如下:
类型名 表达式;
功能:强行将表达式的类型转换为所要求的类型。例如:
int4.2; *将实型数据4.2强行转换为整型,结果为4*
float x+y; *将x+y的结果转换为float型*
注意:
强制类型转换之后,原来的变量或表达式的值并未发生改变。例如:
float a=3.14;
则强制转换表达式inta的数据类型为int型,结果为3;而变量a的数据类型仍然是float型,值仍为3.14。
2.4 小型实训案例
本案例主要应用本章所学的算术运算符以及算术表达式的知识,对一个三位的整数进行分解。
1. 实训目的
掌握算术运算符及算术表达式的应用。
2. 实训内容
假定n是一个三位的正整数,将其各位上的数字分解出来,再计算各位数字之和。例如整数n为123,则各位数字之和为1+2+3=6。
3. 实训步骤
1 分析
将n的百位、十位、个位上的数字依次分解出来,再计算它们的和,具体步骤如下。
1 计算n的个位数。利用算术运算符“%”,计算n与10的余数,所得的计算结果就是n的个位数:
个位数=n%10;
2 计算n的十位数。利用算术运算符“”关于整数相除的特点,即“两个整数相除的结果仍然为整数”,将n除以10就可以除掉n的个位数,再利用求模运算符%与10求余数,所得的计算结果就是n的十位上的数字:
十位数=n10%10;
3 计算n的百位数。将n除以100,得到的结果就是n的百位数:
百位数=n100;
4 求和。
总和=个位数+十位数+百位数;
2 编程实现
#include
void main
{
int n,g,s,b,sum; *n表示要分解的整数, g表示个位的数字,s表示十位
?的数字,b表示百位的数字,sum表示各位数字之和 *
n=123;
g=n%10; * 分解出个位上的数字 *
s=n10%10; * 分解出十位上的数字 *
b=n100; * 分解出百位上的数字 *
sum=g+s+b;
printf"%d\n",sum;
}
本 章 小 结
本章主要介绍了C语言的数据类型和各类运算符及表达式,这是编写C语言程序的基础。
C语言的基本数据类型包括整型、实型和字符型,整型又分为基本整型、短整型、长整型,实型又分为单精度实型、双精度实型。
C语言的运算符共分为算术运算符、赋值运算符、逻辑运算符、关系运算符、逗号运算符、条件运算符、求字节数运算符及位运算符等,每一种运算符都有其结合方向和运算优先级。
C语言不同类型的表达式是通过不同的运算符构成的,一个常量、变量都可以看作一个表达式。混合表达式在运算时,要按运算符的优先级次序执行,当一个运算符两侧的运算对象的数据类型不同时,系统会遵循“先转换,后运算”的原则,将数据自动转换为同一类型后再进行运算。
习 题
一、选择题
1. 若变量a是整型数据,并执行了语句“a=‘A’+1.6;”,则正确的叙述是 。
A.??a的值为字符C B.??a的值是浮点型
C. 不允许字符型和浮点型相加 D.??a的值为字符‘A’的ASCII码值加1
2. 下列变量定义中合法的是 。
A.??int _a=1-0.1e-1; B.??double b=1+5e2.5;
C.??long d0=0xfdaL; D.??float 2_and=1-e-3
3. 已知各变量的类型定义如下:
int k,a,b;
long w=5;
double x=1.42;
则以下不符合C语言语法的表达式是 。
A.??x%-3 B.??w+=2
C.??k=a=2,b=3,a+b D.??a+=a-=b=4*a=3
4. 字符型常量在内存中存放的是 。
A.??ASCII码 B.?? BDC码 C.??内部码 D.??十进制码
5. 下面错误的字符串常量是 。
A.??‘abc’ B.??“12’12” C.??“0” D.??“ ”
6. 若有“int n=7, sum=7;”,则计算表达式sum=n++,sum++,++n后,sum的值是 。
A.??7 B.??8 C.??9 D.?10
7. 设“int x=1,y=1;”,表达式!x||y--的值是 。
A.??0 B.??1 C.??2 D.??-1
8. 以下选项中,与k=n++完全等价的表达式是 。
A.??k=n,n=n+1 B.??n=n+1,k=n
C.??k=++n D.??k+=n+1
9. 能正确表达数学关系“10≤a100”的表达式是 。
A.??10≤a100 B.??10=aa100
C.??10=a ||a100 D.?10=aa100
10. 执行下列C语言程序段后,变量b的值是 。
double a=1,b;
b=a+52;
A.??1 B.??3 C.??3.0 D.??3.5
二、填空题
下列程序的功能是:计算圆的面积,已知半径r=10。
#include
void main
{
① r=10; *声明变量r的数据类型 *
② PI=3.1415926,area; *声明语句 *
area=r*r*PI; * 利用数学公式求圆面积 *
printf"%f\n", ③ ; * 输出计算结果 *
}
三、改错题
修改下列程序,使得在屏幕上输出 1+12+23+34 的计算结果。下列程序在每一行“***********found************”的下方有一处错误,请予以改正,程序的其他部分不得改动。
#include
void main
{
***********found************
int sum;
sum=1.0+1.02+2.03+3.04;
***********found************
printf"%d",sum;
}
四、编程题
1. 编写程序,计算表达式1-12+13-14+15 的计算结果。
2. 编写程序,将一个大写字母转换为小写字母。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.