C语言(非常详细)_第1页
C语言(非常详细)_第2页
C语言(非常详细)_第3页
C语言(非常详细)_第4页
C语言(非常详细)_第5页
已阅读5页,还剩600页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计,大学计算机公共基础课,2,课程介绍,课程性质:大学计算机公共基础课(必修) 课程内容 C语言 程序设计的基本方法和技巧 预备知识 计算机基础 教材 C语言程序设计教程 汪同庆 张 华 杨先娣 主编 机械工业出版社 C语言程序设计实验教程 汪同庆 关焕梅 汤 洁 主编 机械工业出版社,C语言程序设计,3,授课计划,C语言程序设计,4,考试与考核办法,学分:3学分 学时:72(讲课36+实验36) 总评成绩 = 平时成绩#% + 期末考试成绩#% 平时成绩:(实验,单元测验) 期末考试成绩,C语言程序设计,第一讲 C语言概述,C 语言程序设计,6,第一讲 C语言概述,预备知识 计算

2、机组成和工作原理 计算机语言和程序 C语言的简史 为什么学习和使用C语言 C语言程序的开发过程 C语言编程环境 C语言编程实验环境,C语言程序设计,7,计算机,计算机(Computer) 能进行计算和逻辑判断的设备 在一组指令(instructions)程序(programs)的控制下处理数据 硬件(Hardware) 组成计算机的各种物理部件 键盘、鼠标、显示器、内存、硬盘、光驱等等 软件(Software) 计算机中运行的程序和数据,C语言概述,8,计算机的组成,计算机包括六大部件 输入单元(Input unit) 从输入设备(键盘、鼠标)获得数据 输出单元(Output unit) 把数

3、据输出到输出设备(显示器、打印机等) 内存(Memory unit) 临时存储正在处理的数据和运行的程序 可以快速地访问 容量不大,C语言概述,9,计算机的组成,中央处理单元(Central processing unit, CPU) 算术逻辑单元(Arithmetic and logic unit, ALU) 进行算术运算和逻辑判断 控制器(Control unit) 管理和协调计算机的其它部件 辅助存储器(Secondary storage unit) 保存需长期存储的数据和非活动的程序 保存时间长 价格便宜、容量大 例如硬盘、光盘、磁带,C语言概述,10,计算机的工作原理,六大部件紧密协

4、作,C语言概述,11,计算机的工作原理,CPU负责执行程序 从内存中读取一条指令 执行该指令 从内存中读取下一条指令并执行 一个主频为1GHz的CPU可以在一秒钟内进行大约一亿次这样的操作 CPU有自己的工作区:包括若干个寄存器(Registers) CPU只能理解有限的指令(CPU的指令集) 指令能够完成的任务是具体的 例如,把一个数从内存移动到某一个寄存器,C语言概述,12,计算机程序和语言,存储在计算机中的一切内容都是二进制的数字形式 数据:数、字符、图片、声音、动画等等 指令 计算机程序 确切告诉计算机如何完成某项任务的指令序列就是一套程序 计算机语言 用来编写程序,C语言概述,#in

5、clude #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f, ,0110001100000110 0110010111001100 0000110000011011 0110001100000110 0110010111001100 0000110000011011,13,机器语言,数字形式的指令码就是机器语言(Machine language) 用机器语言编写的程序能够被计算机直接理解和执行 但是,编写程序非常费力 例如,编写程序完成两个数相加的任务需要以下几步 把地址为2000的内存单元中的数复制到寄存器1; 把地

6、址为2004的内存单元中的数复制到寄存器2; 把寄存器2中的数与寄存器1中的数相加,结果保留在寄存器1中; 把寄存器1中的数复制到地址为2008的内存单元中。,C语言概述,0110001100000110 0110010111001100 0000110000011011,14,汇编语言,符号化的指令码就是汇编语言(Assembly language) 例如,完成两个数相加的汇编语言程序 汇编语言程序必须被翻译成机器语言程序才能被执行 汇编程序(Assembler)充当“翻译”,C语言概述,ldreg n1, r1 把变量n1的值复制到寄存器1(r1); ldreg n2, r2 把变量n2的

7、值复制到寄存器2(r2); add r1, r2 把r2中的数与r1中的数相加,结果保留在r1中; store r1, sum 把r1中的数复制到变量sum。,15,高级语言,高级语言(High-level language)使用数学符号和类似英语的单词 例如,完成两个数相加的C语言程序 从多方面提高了编程效率 不必考虑CPU的指令集 不必考虑CPU实现特定任务的精确步骤 采用接近人类思考问题的方式去书写程序 高级语言程序必须被编译程序(Compiler)翻译成机器语言程序才能被执行,C语言概述,sum = n1 + n2;,16,C语言的简史,C语言的起源 美国贝尔实验室的Dennis Ri

