资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言程序设计,*,2025/4/30 周三,C语言程序设计,1,第,1,章 语言概述,主要内容,语言的发展简史及特点,C,程序的结构及书写规则,C,语言的语句、标识符和关键字,C,程序的运行与调试,核心知识点,C,语言的标识符和关键字,C,程序的基本结构,C,程序的书写规则,C,程序的编辑、编译、运行和调试的一般过程,2025/4/30 周三,C语言程序设计,2,重点难点,C,语言的基本结构,Turbo C,编译系统的工作环境参数的设置,编辑、编译、运行、调试,C,程序的完整的上机过程及,C,程序的编辑、调试技巧,核心知识点,了解,C,语言的发展历史和,C,语言的特点,掌握,C,程序的基本结构与书写规则,掌握,C,程序的编辑、编译、运行和调试的一般过程,第,1,章 语言概述,2025/4/30 周三,C语言程序设计,3,1.1 C,语言的发展简史和特点,语言的产生与发展,1967,年,英国剑桥大学的,M.Richards,在,CPL,语言的基础上实现并推出了,BCPL,(,Bisic,Combined Programming Language,)语言。,1970,年,美国贝尔实验室的,Ken Thompson,以,BCPL,语言为基础,又做了进一步简化设计出了,B,语言,并用,B,语言写了第一个,UNIX,操作系统。由于,B,语言过于简单,功能有限,,1972,年,贝尔实验室的,Dennis,M.Ritchie,在,B,语言的基础上设计出了,C,语言。,1973,年,贝尔实验室的,K.Thompson,和,Dennis,M.Ritchie,合作,首先用,C,语言重新改了,UNIX,操作系统。此后,伴随着,UNIX,操作系统的发展,,C,语言越来越广泛地被人们接受和应用。,至此,,C,语言不断得到改进,但主要还是作为实验室产品在使用,因为它仍然依赖于具体的机器。直到,1977,年才出现了独立于具体机器的,C,语言编译版本。,1978,年,,Brian,W.Kernighan,和,Dennis,M.Ritchie,正式出版了影响深远的,The C Programming Language,一书,此书中介绍的,C,语言成为后来广泛使用的,C,语言版本基础,它被称为标准,C,语言。,C,语言的的标准化工作是从,20,世纪,80,年代初期开始的。,1983,年,美国国家标准化协会(,ANSI,)颁布了,C,语言的新标准,ANSI C,。由于,C,语言的不断发展,,1987,年,美国国家标准化协会又颁布了新标准,87 ANSI C,。,1990,年,,87 ANSI C,成为,ISO C,的标准。目前流行的,C,编译系统都是以它为基础的。,目前,我国计算机上常用的,C,语言版本主要有:,Borland International,公司的,Turbo C,;,Microsoft,公司的,Microsoft C,等。,2025/4/30 周三,C语言程序设计,4,C,语言的特点,(,1,)语言简洁、使用方便。,(,2,)适应性强、应用范围广。,(,3,)运算符丰富,语言的表达能力强。,C,语言共有,34,种运算符,它把括号、赋值号、强制类型转换等作为运算符处理,使,C,语言运算类型丰富、灵活、多样,功能强大。可直接处理字符,访问内存地址,进行位操作等。,(,4,)数据结构系统化。,C,语言具有现代化语言的各种数据结构,且具有数据类型的构造能力,因此,便于实现各种复杂的数据结构的运算。,(,5,)具有结构化的控制语句。,C,语言是结构化的程序设计语言,提供了各种控制语句(如,if,、,while,、,for,、,switch,等),对程序的逻辑结构提供了很好的基础。其程序结构清晰,层次分明,有利于采用自顶向下、逐步求精的程序设计方法。,(,6,)运行程序质量高,程序运行效率高。试验表明,,C,源程序生成的运行程序的效率仅比汇编程序的效率低,10%,20%,。,(,7,)可移植性好。,C,编译程序基本上不做修改就能用于各种型号的计算机和各种操作,2025/4/30 周三,C语言程序设计,5,1.2 C,程序的结构与书写规则,用,C,语言编写的程序称为,C,程序或,C,源程序。下面通过一个简单的,C,程序实例,分析,C,程序的基本组成和结构。,【,例,1-2,】,main()/*,主函数,*,/,int,a,b,c,;/*,声明部分,定义,a,,,b,,,c,为整型变量,*,/,scanf(%d,%d,&a,&b,);/*,由键盘输入,a,和,b,的值,*,/,c=,max(a,b,);/*,调用,max,函数,将得到的值赋给,c*/,printf(max,=%,d,c,);/*,输出,c,的值,*,/,int,max(int,x,int,y)/*,定义,max,函数,*,/,int,z;/*max,函数中定义变量,z,为整型,*,/,if(xy)z=x;,else z=y;/*,如果,xy,,将,x,赋值给,z,,否则将,y,赋值给,z*/,return(z,);/*,将,z,的值返回到函数的调用处,*,/,这个程序的执行结果如下:,3,5,max=5,(输出,max,的值),2025/4/30 周三,C语言程序设计,6,一个完整的,C,程序结构有以下特点:,(1)C,语言是由函数构成的。函数是,C,语言程序的基本单位。其中,main,函数是一个特殊的函数,一个完整的,C,程序必须有且仅有一个,main,函数,它是程序启动时的惟一入口(不管,main,函数的位置如何)。除,main,函数之外,,C,程序也可包含若干个其他,C,标准函数和用户自定义的函数,它们可以相互调用,最终返回主函数结束程序。,(2),一个函数是由函数说明和函数体两个部分组成。,函数的说明部分。确定函数名并说明函数名、函数类型、形式参数名及其类型。如例,1.2,中:,int,max (,int,x ,int,y),类型名 函数名 形参,x,为整型 形参,y,为整型,函数体。由函数说明部分下的第,1,对大括弧“,”,内的一系列语句和注释构成。语句又包括变量的定义和可执行语句两部分。,变量定义:如,main,函数中的“,int,a,b,c,;”,语句,,max,中的“,int,z;”,语句。,可执行语句:完成当前函数功能的语句。,(3),程序书写格式较自由,一行可写几条语句,一条语句也可以分行书写。,(4),语句以分号结束,例如:,z=y;,。,(5),在每条语句后,可用,/*/,对该语句进行注释,以增加程序的可读性。注释不影响语句的功能。,2025/4/30 周三,C语言程序设计,7,1.3 C,语言的语句、标识符和关键字,1.3.1 C,语言的语句,C,语言的语句是由关键字、标识符、运算符、常量和变量来构成的。,1.3.2 C,语言标识符,在程序设计中,常用具有一定意义的名字来标识程序中的变量、函数、数组、类、标号以及用户自定义的数据类型,以方便在程序设计中按名字来访问数据,这个名字称为标识符。,在,C,语言程序中,标识符由,1,8,个字符组成。构成标识符的字符只能是下划线“,_”,、数字(,0-9,)和英文字母,并且标识符的第一个字符只能是下划线或英文字母。,下列这些都是合法的标识符:,address,、,Tel,、,name,、,password,、,varl,、,year_1999,、,_123,、,ID_view,下列这些都是非法标识符:,T-3,、,2abc,、,Tel#,、,str,、,mailsina,、,+point,、,!key,C,语言是一种对字母大小写敏感的语言,定义标识符必须注意字母的大小写,例如:,passWord,和,password,在,C,语言中是两个不同的标识符。,2025/4/30 周三,C语言程序设计,8,1.3.3 C,语言关键字,在,C,语言程序中,还有一类特殊的标识符,它们不能被用户程序中自定义的标识符,它们仅供系统专用,不能用作用户定义的标识符,称为关键字,又称系统保留字。,关键字是有特殊含义的系统标识符,它们不能隨便被用作用户程序中定义的标识符。,C,语言保留的关键字如下:,_,cs,_,ds,_,es,_,ss,asm,cdecl,auto,double,far,huge,interupt,int,pascal,near,long,switch,for,enum,register,type def,break,char,extern,return,union,const,float,short,signed,unsigned,continue,static,while,viod,do,else,if,struct,size of,volatile,goto,default,2025/4/30 周三,C语言程序设计,9,1.4 C,程序的运行与调试,1.4.1 C,程序设计的基本步骤,程序设计就是用某种程序语言编写程序的过程。,一个简单的程序设计一般包含以下四个步骤:,(,1,)分析问题,建立数学模型,(,2,)确定数据结构和算法,(,3,)编写程序,(,4,)调试程序,2025/4/30 周三,C语言程序设计,10,1.4.2,如何使用,Turbo C+3.0,运行与调试,C,程序,“,Turbo C+3.0”,软件是,Borland,公司在,1992,年推出的强大的、集程序编辑、编译、连接、调试为一体的,C,语言程序设计与,C+,面向对象程序设计的集成开发工具。它具有速度快、效率高、功能强等优点,使用非常方便,并且完全支持鼠标选择、拖放和右键操作,很好地照顾了习惯于图形操作环境的用户。,C,语言程序人员可在,Turbo C,环境下进行全屏幕编辑,利用窗口功能进行编译、连接、调试、运行、环境设置等工作。,2025/4/30 周三,C语言程序设计,11,1.Turbo C,的工作窗口,下面是,Turbo C,的工作窗口。,它包括以下几方面的内容:,(,1,)主菜单:在,TC,屏幕的顶部。它包括,8,个主菜单,分别用来实现各项操作。,(,2,)编辑窗口:在主菜单的下面,屏幕的左上部,正上方有所编辑的,C,程序文件名字样作为标志。其作用是对,Turbo C,源程序进行输入和编辑。,(,3,)信息窗口:在屏幕的左下部,用来显示编辑和连接时的有关信息。,(,4,)监视窗口:在主菜单的下面,屏幕的右上部,用来设置程序执行的断点,插入、编辑监视表达式,显示监视程序执行的有关信息。,(,5,)输出窗口:在屏幕的右下部,用来显示程序执行结果的有关信息。,(,6,)功能提示行:在屏幕最下方,它显示一些功能键的作用。,2025/4/30 周三,C语言程序设计,12,2.,编辑一个新文件,如果要编辑一个新的,C,程序,具体操作步骤如下:,选主菜单中的,File,菜单。,按回车键后出现下拉菜单,用键盘上的,和,键找到子菜单,New,,编辑一个新的程序,如下图所示:,按回车键,编辑窗口就被清空,光标定位在左上角(第,1,行、第,1,列)。用户可以开始输入和编辑源程序了。输入程序后应对程序作认真检查,并改正已发现的错误。这时应及时将源程序保存起来。,2025/4/30 周三,C语言程序设计,13,对于源程序的保存常用方法有两种:,方法一,:从,File,菜单下找到子菜单,Save,。按回车键后,,TC,就会弹出一个对话框,要求用户指定文件名,见图,1-3,。,图,1-3,源程序保存的默认路径和文件名,从上图中可以看到:在对话框中有文件的默认的路径(,C,:,TCPROJECT,),(,与文件安装的位置,C,:,TC,有关,),和默认的文件名(,NONAME00.C,)。,方法二:按,F2,键直接保存文件,但保存的是默认的路径和默认的文件名。,2025/4/30 周三,C语言程序设计,14,3.,编辑一个已存在的文件,假如上次编辑的源文件需要进行编辑,就需要把它从磁盘中调出来。按,F10,键,再选择菜单,FileOpen,,这时,屏幕上会出现一个包含,*,.C,的“装入文件对话框”,用户输入准备调入的文件路径和文件名,按回车键即可进行编辑。,2025/4/30 周三,C语言程序设计,15,4.,确定,TC,工作环境,如果用户把已经编译好的源程序换一个地方(比如换到另外一台计算机上)进行编译,却发现本来正确的现在却不能运行,主要是,TC,工作环境设置不正确造成的。,确立,Turbo C,系统的工作环境,需要利用主菜单条上的,Options,菜单。首先在主菜单窗口上,将亮块移到,Options,处,按回车键,用,键选择,Directories,项,见图,1-4,。,图,1-4,确定,TC,的工作环境,2025/4/30 周三,C语言程序设计,16,按回车键又弹出一个窗口,见图,1-5,。,图,1-5 Options,菜单的,Directories,项,图,1-5,所示窗口中各项的含义如下:,(,1,),Include Directories,:,C,:,TCINCLUDE,(指“包含文件”所在的目录),(,2,),Library Directories,:,C,:,TCLIB,(指库文件所在的目录),(,3,),Output Directory,:,C,:,TCOUTPUT,(指定输出文件存放的目录),(,4,),Source Directories,:,C,:,TC,(指,Turbo C,系统文件所在的目录),2025/4/30 周三,C语言程序设计,17,在进行了以上设置后,还应当把这些信息保存起来。打开,Options,菜单,然后选择,Save,菜单项,并按回车键时会弹出一个对话框,见图,1-6,。点击,OK,按钮保存。,图,1-6 TC,配置文件的建立,2025/4/30 周三,C语言程序设计,18,5.,编译和连接,编辑好源程序并存盘后,应当对源程序进行编译、连接和运行。(,1,)编译、连接分别进行,编译,按,F10,键,将亮条移至,Compile,处后回车(也可直接按,Alt+C,),即可产生一个编译菜单,见图,1-7,。,图,1-7 TC,的编译菜单,选择,Compile,,此时系统显示出默认的目标文件名。如果当前被编译的源程序文件名为,c1.c,,系统就自动将目标文件名定为,c1.obj,,按回车键就可以进行编译。编译后将生成的目标文件,c1.obj,保存在当前工作目录或指定的输出目录中。,2025/4/30 周三,C语言程序设计,19,选择,Compile,,此时系统显示出默认的目标文件名。如果当前被编译的源程序文件名为,c1.c,,系统就自动将目标文件名定为,c1.obj,,按回车键就可以进行编译。编译后将生成的目标文件,c1.obj,保存在当前工作目录或指定的输出目录中。,连接,有了目标文件后,还不能直接运行,还要将目标文件与系统提供的库函数和包含文件等连接成一个可执行文件(后缀为,.exe,),才能运行这个,.exe,文件。,按,F10,键后选择,CompileLink,,然后按回车键,就可执行连接,在当前工作目录或指定的输出目录中生成一个可执行文件,*,.exe,。应当注意:必须先进行编译,得到,*,.,obj,文件后才能进行连接,否则会出错。,2025/4/30 周三,C语言程序设计,20,(,2,)一次完成编译和连接,用,Alt+F9,得到编译菜单,从中选择,Make,项(见图,1-8,),按回车键后就可一次完成编译和连接,在当前工作目录或指定的输出目录中生成一个目标文件,*,.,obj,和一个可执行文件,*,.exe,。,图,1-8,一次完成编译和连接,在,Turbo C,的信息窗口下面有一个“功能键提示行”,其中的“,F9”,表示:按,F9,键相当于选择了编译菜单中的“,Make”,,即可一次完成编译和连接。用户既可以按以上介绍的通过选择菜单来进行编译和连接,也可以直接按,F9,键进行编译和连接。,2025/4/30 周三,C语言程序设计,21,(,3,)对多个文件程序进行编译和连接,如果一个源程序包含多个文件模块,则应当对各文件分别进行编译,得到多个,.,obj,文件(每个源文件(后缀为,.c,)编译后生成一个,.,obj,文件),然后将这些目标文件以及库函数、包含文件等连接成一个可执行文件。,Turbo C,提供了对多个文件程序进行编译和连接的简便方法。要将这些文件组成一个“项目”,为此要建立一个“项目文件”,在该文件中包含各文件的名字,然后将该项目文件交付编译和连接,就可以得到可执行文件,.exe,。,2025/4/30 周三,C语言程序设计,22,6.,运行,如果在编译、连接过程中未发现错误,系统就会生成目标文件,.,obj,和可执行文件,.exe,,如发生错误就需要对程序进行修改,一直到无错误为止。这时就可以运行了。运行一个程序,可以采用以下几种方法:,(,1,)在,TC,集成环境中通过菜单选择运行,按,F10,键,然后在主菜单条中选择“,Run”,,并回车键出现“,Run”,下拉菜单,见图,1-9,。,图,1-9 TC,的运行菜单,从中选择,Run,项并按回车键,即开始运行。,2025/4/30 周三,C语言程序设计,23,(,2,)直接用,Ctrl+F9,键使之运行。,Ctrl+F9,键的作用不仅是运行,而是包含编译、连接和运行。因此,完成一个源程序的编辑后,如果经过检查认为没有问题,就可以直接按,Ctrl+F9,键。这时,Turbo C,将一次完成从编译、连接到运行的全过程。如果在编译或连接中有错,就将停下来,显示出错信息,等用户改正后再按,Ctrl+F9,键重新编译、连接;如不出错,就自动开始运行。,下面把最常用的功能键的有关操作作简要列出:,F9,:进行编译和连接。,Ctrl+F9,:编译、连接、运行。,Alt+F5,:观看运行结果。,按任一键:从用户屏切换到,TC,窗口。,2025/4/30 周三,C语言程序设计,24,7,观察运行结果,程序的运行结果可直接在输出窗口观察,也可在,Windows,菜单中,User Screen,子菜单下进行观察。如图,1-10,所示。,图,1-10,运行结果的观察,2025/4/30 周三,C语言程序设计,25,第,2,章 基本数据类型、运算符与表达式,主要内容,语言的数据类型,语言的常量、变量,整型数据、实型数据和字符型型数据,各种类型数据之间的混合运算,C,语言的运算符及其表达式,运算符的优先级及其结合性,核心知识点,C,语言的运算符及表达式,各类数值型数据间的混合运算规则,运算符优先级与结合性,2025/4/30 周三,C语言程序设计,26,第,2,章 基本数据类型、运算符与表达式,重点难点,C,语言的运算符及其表达式的使用,各类数值型数据间的混合运算,学习目标,了解,C,语言的数据类型,掌握常量和变量概念、分类及变量初始化方法,掌握整型、实型和字符型数据的形式,掌握各类数值型数据间的混合运算规则,掌握常见的各种运算符及其表达式,理解运算符优先级与结合性,2025/4/30 周三,C语言程序设计,27,2.1 C,语言的数据类型,2.2,常量和变量,2.3,整型数据,2.4,实型数据,2.5,字符型数据,2.6,各类数据混合运算,2.7,运算符与表达式,2.8,运算符的优先级及其结合性,2025/4/30 周三,C语言程序设计,28,2.1 C,语言的数据类型,C,语言提供的数据结构,是以数据类型形式出现的。具体分类如下:,1.,基本类型,分为整型、实型(又称浮点型)和字符型。,2.,构造类型,分为数组类型、结构类型和共用类型,分别在第,6,章和第,10,章介绍。,3.,指针类型,(*),在第,9,章中介绍。,4.,空类型(,void,),本章将介绍基本类型中的,整型、实型和字符型,三种数据。,2025/4/30 周三,C语言程序设计,29,2.2,常量和变量,2.2.1,常量,1.,常量的概念,在程序运行过程中,其值不能被改变的量称为常量。,2.,常量的分类,常量的类型,可通过书写形式来判别。,(,1,)整型常量:如:,123,,,-123,。,(,2,)实型常量:如:,123.12,,,-12.34,。,(,3,)字符常量:如:,a,k,。,(,4,),字符串常量:如:,“,China,”,。,(,5,),符号常量:为代表常量的标识符(符号),一般用大写字母表示,如:在程序开头有:,#define PI=3.14,,,则之后就可使用标识符,PI,代表常量,3,.,14,。(关于,#define,的用法可参看,8.1,节),2025/4/30 周三,C语言程序设计,30,2.2.2,变量,1.,变量的概念,在程序运行过程中,其值可以被改变的量称为变量。,2.,变量的两个要素,(,1,),变量名,。每个变量都必须有一个名字,变量名,变量命名遵循标识符命名规则。,(,2,),变量值,。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。,3.,变量的定义与初始化,C,语言要求对所有用到的变量,“,先定义,后使用,”,。,(,1,)变量的定义,数据类型标识符,2025/4/30 周三,C语言程序设计,31,类型标识符必须是,C,语言的,有效数据类型符,,如:,int,、,char,、,float,、,double,等,。变量名列表是一个或多个标识符名,当变量名多于两个以上时,每个标识符之间用,分隔。例如,:,int,i,j,k;,char c,str5;,(,2,)变量初始化,数据类型 变量名,=,初值,1,变量名,2=,初值,2,;,例如:,int,x=3;,/*,指定整型变量,x,的初值为,3*/,float f=3.56;,/*,指定单精度实型变量,f,的初值为,3.56*/,char,ch,=a;,/*,指定字符型变量,ch,的初值为,a*/,int,a,b,c=5;,/*,指定整型变量,c,的初值为,5,,未指定整型变量,a,、,b,的初值,*,/,2025/4/30 周三,C语言程序设计,32,在定义变量时不允许用连等的方式同时给多个变量指定相同的初值。如:,int,a=b=c=3;,是不合法的,。,应该写成:,int,a=3,b=3,c=3;,2025/4/30 周三,C语言程序设计,33,2.3,整型数据,2.3.1,整型常量,1,整型常数的表示,按不同的进制区分,整型常数有三种表示方法,:,(,1,)十进制(以非,0,开始的数),,例如:,123,、,-123,。,(,2,)八进制(以数字开头),,例如:,0123,(表示十进制数,83,)、,06,(表示十进制数,6,)。,(,3,)十六进制(以数字,+,小写字母,x,开头或以数字,+,大写字母,X,开头),,例如:,0 x123,(,表示十进制数,291,)、,0XFF,(,表示十进制数,255,)。,另外,可在整型常数后添加一个,L,或,l,字母表示该数为长整型数,例如:,22L,-773l,。,2025/4/30 周三,C语言程序设计,34,2,整型常量的类型,加上不同的修饰符,整型常量可分为如下几种类型:,(,1,)基本整型,值范围:,-32768,32767,。,(,2,),短整型,与基本整形相同,。,(,3,),长整型,在数值后面加,“,L,(,l,),”,。,对超出基本整型值域的整型常量,可使用长整型常量表示,其取值范围可达,-,(,-,)。例如,,123l,、,315,等。,(,4,),无符号整型,在数值后面加,“,U,(,u,),”,。,如:,12345u,在内存中按,unsigned,int,方式存放,而,-12345u,则先转换成其补码,53191,,然后再以无符号数方式存放。,想一想:,-10u,在内存中的存放形式,(,值,),是多少,?(,即求,-10,的补码,),2025/4/30 周三,C语言程序设计,35,上述各类型整型常量占用的内存字节数,随系统而异。在,16,位操作系统中,一般用,字节表示一个,int,型常量,用,4,字节表示一个,long,型常量。,2.3.2,整型变量,1,整型变量的分类,根据占用内存字节数的不同,整型变量又分为类:,(,1,)基本整型,包括,:,有符号基本整型(简称为基本整型),其类型标识符为,int,,,用来存储有符号基本整数。,无符号基本整型,其类型标识符为,unsigned,int,,,用来存储无符号的基本整数。,2025/4/30 周三,C语言程序设计,36,(,2,)短整型,包括:,有符号短整型(简称为短整型),其类型标识符为,short,或,short,int,,,用来存储有符号的短整数。,无符号短整型,其类型标识符为,unsigned short,,,用来存储无符号的短整数。,(,3,)长整型,包括:,有符号长整型(简称为长整型),其类型标识符为,long,或,long,int,,,用来存储有符号的长整数。,无符号长整型,其类型标识符为,unsigned long,,,用来存储无符号的长整数。,2025/4/30 周三,C语言程序设计,37,2,整形变量占用内存字节数与取值范围,C,语言标准没有规定整型变量在计算机内存中所占的字节数,它与具体的机器和操作系统有关,例如,在位的计算机中,一个整形变量一般占个字节,而在位的计算机中,一个整形一般占个字节。而且不同类型的整型变量,其取值范围是不同的。,占用内存字节数为,n,的(有符号)整型变量,其值域为:,-2,n*8-1,(,2,n*8-1,-1,),;,无符号整型变量的值域为:,0,2,n*8,-1,。,例如,,PC,机中的一个,int,型变量占,2,字节,其值域为,-2,2*8-1,(,2,2*8-1,-1,),即,-32768,32767,;一个,unsigned,型变量的值域为:,0,(,2,2*8,-1,),即,0,65535,。,2025/4/30 周三,C语言程序设计,38,3,整型变量定义,可以用上面几种整形类型定义整型变量,如:,int,a,b;/*,指定变量,a,、,b,为整型,*,/,unsigned short c,d;/*,指定变量,c,、,d,为无符号短整型,*,/,long e,f;/*,指定变量,e,、,f,为长整型,*,/,unsigned long g;/*,指定变量,g,为无符号长整型,*,/,想一想:若有,int,a,b;a=32767;b=a+1;,此时,b,的值为多少,?,为什么,?,注意整形数据类型匹配规则为:一个整型常量可以赋给能容纳下其值的整型变量。,2025/4/30 周三,C语言程序设计,39,2.5,实型数据,2.4.1,实型常量,1.,表示形式,实型常量即实数,又称浮点数,其值有两种表示形式:,(,1,)十进制形式:必须有小数点。,例如,3.14,、,9.8,、,0.123,、,.123,、,-123.0,等。,(,2,)指数形式:,E,(或,e,),。,例如,3.0,+5,、,123E-2,、,-6.8e-18,、,123e3,或,123E3,等。,.,说明,:,(,1,)实型常量均为有符号浮点数,没有无符号浮点数。,(,2,)实型常量只能用十进制形式表示,而无其它进制表示形式。,(,3,)按默认格式输出实型常量时,最多只保留小数点后六位。,2025/4/30 周三,C语言程序设计,40,2.4.2,实型变量,1.,实型变量的分类,实型变量分为两种:,(,1,)单精度型。类型标识符为,float,,,占,4,字节(共,32,位二进制数)、提供,7,位有效数字,数的取值范围是,3.4E-38,3.4E+38,。,(,2,),双精度型。类型标识符为,double,,,占,8,个字节(共,64,位二进制数)、提供,1516,位有效数字,数的取值范围是,1.7E-308,1.7E+308,。,2.,实型变量的定义,可以用下列语句定义浮点型变量,:,float x,y;/*,指定,x,、,y,为单精度实型变量,*,/,double z;/*,指定,z,为双精度实型变量,*,/,2025/4/30 周三,C语言程序设计,41,2.5,字符型数据,2.5.1,字符常量,1.,字符常量的定义,用一对单引号括起来的单个字符,称为字符常量。例如,,A,、,、,等。,字符常量也可以用该字符的,ASCII,码值表示,例如:可用十进制数,65,表示大写字母,A,、,十进制数,10,表示换行,另外,C,语言还有一种特殊的字符常量,转义字符。,2.,转义字符(看书表,2-3,),转义字符是以反斜杠,“,”,开头,后面跟一个字符,或者一组八进制整常数或十六进制整常数的一种特殊形式的字符常量。其功能是将反斜杠,“,”,后面的字符转换成另一种含义。,2025/4/30 周三,C语言程序设计,42,例如:,102,表示,B,,,x4F,代表字符,O,,,x4B,代表字符,K,,,x21,代表字符,!,。,转义字符主要用来控制打印机和屏幕输出。例如:,printf(n,sum is%dnn,sum);,注意,:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:,、,。,想一想:若有,char a=,1,;,printf(,“,%c%c%c,”,a,a,a,),输出结果是什么,?,2025/4/30 周三,C语言程序设计,43,2.5.2,字符变量,字符变量的类型关键字为,char,,,一般占用,1,字节内存单元。,1.,变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的,ASCII,码值(无符号整数)存储到内存单元中。,例如,,char ch1,ch2;/*,定义两个字符变量:,ch1,,,ch2*/,ch1=,a,;ch2=,b,;/*,给字符变量赋值,*,/,2025/4/30 周三,C语言程序设计,44,2.,特性,字符数据在内存中存储的是字符的,ASCII,码,一个无符号整数,其形式与整数的存储形式一样。,(,1,)一个字符型数据,既可以字符形式输出,也可以整数形式输出。,(,2,)字符型数据与整型数据之间可通用。,C,语言允许对字符数据进行算术运算,此时就是对它们的,ASCII,码进行算术运算。,注意:,C,语言不允许用字符形式输出一个大于,255,的数值,否则会出错。,2025/4/30 周三,C语言程序设计,45,main(),char c1,c2;/*,定义字符变量,c1,,,c2*/,c1=97;c2=98;/*,给字符变量,c1,,,c2,赋初值,*,/,printf(%c,%cn,c1,c2);/*,以字符形式输出,*,/,printf(%d,%dn,c1,c2);/*,以整数形式输出,*,/,c1=c1-32;c2=c2-32;/*,将小写字母转换为大写字母,*,/,printf(%c,%cn,c1,c2);/*,以字符形式输出,*,/,printf(%d,%dn,c1,c2);/*,以整数形式输出,*,/,【,例,2-1,】,观察下面程序的运行结果。,2025/4/30 周三,C语言程序设计,46,2.5.3,字符串常量,1.,字符串常量的概念和字符串长度,字符串常量是用一对双引号括起来的若干字符序列。,字符串中字符的个数称为字符串长度。长度为,0,的字符串(即一个字符都没有的字符串)称为空串,表示为,“,”,(一对紧连的双引号)。,例如,,“,How do you do.,”,、,“,Good morning.,”,等,都是字符串常量,其长度分别为,14,和,13,(空格也是一个字符)。,2025/4/30 周三,C语言程序设计,47,如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:,(,1,),C:msdosv6.22 C:msdosv6.22,(,2,),I say:Goodbye!I say:Goodbye!,2.,字符串的存储,C,语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个,0,作为字符串的结束标志。,注意,:在源程序中书写字符串常量时,不必加结束字符,0,,否则画蛇添足。,如果有一个字符串为,“,CHINA,”,,,则它在内存中的实际存储如下所示:,最后一个字符,0,是系统自动加上的,它占用字节而非字节内存空间。,C,H,I,N,A,0,2025/4/30 周三,C语言程序设计,48,注意:字符常量,A,与字符串常量,A,是两回事:,(,1,)定界符不同:字符常量使用单引号,而字符串常量使用双引号;,(,2,)长度不同:字符常量的长度固定为,1,,而字符串常量的长度,可以是,0,,也可以是某个整数;,(,3,)存储要求不同:字符常量存储的是字符的,ASCII,码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志,0,。,2025/4/30 周三,C语言程序设计,49,2.6,各类数据混合运算,整型、实型(包括单、双精度)、字符型数据可以混合运算。例如:,10+a+1.5-8765.1234*b,各类数据混合运算时,先转换成同一种类型,然后进行运算。转换规则如图,2-2,所示。,图,2-2,数据混合运算转换规则,2025/4/30 周三,C语言程序设计,50,1.,自动转换,整型、实型和字符型数据间进行混合运算,系统可自动进行数据类型转换。,如果一个运算符两侧的操作数的数据类型不同,则系统按,“,先转换、后运算,”,的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则如图,2-2,所示。,(,1,)横向向左的箭头,表示必须的转换。,char,和,short,型必须转换成,int,型,,float,型必须转换成,double,型。,(,2,)纵向向上的箭头,表示不同类型的转换方向。,例如,,int,型与,double,型数据进行混合运算,则先将,int,型数据转换成,double,型,然后在两个同类型的数据间进行运算,结果为,double,型。,2025/4/30 周三,C语言程序设计,51,例如:若已定义以下变量,int,i;float f;double d;long e;,则计算式:,100+a+i*f-d/e,的运算次序是:,a.,进行,100+,a,运算。先将,a,转换为整数,97,,运算结果为整数,197,。,b.,进行,i*f,运算。先将,i,和,f,均转换为,double,类型(实运算过程总是使用,double,类型,仅在把结果存入存储器时,才可能使用,float,类型),运算结果是,double,类型。,c.,整数,197,与,i*f,的积相加。先将整数,197,转换为,double,类型(,197.0,),运算结果是,double,类型(假设值为,A,)。,d.,进行,d/e,运算。先将,long e,转换为,double,类型,运算结果是,double,类型(假设值为,B,)。,e.,最后进行,A-B,的运算,结果为,double,类型。,2025/4/30 周三,C语言程序设计,52,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,),*,/,(float),(,5%3,),/*,将,5%3,的值转换为,float,类型,*,/,2025/4/30 周三,C语言程序设计,53,说明:,(,1,)强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变化。,例如:(,int,),x,只是将
展开阅读全文