C语言课件 全集_第1页
C语言课件 全集_第2页
C语言课件 全集_第3页
C语言课件 全集_第4页
C语言课件 全集_第5页
已阅读5页,还剩255页未读 继续免费阅读

下载本文档

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

文档简介

1、c语言程序设计语言程序设计 教程教程 目目 录录 第1章 语言概述 第2章 数据类型、运算符与表达式 第3章 顺序结构程序设计 第4章 选择结构程序设计 第5章 循环结构程序设计 第6章 数 组 第7章 函 数 第8章 编译预处理 第9章 指 针 第10章 结构与链表 第11章 位运算 第12章 文 件 第第1章章 语言概述语言概述 本章主要介绍c语言程序的结构和书写规则, 以及turbo c v2.0的基本操作。 1.1 c语言的发展简史和特点语言的发展简史和特点 1.2 语言程序的结构与书写规则语言程序的结构与书写规则 1.3 c语言的语句和关键字语言的语句和关键字 1.4 turbo c

2、 v2.0的基本操作的基本操作 return 1.1 c语言的发展简史和特点语言的发展简史和特点 1语言的诞生与发展语言的诞生与发展 (1)在c语言诞生以前,系统软件主要是用汇编语言 编写的。由于汇编语言程序依赖于计算机硬件,其可读 性和可移植性都很差;但一般的高级语言又难以实现对 计算机硬件的直接操作(这正是汇编语言的优势),于 是人们盼望有一种兼有汇编语言和高级语言特性的新语 言。 (2)语言是贝尔实验室于70年代初研制出来的, 后来又被多次改进,并出现了多种版本。80年代初,美 国国家标准化协会(ansi),根据语言问世以来各种 版本对语言的发展和扩充,制定了ansi c标准(1989

3、年再次做了修订)。 本书以本书以ansi c新标准来介绍。新标准来介绍。 (3)目前,在微机上广泛使用的语言编译系统有 microsoft c、turbo c 、borland c等。虽然它们的基本部 分都是相同的,但还是有一些差异, 所以请大家注意自己 所使用的编译系统的特点和规定(参阅相应的手册)。 本书选定的上机环境是本书选定的上机环境是tc v2.0(dos操作系统)操作系统)。 2c语言的特点语言的特点 c语言同时具有汇编语言和高级语言的优势。 (1)语言简洁、紧凑,使用方便、灵活。 (2)运算符极其丰富。 (3)生成的目标代码质量高,程序执行效率高。 (4)可移植性好(较之汇编语言

4、)。 (5)可以直接操纵硬件。 3. 在c语言中,除实现顺序、选择顺序、选择和循环循环三种基本 结构等的9条控制语句外,输入输出操作均由标准库函数 (不是c语言的组成部分)来实现。 所以学习学习c语言,不仅要学习这语言,不仅要学习这9条控制语句和各种条控制语句和各种 运算符,而且要学习并掌握常用标准库函数的使用运算符,而且要学习并掌握常用标准库函数的使用。 return 1.2 语言程序的结构与书写规则语言程序的结构与书写规则 1.2.1 语言程序的总体结构语言程序的总体结构 一个完整的语言程序,是由一个main()函 数(又称主函数)和若干个其它函数结合而成的, 或仅由一个main()函数构

5、成。 案例案例1.1 仅由main()函数构成的语言程序。 /*案例代码文件名:al1_1.c*/ /*功能:仅由main()函数构成的语言程序示例*/ main() printf(“this is a c program.n”); 程序运行结果: this is a c program. 程序演示 案例案例1.2 由main()函数和1个其它函数max()构成的语言程序。 /*案例代码文件名:al1_2.c*/ /*功能:由main()函数和1个其它函数max()构成的语言程序示例*/ int max(int x, int y) return( xy ? x : y ); main() in

