C程序设计[第三版]谭浩强.ppt

上传人:小飞机 文档编号:6503604 上传时间:2023-11-07 格式:PPT 页数:431 大小:1.25MB
返回 下载 相关 举报
C程序设计[第三版]谭浩强.ppt_第1页
第1页 / 共431页
C程序设计[第三版]谭浩强.ppt_第2页
第2页 / 共431页
C程序设计[第三版]谭浩强.ppt_第3页
第3页 / 共431页
C程序设计[第三版]谭浩强.ppt_第4页
第4页 / 共431页
C程序设计[第三版]谭浩强.ppt_第5页
第5页 / 共431页
点击查看更多>>
资源描述

《C程序设计[第三版]谭浩强.ppt》由会员分享,可在线阅读,更多相关《C程序设计[第三版]谭浩强.ppt(431页珍藏版)》请在三一办公上搜索。

1、C 程序设计设计,授课教师:刘 东,第一章 C语言概述,本章要点:第一节:C语言出现的历史背景(阅读)第二节:C语言的特点(了解)第三节:简单的C程序介绍(理解)第四节:C程序的上机步骤(掌握),第一章 C语言概述,考 试 内 容一、C语言的结构1.程序的构成,MAIN函数和其他函数。2.头文件,数据说明,函数的开始和结束标志。3.源程序的书写格式。4.C语言的风格。分析:这部分考试形式主要是选择题,一般会出12个题,都是基本概念。注意程序的书写格式。,第一节:C语言出现的历史背景,一、语言的发展 第一阶段:机器语言 第二阶段:汇编语言 第三阶段:面向过程的高级语言 有人把C称为“高级语言中的

2、低级语言”或“中级语言”,意为兼有高级和低级语言的特点。二、C语言的发展 ALGOL 60CPLBCPLBC,C语言是国际上广泛流行的计算机高级语言,既可用来写系统软件,也可用来写应用软件。C语言是在B语言的基础上发展起来的,它的根源可以追溯到ALGOL 60。1960年出现的ALGOL 60是一种面向问题的高级语言,它离硬件比较远,不宜用来编写系统程序。1963年英国的剑桥大学推出了CPL 语言。CPL语言在ALGOL 60的基础上接近硬件一些,但规模比较大,难以实现。1967年英国剑桥大学的Matin Richards对CPL语言做了简化,推出了BCPL 语言。1970年美国贝尔实验室的K

3、en Thompson 以BCPL语言为基础,,又做了进一步简化,设计出了很简单的而且很接近硬件的B语言(取BCPL的第一个字母),并用B语言写了第一个UNIX操作系统但B语言过于简单,功能有限。1972年至1973年间,贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言(取BCPL的第二个字母)。C语言既保持了BCPL和B语言的优点(精练,接近硬件),又克服了它们的缺点(过于简单,数据无类型等)。最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。1973年,K.Thompson和D.M.Ritchie两人合作把UNIX的90%以上用C改写,即UNIX第5版

4、。,第二节 C语言的特点,一、C语言是一种结构化、模块化的语言二、C语言具有丰富的运算符及数据结构三、C语言区分大小写:1、小写字母作为基本书写形式 2、符号常数等宏定义的参数名采用大写四、C语言源程序书写灵活五、C语言生成的目标代码质量高六、C语言编写的程序可移植性好(比汇编语言),第三节 简单的C程序介绍,一、几个基本函数 1.main().2.printf(格式控制,输出列表)3.scanf(格式控制,输入地址列表)二、程序举例 例1:main()printf(“I am a student.n”);,总结:,1、本程序的作用是输出一行信息2、每一个C程序都必须有一个main函数,3、C

