C语言讲义(1-5).doc_第1页
C语言讲义(1-5).doc_第2页
C语言讲义(1-5).doc_第3页
C语言讲义(1-5).doc_第4页
C语言讲义(1-5).doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文由zqh2008贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 第 1章 C 语 言 基 础 1.1 C 语言概述 1.1.1 C 语言的产生与发展 语言的产生 1. C 语言的产生 C 语言于 1972 年1973 年间, 诞生于美国的贝尔实验室, 由 Denis.M.Ritchie 创建. C 语言的产生基于两个方面的需要.一是为满足 UNIX 操作系统开发的需要.二是为拉近高级语 言与硬件之间距离的需要.C 语言集高级语言与汇编语言优点于一身. 2. C 语言的发展 1972 年1973 年间, 贝尔实验室的 D.M.Ritchie 在保留 B 语言优点的基础上, 创建了 C 语言. 1973 年,UNIX 操作系统被用 C 语言改写,称为 UNIX 第五版.UNIX 以后的第六版,第七版,SYSTEM 和 SYSTEM都是在第五版的基础上发展起来的.这期间 C 语言也被多次改进.1975 年,UNIX 的第 六版公布,C 语言开始受到人们的普遍关注. UNIX 操作系统的广泛使用,促进了 C 语言的迅速发展与普及,C 语言的发展与普及反过来又促 进了 UNIX 操作系统的推广.1978 年,出现了独立于 UNIX 和 PDP 计算机的 C 语言,从此 C 语言被 迅速移植到大,中,小型与微型机上.当年,B.W.Kernighan 和 D.M.Ritchie 以 UNIX 第七版的 C 编译 程序为基础,出版了影响深远的名著The C Programming Language . C+语言是 C 语言发展的新阶段,是一种更好的 C 语言,是应用广泛的面向对象的程序设计语言. 目前,C 语言已经发展成为迄今为止最流行的计算机程序设计语言. 3. C 语言的标准与方言 C 语言的广泛应用还是在不同的开发团体之间出现了问题,各机构推出了自己的 C 语言版本,某 些执行过程的微小差别却不时引起 C 程序之间的不兼容. 美国国家标准协会(ANSI)从 1983 年开始经过 长达五年的努力,制定了 C 语言的新标准ANSI C.现在提及 C 语言的标准都是指新标准.ANSI C 比原标准 C 有很大的发展, 解决了经典定义中的二义性, 给出了 C 语言的新特点. Kernighan 和 Ritchie 也以新标准改写了他们的经典著作.任何 C 程序都必须遵循 ANSI C 标准,本教材的主体也以 ANSI C 作为基础. 1.1.2 C 语言的特点 (1)C 语言简洁, 紧凑, 压缩了一切不必要的成份. (2) C 语言运算丰富, 将括号, 赋值, 强制类型转换, 取变量地址等都以运算实现. (3) C 语言数据类型丰富, 具有现代语言的各种数据类型; 用户能扩充数据类型, 能够实现各种复 杂的数据结构, 完成各种问题的数据描述. (4) C 语言是一种结构化程序设计语言, 具有结构化语言所要求的三种基本结构. (5) C 语言是高级语言中的低级语言.C 语言允许直接访问物理地址,能进行位运算,能实现汇编 语言的大部分功能,能直接对硬件进行操作. (6) C 语言提供编译预处理机制,有利于大程序的编写和调试. (7) C 语言编译系统小,生成的目标代码质量高,程序的执行效率高. (8) C 语言的输入和输出功能用库函数实现,编写的程序移植性好. (9) C 语言语法限制不太严格,程序设计自由度大,对程序员要求较高. 1.2 基本语法成份 1.2.1 字符集 字符是可以区分的最小符号, 构成程序的原始基础.C 语言字符集是 ASCII 字符集的一个子集, 包 括英文字母,数字及特殊字符: 英文字母: az 和 AZ 数字: 09 特殊字符:空格 !# % 由字符集中的字符可以构成 C 语言进一步的语法成份, 如标识符, 关键字, 特殊的运算符等. & * - - + = / |., : ; ? ( ) 1.2.2 标识符 标识符在程序中用来标识各种程序成份, 命名程序中的一些实体, 如变量, 常量,函数,类型, 标号等对象的名字. C 语言规定, 标识符必须以英文字母或下划线开头, 是字母, 数字, 下划线的序列. 以下是合法的标识符: i,j,k,x,c,a1,a2,op,y_1,zhou_prg,radius, cout,sun,day 以下是不合法的标识符: a.1,1computer,x+y,!abc,99999,$100,3c C 语言中的标识符严格区分字母的大小写,标识符 abc 与标识符 ABC 是不同的标识符.习惯上, 符号常量用大写字母表示,变量名称用小写字母表示. prime,program,sort,max,min,prg_1, 标准 C 中,标识符的长度可以任意,一般有效长度为 8 个字符,Turbo C 中标识符最大长度为 32 个字符. 标识符取名时不能与关键字同名, 也不要与系统预先定义的标准标识符(如标准函数)同名.系统使 用的一些内部标识符往往以下划线开头,为避免与系统使用的内部标识符发生冲突,用户定义的标识 符一般也不要用下划线开头. 标识符的名称一般选用相应的英文单词或拼音形式缩写, 尽量不要使用简单代数符号, a, c, 如 b, x,y,z 等.最好能见名知义 ,以提高程序的可读性.标识符大多数采用匈牙利表示法,即每 个单词第一个字母大写,如 StudentName,YearMonthDate. 由系统预先定义的标识符称为标准标识符,由用户定义的标识符称为自定义标识符.程序设计中 往往需根据实际需要定义大量的标识符.标识符必须先定义,后使用. 1.2.3 关键字 关键字 关键字又称为保留字, 由系统提供, 用以表示特定的语法成份, 如类型名称 int, float,语句特征 if, switch, while, 运算符号 sizeof 等, 是构成 C 语言的语法基础. 常见关键字有 31 个, 参见附录 A. 关键字有特定的语法含义, 不允许用户重新定义. 关键字在程序中像国家的名字一样, 绝对不能 拼错. 1.2.4 运算符 运算符实际上可以认为是系统定义的函数名字,这些函数作用于运算对象,得到一个结果值.运 算符通常由 1 个或多个字符构成.C 语言沿用了大量的常规运算符,如加法运算符+,减法运算符 ,地址运算符&,大于运算符,不等运算符!=,逻辑与运算符&,条件运算符?:, 点运算符.,字节数运算符sizeof等. 根据运算对象的个数不同,可分为单目运算符,双目运算符和三目运算符,又称为一元运算符, 二元运算符和三元运算符. 1.3 例 1-1 C 程序的结构 在屏幕上输出C 语言程序设计 . /*程序 1 - 1, 输出C 语言程序设计*/ #include stdio.h main( ) printf(C 语言程序设计); 运行结果: C 语言程序设计 例 1 2 求两个整数之和. /*程序 1 - 2, 求两个整数之和*/ #include stdio.h main( ) int a, b; int sum; printf(请输入两个整数 a, b: ); scanf(%d, %d, &a, &b); sum=a+b; printf(和=%dn, sum); 输入数据: 1999, 5 运行结果: 和=2004 例 1-3 求两个数的最大值. /*程序 1 - 3, 求两个数的最大值*/ #include stdio.h float max(x, y) float x, y; float t; if (xy) else t=y; return(t); main( ) float a, b; float m; printf(请输入两个数: ); scanf(%f, %f, &a,&b); m=max(a, b); /*调用求最大值的函数*/ printf(最大值=%6.2f n, m); /*主函数*/ t=x; /*求最大值函数*/ 输入数据: 12.1, 3.45 运行结果: 最大值= 12.10 1.3.1 C 程序的结构 1.函数 (1) C 语言程序由若干函数组成. 必须有一个且只能有一个主函数 main( ),主函数的名字为 main. 可以是系统预定义的标准函数,如 scanf 函数,printf 函数等,参见附录 C. 大多数函数由程序员根据实际问题的需要进行定义,函数之间是平行的关系.基于此,C 语言 被称为函数式语言. (2) 函数由函数头(函数的说明部分)与函数体(函数的语句部分)两部分组成. 函数头给出函数的特征描述, 包括函数的属性, 类型, 名字, 参数及参数类型. 如例 1-3 中 的求最大值函数的函数头: float max(x, y) float x, y; /*函数属性缺省, 函数类型实型, 函数名字 max, 函数参数 x, y, 实型*/ 函数体给出函数功能实现的数据描述和操作描述, 是程序中用花括号括起的若干语句. 如例 1 - 1 中的函数体: printf(C 语言程序设计); 例 1-3 中求两个数的最大值函数 max 的函数体: float t; if (xy) t=x; else t=y; return(t); 函数体可以为空,可以没有数据描述部分. 由此可以给出理论上最小的 C 语言程序: main( ) 语句 2. 语句 (1) 语句是组成程序的基本单位, 函数功能的实现由若干条语句完成.说明性语句完成数据描述, 执行性语句完成操作描述. (2) 语句由若干关键字加以标识, 如 if-else 语句,do-while 语句等. (3) C 语言本身没有输入/输出语句, C 语言的输入/输出操作由 scanf 函数和 printf 函数等库函数 完成. (4) C 语言语句必须以分号结束. 其它 3. 其它 1) 预处理命令 C 程序开始往往含有以 # 开头的命令, 它们是预处理命令. 如例 1-1 中#includestdio.h, 用以指明包含文件. 2) 程序注释 在程序中还有以/*开始, 以*/结束的内容, 它们是程序中的注释部分, 用以帮助阅读程序. 1.3.2 C 程序的书写 (1) 一行一般写一条语句.当然一行可以写多条语句, 一条语句也可以写在多行上. (2) 整个程序采用紧缩格式书写.表示同一层次的语句行对齐, 缩进同样多的字符位置.如循环体 中的语句要缩进对齐, 选择体中的语句要缩进对齐. (3) 花括号的书写方法较多, 本书采用花括号对齐的书写方式, 左边花括号处于第一条语句的开始 位置, 右边花括号独占一行, 与左边花括号对齐. (4) 在程序中恰当地使用空行, 分隔程序中的语句块, 增加程序的可读性. 1.4 C 程序的实现 1.4.1 实现步骤 C 程序在计算机上的实现与其它高级语言程序的实现一样, 一般要经过编辑,编译,连接,运行四 个步骤,如图 1-1 所示. (*Turbo C*) 编辑 源程序 编译 头文件 目标文件 连接 库文件 执行文件 运行 图 1-1 1.4.2 程序的执行 C 程序的执行总是从主函数 main( )开始, 不管主函数在程序中什么位置.其它函数通过被调用执 行.函数中的语句依先后顺序执行, 除非改变了程序的执行流程. 1.4.3 TURBO C 上机操作 1.启动 Turbo C 只需执行 TC.EXE 文件,即可启动 Turbo C,进入 Turbo C 的操作界面. TC 是 DOS 程序,现在一般运行在 Windows 下的 DOS 环境. 如需使用中文,还需先将计算机置于中文操作系统管理下. 用 TC 加源程序文件名可快速启动 Turbo C,立即进入编辑操作. 操作界面 2. TURBO C 操作界面 图 1-2 1) 主操作界面 Turbo C 的主操作界面 Turbo C 主操作界面由主菜单区,编辑窗口区,信息窗口区及热键区四部分组成. Turbo C 的操作采用菜单驱动,主菜单包括 File(文件操作),Edit(编辑操作),Run(运行操作), Complie(编译操作),Project(工程文件),Options(编译选择)及 Debug(跟踪排错)各项. 热键区提供常用操作的快速功能键方式,如 F1(帮助),F2(保存文件),F3(装入文件),F5(缩放窗 口),F6(切换窗口),Alt+F5(用户屏幕),Alt+X(退出 Turbo C)等. 2) 主窗口 当前操作窗口为主窗口(工作窗口), 主窗口为双线框表示, 按 F6 可切换主窗口, 按 F5 可缩放 主窗口. 3) 菜单选择 方式一: 按 F10 进入主菜单区, 通过菜单项的大写字母选择相应菜单项, 或通过光标控制键(, , , )移动高亮度光棒至相应菜单项, 按回车选择相应菜单项. 方式二: 用热键 ALT 加 相应菜单项的大写字母, 选择相应菜单项. 对子菜单项的选择, 操作方法类似. 3. 编辑 编辑在编辑窗口中进行, 有多种方式进入编辑环境: 方式一: 选择 Edit 项. 方式二: 选择 File 项的子项 New, 用于编辑新程序. 方式三: 选择 File 项的子项 Load, 装入要修改的程序, 用于修改程序. 方式四: 启动时采用快速启动方式. TURBO C 的编辑操作是 Wordstar,WPS 等字处理软件编辑操作的子集, 它与 Wordstar,WPS 的 编辑操作完全类似. 4. 编译 TURBO C 将编译,连接一道完成.按热键 F9 或选择 Compile 项进入编译.编译时发生错误, 返 回编辑步骤,修改程序后, 再编译程序. 5. 运行 按热键 CTRL+F9 或选择 Run 项下的子项 Run, 运行计算机中的程序. ALT+F5 键或选择 Run 项 按 下的子项 User Screen 进入用户屏幕, 查看程序运行结果. 运行时发生错误, 返回编辑步骤, 修改程序后, 再编译, 运行程序. 对于没编译的程序, 选择运行会先自动进行编译操作, 再运行程序. 6. 退出 上机过程完成后, 按热键 ALT+X 或选择 File 项的子项 Quit 退出 TURBO C, 返回操作系统状态. 退出 TURBO C 后还可用操作系统命令来显示源程序和运行程序. 习 题 一 1. 简述 C 语言的主要特点. 2. 简述标识符的命名方法,并与关键字进行比较. 3. 简述 C 语言程序的结构. 4. 简述 C 语言程序的实现步骤. 5. C 语言程序的书写有何特点? 6. 注释在程序中有什么作用? 7. 下列标识符中,哪些是不正确的标识符?为什么? C do SUM ¥123 3S (xyz) Co.Ltd printf OK! max com PI language for_ c prg*1 8. 抄写例 1-3 中的程序,注意 C 语言程序的结构与书写格式. 9. 上机运行例 1-1,例 1-2,例 1-3 的程序,了解上机方法与步骤,熟悉实习环境. 10. 模仿例 1-1 编写程序,输出自己的姓名,性别及年龄. 11. 模仿例 1-2 编写程序,求两个整数的积. 12. 模仿例 1-3 编写程序,求两个数的最小值. 13. 编写一个最小的 C 语言程序,并请上机运行. 14. 浏览 C 语言程序设计的相关网站. 第 2章 基本数据类型 型 2.1 整 2.1.1 基本整型 1. 类型名称 int 取值范围 2. 取值范围 -32768+32767(-215215-1) 数据表示方法 3. 数据表示方法 整型数据的表示方法与数学中的类似,不能有分隔符. C 语言允许使用八进制整数与十六进制整数,八进制整数加前导符 0(数字),十六进制整数加前导 符 0x(数字 0 和字母 x). 4.运算操作 (1) 算术运算包括:+(加法), (减法),*(乘法),/(除法),%(求余). 运算规则除除法外,与数学中的相同. 整数的除法运算是整除,结果得到商,如 5/3 结果为 1.对于负数,多数机器采用向零取整法,如 5/3 结果为1. 求余运算又称取模运算,结果得到余数,即 a%b 等于 a(a/b)*b,如 5%3 结果为 2,5%3 结果为 2. 求余运算在许多场合都非常有用,如判断整数 a 是不是 b 的倍数,可看 a%b 是否等于零;a%10 可得到 a 的个位数字,(a/10)%10 可得到 a 的十位数字,如此可分离一个整数的每一位数字. 一般只有除数大于 0 时,求余运算才有意义.当 a 小于 0 时,a%b 等于 (a)%b). (2) 关系运算包括: (小于), (大于) =(大 , , , 于等于)等六种, 运算规则与数学中相同, 运算结果为逻辑类型数据.关系运算成立结果为 1, 不成立结 果为 0. 存储 5. 存储 C 标准没有具体规定各类数据存储的字节数, 各种机器处理有所不同, 一般以一个机器字(Word) 存放 1 个 int 数据, PC 机上 int 数据存储用两个字节. 机器中用最高位表示数的符号, 正数符号位用 0 表示, 负数符号位用 1 表示. 负数在机器中存放的 是其补码. 6. 应用 例 2-1 求两个整数的积. /*程序 2 - 1, 求两个整数之积*/ #include stdio.h main( ) int a, b; int m; printf(请输入两个整数 a, b: ); scanf(%d, %d, &a, &b); m=a*b; printf(积=%dn, m); 输入数据: 2000, 3 运行结果: 积=6000 2.1.2 拓展整型 类型修饰符 1. 类型修饰符 short: 缩短数值所占字节数. long: 扩大数值所占字节数. signed: 有符号位, 缺省方式. unsigned: 无符号位. 短整型 2. 短整型 短整型类型名称为 short int 或 short, 在 TURBO C 中, 短整型与基本整型相同. 长整型 3. 长整型 长整型类型名称为 long int 或 long, 取值范围为-231231-1(-2 147 483 6482 147 483 647), 长整型数据可加后缀 L 表示, 在 TURBO C 中, 存储占 4 个字节, 运算与基本整型相同. 4.无符号整型 无符号数相对于有符号数的主要区别是数的最高位不做符号处理,而是常规的数字位,表示的数 的绝对范围是有符号数的 2 倍. 相应地,无符号整型有无符号基本整型,无符号短整型和无符号长整型三种. 无符号基本整型,类型名称为 unsigned int 或 unsigned,取值范围为 02161,即 065 535,存 储占 2 个字节. 无符号短整型,类型名称为 unsigned short int 或 unsigned short ,取值,运算,存储与无符号基本 整型相同. 无符号长整型,类型名称为 unsigned long int 或 unsigned long,取值范围为 02321,即 04 294 967 295,存储占 4 个字节. 无符号整型常用于处理大整数及地址数据. 八进制数与十六进制数一般只用于 unsigned 类型数据. 例 2-2 整数 9 的机器表示. 作为 int:0000000000001001. 作为 short int:0000000000001001. 作为 long int:00000000000000000000000000001001. 以上第一位为符号位,表示正整数. 以下第一位为正常的数据位,是非符号位. 作为 unsigned int:0000000000001001. 作为 unsigned short int:0000000000001001. 作为 unsigned long int:00000000000000000000000000001001. 2.2 浮点型 2.2.1 单精度型 类型名称 1. 类型名称 float 取值范围 2. 取值范围 绝对值范围为 10-381038, 7 位有效数字. 数据表示方法 3. 数据表示方法 实数有一般形式和指数形式两种表示方法. 一般形式又称小数表示法, 是一种常规形式, 由整数部分, 小数点,小数部分三部分组成.C 语 言中的实数可以没有小数部分或没有整数部分, 如 20., .375. 指数形式由尾数,指数符号 e 或 E,指数三部分组成, 尾数是一般形式的实数.指数形式适于表示 较大或较小的实数.如 2.34e10,2.34e-10, 相应于数学中 2.341010,2.3410-10 . 运算操作 4. 运算操作 实型数据的运算操作有算术运算和关系运算两大类, 运算符同整型, 运算规则与数学中实数的运 算规则相同, 但运算结果可能是一个近似值.实数没有求余运算. 存储 5. 存储 4 个字节 6. 应用 例 2 3 求两个实数的积. /*程序 2 - 3, 求两个实数之积*/ #include stdio.h main( ) float a, b; float m; printf(请输入两个整数 a, b: ); scanf(%f, %f, &a, &b); m=a*b; printf(积=%6.3fn, m); 输入数据: 1.1, 2.21 运行结果: 积= 2.431 2.2.2 双精度型 双精度型的类型名称为 double 或 long float,较单精度型提高了计算精度,取值的绝对值范围为 1030810308,有效数字为 16 位. 双精度型数的表示方法与运算操作同单精度型数,要占用 8 个字节存储. 计算机中太大的数不能表示,太小的数也不能表示,超出数的表示范围称为溢出,相应有上溢与 下溢.对于大的数的处理必须通过间接的方法进行.有不少的实数在机器中只能近似表示. 2.3 字符型 2.3.1 字符型数据 1.类型名称 字符的类型名称:char. 2.取值范围 字符型数据的取值范围:ASCII 码字符集中的任何字符. 3.数据表示方法 用单引号作界定符,将字符引起表示字符数据,如 a,+,%,:,1,2. 说明: (1) 单引号字符本身及双引号,反斜杠字符本身由于有特定的含义,不能如此表示,因而需采用其 它表示方法. (2) 字符数据本身除了可以直接出现外,还可以通过反斜杠后跟 ASCII 码来描述.ASCII 码可采用 三位八进制数或两位十六进制数表示,相应描述形式是ddd 与xhh(位数不够,加 0 补位),这种表示方 法称为转义表示或转码表示.如此,字符 A 可表示为A,101,x41. 尤其是一些特殊的字符只能这样表示,如图形字符 可表示成 376,单引号,双引号,反斜杠可 分别表示成 047,042,134. (3) 对一些常用的特殊字符,C 语言还提供特定的字符来转义表示. n: 回车换行 : 单引号字符 a: 响铃报警 f: 走纸换行 t: 横向跳格 0 ,空操作字符(NULL) (4) 数字字符与数字是不同的数据,如9与 9 不同. : 反斜杠字符 : 双引号字符 b: 退格 r : 回车 u: 竖向跳格 运算操作 4. 运算操作 C 语言的字符数据在存储时实际上是存储其 ASCII 码,存储形式与整数的存储形式相同.基于此, C 语言规定字符数据与整型数据在 ASCII 码取值范围内通用,因而 C 语言中字符数据可进行整型数据 的相关运算及操作. a+b, 等于 97+98; a+2, 等于 97+2; ab等于 9798. 5.存储 字符的存储占用 1 个字节. 6.应用 例 2-4 输出 ASCII 码表. ASCII 码用整型数据描述,字符当然用字符类型描述. 程序如下: /*程序 2-4,输出 ASCII 码表*/ #include stdio.h main( ) int i; char ch; printf(ASCII 码表n); for(i=0;i=255;i+) ch=i; printf(字符%c,ASCII 码%dn,ch,i); 运行结果略. 2.3.2 字符串数据 多个字符构成的序列称为字符串,简称字串,是非数值问题处理的基础. 1.字串表示 用双引号作界定符, 将字符序列引起表示字串数据, 如chinaone, computer, $123.45, nabc, %d%f. 2.字串存储 字串数据的存储除存储构成字符串的字符序列本身外, 还必须附加存储字符串的结束标志空操作 字符 0. 存储一个字串的字节数等于字符个数加 1,即字串长度再加 1. 注意字串a与字符a的区别:表示方式不同,存储也不同. 2.4 逻辑类型 2.4.1 逻辑类型 C 语言没有专门提供逻辑类型,而是借用整型,字符型,实型来描述逻辑数据. C 语言规定:0 作为逻辑数据代表假,非 0 的数作为逻辑数据代表真. C 语言同时规定:逻辑数据真为 1,逻辑数据假为 0. 在一个式子里面要注意区分作为普通数据的数与作为逻辑数据的数.例如:23 为假,表达式的值为 0. 2.4.2 逻辑运算 C 语言中,逻辑类型数据是数,可以进行数的所有运算,如算术运算,关系运算.但逻辑类型数 据更主要的是进行逻辑运算.基本的逻辑运算包括逻辑非运算!,逻辑与运算&和逻辑或运算 三种. 假定有逻辑数据 p,q,逻辑运算的运算规则为: !p,得到与 p 相反的逻辑数据.p 为真,!p 为假;p 为假,!p 为真. p&q,只有 p,q 同时为真时,运算结果为真;只要 p,q 有一个为假,运算结果为假. pq,只要 p,q 中有一个为真,运行结果为真;只有 p,q 同时为假,运算结果为假. 例如: ! (23)等于 1. (23)&(32)等于 0. (23)(32)等于 1. (6%2=0)&(6%3=0)等于 1. 2.5 标准函数 标准函数完成一些比较复杂的运算和比较常用的操作.对标准函数应了解三个方面:函数的名称, 函数参数及类型(相当于数学函数中的自变量),函数值及类型.另外,还应了解函数包含在哪个库文件 中以及函数的调用方法. 函数调用通过函数名进行,以实际数据(实参)代替函数中的参数(形参). 函数调用格式:函数名(实参). 数学函数包含在头文件 math.h 中,调用前需用预处理指令#include math.h指明. 常用的数学函数如下(参数 x 为 double 或 float,int 型数,函数值为 double 型): (1) acos(x),求 x 的反余弦,x 必须在11 的范围内. (2) asin(x),求 x 的反正弦,x 必须在11 的范围内. (3) atan(x),求 x 的反正切. (4) cos(x),求 x 的余弦,x 的单位必须为弧度. (5) exp(x),求 e x 的值. (6) fabs(x),求 x 的绝对值. (7) (8) (9) floor(x),求不大于 x 的最大整数. log(x),求 lnx. log10(x),求 lgx. (10) pow(x,y),求 x y. (11) sin(x),求 x 的正弦,x 的单位必须为弧度. (12) sqrt(x),求 x 的平方根,x 必须大于等于 0. 对于其它数学中常用的函数,应尽量利用已有的标准函数来处理. 2.6 量的定义方法 2.6.1 常量的定义 常量是在程序运算过程中不变的量. (1) 常量在程序中经常直接出现, 如 123,3.14159,a, computer, 此时只要求它们符合 相应类型数据的表示方法. 相应于各种数据类型, 有整型常量, 浮点型常量, 字符型常量及字符串常量. (2) 常量定义指的是定义符号常量, 它用一个标识符来代表一个常量,通过宏定义预处理指令来实 现. 格式: #define 标识符 常量 由用户命名的标识符是符号常量名.符号常量名一般大写.一旦定义,在程序中凡是出现常量的 地方均可用符号常量名来代替. 对使用了符号常量的程序在编译前会以实际常量替代. 例 2 5 求圆的面积. /*程序 2 - 5, #define R main( ) 求圆的面积*/ 2 #define PI 3.14 #include stdio.h float s; s=PI*R*R; printf(面积=%6.3f, s); 运行结果: 面积=12.560 2.6.2 变量定义 变量定义方法 1. 变量定义方法 格式: 类型名 变量表; 变量表是用逗号分开的变量名. 例如: int i, j; /*定义 i, j 为整型变量*/ float x, y; /*定义 x, y 为实型变量*/ char ch; /*定义 ch 为字符型变量*/ 2.变量的初始化 定义了变量,变量并没有值.可以在定义变量的同时给出变量初值,对其进行初始化. 例如: int i=9,j=38;/*定义整型变量 i,初值为 9;整型变量 j,初值为 38*/ float r=1.5;/*定义实型变量 r,初值为 1.5*/ char answer= y;/*定义字符型变量 answer,初值为字符 y*/ 3.数据分析方法 进行程序设计,一方面是对数据进行描述,另一方面是对操作进行描述.对于一个问题,到底需 要定义哪些量,定义什么样类型的量,必须经过数据分析. 数据分析根据求解的问题选择适当的类型来描述数据,明确求解问题用到的量的名字及类型. 对于任何问题,我们都可将数据分成三大类:输入数据,中间数据和输出数据.输入数据反应程 序运行的数据源;中间数据是程序运行的中间结果;输出数据是程序运行的结果,反应编程的目的. 相应地,程序中用输入量来描述输入数据,用中间量来描述中间数据,用输出量或称结果变量来描述 输出数据. 对于一个问题, 在开始设计程序时输入量, 输出量一般是明确的, 中间量往往不能一下子全部确 定, 可在程序的编制过程中根据需要动态追加. 数据分析一般采用如下格式: 数据分析: 输入量: 中间量: 输出量: 例 2-6 求三角形的面积与周长问题的数据分析. 输入数据是三角形三边,中间数据是半周长,输出数据是面积与周长. 本问题的数据分析如下: 数据分析: 输入量:三边 s1,s2,s3,float 中间量:半周长 hl,float 输出量:面积 s,周长 l,float 相应的变量定义如下: float s1,s2,s3;/*三角形三边*/ float hl;/*半周长*/ float l,s;/*周长,面积*/ 一般将作用相同的变量放在一起定义,以增加程序的可读性. 习 题 二 1. 从类型名称,取值,主要运算三个方面综述基本整型. 2. 从类型名称,取值,主要运算三个方面综述单精度实型. 3. 从类型名称,取值,主要运算三个方面综述字符型. 4. 字符数据与字符串数据有什么区别? 5. C 语言中逻辑类型数据如何描述? 6. 下列变量定义中,哪些地方不正确? (1) a,b,c:int; (2) float x;y;z; (3) char c1,c2; int c1; (4) int i,y,long k; (5) n1,n2,n3,long; (6) int char,zhang,li; (7) int i=j=k=1; (8) boolean b1,b2; 7. 取一个适当的名字描述下列数据,并考虑用哪种数据类型较好. (1) 一个人去年的年龄. (2) 一个人的体重. (3) 考试的分数. (4) 今天的温度. (5) 地球到月亮的距离. (6) 一天的开支. 8. 给出下列问题的数据分析. (1) 求两个整数的和,积与平均值. (2) 求两个实数的和,积与平均值. (3) 求长方形的面积和周长. (4) 求正方形的面积和周长. (5) 解方程 ax+b=0. (6) 求一元二次方程 ax2+bx+c=0 的两个实根. 9. 给出上题中相应的变量定义. 10. 编写程序,求两个整数的和,积与平均值. 11. 编写程序,求两个实数的和,积与平均值. 12. 编写程序,求正方形的面积和周长. 13. 编写程序,求长方形的面积和周长. 14. 编写程序,解方程 ax+b=0. 第 3章 主要内容: 3.1 3.5 表达式基础 3.2 算术表达式 3.3 其它表达式 表 达 式 赋值表达式 3.4 逻辑表达式 位运算表达式 3.6 3.1 表达式基础 3.1.1 表达式的组成 1.运算符 运算符又称操作符,是一个符号,它指示在一个或多个操作数上完成某种运算操作或动作. C 语言中,将除了输入,输出及程序流程控制操作以外的所有基本操作都作为运算处理,如赋值 运算 =,逗号运算,括号运算( ). C 语言的运算符按完成的运算操作可分为算术运算符,关系运算符,逻辑运算符,赋值运算符 与其它运算符等,按参与运算符的操作数个数可分为单目运算符,双目运算符与三目运算符. (1) 算术运算符:+,*,/,%,+, (2) 关系运算符:,=. (3) 逻辑运算符:!,&,| |. (4) 位运算符:,|,&. (5) 赋值运算符:=,+=,=,*=,/=,%=. (6) 条件运算符:?: . (7) 逗号运算符:. , (8) 指针运算符:*,&. (9) 求字节数运算符:sizeof. (10) 强制类型转换运算符:(类型). (11) 其它运算符; ,-,( ), 等. 操作数 2. 操作数 操作数是运算符的操作对象, 可以是常量,变量,函数与表达式. 常量,变量,函数本身就是简单表达式, 从一般意义上讲, C 语言中所有操作数都是表达式.复 杂表达式由运算符连接简单表达式形成. 3.1.2 表达式的书写 C 语言的表达式虽然来源于数学表达式, 是数学表达式在计算机中的表示, 但在书写时应该注意 遵循 C 语言表达式书写的原则: (1) C 语言的表达式只能采用线性的形式书写. 例如: 1 + i + j 3 应写成 1/3+i+j*j*j. 3 a+b e + f 应写成(a+b)/(c+d)*e+f. c+d 3.1.3 表达式的分类 表达式的分类 C 语言表达式种类很多, 有多种分类方法. 我们一般依据运算的特征将表达式分为: 算术表达式, 如 a+b*2.0-3.0/5.0. 关系表达式, 如 x=y, 关系表达式可以认为是逻辑表达式的特殊情况. 逻辑表达式, 如(x=2)&(xb)?a: b. 逗号表达式, 如 a=2, b=a*a, c=sqrt(b) . 1.运算的优先级 运算的优先级是指运算执行的先后顺序.C 语言将运算的优先级划分为 15 级,第 1 级优先级最 高,第 15 级优先级最低. 初等运算( ), , 的优先级最高; 单目运算! ,+,(类型),*,&,sizeof 的优先级次高; 算术运算+,*,/,%再次之; 然后是关系运算,=; 再然后是逻辑运算&,| |,条件运算式?: ,赋值运算=,+=,=,*=,/=,%=; 逗号运算优先 级最低; 位运算优先级比较分散. 可将优先级顺序简单记忆为算术,关系和逻辑,移位,位逻辑在中间.请参阅附录 B. 表达式求值时按运算的优先级别从高到低顺序进行,优先级相同的运算顺序由运算的结合性规 定. 通过圆括号运算可以改变运算的优先顺序,先圆括号内,后圆括号外. 运算符的结合性 2. 运算符的结合性 运算符的结合性是指, 优先级相同的运算从左到右进行(左结合性)还是从右至左进行(右结合 性), 左结合性是人们习惯的计算顺序. C 语言中, 只有单目运算(! , +, -, -, *, &) , ,条件运算(?: ) ,赋值运算(=, +=, -=, *=, /=, %=)的结合性是右结合, 其余运算为左结合. 3.类型转换 一般地,相应的运算只有相应类型的数据才能进行,不同类型数据进行运算时,要进行类型转换. 类型转换有自动转换与强制转换两种方式. 1) 自动转换 自动转换(又称隐含转换)由系统自动完成,转换的规则如图 3-1 所示. 图 3-1 中, 横向箭头方向表示必定要进行的转换, short 型, 即 char 型数据必定先转换成 int 型, float 型数据必定先转换为 double 型,再进行运算.纵向箭头方向表示类型自动转换的方向. 这种转换是一种保值映射,在转换中数据的精度不受损失. 高 double float long unsigned 低 int char,short 图 3-1 类型自动转换规则 2) 强制转换 强制类型转换通过类型转换运算完成. 格式: (类型名) (表达式) 强制转换将表达式的类型强制转换成类型名指定的类型.例如 x,y 为 float,则(int) (x+y)将实型 表达式 x+y 强制转换成整型. 值得注意的是,强制类型转换在将高类型转换为低类型时,数据精度会有损失,是一种不安全的 转换.同时强制类型转换是一次性的,暂时性的,并不能永久改变所转换表达式的类型.例如 a 为 int, 则(double) a 为双精度型,a 依然为整型. 例 3 1 表达式计算. (1) float x=2.5, y=4.7; int a=7; 计算 x + a%3*(int) (x+y)%2/4 a%3 等于 1. x+y 等于 7.2. (int) (x+y)等于 7 . a%3*(int) (x+y)等于 7. a%3*(int) (x+y)%2 等于 1. a%3*(int) (x+y)%2/4 等于 0. x+a%3*(int) (x+y)%2/4 等于 2.5+0, 结果为 2.5. (2) int a=2, b=3; float x=3.5, y=2.5; 计算(float) (a+b)/2 +(int)x%(int)y a+b 等于 5. (float) (a+b)等于 5.0, 强制转换成 float 型. (float) (a+b)/2 等于 5.0/2.0, 结果为 2.5. (int)x 等于 3, 强制转换成 int 型. (int)y 等于 2, 强制转换成 int 型. (int)x%(int)y 等于 1. (float) (a+b)/2+(int)x%(int)y 等于 2.5+1.0, 结果为 3.5(双精度型) . (3) int i=3; float f=1.0; double d=2.3; 计算 10 +a+i*f-d a转换成 97, 10+a等于 107. i, f 转换成双精度型, i*f 等于 3.0. 107 转换成双精度型, 10+a+i*f 等于 110.0. 10+a+i*f-d 等于 107.7. 3.2 算术表达式 1.自增运算 自增运算符:+. 自增运算是单目运算,操作数只能是整型变量,有前置,后置两种方式: +i,在使用 i 之前,先使 i 的值增加 1,俗称先增后用. i+,先使用 i 的值,然后使 i 的值增加 1,俗称先用后增. 例如: i=1999; j=+ i;/*先将 i 的值增 1,变为 2000 后赋给 j,j 的值也为 2000*/ j=i+;/*先将 i 的值赋给 j,j 的值为 1999.然后将 i 的值增 1,变为 2000*/自增运算的优先 级处于第 2 级,具右结合性. 自减运算 2. 自减运算 自减运算符: - 自减运算与自增运算一样也是单目运算, 操作数也只能是整型变量.同样有前置,后置两种方式: -i, 在使用 i 之前 , 先使 i 的值减 1, 俗称先减后用. i-, 先使用 i 的值, 然后使 i 的值减 1, 俗称先用后减. 如: i=2000; j=-i; /*先减, 将 i 的值减 1, 变为 1999. 后使用, j 的值也为 1999*/ j=i-; /*先使用, j 的值为 2000. 后减, 将 i 的值减 1, i 的值变为 1999*/自减运算的优先级, 结合 性同自增运算. 请特别注意: (1) 自增,自减运算只能用于变量,不能用于常量或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论