6、t num1,num2; printf(“input the first integer number: ”); scanf(“%d”, printf(“input the second integer number: ”); scanf(“%d”, printf(“max=%dn”, max(num1, num2); 程序运行情况: input the first integer number:6 input the second integer number:9 max=9 程序演 示 案例案例1.3 改写案例案例1.2,交换main()函数和max()函数的前后位置。 源程序略。 程序运

7、行情况: input the first integer number:6 input the second integer number:9 max=9 1.函数是语言程序的基本单位。函数是语言程序的基本单位。 main()函数的作用,相当于其它高级语言中的主程序;其它函数 的作用,相当于子程序。 2.c语言程序总是从语言程序总是从main()函数开始执行。函数开始执行。 一个语言程序,总是从main()函数开始执行,而不论其在程序 中的位置。当主函数执行完毕时,亦即程序执行完毕。 习惯上,将主函数main()放在最前头。 1.2.2 函数的一般结构函数的一般结构 任何函数(包括主函数mai

8、n())都是由函数说明和函数体两部 分组成。其一般结构如下: 函数类型 函数名(函数参数表) 函数说明部分 说明语句部分; 执行语句部分; 函数体部分 1. 使用的语法符号约定使用的语法符号约定 .方括号表示可选(即可以指定,也可以缺省) 省略号表示前面的项可以重复 | 多(含2)中选1 2.函数说明函数说明 由函数类型(可缺省)、函数名和函数参数表三部分组成,其 中函数参数表的格式为: 数据类型 形参, 数据类型 形参2 例如,案例1.2中的函数max(),其函数说明各部分如图1-1所示。 函数类型 函数名 函数参数表 int max ( int x , int y ) 图1-1 函数说明部

9、分结构图 注意:注意:在旧标准中,函数可以缺省参数表。 3.函数体函数体 在函数说明部分的下面、大括号(必须配对使用)内的部分。 函数体一般由说明语句和可执行语句两部分构成: (1)说明语句部分 说明语句部分由变量定义、自定义类型定义、自定义函数说明、 外部变量说明等组成。 (2)可执行语句)可执行语句 一般由若干条可执行语句构成。图1-2是案例案例1.2的main()函数体的示意 图。 /*主函数main()*/ main() int num1,num2; 变量定义部分 printf(“input the first integer number: ”); scanf(“%d”, print

10、f(“input the second integer number: ”); 可执行语句部分 函 数体 scanf(“%d”, printf(“max=%dn”, max(num1, num2); 图1-2 函数体结构示意图 4.说明说明 (1)函数体中的变量定义语句,必须在所有可执行语句之前。 下面程序中变量定义语句“int max;”的位置是非法的: main() int x,y;/*变量定义语句:定义2个整型变量x、y*/ x=3; /*可执行的赋值语句:将3赋值给变量x*/ y=6;/*可执行的赋值语句:将6赋值给变量y*/ int max;/*变量定义语句:出现在可执行的 赋值语句

11、“x=3;”和“ y=6;”之后,非法!*/ max=xy?x:y; printf(“max=%dn”,max); 解决办法很简单,请读者自己思考。 (2)如果不需要,也可以缺省变量定义语句。 1.2.3 源程序书写格式源程序书写格式 1.所有语句都必须以分号“;”结束,函数的最后一个语句也不例外。 2.程序行的书写格式自由,既允许1行内写几条语句,也允许1条语句 分写在几行上。 例如,案例案例1.2的主函数main(),也可改写成如下所示的格式: main() int num1,num2; printf(“input the first integer number: ”); scanf(“

12、%d”, printf(“input the second integer number: ”); scanf(“%d”, printf(“max=%dn”, max(num1, num2); 如果某条语句很长,一般需要将其分写在几行上。 3.允许使用注释。 c语言的注释格式为: /* */ 例如,在案例1.1和案例1.2中,以及本节其它部分给 出的源程序中,凡是用“/*”和“*/”括起来的文字,都是注释。 (1) “/*”和“*/” 必须成对使用,且“/”和“*”、以及 “*”和“/”之间不能有空格,否则都出错。 技巧技巧:为避免遗漏必须配对使用的符号,例如注释 符号、函数体的起止标识符(花

13、括号)、圆括号等等, 在输入时,可连续输入这些起止标识符,然后再在其中 进行插入来完成内容的编辑。在起止标识符嵌套时,以 及相距较远时,这样做更有必要。 (2)注释的位置,可以单占1行,也可以跟在语句 的后面。 (3)如果1行写不下,可另起1行继续写。 (4)注释中允许使用汉字。在非中文操作系统下, 看到的是一串乱码,但不影响程序运行。 return 1.3 c语言的语句和关键字语言的语句和关键字 1.3.1 c语言的语句语言的语句 与其它高级语言一样,语言也是利用函数体中的可 执行语句,向计算机系统发出操作命令。按照语句功能 或构成的不同,可将语言的语句分为五类。 1.控制语句控制语句 控制

14、语句完成一定的控制功能。语言只有条控制 语句,又可细分为三种: ( 1)选择结构控制语句 if()else, switch() (2)循环结构控制语句 dowhile(), for(), while(), break, continue (3)其它控制语句 goto, return 2. 函数调用语句函数调用语句 函数调用语句由一次函数调用加一个分号(语句结束标志)构成。 例如,printf(this is a c function statement.); 3. 表达式语句表达式语句 表达式语句由表达式后加一个分号构成。最典型的表达式语句是, 在赋值表达式后加一个分号构成的赋值语句。 例如,

15、“num=5 ”是一个赋值表达式,而“num=5;”却是一个赋值 语句。 4. 空语句空语句 空语句仅由一个分号构成。显然,空语句什么操作也不执行。 例如,下面就是一个空语句: ; 5. 复合语句复合语句 复合语句是由大括号括起来的一组(也可以是1条) 语句构成。例如: main() /*复合语句。注意:右括号后不需要分号。*/ 复合语句的性质复合语句的性质: (1)在语法上和单一语句相同,即单一语句可以出 现的地方,也可以使用复合语句。 (2)复合语句可以嵌套,即复合语句中也可出现复 合语句。 1.3.2 关键字关键字 c语言的关键字共有32个,根据关键字的作用,可分 其为数据类型关键字、控

16、制语句关键字、存储类型关键字 和其它关键字四类。 (1)数据类型关键字(12个):char, double, enum, float, int, long, short, signed, struct, union, unsigned, void (2)控制语句关键字(12个):break, case, continue, default, do, else, for, goto, if, return, switch, while (3)存储类型关键字(4个):auto, extern, register, static (4)其它关键字(4个):const, sizeof, typedef

17、, volatile return 1.4 turbo c v2.0的基本操作的基本操作 1.运行一个语言程序的一般过程 2.tc的启动、退出与命令菜单 3.编辑并保存一个语言源程序 4.编译、连接单个源程序文件 5.运行与查看结果 6.编辑下一个新的源程序 return 1.运行一个语言程序的一般过程运行一个语言程序的一般过程 urbo 是一个集源程序编辑、编译、连接、运行与调试于一 体、 用菜单驱动的集成软件环境。 运行一个语言程序的一般过程: (1)启动tc,进入tc集成环境。 (2)编辑(或修改)源程序。 (3)编译。如果编译成功,则可进行下一步操作;否则,返回 (2)修改源程序,再重

18、新编译,直至编译成功。 (4)连接。如果连接成功,则可进行下一步操作;否则,根 据系统的错误提示,进行相应修改,再重新连接,直至连接成功。 (5)运行。通过观察程序运行结果,验证程序的正确性。如果 出现逻辑错误,则必须返回(2)修改源程序,再重新编译、连接和 运行,直至程序正确。 (6)退出tc集成环境,结束本次程序运行。 return 2.tc的启动、退出与命令菜单的启动、退出与命令菜单 (1)启动)启动turbo c: tc 画面演示画面演示 启动turbo c后,其主菜单条横向排列在屏幕顶端,并被激活, 其中file主项成为当前项。 主菜单的下面,是edit(编辑)窗口和message(

19、消息)窗口。 两个窗口中,顶端横线为双线显示的,表示该窗口是活动窗口。 编辑窗口的顶端为状态行,其中: line 1 col 1:显示光标所在的行号和列号,即光标位置。 insert:表示编辑状态处于“插入”。当处于“改写”状态时, 此处为空白。 d: noname.c:显示当前正在编辑的文件名。显示为 “noname.c”时,表示用户尚未给文件命名。 屏幕底端是7个功能键的说明,以及num lock键的状态(显示 “num”时,表示处于“数字键”状态;空白,表示“控制键”状 态)。 (2)命令菜单的使用)命令菜单的使用 1)按下功能键f10,激活主菜单。如果主菜单已经被激活,则 直接转下一步

20、。 2)用左、右方向键移动光带,定位于需要的主项上,然后再按 回车键,打开其子菜单(纵向排列)。 3)用上、下方向键移动光带,定位于需要的子项上,回车即可。 执行完选定的功能后,系统自动关闭菜单。 注意注意:菜单激活后,又不使用,可再按f10esc键关闭,返回 原来状态。 (3)退出)退出turbo c 退出tc有两种方法: 1)菜单法:file | quit(先选择file主项,再选择并执行quit子 项) 2)快捷键法:alt+“x”(先按下alt键并保持,再按字母键,然 后同时放开) return 3.编辑并保存一个语言源程序编辑并保存一个语言源程序 (1)激活主菜单,选择并执行file