5、程序的函数体由一对花括号括起来4、C程序的每一行叫做一个语句行5、每一语句后必须有一分号6、“n”是换行符7、本程序的输出通过一个C的库函数printf()实现,例2:main()/*求两数之和*/int value1,value2,sum;/*定义变量*/value1=50;value2=25;sum=value1+value2;printf(“The sum of%d and%d is%dn”,value1,value2,sum);,总结:1、该程序完成的功能是求两个给定数的和,并输出值。2、/*/之间的是注释部分,不影响程序的执行3、C语言中使用变量必须先定义,后使用4、%后面的是格式字

6、符串,指定输入输出的格式,例3:main()float average();float a,b,c,ave;scanf(“%f,%f,%f”,总结:1、本程序包括两个函数,主调函数和被调函数。2、scanf()为输入函数3、&为取地址运算符4、return()函数为返回语句,将被调函数计算出来的值带回主调函数。,二、C语言源程序的构成1、C语言是一种函数语言,每个程序至少包含一个函数 main()2、C语言的源程序总是从main函数开始执行的3、C语言的语句以分号作为分隔符,分号不可少(1)C语言的一行可以写几条语句,每条语句以分号分隔(2)C语言的一条语句可以写多行,以分号作为结束标志4、C

7、语言的输入输出靠函数实现5、每条C语句可以为其加注释,6、一个C函数的一般形式为:,函数类型 函数名(函数形参)形参类型定义 数据定义部分 函数执行部分,函数的说明部分(首部),如:int max(int x,int y)或 int max(x,y)int x,y;,如:limit(),第四节 C程序的上机步骤,C语言的源程序必须在某个编译器(编辑环境Turbo C 2.0)下,才能被翻译为机器所能执行的目标代码。一、上机过程(图1.1)1、编辑:输入源程序,校正拼写及语法错误2、编译:翻译源程序为目标代码(.obj)3、链接:将各个模块连接到一起,形成可执行程序文件(.exe)4、执行:执行

8、程序,二、上机步骤1、在DOS环境下,进入TC子目录,键入命令TC 如:C:cd tc C:TCtc2、在编辑窗口中,输入源程序,并进行检查3、用ALT+C激活Compile菜单,选择“Compile to OBJ”4、用ALT+C激活Compile菜单,选择“Link to EXE”5、用ALT+R激活RUN菜单,选择Run命令6、用ALT+R激活RUN菜单,选择User screen命令,注:,1、可用F9功能键一次性进行编译和连接 CTRL+F9执行程序 ALT+F5查看运行结果2、可用F10激活RUN菜单,选择RUN命令3、若在编译或链接过程中出现错误,可用F10激活菜单,用光标键移到

9、Edit菜单,继续进行编辑修改4、若要使用以前的旧文件,可使用ALT+F,打开file菜单,选择Load命令,调出所需文件。5、若当前源程序已操作完毕,需要输入下一个程序时,应使用ALT+F打开文件菜单,选择NEW命令,生成一个新文件,第二章 算 法,本章要点:1、了解什么是算法;为什么要使用算法;2、了解几种简单常见的算法3、了解算法的基本性质4、掌握算法的表示方法(重点掌握流程图)5、了解结构化程序设计的基本方法(阅读),第一节 算法的概念,一、程序:算法+数据结构=程序 1、算法:为解决一个问题而采取的方法和步骤。2、数据:程序操作对象算法+数据结构+程序设计方法+语言工具和环境=程序二

10、、程序设计的全过程:分析问题划分模块建立模型选择数据结构和算法描述算法(例如画出流程图)编程序上机调试程序分析运行结果整理结果写出程序说明书等文档。三、说明 1、对同一问题,有不同的算法;算法有优劣之分 2、计算机算法分为数值算法和非数值算法,第二节 算法举例1、有两盘磁带,A录英语,B录音乐,把它们交换过来,解:第一步:先将A磁带中的英语转录到C磁带上 第二步:再将B磁带中的音乐转录到A磁带上 第三步:最后交C磁带中的英语转录到B磁带上,2、把三个任意数按大小顺序排列,解:该问题的思路是把大数放在a中,把次大的数放在b中,把小数放在c中,再把这个思路进一步细化,即有下面算法:,第一步:输入a

11、,b,c 三个数 第二步:将a和b比较,较大者放在a中,小者放在b中 第三步:将a和c比较,较大者放在a中,小者放在c中 第四步:将b和c比较,较大者放在b中,小者放在c中 第五步:输出排列好的a,b,c三个数,3、求5!,解题思路:设两个变量,一个代表被乘数,一个代表乘数。将每一次乘积放在被乘数中。,算法设计:S1:使P=1S2:使i=2S3:使P*I,乘积仍放在P变量中,表示为p*I=pS4:使i的值加1,即i+1=iS5:如果i不大于5,返回重新执行步骤S3及其后的S4、S5;否则算法结束。,4、有50个学生,要求将他们之中成绩在80分以上者打印出来。,用n表示学生学号,n1代表第一个学

12、生学号,ni代表第i个学生的学号。用g代表学生成绩,gi代表第i个学生成绩,算法可表示如下:S1:i=1;S2:如果gi=80,则打印ni和gi,否则不打印S3:i=i+1;S4:如果i=50,返回S2,继续执行;否则,算法结束,5、判定20002500年中的每一年是否闰年,将结果输出闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年;(2)能被100整除,又能被400整除的年份是闰年。不符合这两个条件的年份都不是闰年。,算法如下:设y为被检测的年份S1:y=2000S2:若y不能被4整除,则输出y“不是闰年”。然后转到S6S3:若y能被4整除,不能被100整除,则输出y“是闰年

13、”。然后 转到S6S4:若y能被100整除,又能被400整除,则输出y“是闰年”。否则输出y“不是闰年”,然后转到S6S5:输出y“不是闰年”S6:y=y+1S7:当y2500,算法停止。,6、求1-1/2+1/3+1/33+1/99-1/100,算法如下:S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)*signS5:term=sign*(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若deno=100,返回执行S4;否则算法结束,7、对于一个大于或等于3的正整数,判断它是不是一个素数,判断一个正整数n是否为素数的方法:将 n作为被

14、除数,将2到n的平方根各个整数轮流作为除数,如果都不能整除,则n为素数。,算法:S1:输入n的值S2:i=2(i作为除数)S3:n被i除,得余数rS4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5S5:i=i+1S6:如果i=sqrt(n),返回S3;否则打印n“是素数”,然后结束。,三、算法设计1、判断一个数能否被3和5整除2、求两个正整数m和n的最大公约数,第三节 算法的性质,1、有穷性:步骤有限;范围合理2、确定性:算法含义确定,无歧义3、有零个或多个输入4、有一个或多个输出5、有效性:算法中的每一步都能有效执行,并得到确定结果,第四节 算法的表示,一、用自

15、然语言表述二、用流程图表示三、用N-S流程图表示四、用伪代码表示五、用计算机语言表示,如:求三个数的最大值,1、自然语言描述法 先将两个数a和b进行比较,找出其最大者,然后再把它和第三个数c进行比较,如果它比第三个数大,则它就是最大数,否则第三个数c就是最大数。2、伪码表示法 if ab then 把a交给max else 把b交给max if maxc then 输出最大值max else 输出最大值c,3、NS图表示法,4、流程图表示法,流程线,连接点,注释框,流程图表示法常用图例,Y,Y,N,N,5、计算机语言描述 main()int a,b,c,max;scanf(“%d,%d,%d”

16、,第三章 数据类型、运算符与表达式,本章要点:(本章内容全部要求掌握)1、常量与变量2、整型、实型、字符型数据3、变量赋初值的几种方法4、不同类型的数值型数据的混合运算5、算术运算符和算术表达式6、赋值运算符和赋值表达式7、逗号运算符和逗号表达式,考 试 内 容二、数据类型及其运算 1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法。2.C运算符的种类、运算优先级和结合性。3.不同类型数据间的转换与运算。4.C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。分析:这部分考试形式主要是选择题,一般会出4-5个选择题和2-3个填空题

17、。变量主要搞清楚全局变量(extern)和局部变量(在一个函数中或在一个模块中)。运算符要注意是左结合或右结合,3种逻辑运算符:!(逻辑非)、&(逻辑与)和|(逻辑或),位运算:&、|和的运算。另外,条件表达式和逗号表达式也是常考题型。,第一节 C的数据类型,C语言提供的数据结构是以数据类型出现的,如下:,C语言数据有常量和变量之分,它们都属于以上数据类型。,一、常量:在程序运行过程中,值不变的量。1、直接常量:即常数。如 1、2、3.5、a。可以分为实 型、整型、字符型。其特点是从字面上即可判定它 们是某一 类型的常量。也称“字面常量”2、符号常量:在一个程序中指定用一个符号代表一个 常量。

18、符号常量用#define命令定义。符号常量一经 定义其值在其作用域内不能改变。习惯上用大写。如在程序的开头有如下定义:#define PI 3.1415926 则在整个程序中可用“PI”代替3.1415926进行运算,第二节 常量与变量,例:符号常量的使用#define PI 3.1415926#define R 2.0main()double ar(double r),cir(double r);printf(“area=%f”,ar(R);printf(“tcircum=%f”,cir(R);double ar(double r)return(PI*r*r)double cir(doubl

19、e r)return(2.0*PI*r),同是常量,符号常量比一般常量在程序设计中有何优势:,#define PRICE 30main()int num,t;num=10;t=num*PRICE;printf(“total=%d”,t);,(1)含义清楚(2)一改全改,二、变量:在程序运行的过程中,值可以改变的量。标识符:某种对象的名字或标记。1、变量名:变量名只能由字母、数字和下划线组成,且第一个字 符必须为字母和下划线。如下是合法的变量名:sum、i、student_name、_1_2_3、_above、DAY 如下是不合法的变量名:M.D.john,$123,#33,3d64,ab注意:

20、1.大写字母和小写字母被认为是两种不同的字符。2.标识符的长度为8位,超过8位只有前8位有效(Turbo C 则允许32个字符)。3.尽量做到见名知意;如:SUM和sum为两个不同的变量。student_name和student_number为两个相同的变量。,3、变量值:变量定义后,为其分配存储空间,存放的是变量的值。int a;a=56;,2、变量定义:变量声明的一般形式:;如:int sum,i;,4、变量的使用:先定义,后使用。原因:(1)保证变量正确使用:未被定义的变量不能使用(2)不同类型的变量占用的内存空间不同(3)不同类型的变量对应取值的范围不同(4)不同类型的变量对应不同的一

21、组操作如:定义变量“student”,如果在使用时,误写为“stdent”,不能使用;整数占两个字节,实数占四个字节,字符占一个字节;整数范围为-3276832767之间;实数为10-381038;字符为0255;整数有“求余”(%)运算,实型数据没有。,第三节 整型数据,一、整型常量:有三种表示形式1、十进制数形式:1、98、3452、八进制数形式:以0 开头的数字。01、076 7*81+6*80=(62)103、十六进制数形式:以0 x开头的数字。0 x3F、0 x765 7*162+6*161+5*160二、整型变量:1、存储形式:数值以补码形式表示,占两个字节 见教材P41图3.2、

22、3.3所示,位、字节、字及字长,数据存储的组织形式,存储单元地址,0000H0001H0002HFFFFH,存储单元(字节),存储体,存储体结构图,2、整型变量的分类1)有符号基本整型:以signed int表示,占两个字节,表示范围-32768327672)无符号基本整型:以unsigned int 表示,表示范围0655353)有符号短整型:以signed short int 表示,一般也占2个字节,要求不长于int型,表示范围-3276832767。4)无符号短整型:以 unsigned short int表示,表示范围0655355)有符号长整型:以 signed long int 表

23、示,一般占4个字节,要求不小于int型,表示范围:-231(231 1)6)无符号长整型:以unsigned long int表示 表示范围:0(232 1),3、整型变量的定义:1、在程序中引用一个变量,实际上是对指定的存储空间的引用。因此必须先开辟存储空间才能引用它,即在引用变量之前必须先定义变量的类型,在编译时就会根据指定的类型为其分配一定的存储空间,并决定数据的存储方式和允许操作的方式 2、变量的定义一般在函数的开头部分;也可以在其它位置,但定义的位置影响变量的作用范围。,例1:int a,b unsigned short c,d;long e,f;,例2:main()int a,b,

24、c,d;unsigned int u;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d”,c,d);,运行结果:a+u=22,b+u=-14,不同种类的整型数据可以进行算术运算,4、整型数据的溢出,例:main()int a,b;a=32767;b=a+1;printf(“%d,%d”,a,b);,32767,-32768,例:main()int a,b;a=-32768;b=a-1;printf(“%d,%d”,a,b);,-32768,32767,整型常量的类型:整型常量赋值给整型变量时的注意事项 1、如果一个整型常量在-327683276

25、7之间,可以赋给int 型 和变量long int型变量。2、如果一个整型常量在-2 31231-1之间,可以赋给long int型变量 3、常量中没有无符号型,但非负常量可以赋给无符号变量 如:int unsigned int 123 unsigned int 65330 long int long int,第四节 实型数据,一、实型常量:实数又称为浮点数,有两种表示形式 1、十进制小数形式:由数字和小数点组成(必须有小数点)如:89.0、456.、0.456、0.0、2、指数形式:即科学计数法。如:45e2相当于45*102、34e-5相当于34*10-5。字母e(E)前必须有数字,字母e

26、后必须是整数。规范化的指数形式:小数点左边有且只有1位非0的数字。3.46e+5 3.46e-5二、存储方式:以指数方式存储。(P46图3.7)*小数位数越多,精度越高;指数部分越多,数据范围愈大。,三、实型变量类型:分为三种类型1、单精度型(float):一般占4个字节,有效数位为67位2、双精度型(double):一般占8个字节,有效数位为1516位3、长双精度型(long double):占16字节,有效数位为1819位实型常量不分单、双精度。可任意赋值,但有效数位不同。四、实型数据的舍入误差*系统存储实型数据时,由于数位有限,有效数位以外的数字将 被舍去,产生误差。,例:main()f

27、loat a,b;a=123456.789e5;b=a+20;printf(“%f,%f”,a,b);,12345678848.000000,注:应避免将一个很大的数与一个很小的数直接相加减。,五、实型常量的类型1、C编译系统将实型常量作为双精度处理,提高运算精度。2、一个实型常量可以赋给一个float型,double 型、long double型,系统会根据具体类型保留相应有效数位。例:1)f=2.45678*4523.65 2)float a;a=111111.111;printf(“a=%f”,a);,f,f,第五节 字符型数据,一、字符型常量:用一对单引号括起来的一个字符。说明:单引号

28、不是字符常量的一部分,只是一种界定符。单引号内不能是单撇号()或反斜杠();如果反斜 杠或单引号本身作为字符常量,必须使用转义字符:、。分为两种:1、普通字符:如:1、a、A、*2、转义字符:也称控制字符。说明:用反斜杠开头后面跟一个字母代表 一个控制字符。代表字符反斜杠;代表撇号字符 反斜杠后面的字符失去原来的含义,*例3:转义字符的使用(P49)main()printf(“ab ct derftgn”);printf(“htibbj k”);,*由此例,输出结果在打印机和显示器可能不同,但实际在计算机系统内部是一致的。,例1:打印人民币符号“”main()printf(“Yb=n”);,例

29、2:用转义字符输出可打印字符和不可打印字符main()printf(“x4Fx4Bx21n”);printf(“012”);printf(“x15 xABn”);程序运行结果如下:!,二、字符变量:用来存放字符常量。说明:一个字符变量占一个字节 一个字符变量只能存放一个字符 字符变量的定义用char,三、字符数据在内存中的存储形式及其使用方法1、字符常量与整型常量存储时都以ASCII码形式存放;2、字符常量可以赋值给整型变量,反之亦可;3、字符常量可以以整型常量形式输出,反之亦可;4、字符常量可表示0255之间的数值;5、有些系统将字符变量的最高位作为符号位,则取值范围为-128127,对于A

30、SCII 码为0127的整数,用%d格式输出 时,为正数;如果ASCII码超过127的字符,用%d格式输出 时,为负数;(如(127)10=(01111111)2(128)10=(10000000)2)6、字符型可以定义为unsigned char型,就可以不输出负数了。,char c=a;,c,例1:,int c=97;,c,高8位,低8位,例2:向字符变量赋以整数和向整型变量赋以字符常量。main()char c1,c2;/*定义两个字符型变量*/int a,b;/*定义两个整型变量*/c1=97;c2=98;/*分别给两个变量赋整型常量的值*/a=a;b=b;/*分别给两个变量赋字符型常

31、量的值*/printf(“%c%cn”,c1,c2);/*以字符格式输出两个字符型数据*/printf(“%c%cn”,a,b);/*以字符格式输出两个整型数据*/printf(“%d%dn”,c1,c2);/*以十进制格式输出两个字符型数据*/printf(“%d%dn”,a,b);/*以十进制格式输出两个整数型数据*/,输出结果:a b a b 97 98 97 98,*例3:大小字母的转换main()char c1,c2;/*定义两个字符型变量*/c1=a;c2=b;/*赋字符型常量*/c1=c1-32;c2=c2-32;/*分别减去32*/printf(“%c%cn”,c1,c2);/

