《C语言课件完整版(精华).ppt》由会员分享,可在线阅读,更多相关《C语言课件完整版(精华).ppt(484页珍藏版)》请在人人文库网上搜索。
1、1,计算机程序设计基础(C语言),2,1. 课堂要求很严格。 2. 多听,适时做笔记。 3. 上课不能讲闲话。 4. 课后认真完成作业、实验报告。 5. 有问题,及时与老师联系。,教 学 要 求,3,选用教材与参考书,主教科书 顾治华、陈天煌等 C语言程序设计 机械工业出版社 .2 参考教材 顾治华、陈天煌等C语言程序设计 实验指导 机械工业出版社 .2 参考书 谭浩强 C语言程序设计 清华大学出版社,4,课程内容,第一章 C语言程序设计概述 第二章 算法及算法设计简介 第三章 数据描述与基本操作 第四章 选择结构程序设计 第五章 循环结构程序设计 第六章 数组与指针 第七章 。
2、函数与模块化程序设计方法,5,第一章 语言程序设计概述,6,1.1 程序设计的概念 1.2 语言的产生及发展 1.3 简单程序介绍 1.4 C程序的上机步骤 1.5 C语言的基本语法和基本结构 1.6 本章要点小结,7,1.1 程序设计的概念,1.1.1 程序设计语言 1.1.2 程序设计的概念,8,计算机,计算机是用来延伸人的能力的工具,需要人来驾驭 我们的职责是让非计算机专业的人更容易驾驭它 完成这一目标的主要手段之一就是“编程(Programming)”,9,计算机基本工作过程,整个过程的执行者是硬件,但硬件是受软件控制的 编程,就是编写软件,使硬件按照人的意图工作,10,计算机基本工作。
3、过程,源程序 和输入数据,输出结果,取出数据,存入数据,操作命令,存取命令,取出 程序指令,输入输出命令,计算结果,CPU,“冯诺依曼机”结构,大脑,眼/耳/口,11,软件的形成,软件(Software)的形成 程序员(Programmer)编写程序源代码(Source Code) 编译器(Compiler)把源代码转换为可被计算机理解的机器代码(Machine Code) 并把机器代码以可执行文件(Executable File)的形式保存在磁盘上,12,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU指令系统,由0、1序列构成的指令码组成 如:10000000 加 10010000。
4、 减,用助记符号描述的指令系统 如 ADD A, B,面向机器的语言,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例 对象是数据和方法的封装 对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,1.1.1 程序设计语言,13,程序设计语言的故事,计算机为什么用二进制呢? 为什么不用我们日常熟悉的十进制呢? 二进制在在电器元件中容易实现 计算机进行二进制运算比进行十进制运算要简单得多,14,程序设计语言的故事,机器语言编写的1+1程序 汇编语言(Assemble Language)编写的1+1程序,10111000 00000001 00000000 00000。
5、101 00000001 00000000,MOV AX, 1 ADD AX, 1,15,程序设计语言的故事,BASIC语言编写的1+1程序 C语言编写的1+1程序,PRINT 1+1,#include main() printf(%dn, 1+1); ,16,Ada,ALGOL60,ALGOL68,Pascal,Modula-2,CPL,BCPL,B,C,C+,Java,LISP,PROLOG,COBOL,FORTRAN77,FORTRAN,PL/1,Simula 67,Smalltalk 80,BASIC,ANSI-BASIC,QBASIC,VB,FORTRAN90,17,1.1.2 程序。
6、设计的概念,程序设计就是用计算机语言来编写程序的过程。 什么是程序?著名计算机科学家沃思提出有名的公式: 算法+数据结构=程序,18,算法即问题的求解过程、计算机的工作步骤。 数据结构即对参与运算的数据怎样进行合理的组织、安排,以提高程序运行的效率和求解的精确性。,程序的两大要素:数据结构、算法,19,1.2 C语言的产生和发展,1.2.1 C语言的产生 1.2.2 C语言的发展 1.2.3 C语言的特点,20,1.2.1 C 语言的产生,一切从一个叫“Space Travel”的电子游戏开始的 Ken Thompson为了让他的游戏能在PDP-7上运行,用汇编语言给PDP-7写了一个操作系统。
7、UNIX 汇编太不好用了,Thompson需要高级语言 试验了一些高级语言,包括Fortran,都不理想 他在BCPL基础上,自己设计了一个B语言 UNIX开始发展,B也不够用了 Dennis Ritchie加入,把B改造成C 开始用C重写UNIX,21,1.2.2 C 语言的发展,C语言发展过程 产生过程 时间:19721973 地点:美国贝尔实验室 目的:UNIX操作系统 设计人: Ken.Thompson和Dennis.M.Ritchie C标准 标准C: K ,输出: Hello,World!,32,/* example1.2 calculate the sum of a and b*。
8、/ #include /* This is the main program */ main() int a,b,sum; a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum); /* This function calculates the sum of x and y */ int add(int x,int y) int z; z=x+y; return(z); ,运行结果: sum=34,33,格式特点 习惯用小写字母,大小写敏感 不使用行号,无程序行概念 可使用空行和空格 常用锯齿形书写格式,main( ) . . . . . . . ,ma。
9、in( ) int i , j , sum; sum=0; for(i=1; i10;i+) for(j=1;j10;j+) sum+=i*j ; printf(“%dn”,sum); ,优秀程序员的素质之一: 使用TAB缩进 对齐 有足够的注释 有合适的空行,34,结构特点 函数与主函数 程序由一个或多个函数组成 必须有且只能有一个主函数main() 程序执行从main开始,在main中结束,其它函数通过嵌套调用得以执行。 程序语句 C程序由语句组成 用“;”作为语句终止符 注释 /* */为注释,不能嵌套 不产生编译代码,例: /*This is the main /* of exampl。
10、e1.1*/ */,编译预处理命令,函数首部: 包括函数名、函数类型、函数参数名、参数类型。 函数体:声明部分,执行部分。,35,1.4 C程序的上机步骤,36,程序代码的录入, 生成源程序*.c,语法分析查错,翻译 生成目标程序*.obj,与其它目标程序或库 链接装配,生成可执行 程序*.exe,开始,编辑,编译,有错?,执行,连接,结果 正确,结束,可执行 目标程序 f.exe,源程序 f.c,目标程序 f.obj,库函数 和其他目 标程序,Yes,No,Yes,No,37,1.5 C语言的基本语法和结构,1.5.1 C语言的基本语法 1.5.2 C语言的基本结构,38,1.5.1 C语言。
11、的基本语法,标识符 关键字 运算符 分隔符 常量 注释符 字符集,39,标识符,常量、变量、语句标号以及自定义函数的名称 只能是字母、数字和下划线组成的字符串,第一个字符必须是字母或下划线 标准C不限制标识符长度,但一般不超过8字符 标识符大小写有区别 标识符名最好能“顾名思义”,40,32个关键字:(由系统定义,不能重作其它定义) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeo。
12、f static struct switch typedef unsigned union void volatile while,41,9种控制语句: if( )else switch case for( ) while( ) dowhile( ) continue break goto return,42,34种运算符: 算术运算符:+ - * / % + - 关系运算符: = != 逻辑运算符:! for(i=0;i=80) ,fc1.c,2.1 算法的概念 2.2 算法的特性 2.3 算法的表示 2.4 结构化程序设计方法,2.4 结构化程序设计方法简介,荷兰学者E.W.dijkctr。
13、a提出了结构化程序设计(structured programming)的理论,成为70年代中期至90年代初的程序设计主流。结构化程序设计方法提出了一些大家都要遵循的原则,这些原则归纳为32个字:,自顶向下,逐步细化。 模块设计,结构编码。 清晰第一,效率第二。 书写规范,缩进格式。,顺序、分支和循环三种基本结构的共同特点:,(1)只有一个入口。,(2)只有一个出口。,(3)结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都有从入口到出口的路径通过它。,(4)结构内不存在“死循环”(无终止的循环)。,结构化程序,所谓结构化程序,就是仅仅使用顺序、选择、 循环等三种基本结构所构造的程序。
14、。,结构化程序设计方法,结构化程序设计方法的基本思想是,把一个复杂 问题的求解过程分阶段进行。每个阶段的问题都 控制在人们容易理解和处理的范围内。,2.4 本章要点小结,算法的概念 算法的特性 算法的表示 结构化程序设计方法,第三章 数据描述与 基本操作,89,3.1 基本数据类型 3.2 运算符和表达式 3.3 输入输出操作,90,3.1 基本数据类型,3.1.1 C语言的数据类型 3.1.2 常量和变量 3.1.3 数据类型转换,91,3.1.1 C语言的数据类型,(一) 什么是数据类型? (二) C语言的数据类型有哪些?,92,(一) 什么是数据类型?,数据结构+算法=程序,C语言中以 。
15、“数据类型”形式存在,对数据的描述,对操作的描述,93,数据类型,基本类型,整型(有符号、无符号) 字符型 实型(浮点型) 枚举类型,构造类型,数组类型 结构体类型 共用体类型,指针类型,空类型,单精度型 双精度型,在程序中对用到的 所有数据都必须指 定其数据类型.,?,不同类型的数据,所占 内存的字节数不同, 对 应的操作也不相同。,(二) C的数据类型,94,整型数据,1. 整型数据的分类 最基本的整型类型 基本整型(int型):占2个或4个字节(32位编译系统) 短整型(short int):VC+6.0中占2个字节 长整型(long int):VC+6.0中占4个字节 双长整型(lon。
16、g long int):C99新增的,64位占8个字节,VC+6.0中定义为 _int64,95,2. 整型变量的符号属性 整型变量的值的范围包括负数到正数 可以将变量定义为“无符号”类型 扩充的整形类型: 有符号基本整型 signed int; 无符号基本整型 unsigned int; 有符号短整型 signed short int; 无符号短整型 unsigned short int; 有符号长整型 signed long int; 无符号长整型 unsigned long int;,整型数据,96,字符型数据,字符是按其代码(整数)形式存储的 C99把字符型数据作为整数类型的一种 字符。
17、型数据在使用上有自己的特点,97,1.字符与字符代码 大多数系统采用ASCII字符集 字母:A Z,a z 数字:09 专门符号:29个:! ” # 系统把“?”的ASCII代码63赋给变量c printf(“%d %cn”,c,c); 输出结果是: 63 ?,字符型数据,100,浮点型数据,浮点型数据是用来表示具有小数点的实数 float型(单精度浮点型) 编译系统为float型变量分配4个字节 数值以规范化的二进制数指数形式存放,101,浮点型数据是用来表示具有小数点的实数 float型(单精度浮点型) double型(双精度浮点型) 编译系统为double型变量分配8个字节 15位有效数。
18、字,浮点型数据,102,几种基本数据类型,整型,字符型,实型,有,无,说明:数据类型所占字节数随编译器不同而不同,上表以VC+ 6.0为例:,103,举例:数据溢出(Overflow)的危害,一台安装了Windows 95/98的机器,如果连续 运行49.7天,可能死机 原因: Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。 这个计数器个unsigned long unsigned long的最大值:4294967295 一天有24*60*60*1000 = 86400000毫秒 4294967295 / 86400000 = 49.71026961805 当49.7天。
19、的时候,此计数器会溢出,引起死机,104,(一) 常 量 (二) 变 量,3.1.2 常量与变量,105,预备知识:bit,Byte,Word,bit, 位 Byte, 字节 1 B = 8 b Word, 字 1 W=2 B Kilobyte(KB), 1 KB = 1,024 B Megabyte(MB), 1 MB = 1,024 KB Gigabyte(GB), 1 GB = 1,024 MB Terabyte(TB) 1 TB = 1,024 GB,106,一个字节有多大? 可以表示数字0255 保存一个字符(英文字母、数字、符号),ASCII编码 两个字节保存一个汉字,107,预备。
20、知识:二进制,世界上有(10)2种人,1种人懂二进制,1种人不懂二进制 一个位有多大? 只能是“0”或者“1”,这叫二进制 二进制诠释了计算机的哲学 种类众多的复杂事物都是由若干种简单事物构成,108,1.常量:在程序运行过程中,其值不能被改变的量 整型常量:如1000,12345,0,-345 实型常量 十进制小数形式:如0.34 -56.79 0.0 指数形式:如12.34e3 (代表12.34103) 字符常量:如? 转义字符:如n 字符串常量:如”boy” 符号常量:#define PI 3.1416,3.1.2 常量与变量,109,字符与字符串的区别有哪些?,定界符不同:字符常量使用。
21、单引号,而字符串常量使用双引号; 长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数; 存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,110,2. 变量:在程序运行期间,变量的值是可以改变的 变量必须先定义,后使用 定义变量时指定该变量的名字和类型 变量名和变量值是两个不同的概念 变量名实际上是以一个名字代表的一个存储地址 从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据,3.1.2 常量与变量,111,方式: 1、定义变量的同时赋初值(也叫变量初始化)。 格式: 数据。
22、类型 变量名=初值, 变量名2=初值2; 2、通过一个赋值语句给变量赋初值。 格式 : 变量名=初值;,变量赋初值,出现在函数体 的声明部分,出现在函数体 的执行部分,int a,b=3;,int a,b; b=3;,112,1、程序中用到的变量必须“先定义(declare),后使用”。 2、C语言的关键字不能用作变量名。 3、C语言对英文字母的大小写敏感,即同一字母的大小写,被认为是两个不同的字符。 4、定义变量时,给几个变量赋相同的初值, 应写成 : int a=3,b=3,c=3; 不能写成: int a=b=c=3; 5、给变量赋值时,正常情况下应给变量赋相同类型的数据。若给变量赋与其。
23、类型不同的数据时,需进行类型转换。,关于变量以及变量赋初值的几点说明,113,变量举例,include void main() int student,age; int if=adrress=1; float score=90; stadent=2; Age=20.7; printf(%d %d %d %f,if,student,age,score); ,本程序中有几处错误?,undeclared identifier,114,变量使用要注意长度,不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度 程序在Turbo C2.0和Visual C+6.0下的运行结果不同。
24、,注意!,#include void main() printf(Data type Number of bytesn); printf(- -n); printf(char %dn,sizeof(char); printf(int %dn,sizeof(int); printf(short int %dn,sizeof(short); printf(long int %dn,sizeof(long); printf(float %dn,sizeof(float); printf(double %dn,sizeof(double); ,115,3.1.3 数据类型转换,(一) 隐式转换(自动转。
25、换) (二) 显式转换(强制转换),116,(一)隐式转换(自动转换),转换发生条件,运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的 变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换,先转换、后运算,117,隐式转换(自动转换),同种数据类型的运算结果,还是该类型 不同种数据类型的运算结果,是两种类型中取值范围更大的那种 long double double float = long = int =short char 把数据赋值给另外一种类型变量也会发生自动类型转换 从小到大,顺利转换 从大到小,可能丢失信息(好的编译器会发出警告。
26、),见教材28页,118,隐式转换(自动转换),不同类型数据间的混合运算: +、-、*、/ 运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算; (2) 如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型; (3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算.,119,int i; float f; double d; long e; i=2; f=2.5; d=3.9; e=3; ,10+a。
27、+i*f-d/e,107,5.0,1.3,112. 0,110. 7,int,double,double,double,double,思考:根据已知变量定义及赋值语句,计算以下表达式的值,并说明每一步所得结果的数据类型。,120,(二)显式转换(强制转换),一般形式,(要转换成的数据类型)(被转换的表达式) 注:当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。,举例,float x,y; x=2.3 ; y=4.5; (int)(x+y) / 6 (int) (int)x+y / 6.5 (double),说明,强制转换得到的是所需类型的中间变量,原变量或表达式的类型不变。,12。
28、1,#include void main() float x; int i; x=3.6; i=(int)x; printf(x=%f,i=%d,x,i); ,思考:以下程序的输出结果是什么?,x=3.600000,i=3,程序运行结果:,结论:较高类型向较低类型转换时可能发生精度损失问题,122,举例:已知三角形的边长a、b、c,求三角形周长的一半。,#include void main() float a,b,c,s; a=3;b=4;c=5; s=1/2 * (a+b+c); printf(s=%8.2f,s); ,s= 0.00,程序运行结果:,?,s= 6.00,程序运行结果:,改为。
29、:1.0/2 (1/2.0) 或 (float)1/2 (1/(float)2),123,C运算符简介 算术运算符和算术表达式 赋值运算符和赋值表达式 逗号运算符和逗号表达式 关系运算符和表达式 逻辑运算符和表达式 条件运算符与表达式,3.2 运算符与表达式,124,详见254页!,C运算符简介,125,运算符必须有运算对象,分为3类: 运算对象是一个的,则称为单目运算 运算对象是两个的,则称为双目运算 运算对象是三个的,则称为三目运算,C运算符简介,126,基本算术运算符,+ - * / %,说明,例: 5/3=1 -5/3=-1,模运算符或求余运算符,算术表达式,用算术运算符和括号将运算对。
30、象(也称操作数)连接起来的、符合C语法规则的式子。,优先级和结合性,先乘除、后加减,有括号先算括号。 自左至右,常量、变量、函数等,说明,两个整数相除的结果为整数,舍去小数部分。 当商为负数时,多采用“向零取整”的方法。,求余运算的两侧均应为整数 5%3=2,例: a*b/c-1.5+a,算术运算符和算术表达式,如果一个运算符两侧的数据类型不同,先自动进行类型转换,使二者具有同一类型,然后进行运算。,127,格式: 前置:+i , -i (在使用i之前,使i的值加(减)1) 后置:i+ , i- (在使用i之后,使i的值加(减)1),自增、自减运算符,作用:自增运算符()使单个变量的值增1; 。
31、自减运算符()使单个变量的值减1。,例,i=3; A) j=+i; j=i+; j=-i+;,i=i+1,i=i-1,? j,i,A) j=4 i=4 j=3 i=4 j=-3,+和-结合方向 是“自右至左”,128,(1) 自增、自减运算是语言特有的,常用于循环语句中,使循环控 制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。 (2) 自增、自减运算符,不能用于常量和表达式。 例如,5+、-(a+b)等都是非法的。 (3) +和-的结合方向为自右至左。(P30) (4) 如果对一个变量的自增自减运算,单独构成语句,而不是作为表达式的一部分时,前置和后置运算效果一样,都是使变量。
32、自加。 如i+;和 +i;是一样的,都是使i加。 (5) 在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。,说明,129,赋值运算符,简单赋值运算符:= 复合赋值运算符:+=, -=,*=,/=,%= ,简单赋值运算符的一般形式为: 变量 = 表达式 它的作用是将一个表达式的值赋给一个变量。,复合赋值运算的一般格式为: 变量 双目运算符 = 表达式 复合赋值运算符 它等价于:变量 = 变量 双目运算符 (表达式)。只有当表达式简化为一个变量或一个常数时,两边的括号可以省略。,赋值运算符和赋值表达式,130,赋值表达式,格式: 赋值表达式的值:被赋变量的值,类。
33、型转换,转换条件:当赋值运算符两侧的数据类型不一致时 转换原则:转换为被赋值变量的类型。,131,注意: 将取值范围小的类型转为取值范围大的类型是安全的 反之是不安全的 如果大类型的值在小类型能容纳的范围之内,则平安无事 但是,浮点数转为整数,会丢失小数部分,非四舍五入 反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,例1,float a; int b; a=1.2; b=a*3;,? b,b=3,例2,a=b=5; a=7+(b=8),? a,b,a=5 ;b=5 a=15;b=8,自右而左 的结合性,132,算术自反赋值运算符,(1) 运算规则,对象数,名称,运。
34、算符,运算规则,运算对象,运算结果,结合性,双目,加赋值,减赋值,乘赋值,除赋值,模赋值,*,/ =,%=,a+=b相当于 a=a+b,a=b相当于 a=ab,a*=b相当于 a=a*b,a/=b相当于 a=a/b,a%=b相当于 a=a%b,数值型,数值型,自 右 向 左,整型,整型,133,逗号运算符,,,逗号表达式,表达式1,表达式2, ,表达式n,说明,1、逗号表达式的求解过程为自左至右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值; 2、逗号运算符的优先级最低。 3、使用逗号表达式的目的通常是想分别得到各个表达式的值,而并非一定要得到整个表达式的值。 4、常用于fo。
35、r循环语句中,除此以外很少使用。,逗号运算符和逗号表达式,134,例1,a=3 a=(3*5,a*4),? a,a=12,例2,a=3 a=3*5,a*4,? a,a=15 表达式的值为60,135,关系运算符及其优先次序,关系运算符: 用来对两个数值进行比较的比较运算符 语言提供种关系运算符: (小于) = (小于或等于) (大于) = (大于或等于) = (等于) != (不等于),优先级相同 (高),优先级相同 (低),136,关系、算术、赋值运算符的优先级,关系运算符及其优先次序,137,ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),关。
36、系运算符及其优先次序,138,关系表达式,关系表达式 用关系运算符将两个数值或数值表达式连接起来的式子 关系表达式的值是一个逻辑值,即“真”或“假” 在C的逻辑运算中,以“”代表“真”,以“”代表“假”,139,关系运算注意:,例 若a=0; b=0.5; x=0.3; 则 a=x=b的值为,0,例 5278在C中是允许的, 值为,0,例 a0 结果为 A100 结果为,1,0,140,关系运算注意:,例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,例 应避免。
37、对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为,0,141,逻辑运算符及其优先次序,3种逻辑运算符: else max=b;,max = (a b) ? a : b;,条件运算符,150,条件运算符和条件表达式,有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值 如:if (ab) max=a; else max=b;,max = (a b) ? a : b;,条件表达式,151,条件表达式的一般形式为 表达式?表达式: 表达式,条件运算符和条件表达式,条件运算符的执行顺序: 求解表达式1 若为非0(真)则求解表达式2,此时表达。
38、式2的值就作为整个条件表达式的值 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,152,条件运算符优先于赋值运算符 条件运算符的结合方向为“自右至左” 以下为合法的使用方法: ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);,条件运算符和条件表达式,153,长度运算符,长度运算符优先级,和单目算术运算符、单目逻辑运算符、增1减1运算符同级别 同级运算符的结合性是自右向左的,154,设变量定义如下: int n; short s; unsigned long u3; float f; char c。
39、;,则 size of(n)的值是4 size of(s)的值是2 size of(long)的值是4 size of(unsigned int)的值是2 size of(u3)的值是4 size of(f)的值是4 size of(double)的值是8 size of(c)的值是1,注意:上述结果是在32位机Visual C+ 6.0环境运行的结果。,155,位运算 C语言中提供的位运算符: 、 、 ,格式声明,167,1.printf函数的一般格式 printf(格式控制,输出表列) 例如: printf(”i=%d,c=%cn”,i,c);,普通字符,用printf函数输出数据,168。
40、,1.printf函数的一般格式 printf(格式控制,输出表列) 例如: printf(”i=%d,c=%cn”,i,c);,可以是常量、变量或表达式,用printf函数输出数据,169,2. 常用格式字符 格式符。用来输出一个有符号的十进制整数 可以在格式声明中指定输出数据的域宽 printf(”%5d%5dn”,12,-345); %d输出int型数据 %ld输出long型数据,用printf函数输出数据,170,2. 常用格式字符 格式符。用来输出一个字符 char ch=a; printf(”%c”,ch); 或 printf(”%5c”,ch);,输出字符:a,用printf函数。
41、输出数据,171,2. 常用格式字符 格式符。用来输出一个字符串 printf(”%s”,”CHINA”); ,输出字符串:CHINA,用printf函数输出数据,172,2. 常用格式字符 f格式符。用来输出实数,以小数形式输出 不指定数据宽度和小数位数,用%f 例: 用%f输出实数,只能得到位小数。 double a=1.0; printf(”%fn”,a/3);,用printf函数输出数据,173,2. 常用格式字符 f格式符。用来输出实数,以小数形式输出 指定数据宽度和小数位数。用%m.nf printf(%20.15fn,1/3); printf(%.0fn”,10000/3.0);。
42、,用printf函数输出数据,174,2. 常用格式字符 f格式符。用来输出实数,以小数形式输出 输出的数据向左对齐,用%-m.nf,用printf函数输出数据,175,2. 常用格式字符 f格式符。用来输出实数,以小数形式输出 float型数据只能保证6位有效数字 double型数据能保证15位有效数字 计算机输出的数字不都是绝对精确有效的,用printf函数输出数据,176,2. 常用格式字符 e格式符。指定以指数形式输出实数 %e,VC+给出小数位数为位 指数部分占5列 小数点前必须有而且只有1位非零数字 printf(”%e”,123.456); 输出:1.234560 e+002,用。
43、printf函数输出数据,177,2. 常用格式字符 e格式符。指定以指数形式输出实数 %m.ne printf(”%13.2e”,123.456); 输出: 1.23e+002 (前面有4个空格),用printf函数输出数据,178,printf格式字符,179,180,printf的附加格式说明字符,181,用scanf函数输入数据,1. scanf 函数的一般形式 scanf(格式控制,地址表列),含义同printf函数,182,1. scanf 函数的一般形式 scanf(格式控制,地址表列),可以是变量的地址,或字符串的首地址,用scanf函数输入数据,183,2. scanf函数中。
44、的格式声明 与printf函数中的格式声明相似 以开始,以一个格式字符结束,中间可以插入附加的字符 scanf(a=%f,b=%f,c=%f,用scanf函数输入数据,184,3.使用scanf函数时应注意的问题 scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。 scanf(”%f%f%f”,a,b,c); scanf(”%f%f%f”,用scanf函数输入数据,错,对,185,3.使用scanf函数时应注意的问题 如果在“格式控制字符串”中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。 scanf(a=%f,b=%f,c=%f, 1 3 2 a=1。
45、,b=3,c=2 a=1 b=3 c=2,用scanf函数输入数据,错,错,对,186,3.使用scanf函数时应注意的问题 在用”c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入. 对于scanf(”%c%c%c”, 如输入: a |__| b|__| c c1值为字符a,c2值为字符|__| ,c3值为字符b,因为c只要求输入一个字符,后面不需要用空格作为两个字符的间隔,因此 空格|__| 作为下一个字符送给c2,用scanf函数输入数据,187,3.使用scanf函数时应注意的问题 在输入数据时,遇以下情况时该数据认为结束。 遇空格,或按“回车”或“跳格”(Tab)键。 按指。
46、定的宽度结束,如”3d”,只取3列。 遇非法输入。 对于scanf(”%3d%d%f”, 若输入 123|__|4 |__|1.2*345,用scanf函数输入数据,188,Scanf格式字符,189,Scanf的附加格式说明字符,190,例: 求 方程的根。a、b、c由键盘输入 设 ,191,解题思路:首先要知道求方程式的根的方法。 由数学知识已知:如果 0,则一元二次方程有两个实根:,若记,192,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,程序中调用数学函数sqrt,输入a,b。
47、,c的值,193,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,输入的是双精度型实数,194,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,要求输入3个实数,自动转成实数后赋给a,b,c,195,#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, ,输出数据占7列,其中小数占2。
48、列,196,字符数据的输入输出,1.用putchar函数输出一个字符 从计算机向显示器输出一个字符 putchar函数的一般形式为: putchar(c) ,197,例: 先后输出BOY三个字符。 解题思路: 定义3个字符变量,分别赋以初值B、O、Y 用putchar函数输出这3个字符变量的值 ,字符数据的输入输出,198,#include int main ( ) char a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); return 0; ,向显示器输出字符B,向显示器输出换行符,字符数据的输入输出,199,#in。
49、clude int main ( ) char a=B,b=O,c=Y; putchar(a); putchar(b); putchar(c); putchar (n); return 0; ,改为int a=66,b=79,c=89;,字符数据的输入输出,200,putchar(101) (输出字符) putchar() (输出单撇号字符),字符数据的输入输出,输出其他转义字符:,201,2. 用getchar函数输入一个字符 向计算机输入一个字符 getchar函数的一般形式为: getchar( ),字符数据的输入输出,202,例: 从键盘输入BOY三个字符,然后把它们输出到屏幕。 解题。
50、思路: 用3个getchar函数先后从键盘向计算机输入BOY三个字符 用putchar函数输出,字符数据的输入输出,203,#include int main ( ) char a,b,c; a=getchar(); b=getchar(); c=getchar(); putchar(a); putchar(b); putchar(c); putchar(n); return 0; ,输入一个字符,送给变量a,字符数据的输入输出,204,第四章 结构化程序设计,205,4.1 三种基本结构概述 4.2 顺序结构 4.3 选择结构 4.4 循环结构,206,4.1 三种基本结构概述,顺序结构、选。
51、择结构、循环结构 已经证明,任何程序均可只用这三种结构实现 Bhm, Corrado, and Jacopini Guiseppe. Flow diagrams, Turing machines and languages with only two formation rules. Communication of ACM, 9(5):366-371, May 1966. 只用这三种结构的程序,叫结构化程序 程序 “必须”符合结构化规则,207,顺序 选择 循环 - 三分天下,顺序结构,循环结构,选择结构,208,B,A,NS图,传统流程图,顺序结构,B,A,209,4.2 顺序结构,例1 。
52、计算存款利息。有1000元,想存一年。有三种方法可选: (1)活期,年利率为r1 (2)一年期定期,年利率为r2 (3)存两次半年定期,年利率为r3 请分别计算出一年后按三种方法所得到的本息和。,210,解题思路:确定计算本息和的公式。 从数学知识可知:若存款额为p0,则: 活期存款一年后本息和为: p1=p0(1+r1) 一年期定期存款,一年后本息和为: p2=p0(1+r2) 两次半年定期存款,一年后本息和为:,211,算法:,212,#include int main ( ) float p0=1000, r1=0.0035,r2=0.03, r3=0.028, p1, p2, p3; 。
53、p1 = p0 * (1 + r1); p2 = p0 * (1 + r2); p3 = p0 * (1 + r3/2) * (1 + r3/2); printf(“%7.2fn%7.2fn%7.2fn”,p1, p2, p3); return 0; ,定义变量同时赋予初值,213,在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果遇到红灯,要停车等待 周末我们去郊游 70岁以上的老年人,入公园免票,4.3 选择结构,214,在现实生活中,需要进行判断和选择的情况是很多的 处理这些问题,关键在于进行条件判断 由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要。
54、在进行下一个操作之前先进行条件判断,4.3 选择结构,215,4.3 选择结构,if-else语句 (如果.爱)实现两个分支的选择结构 Switch语句 (分道扬镳)实现多分支的选择结构,216,选择结构的作用是,根据所指定的条件是否满足,决定从给定的两组或多组操作选择其一。,4.3 选择结构,217,B,N,如果 成绩60 那么 通知补考 否则 告知你通过考试,A,Y,条 件P,4.3 选择结构,218,if - else 语句,1)选择结构的一种最常用形式 if (表达式)语句1;else语句2;语句3; 表达式值非0时,执行语句1,然后语句3;表达式值为0时,执行语句2,然后语句3 2)。
55、 if (表达式)语句1; 语句3; else部分可以没有,当表达式值为0时,直接执行语句3 3)if-else嵌套使用时,注意else和谁配对的问题 4) else-if语句,219,例: 输入两个实数,按代数值由小到大的顺序输出这两个数。,if 语句,220,解题思路: 只需要做一次比较,然后进行一次交换即可 用if语句实现条件判断 关键是怎样实现两个变量值的互换,A,B,互换前,A,B,互换后,if 语句,221,A,B,C,if 语句,222,A,B,C,if 语句,223,A,B,C,if 语句,224,#include int main() float a,b,t; scanf(%。
56、f,%f, ,将a和b的值互换,如果ab,225,#include int main() float a,b,t; scanf(%f,%f, ,选择结构,用if语句实现的,226,1)if(表达式)语句1 else 语句2,例如: if(xy)printf(“d”,x); else printf(“d”,y);,227,2) if(表达式)语句 例如:if(xy) printf(“d”,x);,这种if语句的执行过程如图 :,228,例: 输入3个数a,b,c,要求按由小到大的顺序输出。,解题思路:可以先用伪代码写出算法: if ab,a和b对换 (a是a、b中的小者) if ac,a和c对换。
57、 (a是三者中最小者) if bc,b和c对换 (b是三者中次小者) 顺序输出a,b,c,229,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ab,将a和b对换,a是a、b中的小者,230,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ac,将a和c对换,a是三者中的小者,231,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 bc,将b和c对换,b是三者中的次小者,232,一般形式:,3)嵌套的if-e。
58、lse语句,233,if else 配对原则:缺省 时, else总是与它上面最近的未配对if配对,234,例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:加 ,235,例:有一函数: 编一程序,输入一个x值,要求输出相应的y值。,解题思路: 用if语句检查x的值,根据x的值决定赋予y的值 由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现,。
59、236,解题思路:方法1 (1) 先后用3个独立的if语句处理: 输入x 若 x 0, 则y = 1 输出x和y,scanf(%d,237,解题思路:方法2 (2) 用一个嵌套的if语句处理: 输入x 若x 0, 则y = -1 否则 若 x = 0, 则y = 0 否则 y = 1 输出x和y,scanf(%d,238,解题思路:方法2 (2) 用一个嵌套的if语句处理: 输入x 若x 0, 则y = -1 否则 若 x = 0, 则y = 0 否则 y = 1 输出x和y,scanf(%d,scanf(%d,提倡内嵌if放在else中,239,4) else-if语句,if的一种扩展形式 。
60、if (表达式) 语句1;else if (表达式) (在else部分又嵌套了多层的if语句) 语句2;else if (表达式)语句3;else (最后else部分也可以没有)语句4;语句5;,240,else-if流程图,if(表达式)语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 : else if(表达式m) 语句m else 语句n,表达式1,表达式2,表达式3,表达式4,语句1,语句2,语句3,语句4,语句5,真,真,真,真,假,假,假,假,241,例:要求按照考试成绩输出等级,85分以上为A等,7084分为B等,6069分为C等,60分以下为 D等。
61、。成绩由键盘输入。,#include main() int score; char grade; scanf(“%d”, ,242,说明,几种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表式。 if(ab case 常量2: 语句序列2;default: 语句序列3; default可以没有,但最好不省略 不要忘记break,整数类型(包括字符型),246,switch语句的作用是根据表达式的值,使流程跳转到不同的语句 switch语句的一般形式: switch(表达式) case 常量1 :语句1 case 常量2 :语句2 case 常量n :语句n default :。
62、 语句n+1 ,不能相同,247,例: 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为7084分,C等为6069分 ,D等为 60分以下 。成绩的等级由键盘输入。,switch 语句,解题思路: 判断出这是一个多分支选择问题 根据百分制分数将学生成绩分为4个等级 如果用if语句,至少要用3层嵌套的if,进行3次检查判断 用switch语句进行一次检查即可得到结果,248,#include int main() char grade; scanf(%c, ,值为A,249,#include int main() char grade; scanf(%c, ,不能少,250,#include int main() char grade; scanf(%c, ,值为C,251,#include int main() char grade; scanf(%c, ,值为F,252,#include int main() char grade; scanf(%c, ,此行位置有问题,应如何修改?,253,scanf(%c, ,254,scanf(%c, ,255,scanf(%c, ,256,2关于Switch的说明。