21、 | load项(快捷键键:f3)。 (2)在“load file name”窗口,输入源程序文件名。 文件名的输入有两种方法:直接输入和选择输入。 1)直接输入 按照文件名的组成字符串,逐个字符输入即可。 如果是已经存在的文件,系统就在编辑窗口显示该文件的内容, 可供编辑、修改。如果是新文件,则给出一个空白编辑窗口,可供输 入新的源程序。 如果该文件不在当前目录下,则需要冠以路径名和(或)盘符。 2)选择文件(仅适用于已经存在的源程序文件) 空回车,打开当前目录下、后缀为.的所有文件的文件名窗口。 用上、下、左、右方向键,将光带定位于所需的文件名上。 按回车键。 (3)常用编辑操作)常用编辑

22、操作 在编辑源程序过程中,随时都可以按f2键(或file | save), 将当前编辑的文件存盘,然后继续编辑。这是一个良好的习惯! 关于在线帮助: 在任何窗口(或状态)下,按f1键激活活动窗口(或状态)的 在线帮助: 下一页pagedown,返回上一页pageup 关闭在线帮助、返回原窗口(或状态)esc 返回前一个在线帮助屏alt+f1(无论在线帮助是否被激活) 返回在线帮助索引f1:激活在线帮助后,再按f1,则返回 在线帮助索引,以便查询其它类别在线帮助信息。 查询库函数的在线帮助信息f1:将光标移到需要查询函数 名的首字符上,然后键入f1,即可获得该库函数的在线帮助信息。 注注:为简化