32、*输出两个字符型数据*/printf(“%d%dn”,c1,c2);/*输出两个整数型数据*/,输出结果:A B65 66,四、字符串常量:1、概念:由一对双撇号括起来的零个或多个字符序列 如:“hello”、“programming”、“A”等。2、说明:双撇号是界定符,不属于字符串内容“”表示一个空字符串,在内存中占一个字节 0“A”表示一个字符串,A表示一个字符思考:“”在内存中占几个字节?,3、字符串常量与字符常量的区别:一个字符常量可以赋值给一个字符变量,而字符串不可以;二者界定符不同;二者的存储方式不同:存储字符串时,在其末尾加一个0作为 结束标志。但不输出。即存储字符串时,所需字

33、节数比字符串 长度多一个;A:“A”:“0”的含义是“空操作”,不产生任何作用,只起标志作用;无字符串变量,但可用字符型数组进行存储。,A,例:printf(“I am a student”);char c=a;char c=“a”;char c=“CHINA”;例:main()printf(“%d”,sizeof(Im a student!);,一、赋值:向变量所代表的存储单元传送数据的操作,用“=”表示二、赋值的一般形式:变量=表达式 三、可以先定义变量,后赋值;也可以在定义变量时直接赋值四、对几个变量同时赋值:1、int a,b,c=5;2、int a=3,b=3,c=3;int a,b

34、,c;a=b=c=3;int a=b=c=3;3、int a;a=3;4、int a,b,c;c=5;,第六节 变量赋初值,第七节 各类型数值数据间的混合运算,一、转换原因:不同类型之间进行运算,必须先转换为同一类型二、转换的类型:实型、整型、字符型三、转换规则:,1、按“向高看齐”的原则,将“较低”的类型进行提升 2、所有char 或short型 全部自动转换 为int型 3、float转换成double型图形注解:纵向箭头表示转换方向 横向箭头表示必然转换,P54例子,低,高,例:i为int,f为float,d为double,e为long,下试的运算顺序:,10+a+i*f d/e,第八节

35、 算术运算符和算术表达式,C运算符分类1、算术运算符:+、-、*、/、%2、关系运算符:、=、|、&5、赋值运算符:=、+=、-=、*=、/=6、条件运算符:(?:)7、逗号运算符:,8、指针运算符:*、&9、求字节数运算符:sizeof10、强制类型转换运算符:(类型名)11、分量运算符:12、下标运算符:13、其它:函数运算符(),一、算术运算符和算术表达式1、基本的算术运算符:+、-、*、/、%:模运算符,求余运算符;要求运算两侧为整型数据;例:7%3=1;-5%2=-1;-5/2=-2;2、算术表达式和算术运算 的优先级与结合性(1)算术表达式:用算术运算符和括号将运算对象连接起来的

36、符合C语法规则的式子。运算对象:常量、变量、函数(2)算术运算符的优先级:(*、/、%)(+、-)(3)算术运算符的结合性:自左至右,计算表达式值时,先按运算符优先级高低进行计算,如果 优先级相同,则按结合方向计算。3、强制类型转换符如果运算符两侧的数据类型不同,先要进行类型转换,使具有 同一类型。(1)系统自动转换:5+8.7(2)强制类型转换:8%2.5 8%(int)(2.5)强制类型转换的规则:(1)一般形式:(类型名)(表达式)如:(int)a;(float)(x+y);(double)(4%3);(2)注意:表达式应用括号括起来;强制类型转换时,得到一个所需类型的中间变量,原来变量

37、的类型并未发生变化。,例:(int)x+y:将x 转换成整 型数据后与y 相加(int)(x+y):将x+y的值转换成整型(int)x 与 int(x)、(int)(x)例:已知x 为一个实型变量,经过强制类型转换(int)x后,x 的 数据类型是怎样的。,进行强制类型转换,只是生成一个int型的中间变量,而x原来的 类型并没改变;所以x仍是实型数据。,例:main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);,运行结果如下:x=3.600000,i=3,4、自增、自减算术运算符 i=i+1;i+=1;用 i+、+i 来表示 i=