8、tchie在1972年开发的 用于设计UNIX操作系统 其前身是B语言(Ken Thompson于1970年为第一个UNIX系统开发的语言) C语言的标准 美国国家标准化组织(ANSI)于1983年成立了一个委员会(X3J11),以确定C语言的标准。 该标准(ANSI C)于1989年被正式采用,即C89。 最新的标准是C99标准。 目前,大多数C语言编译器没有完全实现C99的所有修改。,C语言概述,17,为什么学习和使用C语言,C语言的特点 C语言是一种强大而灵活的语言,可以用来编写任意复杂的程序。 C语言简洁、紧凑,使用方便、灵活。 C语言程序效率高、运行速度快。 C语言是可移植的。 C语

9、言很适合结构化程序设计,因而要求用户以功能模块的方式来思考问题。 C语言具有自我扩展能力。,C语言概述,18,为什么学习和使用C语言,C与C+(C加加,see-plus-plus) 贝尔实验室于二十世纪八十年代在C语言的基础上开发的。 C+是C语言的超集,包含了C语言的所有内容,同时增加了面向对象编程方面的内容。 C与Java(爪哇) Sun公司于1995年发布的面向对象编程语言。 Java也是基于C语言的。 C与C#(see-sharp) 微软在2000年6月与.NET平台一同推出。 C#也是从C语言派生的一种面向对象语言。,C语言概述,19,C语言程序的开发过程,一般分成五个步骤 定义程序

10、目标 设计程序 编写代码 编译 运行、测试和调试程序,C语言概述,20,C语言程序的开发过程,定义程序目标 在开始解决问题之前,程序的开发人员必须彻底了解问题的是什么,对即将要创建的程序要做的事情有个清晰的想法。 这需要仔细考虑以下问题 程序需要什么信息 程序需要执行哪些计算和操作 程序应该报告什么信息 例如,计算任意一个圆环的面积 提出问题,明确目标 圆环是什么?如何计算?计算精度?,C语言概述,21,C语言程序的开发过程,设计程序 决定程序如何去解决问题。 需要考虑 如何给程序提供必要的数据 程序中如何表示数据 用什么方法来处理数据 程序如何组织 程序怎样报告结果 完成这个程序需要多长时间

11、 应该用一般的概念考虑设计中的问题,而不是考虑具体的代码。,C语言概述,22,C语言程序的开发过程,编写代码 编写代码来实现前面的设计,即用某一门语言来表示程序设计。 需要开发人员熟练掌握该语言的知识。 可以在草稿纸上勾画自己的想法或书写代码,但最终必须将代码输入计算机。 输入代码所采用的机制则取决于具体的编程环境。 一般来说,需要使用文本编辑器(例如Windows的记事本程序)来创建一种文件,称为源文件 源文件包含程序设计的C语言表示形式(称为源程序或源代码),C语言概述,23,C语言程序的开发过程,编译 把C语言源程序转换成机器语言表示的程序。 这种程序可以直接被计算机理解和执行,所以称之

12、为可执行程序,放在可执行文件中。 编译的具体细节取决于使用的编程环境。 C语言分两步完成这一工作:编译和链接。 编译器将源代码转换为目标代码,并存在目标文件中。 链接器将目标代码与其他代码结合起来生成可执行文件。 这种把编译和链接分开来做的方法便于程序的模块化。 可以分别编译程序的各个模块,然后用链接器把编译过的模块结合起来。 这样,如果需要改变一个模块,则不需要重新编译所有其他模块。,C语言概述,24,C语言程序的开发过程,运行、测试和调试程序 运行包含可执行程序的文件,观察运行的结果。 在不同的系统中运行程序的方式可能不同。 例如,Windows的控制台和资源管理器。 应该对程序进行仔细的

13、检查,看程序是否在做该做的事。 比较好的做法是为验证程序的正确性设计一个测试计划。 越早做越好,因为它有助于理清程序员的思路。 程序中的错误被称为bug,调试(Debug)就是要发现并修正错误。,C语言概述,25,C语言的编程环境,开发程序的具体操作取决于使用的编程环境 因为C语言是可移植的,所以它在许多环境中都是可用的。 例如UNIX、Linux、Windows和MS-DOS。 C语言编程环境包括一系列程序。 编辑器 编译器 链接器 运行和调试环境,C语言概述,26,C语言的编程环境,编辑器 使用一个文本编辑器程序输入源代码,并将代码保存在源文件中。 一般,C程序的源文件名称的扩展名是.c