23、描述,用“”代表“ctrl”键。fn就是ctrl+fn,下同。 return 4.编译、连接编译、连接单个源程序文件单个源程序文件 选择并执行compile | make exe file项(快捷键: f9),则tc将自动完成对当前正在编辑的源程序文件的 编译、连接,并生成可执行文件。 如果源程序有语法错误,系统将在屏幕中央的 “compiling ”(编译)窗口底端提示“error: press any key”(错误:按任意键)。 此时,按空格键,屏幕下端的“message”(消息) 窗口被激活, 显示出错(或警告)信息,光带停在第一 条消息上。这时“edit”(编辑)窗口中也有一条光带,

24、 它总是停在编译错误在源代码中的相应位置。 注意注意:当用上、下键移动消息窗口中的光带时,编 辑窗口中的光带也随之移动,始终跟踪源代码中的错误 位置! return 5.运行与查看结果运行与查看结果 (1)运行当前正在编辑的源程序文件 选择并执行run | run项(快捷键:f9),程序运 行结束后, 仍返回到编辑窗口。 当你认为自己的源程序不会有编译、连接错误时, 也可直接运行(即跳过对源程序的编译、连接步骤)。 这时,tc将一次完成从编译、连接到运行的全过程。 (2)查看运行结果 选择并执行run | user screen项(快捷键: alt+f5)。查看完毕后,按任一键返回编辑窗口。

25、如果发现逻辑错误,则可在返回编辑窗口后,进行 修改;然后再重新编译、连接、运行,直至正确为止。 return 6.编辑下一个新的源程序编辑下一个新的源程序 选择并执行file | new项即可。 如果屏幕提示如下确认信息: noname.c not saved. save?(y/n) 如果需要保存当前正在编辑的源程序,则键入“”, 进入下一步操作;否则,键入“”(不保存),跳转到 (2)。 (1)系统提示换名: noname.c 直接输入你给源程序文件起的名字即可。 (2)系统给出一个空白的编辑窗口,可以开始编辑下 一个新的源程序。 return 第第2章章 数据类型、运算符与表达式数据类型、

26、运算符与表达式 2.1 程序设计概述程序设计概述 2.2 c语言的数据类型语言的数据类型 2.3 常量和变量常量和变量 2.4 整型数据整型数据 2.5 实型数据实型数据 2.6 字符型数据字符型数据 2.7 算术运算与算术表达式算术运算与算术表达式 2.8 赋值运算与赋值表达式赋值运算与赋值表达式 2.9 c语言特有的运算和运算符语言特有的运算和运算符 return 2.1 程序设计概述程序设计概述 一个程序应包括对数据的描述和对数据处理的描述。 1对数据的描述,即数据结构。数据结构是计算机学 科的核心课程之一,有许多专门著作论述,本课程就不再 赘述。 在c语言中,系统提供的数据结构,是以数

27、据类型的 形式出现的。 2对数据处理的描述,即计算机算法。算法是为解 决一个问题而采取的方法和步骤,是程序的灵魂。为此, 著名计算机科学家沃思(nikiklaus wirth)提出一个公式: 数据结构数据结构 + 算法算法 = 程序程序 实际上,一个程序除了数据结构和算法外,还必须使 用一种计算机语言,并采用结构化方法来表示。 return 2.2 c语言的数据类型语言的数据类型 c语言提供的数据结构,是以数据类型形式出现的。具体 分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。

28、4.空类型 c语言中的数据,有常量和变量之分,它们分别属于上述 这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 return 2.3 常量和变量常量和变量 2.3.1 常量常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字变量名, 变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值

29、存储在内 存中。在程序中,通过变量名来引用变量的值。 .标识符命名规则标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成, 且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前个字符有 效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前 个字符相同,有的系统认为这两个变量,是一回事而不 加区别。 在tc v2.0中,变量名(标识符)的有效长度为 个字符,缺省值为。 (3)c语言的关键字不能用作变量名。 注意注意:c语言对英文字母的大小敏感,即同一字母的大 小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小