38、i-1;i-=1 用 i-、-i 来表示i+、i-为后缀形式,“先引用后增(减)值”+i、-i为前缀形式,“先增(减)值后引用”,例:int i=3;i-;y=i;,结果:y=2,i=2,int i=3;-i;y=i;,结果:y=2;i=2,int i=3;y=i-;,结果:y=3,i=2,int i=3;y=-i;,自增、自减运算只能用于变量,不能用于常量或表达式 如:a+合法。而 5+或(x+y)+不合法自增、自减运算的结合方向是“自右至左”。如:-a+相当于-(a+);,问:如果 a 的值为3,输出结果为多少?,例:设 a 的值为 3。求以下表达式的值1、(a+)+(a+)+(a+)2、

39、(+a)+(+a)+(+a),例:设a的值为3,b的值为 4,求下面表达式的值 a+b;,考虑:(a+)+b a+(+b),结论:尽可能多地自左而右将若干个字符组合。,表达式1的值为9,表达式2的值为18,例:/*程序功能:自增、自减运算符的用法与运算规则示例main()int x=6,y;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=6y=+x:x=7,y=7y=x-:x=6,y=7,例:int i=3;

40、printf(“%d,%d”,i,i+);,此问题涉及不同的计算机系统对函数求值方向不同。如果自左向右求值,则输出 3和3。如果自右向左求值,则输出4和3。,5、正、负号运算符 1)一元运算符;2)结合方向是自右向左的3)优先级和自增、自减相同,高于*、/运算符4)相当于一次算术运算,例:-a*b=(-a)*b-a=0-a,第九节 赋值运算符和赋值表达式,1、赋值运算符:“=”,将赋值号右边的常量或表达式的值赋给 赋值号左边的变量。2、类型转换:(1)实型数据赋给整型变量时,截取整数部分。如:int i;i=3.7;3(2)整型数据赋给实型变量时,以浮点数形式存储。如:float i;i=12

41、;12.000000(3)将double型数据赋给float型变量,截取前7位有效数据,但 不能溢出。(4)将float型数据赋给double型变量,数值不变,有效数位扩展(5)字符型数据赋给整型变量时,将字符型数据放入整型数据 低八位中。Turbo C将字符型数据默认为有符号型。(6)将整形数据赋给字符型变量时,将其低八位放入字符变量 其余部分截断,例:int i=289;char c=a;c=i;printf(“%c,%d”,c,c);!,33(7)将unsigned型数据赋给占相同字节的整型变量,原样 存入,高位补0,但不能出现溢出。例:unsigned int a=65535;int

42、b;b=a;printf(“b=%d”,b);b=-1 例:unsigned a;int b=-1;a=b;printf(“a=%u”,a);a=65535(8)将unsigned型数据赋给长度相同的unsigned型变量,原 样照赋。总结:按存储单元中的存储形式直接传送。,3、复合的赋值运算符,复合赋值运算的一般格式为:变量 双目运算符=表达式 复合赋值运算符它等价于:变量=变量 双目运算符(表达式)。,类型:+=,-=,*=,/=,%=;/*复合算术运算符(5个)*/&=,=,|=,=;/*复合位运算符(5个)*/,含义:例:a+=3 a=a+3 a-=3 a=a-3 a*=3 a=a*3