14、例如welcometoyou.c和Hello.c。 该名称应该遵循特定的操作系统的命名规则。 例如,MS-DOS要求基本名包含的字符数不能大于8,所以welcometoyou.c不是合法的DOS文件名。 Windows允许长文件名,所以welcometoyou.c是合法的Windows文件名。,C语言概述,27,C语言的编程环境,编译器 编译器接收源文件,生成目标文件,扩展名为.obj或.o。 编译器还会检查输入的程序是否是有效的C语言程序。 如果编译器发现错误,就会报告出错,且不能生成可执行程序。 这时就必须修改错误,然后再编译。 显然,为了能迅速找到错误,理解特定编译器的报错信息是一项有用

15、的技能。,C语言概述,28,C语言的编程环境,链接器 目标代码虽然已经是机器代码,但还不能被执行。 缺少下面两个东西 启动代码:相当于程序和操作系统之间的接口。 库函数的代码:库文件中包含许多函数的目标代码。 链接器的作用就是将这三个元素(目标代码、启动代码和库代码)结合起来,并将它们放在一个文件中,即可执行文件,扩展名为.exe或.out。,C语言概述,29,Windows的C语言编程环境,Windows的C语言编程环境 Windows并不包含C编译器,所以需要获得并安装一个C编译器。 许多现代的编译器都是集成开发环境(或叫IDE)的一部分。 包括一个编辑器、编译器、链接器和包括一个符号调试

16、程序在内的运行支持系统。 许多软件厂商都提供了基于Windows的集成开发环境 Microsoft公司的Visual C/C+ Borland公司的C/C+ Builder Metrowerks公司的Code Warrior 目前,大多数IDE把C和C+编译器结合在一起。,C语言概述,30,DOS的C语言编程环境,DOS的C语言编程环境 基于DOS的IDE Borland公司的Turbo C Borland公司的Borland C+ 许多Windows上的IDE也提供了在DOS命令行环境中编程的命令行工具。,C语言概述,31,C语言编程实验环境简介,上机实验环境简介 举例演示Visual C+

17、 6.0的基本操作 启动 创建源文件 构建工程(编译、链接) 运行程序,C语言概述,32,小结,C是一种通用的程序设计语言,具有许多突出的优点。 程序设计的初学者应该严格按照C语言程序的开发过程进行训练,以便尽快掌握程序设计的基本原则。 C是一种需要编译的高级语言。 进行C语言编程的具体操作依赖于所使用的编程环境。 程序设计是一门实践性很强的课程,在学习过程中必须十分重视实验环节。,C语言概述,第二讲 C语言快速入门,34,第二讲 C语言快速入门,C语言程序的基本结构 C语言的字符集和关键字 Visual C+ 6.0编程环境,C语言程序设计,35,C语言程序的基本结构,一个简单的C语言程序

18、问题:在屏幕上显示一行文字:“Hello World!” 源程序 运行结果,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,Hello World!,36,C语言程序的基本结构,一个简单的C语言程序 程序结构分析,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,注释部分 以增加程序的可读性。 不被执行。,37,C语言程序的基本结构,一

19、个简单的C语言程序 程序结构分析,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,预处理命令 程序中包含某一文件内容。 “stdio.h”为标准输入输出函数头文件名。,38,C语言程序的基本结构,一个简单的C语言程序 程序结构分析,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,函数 C程序由函数组成。 一个C程序有且仅有一个主函数(

20、main函数)。,39,C语言程序的基本结构,一个简单的C语言程序 程序结构分析,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,函数说明 说明函数类型、函数名和函数参数。,40,C语言程序的基本结构,一个简单的C语言程序 程序结构分析,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,函数体 包括变量说明和语句执行部分。,41,C语言

21、程序的基本结构,一个简单的C语言程序 程序结构分析,C语言快速入门,/* 在屏幕上显示Hello World! */ #include void main() /* 定义主函数 */ printf(Hello World!n); ,函数调用语句 格式输出函数printf( )。 输出“Hello world!”。,Hello World!,42,C语言程序的基本结构,含有算术运算的C语言程序 问题:求方程 的根(设 )。 源程序,C语言快速入门,#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f, ,43