30、写,以增加 可读性。 思考题思考题:在c语言中,变量名total与变量名total、 total、total等是同一个变量吗? 标识符命名的良好习惯标识符命名的良好习惯见名知意见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含 义。通常应选择能表示数据含义的英文单词(或缩写)作变 量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl (年龄)、salary/gz(工资)。 4.变量的定义与初始化 在语言中,要求对所有用到的变量,必须先定义、后使 用;且称在定义变量的同时进行赋初值的操作为变量初始化。 (1)变量定义的一般格式 存储类型 数据

31、类型 变量名, 变量名2; 例如,float radius, length, area; (2)变量初始化的一般格式 存储类型 数据类型 变量名=初值, 变量名2=初值 2; 例如,float radius=2.5, length, area; return 2.4 整型数据整型数据 2.4.1 整型变量整型变量 1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型 (unsigned int)、无符号短整型

32、(unsigned short)和无 符号长整型(unsigned long)三种,只能用来存储无符号 整数。 2.占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。 在16位操作系统中,一般用字节表示一个int型变量,且 long型(字节)int型(字节)short型(字节)。 显然,不同类型的整型变量,其值域不同。占用内存字 节数为n的(有符号)整型变量,其值域为:-2n*8-1(2n*8-1- 1);无符号整型变量的值域为:0(2n*8-1)。 例如,pc机中的一个int型变量,其值域为-22*8-1(22*8- 1-1),即-3276832767;一个unsigne

33、d型变量的值域为: 0(22*8-1),即065535。 2.4.2 整型常量整型常量 .三种表示形式 整型常量即整常数,在语言中可用三种形式表示: (1)十进制。例如10、36。 (2)八进制(以数字开头)。例如012。 (3)十六进制(以数字+小写字母x开头)。例如 0 x36。 .分类 (1)基本整型。在16位机中,用2字节存储,其数据 范围与int型变量一样。 (2)长整型(在数值后面加“l(l)”)。对超出基 本整型值域的整型常量,可使用长整型常量表示,其取值 范围可达-(-)。例如,123l、315等。 .类型匹配规则 类型匹配规则为:一个整型常量,可以赋给能容纳下其 值的整型变量

34、。 例如,其值在-(-)的整型常量,可以赋 给int型变量和long int型变量;其值在-(-) 的整型常量,就只能赋给long int型变量。 注意注意:常量无unsigned型。但一个非负整型常量,只 要它的值不超过相应变量的值域(即取值范围),也可以 赋给unsigned型变量。 return 2.5 实型数据实型数据 2.5.1 实型变量实型变量 语言的实型变量,分为两种: (1)单精度型。类型关键字为float,一般占字节(位)、 提供位有效数字。 (2)双精度型。类型关键字为double,一般占个字节、提供 1516位有效数字。 2.5.2 实型常量实型常量 .表示形式 实型常量

35、即实数,在语言中又称浮点数,其值有两种表达形式: (1)十进制形式。例如3.14、9.8。 (2)指数形式:e(e)。例如3.0+5等。 .关于类型 实型常量不分float型和double型。一个实型常量,可以赋给一个 实型变量(float型或double型)。 return 2.6 字符型数据字符型数据 2.6.1 字符常量字符常量 1.字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,a、等。 2.转义字符 语言还允许使用一种特殊形式的字符常量,就是以 反斜杠“ ”开头的转义字符。 注意注意:如果反斜杠或单引号本身作为字符常量,必 须使用转义字符:、。 案例案例2.1 用

36、转义字符输出可打印字符和不可打印字符。 /*案例代码文件名:al2_1.c*/ /*程序功能:用转义字符输出可打印字符和不可打印 字符*/ main() printf(“x4fx4bx21n”); /* 等价于printf(“ok!n”); */ printf(“x15 xabn”); 程序运行结果如下: ! 程序程序 演示演示 2.6.2 字符变量字符变量 字符变量的类型关键字为char,一般占用1字节内存单 元。 1.变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到 一个字符变量中,实际上是将该字符的ascii码值(无符号 整数)存储到内存单元中。 例如, char ch1,

37、ch2; /*定义两个字符变量:ch1,ch2*/ ch1=a; ch2=b; /*给字符变量赋值*/ 2.特性 字符数据在内存中存储的是字符的ascii码 一个无 符号整数,其形式与整数的存储形式一样(如图2-4所示), 所以语言允许字符型数据与整型数据之间通用。 (1)一个字符型数据,既可以字符形式输出,也可以 整数形式输出。 案例案例2.2 字符变量的字符形式输出和整数形式输出。 /*案例代码文件名:al2_2.c*/ /*程序功能:用字符形式和整数形式输出字符变量*/ main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,