43、 a/=3 a=a/3 a+=b a=a+b a+=b+3 a=a+(b+3),4、赋值表达式,一般形式:说明:(1)一般形式中的也可以是一个赋值表达式 如a=b=c=5相当于a=(b=(c=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),(2)赋值表达式也可以包含复合的赋值运算符 int a=8;a+=a-=a*a;a+=a-=64 a+=(a=a-64)a+=(a=8-64)a+=a a=a+a=-48/-112(3)赋值表达可以出现在其它语句中 如printf(“%d”,a=b);,=-56,第十节 逗号运算符和逗号表达式,一、一般形式:表达式1,表达式2,

44、表达式n二、求解过程:按顺序求解。三、表达式的值:最后一个表达式的值四、优先级:最低五、不是所有的逗号都是逗号运算符,例:(1)a=5+4,6*a(2)(a=5+4,6*a),a-2(3)b=(a=4,a*5)(4)b=a=4,5*aprintf(“%d,%d”,a,b)printf(“%d,%d,%d”,(a,b,c),b,c);,答案:(1)54(2)7(3)b=20(4)20,思考1:假设所有变量均为整型,则表达式(a=2,b=5,a+,b+,a+b)的 值为_9_。思考2:已知A的ASCII码的十进制表示为65,下面程序的输出是什么?main()char c1=B,c2=y;print

45、f(“%d,%dn”,+c1,-c2);67,120,第四章 顺序程序设计,本章要点:第一节:C语句概述(了解)第二节:程序的三种基本结构(理解)第三节:赋值语句(掌握)第四节:数据输出(掌握)第五节:数据输入(掌握),顺序程序设计 数据的输入与输出,输入输出函数的调用。分析:数据的输入与输出和函数的调用。因为这些都是很基础的事情。,第一节语句概述,语句分类,控制语句,函数调用:由一次函数调用加一个分号构成一个语句,表达式语句:由一个表达式加一个分号构成一个语句,空语句:无任何动作;可作为转向点;,复合语句:由括起来的语句(分程序),条件语句 if()else 循环语句 for()while(

46、)do while()转向语句 goto 中止循环语句 continue break 多分支选择语句 switch返回语句 return,例:(1)if(xy)z=x;else z=y;(2)printf(“I am a student”);(3)a=6 a=6;(4);(5)a=a*3;b=a;printf(“a=%d b=%d”,a,b);,注:()每一个语句都有一个分号。()复合语句的花括号外面无分号。()函数调用可以是库函数,也可以是用户自定义函数。,第二节程序的三种基本结构,程序的三种结构即:顺序结构、选择结构、循环结构。,先执行操作后执行操作,例:a=3;b=4;c=a*b;pri

47、ntf(“c=%d”,c);,一、顺序结构:该结构中的操作按书写顺序进行。,二、选择结构:根据给定的条件进行判断,根据判断的结果在两条分支路径中选取其中的一条执行。可派生出多 分支选择结构。(if()else、switch),三、循环结构:根据给定条件是否满足决定是否继续执行循环体中的操作。,(1)直到型循环:先执行操作,再判断是否为假,若P为假,再执行,如此反复直到为真为止。(dowhile()),(2)当型循环:当条件成立时,反复执行操作,直到 为假时才停止循环。(for()、while(),第三节赋值语句,第四节 数据输入输出的概念及在C语言中的实现,1、所谓输入输出是相对计算机主体而言

48、。2、C语言不提供输入输出语句,通过函数实现。如 printf()scanf()putchar()getchar()puts()gets()3、在使用C输入输出函数时,要用预编译命令#include“stdio.h”包含进来。,第五节字符数据的输入输出,一、putchar 函数(单个字符输出函数):向终端输出一个字符,例1:/*功能:说明putchar()函数的格式和使用方法。*/#include stdio.h/*编译预处理命令:文件包含*/main()char ch1=N,ch2=E,ch3=W;putchar(ch1);putchar(ch2);putchar(ch3);/*输出*/pu

49、tchar(n);putchar(ch1);putchar(n);/*输出ch1的值,并换行*/putchar(E);putchar(n);/*输出字符E,并换行*/putchar(ch3);putchar(n);,说明:1putchar()函数的格式:putchar(c);其中c可以是一个字符型或整型的变量或常量,也可以是一个转义字符(n或)。例2:2putchar()函数的作用:向终端输出一个字符。(1)putchar()函数只能用于单个字符的输出,且一次只能输出一个字符。另外,从功能角度来看,printf()函数完全可以代替putchar()函数。(2)在程序中使用putchar()函数

50、,务必牢记:在程序(或文件)的开头加上编译预处理命令(也称包含命令),即:#include“stdio.h”或#include 表示要使用的函数,包含在标准输入输出(stdio)头文件(.h)中。,例2:#include main()int ch1=97;char ch2=a;putchar(97);/*整型的常量*/putchar(ch1);/*整型的变量*/putchar(a);/*字符型的常量*/putchar(ch2);/*字符型的变量*/,putchar也可以输出转义字符:putchar(101);putchar();putchar(n),二、getchar 函数(单个字符输入函数)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号