22、,C语言程序的基本结构,含有算术运算的C语言程序 程序结构分析,C语言快速入门,#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f, ,预处理命令,44,C语言程序的基本结构,含有算术运算的C语言程序 程序结构分析,C语言快速入门,#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f, ,函数 一个主函数(main函数)。,45,C语言程序的基本结构,含有算术运算的C语言程序 程序结构分析,C语言快速入门,#inclu

23、de #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f, ,函数说明部分,46,C语言程序的基本结构,含有算术运算的C语言程序 程序结构分析,C语言快速入门,#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f, ,函数体 变量说明部分 执行部分,47,C语言程序的基本结构,含有算术运算的C语言程序 程序结构分析,C语言快速入门,#include #include void main() float a,b,c,p,disc,q,x1

24、,x2; scanf(%f%f%f, ,运行程序 键盘输入a、b、c的值; 屏幕显示x1和x2的值。,1 0 -4 x1=2.000000,x2=-2.000000,48,C语言程序的基本结构,包含多个函数的C语言程序 问题:求|a|+|b|的值。 源程序,C语言快速入门,#include float absv(float x) float y; y=x=0?x:-x; return y; void main() float a,b,c; printf(input a,b:n); scanf(%f%f, ,49,C语言程序的基本结构,包含多个函数的C语言程序 程序结构分析,C语言快速入门,#i

25、nclude float absv(float x) float y; y=x=0?x:-x; return y; void main() float a,b,c; printf(input a,b:n); scanf(%f%f, ,程序由两个函数组成: absv函数 main函数,50,C语言程序的基本结构,包含多个函数的C语言程序 程序结构分析,C语言快速入门,#include float absv(float x) float y; y=x=0?x:-x; return y; void main() float a,b,c; printf(input a,b:n); scanf(%f%f

26、, ,调用absv函数求绝对值。,51,C语言程序的基本结构,包含多个函数的C语言程序 程序结构分析,C语言快速入门,#include float absv(float x) float y; y=x=0?x:-x; return y; void main() float a,b,c; printf(input a,b:n); scanf(%f%f, ,运行程序 屏幕显示提示信息; 键盘输入a、b的值; 屏幕显示a、b绝对值之和。,input a,b: -5 13 |a|+|b|=18.000000,52,C语言程序的基本结构,C语言程序的基本结构小结,C语言快速入门,一个C程序由一个或多个函

27、数组成,但有且仅有一个主函数(main函数);main函数是程序执行的入口,可置于程序的任何位置。 程序中可以有预处理命令(如:include 命令)。预处理命令通常放在程序的最前面。 每个语句以分号结尾;预处理命令、函数头和花括号“”之后不能加分号。 函数包括函数的说明部分和函数体;函数体包括变量说明部分和执行部分;函数体由一对花括号“ ”括起来。 括在/*/内的文本为注释。 一行可以写几个语句,一个语句也可以写在多行上。 程序区分大小写字母。一般变量、语句等用小写字母书写;符号常量、宏名等用大写字母书写。 标识符和保留字之间须加空格以示分隔。,53,C语言的字符集,C语言源程序中使用的字符

28、来自C语言的字符集。 字符集(Character set)来自ASCII表 52个大小写字母(Letters) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 10个数字(Digits) 0 1 2 3 4 5 6 7 8 9 空白符(Blanks) 空格符、制表符、回车符、换行符 图形符号(Graphic characters) ! # % : , . / ?,C语言快速入门,54,C语言的关键字,关键字(Keywords)是C语言中

29、的词汇。 也称为保留字(Reserved words) 类型说明 int、long、short、float、double、char、unsigned、signed、const、void、volatile、enum 、struct、union 语句定义 if、else、goto、switch、case、do、while、for、continue、break、return、default、typedef 存储类别说明 auto、register、extern、static 长度运算符 sizeof,C语言快速入门,55,C语言的标识符,标识符(Identifiers)是程序中引用对象的名称。 用来

30、标识变量、符号常量、数组、函数、结构体、共用体、自定义类型等。 命名规则 只能包括大小写字母、数字和下划线; 首字符必须是字母或下划线; 一般内部标识符的前31个字符有效,而外部标识符的前6个字符有效;(视具体编译器的规定) 不能与关键字相同。,C语言快速入门,56,Visual C+ 6.0编程环境,举例演示Visual C+ 6.0的基本操作 创建工作区 创建工程(程序)并添加到工作区 创建源文件并添加到工程 构建工程(编译、链接) 运行程序,C语言快速入门,57,程序的测试与调试,程序错误 语法错误 未遵循C的语法规则。 编译器可以检查。 运行时错误 在程序运行时执行了无法处理的操作。

31、逻辑错误 程序不能按照预期的方式运行,不能产生预期的结果。,C语言快速入门,58,程序的测试与调试,程序测试 审查和运行程序,检测程序是否存在错误。 测试步骤 在编译前仔细检查程序的源代码,看看是否有明显的错误。 查看编译器发现的语法错误。 对于运行时错误和逻辑错误可以采用正确输出测试。 想找出所有错误是不切实际的。,C语言快速入门,59,程序的测试与调试,程序调试 隔离和修正错误。 调试方法 采用手工方式来跟踪程序。 在程序中的关键点放置输出语句来显示变量的值。 使用调试器。,C语言快速入门,60,小结,C程序的基本结构 C语言程序是由一个或多个函数组成的。函数可以是标准库函数和自定义的函数

32、。 C语言的语句可以包含一个表达式,也可以包含一个函数调用,以一个分号作为结束标志。 C语言中的变量在使用之前必须先声明,通过声明语句中为变量指定一个名字和数据类型。可以通过赋值运算改变变量的值。 C语言可以使用scanf()函数和printf()函数输入和输出数据。,C语言快速入门,61,小结,编译器可以发现程序中的语法错误,但是程序中的运行时错误和逻辑错误只有在程序运行时才表现出来。检测运行时错误和逻辑错误的一种简单实用的方法是跟踪程序的运行状态,即程序每执行一步之后所有或主要变量的值。,C语言快速入门,第三讲 基本数据类型,63,第三讲 基本数据类型,引例 变量与常量 预备知识 内储存器

33、的组织 数据类型 基本数据类型 整数类型 字符 浮点类型,C语言程序设计,64,引例,引例 问题 计算任意一个圆的面积。 源程序(cw02-01.c),基本数据类型,#include void main() float r, area; /定义变量 scanf(“%f”, /输出 ,1 area=3.140000,area,r,area = r2,65,变量与常量,数据(Data) 程序需要使用数据。 数据是信息的载体。 数据有多种形式:数、字符、图片等。 常量(Constants) 在程序运行之前可以预先设定,并在整个运行过程中没有变化的数据。 例如引例中的圆周率3.14。 变量(Varia

34、bles) 在程序运行过程中可能变化或被赋值的数据。 例如引例中的半径和面积。,基本数据类型,66,数据类型,数据类型的作用 决定数据的存储方式和占用的存储空间的大小。 决定可以进行的操作。 C语言的数据类型 基本类型 整型(integer),字符型(character),浮点型(floating-point),枚举类型(enumeration) 构造类型 结构体(structure),共用体(union),数组(array) 指针类型(pointer) 空类型(void),基本数据类型,67,位、字节和字,内存储器的组织,基本数据类型,位(bit):最小的存储单位,可以容纳两个值之一,即0或

35、1。,2000,2001,2002,字节(Byte):基本的存储单位,8位。,字(word):自然的存储单位,包含若干个字节。例如32位机的一个字就是32位。,地址:以字节为单位从0开始编号。,68,整数的存储方式,有符号的正整数 在内存中以二进制补码形式存放。 正整数的补码与原码相同。 例如:10,基本数据类型,符号位,数轴,0,215-1=32767,可表示的数的范围,-215=-32768,69,整数的存储方式,有符号的负整数 在内存中以二进制补码的形式存放。 例如:-10,基本数据类型,符号位,70,整数的存储方式,无符号整数 所有二进制位都存放数值。 例如:65535,基本数据类型,

36、0,216-1=65535,可表示的数的范围,71,整数的类型,C语言提供多种整数类型 为程序员提供了针对不同用途的多种选择。,基本数据类型,C标准只规定:short int long 最大最小值参考,仅供参考,实际值与所使用的操作系统、编译系统、机器有关。,72,整型常量,整型常量有三种形式: 十进制(decimal)整数 12 65 65535 八进制(octal)整数:带前缀 0(zero) 014 0101 0177777 十六进制(hexadecimal)整数:带前缀 0 x 或 0X 0 xc 0 x41 0 xffff 默认类型是int,即有符号的基本整型。 可以加上后缀 u 或

37、 U 表示无符号整数,或者 l 或 L 表示长整数。 0 xb5Lu,基本数据类型,73,整型变量,声明变量(Declaration) 变量在使用之前必须被声明。 声明语句的格式: 举例,基本数据类型, ,.;,int counter; int width, height; short x, y; long number;,变量声明创建了变量:为变量分配了存储空间。,height,74,整型变量,初始化(Initialize)变量 为变量赋一个初始值。 可以在声明语句中初始化变量。 举例 变量获得值的方法 直接赋值 输入 初始化,基本数据类型,int counter = 0; int widt

38、h = 352, height = 288;,初始化式,288,height,75,整型变量,输出变量的值 可以使用printf()函数。 与int类型对应的格式说明符是%d。 举例(cw02-02a.c),基本数据类型,#include void main() int a, b; a=32767; b=-32768; printf(a=%d,b=%dn, a, b); ,a=32767,b=-32768,76,整数的溢出,溢出 整数太大,超出了整数类型的数值范围。 使用printf() 时与unsigned int类型对应的格式说明符是%u。 举例(cw02-02b.c),基本数据类型,#i

39、nclude void main() int a, b; unsigned c, d; a = 2147483647; b = a+1; c = 4294967295; d = c+1; printf(a=%d,b=%dn, a, b); printf(c=%u,d=%u, c, d); ,a=2147483647,b=-2147483648 c=4294967295,d=0,?,77,整数的溢出,溢出 结果分析 结论 a+1 的结果(2147483648) 超出了基本整型变量 b 所能容纳(表示)的数值范围(-21474836482147483647)。 请分析d的结果。,基本数据类型,0

40、1 1 1 1 1 1 1.1 1 1 1 1 1 1,1 0 0 0 0 0 0 0.0 0 0 0 0 0 0,a(2147483647),1 0 0 0 0 0 0 0.0 0 0 0 0 0 0,a+1(2147483648),b(-2147483648),12,加正数,减正数,78,字符的存储方式,字符编码 计算机使用一种数字编码(整数)来表示字符,每一个字符都对应一个特定的整数。 常用的编码是ASCII(美国信息交换用标准码)。 7位二进制数,十进制码值范围从0到127。 一般用一个字节保存,最高位为0。 字符的存储方式与整数相同 举例 字母A的ASCII码值为65, 那么在内存中

41、以65的二进制形式存储, 且占一个字节。,基本数据类型,01000001,79,字符的类型和字符变量,C语言的字符类型:char 占一个字节; 可视为一个有符号的整数。 举例(cw02-03.c),基本数据类型,#include void main() char c1, c2; /声明字符变量 c1 = 97; /把一个整数赋值给字符变量 c2 = c1-32; /字符变量可以进行算术运算 printf(c1=%c,c2=%cn, c1, c2); printf(c1=%d,c2=%dn, c1, c2); ,c1=a,c2=A c1=97,c2=65,80,字符常量,字符常量 用单引号括起来

42、的一个字符。 x 9 + C语言将字符常量视为int类型。 举例(cw02-04.c) 如果int类型为16位,char类型为8位, 那么对于bc,将把b和c的ASCII码值存储在两个字节中,并把c赋值给变量c2。 注意:不同系统处理方式不同,结果不同。,基本数据类型,char c1, c2; c1=a; c2=bc;,0 1 1 0 0 0 0 1,c1,0 1 1 0 0 0 1 1,c2,0 1 1 0 0 0 1 1,0 1 1 0 0 0 1 0,bc,L,H,97,99,99,98,81,字符常量,转义字符(escape character) 指代一些特殊的字符。(打印不出来的字符

43、) 举例(cw02-05.c),基本数据类型,a 警报 反斜杠() b 退格 ? 问号(?) f 走纸 单引号() n 换行 “ 双引号(”) r 回车 ooo 八进制值(o表示一个八进制数字) t 水平制表符 xhh 十六进制值(h表示一个十六进制数字) v 垂直制表符,#include void main() printf(atbncbd100x40n); ,ab d,82,浮点数的存储方式,浮点数 浮点型数据在内存中按指数形式存放。 例如:314.15 = 3.1415102,基本数据类型,由此可见,尾数部分的宽度决定了有效数字的个数(即精度),阶码部分的宽度决定了数值范围。,科学计数法

44、允许使用少量的数字表示很大范围的数和很小的数。,83,浮点数的类型,浮点数也有多种类型 类型名称及典型大小,基本数据类型,S = 1 参考,仅供参考,实际值与所使用的操作系统、编译系统、机器有关。,数轴,0,可表示的正数,可表示的负数,84,浮点型常量,浮点型常量有两种形式: 十进制形式 12.3 .65 0. 指数形式: 1.2e-2 .1E5 7E0 1.210-2 0.1105 7.0100 默认类型是double。 可以加上后缀 f 或 F 表示float类型,或者 l 或 L 表示long double类型,否则该常量是double类型。 2.3f 1.2L .1E5f,基本数据类型

45、,85,浮点型变量,浮点型变量的声明和初始化 举例,基本数据类型,float radius; double x = 0.0, y = 0.0;,不能写成: double x = y =0.0;,86,浮点型变量,浮点数的输出 使用printf()函数 float和double对应的格式说明符为%f、%e。 举例(cw02-06.c),基本数据类型,#include void main() float f; double d; f=33333.33333f; d=33333.3333333333; printf(f=%fnd=%f, f, d); ,f=33333.332031 d=33333.

46、333333,有效数字位数是有限的,在可表示的有效位之外的数字被舍去。因此可能会产生误差。,87,浮点数的舍入误差,浮点数的舍入误差 举例(cw02-07.c),基本数据类型,#include void main() float a, b; a=123456.789e5; b=a+20; printf(a=%fnb=%f, a, b); ,a=12345678848.000000 b=12345678848.000000,?,88,浮点数的舍入误差,浮点数的舍入误差 结果分析,基本数据类型,a=123456.789e5; b=a+20;,a+20的理论值应该是:12345678920 但是,一

47、个实型变量能够保证的有效数字是7位,后面的数字将被舍去,是没有意义的。 因此,最后得到 b=12345678848.000000,应当避免一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”较小的数。,89,浮点数的溢出,上溢 举例(cw02-08.c) 若某系统中的最大float值为3.4e38,进行如下操作 得到结果 下溢 举例:假设-10是最小的指数,能够保留四位有效数字 如果把数0.1234e-10除以10,将得到结果0.0123e-10,但损失了一位有效数字。,基本数据类型,float toobig = 3.4e38 * 100.0f; printf(“toobig=%f, t

48、oobig);,inf,无穷大(infinity),90,小结,C语言有多种数据类型。 基本的数据类型包括两大类: 整数类型 浮点类型 开发程序时,应当注意所需变量及其类型的选择。 一般使用int和float表示数,用char表示字符。 在使用变量的函数的可执行语句之前声明该变量,并为它选择有意义的名字。 初始化变量使用的常量应当与变量的类型相匹配。,基本数据类型,第四讲 输入输出和库函数,92,第四讲 输入输出和库函数,引例 字符串常量 符号常量 格式化输入输出 字符输入输出 库函数,C语言程序设计,93,引例,引例 问题:计算任意一个球体的体积。 源程序(cw03-01.c),输入输出和库

49、函数,#include #include #define PI 3.14159 /定义符号常量 void main() double r, volume; printf(Please input the radius of a ball: ); scanf(%lf, /按格式输出 ,Please input the radius of a ball: 1 Volume = 4.18879,volume = 4/3r3,94,字符串常量,字符串常量 用双引号括起来的字符序列。 this is a string x 12345 字符串常量的存储方式 字符串中的字符存放在相邻的存储单元中,每个字符占

50、用一个单元,在最后加上一个空字符(0)作为结束标识符。 举例,输入输出和库函数,每个字符占一个字节,结束标记,95,字符串常量,字符串常量和字符常量的区别 字符x是基本型数据。 字符串”x”是构造型数据。 占用的存储空间大小不同。,输入输出和库函数,96,符号常量,符号常量 符号常量是用一个标识符表示的常量。 定义规则 #define 举例,输入输出和库函数,#define MAXSIZE 20 #define WELCOME Welcome to you! #define PI 3.14,编译预处理器将会用3.14替换以后出现的PI标识符。,97,符号常量,为什么需要符号常量 名字比数字包含

51、的信息多。 便于维护 如果需要在多个地方用到同一个常量,而且必须改变它的值,则只需要修改其符号常量的定义。 另一种定义符号常量的方法 使用const把一个变量声明转换成常量声明。 举例,输入输出和库函数,const int MAX_NUMBER = 30;,MAX_NUMBER是只读的。,98,输入输出,输入输出是以计算机主机为主体而言的。 输出(Output):从主机向外部输出设备输出数据。 输入(Input):从外部通过输入设备向主机输入数据。,输入输出和库函数,输入,输出,99,输入输出流,流(stream) 按直线排列的字符序列 每个序列包括0个或多个字符,并用换行符结尾 ANSI C

52、支持至少254个字符的序列 所有的输入/输出都是用流来进行的。,输入输出和库函数,100,标准输入输出流,开始执行程序时,3个流自动连接到程序上 标准输入流(standard input)对应的源端设备:keyboard 标准输出流(standard output)对应的目的端设备:screen 标准错误流(standard error)对应的目的端设备:screen 操作系统允许这些流重定向到其它设备,输入输出和库函数,type myprog.c prn,输出重定向符,myprog data.txt,输入重定向符,101,输入输出函数,C语言中数据的输入、输出是由函数来实现的。 字符输入函数

53、:getchar() 字符输出函数:putchar() 格式输入函数:scanf() 格式输出函数:printf() 它们都属于标准输入输出库函数,其原型(prototype)都在stdio.h头文件(header file)中。,输入输出和库函数,102,字符输入输出,putchar()函数 getchar()函数 使用说明 程序中必须包含 stdio.h 头文件,输入输出和库函数,#include ,103,字符输出,putchar 使用形式 putchar(character); 向标准输出流输出一个字符character 使用说明 character可以是以下数据: 字符型数据 整型数

54、据 转义字符,输入输出和库函数,104,字符输出,举例(cw0302.c),输入输出和库函数,#include void main() char a; int b; a=B; b=79; putchar(a); putchar(n); putchar(b); putchar(n); putchar(Y); ,B O Y,105,字符输入,getchar 使用形式 variable = getchar(); 从标准输入流读取一个字符。 使用说明 只读取一个字符。 该字符可赋给字符变量、整型变量或作为表达式的一部分。,输入输出和库函数,106,字符输入,举例(cw0303.c),输入输出和库函数,

55、#include void main() char c; c = getchar(); putchar(c); ,a a,abc a,98 9,1,2,3,107,格式输入输出,printf()函数 scanf()函数 使用说明 程序中可以不明确指定包含 stdio.h 头文件,输入输出和库函数,#include ,可以省略此命令,108,格式输出,printf 使用形式 printf(, ); 按格式控制字符串规定的格式,向指定的输出设备输出输出列表中的输出项。 使用说明 格式控制字符串 由双引号括起来的字符串,用于指定输出格式 输出列表 需要输出的数据列表,彼此间用逗号分隔 输出项可以是任

56、意合法的表达式,输入输出和库函数,109,格式输出,格式控制字符串 举例,输入输出和库函数,printf(“n=%5d,f=%5.2fn”, 3, 6.235),普通字符 原样输出,格式说明符(转换规则) % 修饰符 格式字符 指定数据的输出格式,n= 3,f= 6.24,110,格式输出,格式字符,输入输出和库函数,111,格式输出,格式修饰符,输入输出和库函数,112,格式输出,格式说明符小结,输入输出和库函数,要输出%就用%,113,格式输出,举例(cw0304.c),输入输出和库函数,void main() int a=97,b=-1; float f=123.4; printf(“%

57、d,%cn”,a,a); printf(“%d,%o,%x,%un”,b,b,b,b); printf(“%f,%e,%gEND”,f,f,f); ,97,a -1,177777,ffff,65535 123.400002,1.234000e+02,123.4END,1 1 1 1 1 1 1 1,1 1 1 1 1 1 1 1,BC,114,格式输出,举例(cw0305.c),输入输出和库函数,void main() int a=1,b=2,c=3; printf(“%d,%d,%d,%dn”,a,b,c); printf(“%d,%d,%dn”,a,b,c,a+b+c); ,1,2,3,8

58、98 1,2,3,格式说明符和输出项在数量和类型上应该一一对应。,115,格式输入,scanf 使用形式 scanf(, ); 按格式控制字符串规定的格式,从指定的输入设备读入数据,并存放到地址列表中的各地址项指定的变量中 使用说明 格式控制字符串 由双引号括起来的字符串,用于指定输入格式 地址列表 由若干个变量的地址组成,输入输出和库函数,116,格式输入,地址列表 取地址运算符: scanf(“%c%c%c”, ,abc a=a,b=b,c=c,a b c a=a,b= ,c=b,a bc a=a,b= ,c=b,a b a=a,b= ,c=b,1,2,3,4,用 c 格式字符输入字符时,若格式控制字符串中无普通字符,那么认为所有输入的字符(包括空格、制表符、换行符)均为有效字符。,121,格式输入,输入过程分析,输入输出和库函数,ab2,3.4,输入缓冲区,scanf(); getchar(); ,输入流,输入流,122,格式输入,用c格式字符输入字符时,若格式控制字符

温馨提示

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

评论

0/150

提交评论