38、ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); 程序运行结果: ch1=a,ch2=b ch1=97,ch2=98 程序程序 演示演示 (2)允许对字符数据进行算术运算,此时就是对它 们的ascii码值进行算术运算。 案例案例2.3 字符数据的算术运算。 /*案例代码文件名:al2_3.c*/ /*程序功能:字符数据的算术运算*/ main() char ch1,ch2; ch1=a; ch2=b; /*字母的大小写转换*/ printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); /*用字符形式输出一个大于256的数值*/ pri

39、ntf(ch1+200=%dn, ch1+200); printf(ch1+200=%cn, ch1+200); printf(ch1+256=%dn, ch1+256); printf(ch1+256=%cn, ch1+256); 程序运行结果: ch1=a,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a 程序演示程序演示 思考题思考题:用字符形式输出一个大于256的数值,会得 到什么结果? 2.6.3 字符串常量字符串常量 1.字符串常量的概念和字符串长度 字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。

40、长度为0的字 符串(即一个字符都没有的字符串)称为空串,表示为 “ ” (一对紧连的双引号)。 例如,“how do you do.”、“good morning.”等, 都是字符串常量,其长度分别为14和13(空格也是一个 字符)。 如果反斜杠和双引号作为字符串中的有效字符,则 必须使用转义字符。 例如:(1)c:msdosv6.22 c:msdosv6.22 (2)i say:goodbye! i say:goodbye!“ 2.字符串的存储字符串的存储 c语言规定:在存储字符串常量时,由系统在字符串 的末尾自动加一个0作为字符串的结束标志。 注意注意:在源程序中书写字符串常量时,不必加结

41、束 字符0,否则画蛇添足。 如果有一个字符串为“china”,则它在内存中的实 际存储如下所示: 最后一个字符0是系统自动加上的,它占用字节 而非字节内存空间。 china0 综上所述,字符常量a与字符串常量a是两回事: (1)定界符不同:字符常量使用单引号,而字符串 常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串 常量的长度,可以是0,也可以是某个整数; (3)存储要求不同:字符常量存储的是字符的ascii 码值,而字符串常量,除了要存储有效的字符外,还要 存储一个结束标志0。 return 2.7 算术运算与算术表达式算术运算与算术表达式 在语言中,除控制语句和输入输出

42、函数外,其它所 有基本操作都作为运算符处理。 1.五种基本算术运算符五种基本算术运算符 +、-(减法/取负)、*、/、%(求余数) (1)关于除法运算/ c语言规定:两个整数相除,其商为整数,小数部分 被舍弃。例如,5 / 2 = 2。 (2)关于求余数运算 要求两侧的操作数均为整型数据,否则出错。 2.表达式和算术表达式表达式和算术表达式 (1)表达式的概念 用运算符和括号将运算对象(常量、变量和函数等) 连接起来的、符合语言语法规则的式子,称为表达式。 单个常量、变量或函数,可以看作是表达式的一种特 例。将单个常量、变量或函数构成的表达式称为简单表达 式,其它表达式称之为复杂表达式。 (2

43、)算术表达式的概念 表达式中的运算符都是算术运算符。例如,3 + 6 * 9、 (x + y) / 2 - 1等,都是算术表达式。 良好的源程序书写习惯良好的源程序书写习惯:在表达式中,在双目运算符 的左右两侧各加一个空格,可增强程序的可读性。 请比较表达式“ (x + y) / 2 1”与“(x+y)/21”,您认 为哪个的可读性更好一些? 3.运算符的优先级与结合性运算符的优先级与结合性 (1)语言规定了运算符的优先级和结合性。 所谓结合性是指,当一个操作数两侧的运算符具有相 同的优先级时,该操作数是先与左边的运算符结合,还是 先与右边的运算符结合。 自左至右的结合方向,称为左结合性。反之

44、,称为右 结合性。 结合性是语言的独有概念。除单目单目运算符、赋值赋值 运算符和条件条件运算符是右结合性外,其它运算符都是左 结合性。 (2)表达式求值 1)按运算符的优先级高低次序执行。例如,先乘除 后加减。 2)如果在一个运算对象(或称操作数)两侧的运算 符的优先级相同,则按语言规定的结合方向(结合性) 进行。 例如,算术运算符的结合方向是“自左至右”,即: 在执行“a b + c”时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。 4.数据类型转换数据类型转换 (1) 在语言中,整型、实型和字符型数据间可以 混合运算(因为字符数据与整型数据可以通用)。 如果一个运算符两侧

45、的操作数的数据类型不同,则系 统按“先转换、后运算”的原则,首先将数据自动转换 成同一类型,然后在同一类型数据间进行运算。转换规 则如图2-5所示。 1)横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。 2)纵向向上的箭头,表示不同类型的转换方向。 例如,int型与double型数据进行混合运算,则先将 int型数据转换成double型,然后在两个同类型的数据间 进行运算,结果为double型。 注意注意:箭头方向只表示数据类型由低向高转换,不要 理解为int型先转换成unsigned型,再转换成long型,最 后转换成do

46、uble型。 (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)*/ 注意注意:强制转换类型得到的是一个所需类型的中间

47、量,原表达 式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一 个double型的中间量,其数据类型并未转换成double型。 return 2.8 赋值运算与赋值表达式 1.赋值运算赋值运算 赋值符号“=”就是赋值运算符,它的作用是将一个 表达式的值赋给一个变量。 赋值运算符的一般形式为: 变量变量 = 赋值表达式赋值表达式 例如,x = 5 y = (float)5 / 2 如果表达式值的类型,与被赋值变量的类型不一致, 但都是数值型或字符型时,系统自动地将表达式的值转 换成被赋值变量的数据类型,然后再赋值给变量。 思考题思考题:假设变量num的数据类型为float,其

48、值为2.5, 则执行“num = (int)num”后,num的值等于多少? 2.复合赋值运算复合赋值运算 复合赋值运算符是由赋值运算符之前再加一个双目运 算符构成的。 复合赋值运算的一般格式为: 变量 双目运算符双目运算符 = 表达式 复合赋值运算符 它等价于等价于:变量 = 变量 双目运算符 (表达式)。 当表达式为简单表达式时,表达式外的一对圆括号才 可缺省,否则可能出错。 例如,x += 3 /* 等价于x=x+3 */ y *= x + 6/* 等价于y=y*(x+6),而不是y=y*x+6 */ c语言规定的10种复合赋值运算符如下: +=,-=,*=,/=,%=; /*复合算术运

49、算符(5个)*/ printf(x=%dn,x); /*输出x的初值*/ y = +x; /*前置运算*/ printf(y=+x: x=%d,y=%dn,x,y); y = x-; /*后置运算*/ printf(y=x-: x=%d,y=%dn,x,y); 程序运行结果: x=6 y=+x: x=7,y=7 y=x-: x=6,y=7 程序演示程序演示 思考题思考题:如果将案例“y=+x;”语句中的前置运算改为 后置(y=x+;),“y=x-;”语句中的后置运算改为前置 (y=-x;),程序运行结果会如何? 3.说明说明 (1)自增、自减运算,常用于循环语句中,使循环 控制变量加(或减),

50、以及指针变量中,使指针指向下 (或上)一个地址。 (2)自增、自减运算符,不能用于常量和表达式。 例如,5+、-(a+b)等都是非法的。 (3)在表达式中,连续使同一变量进行自增或自减 运算时,很容易出错,所以最好避免这种用法。 2.8.2 逗号运算(,)及其表达式逗号运算(,)及其表达式 语言提供一种用逗号运算符“,”连接起来的式子, 称为逗号表达式。逗号运算符又称顺序求值运算符。 1.一般形式 表达式, 表达式, , 表达式n 2.求解过程 自左至右,依次计算各表达式的值,“表达式n” 的 值即为整个逗号表达式的值。 例如,逗号表达式“a = 3 * 5, a * 4”的值=60:先求 解

51、a = 3 * 5,得a=15;再求a * 4 = 60,所以逗号表达式 的值=60。 又例如,逗号表达式“(a = 3 * 5, a * 4), a + 5”的值 =20:先求解a = 3 * 5,得a=15;再求a * 4=60;最后求 解a + 5=20,所以逗号表达式的值=20。 注意注意:并不是任何地方出现的逗号,都是逗号运算 符。很多情况下,逗号仅用作分隔符。 return 第第3章章 顺序结构程序设计顺序结构程序设计 为了让计算机处理各种数据,首先就应该把源数据输 入到计算机中;计算机处理结束后,再将目标数据信息 以人能够识别的方式输出。c语言中的输入输出操作,是 由c语言编译系

52、统提供的库函数来实现。 3.1 格式化输出格式化输出printf()函数函数 3.2 格式化输入格式化输入scanf()函数函数 3.3 单个字符输入输出单个字符输入输出getchar()和和putchar()函函 数数 3.4 顺序结构程序设计顺序结构程序设计 良好的源程序书写风格良好的源程序书写风格顺序程序段左对齐顺序程序段左对齐 return 3.1 格式化输出格式化输出printf()函数函数 printf()函数的作用:向计算机系统默认的输出设备(一 般指终端或显示器)输出一个或多个任意类型的数据。 3.1.1 printf()函数的一般格式函数的一般格式 案例案例3.1 已知圆半径

53、radius=1.5,求圆周长和圆面积。 /*案例代码文件名:al3_1.c。*/ main() float radius,length,area,pi=3.1415926; radius=1.5; length=2*pi*radius;/*求圆周长*/ area=pi*radius*radius; /*求圆面积*/ printf(“radius=%fn”,radius);/*输出圆半径*/ printf(“length=%7.2f,area=%7.2fn”,length,area); /*输出圆周长、 面积*/ 程序演示程序演示 程序运行结果如下: radius=1.500000 lengt

54、h= 9.42,area= 7.07 printf()函数的一般格式如下: printf(格式字符串格式字符串 ,输出项表,输出项表); 1格式字符串。“格式字符串”也称“转换控制字 符串”,可以包含三种字符: (1)格式指示符。格式指示符的一般形式如下: %标志标志宽度宽度.精度精度f|n|h|l类型类型 常用的标志字符如表3-1所示,常用的宽度指示符如表 3-2所示,常用的精度指示符如表3-3所示,长度修饰符如 表3-4所示,类型转换字符如表3-5所示。 (2)转义字符 例如,案例案例3.1中printf()函数中的n就是转义字符,输出时产生 一个“换行”操作。 (3)普通字符除格式指示符

55、和转义字符之外的其它字符。格 式字符串中的普通字符,原样输出。 例如,案例案例3.1中“printf(radius=%fn, radius);”语句中的 “radius=”,“printf(length=%7.2f,area=%7.2fn, length,area);”语句 中的“length=”、“area=”等都是普通字符。 2输出项表 输出项表是可选的。如果要输出的数据不止1个,相邻2个之间 用逗号分开。下面的printf()函数都是合法的: (1)printf(i am a student.n); (2)printf(%d,3+2); (3)printf(a=%f b=%5dn, a,

56、 a+3); 必须强调必须强调:“格式字符串”中的格式指示符,必须与“输出项表” 中、输出项的数据类型一致,否则会引起输出错误。 3.1.2 格式指示符格式指示符 输出不同类型的数据,要使用不同的类型转换字符。 1类型转换字符类型转换字符d以带符号的十进制整数形式输出。以带符号的十进制整数形式输出。 案例案例3.2 类型转换字符d的使用。 /*案例代码文件名:al3_2.c。*/ main() int num1=123; long num2=123456; /*用3种不同格式,输出int型数据num1的值*/ printf(num1=%d,num1=%5d,num1=%-5d,num1=%2d

57、n, num1,num1,num1,num1); /*用3种不同格式,输出long型数据num2的值*/ printf(num2=%ld,num2=%8ld,num2=%5ldn,num2,num2,num2); printf(num1=%ldn,num1); 程序演示程序演示 程序运行结果如下: num1=123,num1=123,num1=123,num1= 123 num2=123456,num2=123456,num2=123456 num1=16908411 对于整数,还可用八进制、无符号形式(%o(小写 字母o))和十六进制、无符号形式(%x)输出。对于 unsigned型数据,也

58、可用%u格式符,以十进制、无符号 形式输出。 所谓无符号形式是指,不论正数还是负数,系统一 律当作无符号整数来输出。例如,printf(%d,%o,%xn,- 1,-1,-1); 2类型转换字符类型转换字符f以小数形式、按系统默认的宽度,输出单精以小数形式、按系统默认的宽度,输出单精 度和双精度实数。度和双精度实数。 案例案例3.3 类型转换字符f的使用。 /*案例代码文件名:al3_3.c。*/ main( ) float f=123.456; double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; prin

59、tf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f); printf(d1+d2=%fn,d1+d2); 程序演示程序演示 程序运行结果如下: 123.456001,123.456001,123.46,123.46,123.46 d1+d2=3333333333333.333010 本案例程序的输出结果中,数据123.456001和 3333333333333.333010中的001和010都是无意义的, 因为它们超出了有效数字的范围。 对于实数,也可使用格式符%e,以标准指数形式输 出:尾数中的整数部分大于等于1、小于10,小数点占一 位,尾数中的小数部分占5

60、位;指数部分占4位(如e-03 ),其中e占一位,指数符号占一位,指数占2位,共计 11位。 也可使用格式符%g,让系统根据数值的大小,自动 选择%f或%e格式、且不输出无意义的零。 3类型转换字符类型转换字符c输出一个字符(只占一列宽度)。输出一个字符(只占一列宽度)。 案例案例3.4 类型转换字符c的使用。 /*案例代码文件名:al3_4.c。*/ main() char c=a; int i=65; printf(c=%c,%5c,%dn,c,c,c); printf(i=%d,%c,i,i); 程序运行结果如下: c=a,a,65 i=65,a程序演示程序演示 需要强调需要强调的是:在

温馨提示

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

评论

0/150

提交评论