C语言程序设计教程(厦门大学出版社提供)_第1页
C语言程序设计教程(厦门大学出版社提供)_第2页
C语言程序设计教程(厦门大学出版社提供)_第3页
C语言程序设计教程(厦门大学出版社提供)_第4页
C语言程序设计教程(厦门大学出版社提供)_第5页
已阅读5页,还剩771页未读 继续免费阅读

下载本文档

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

文档简介

出品人:蒋东明主编:叶东毅责编:眭蔚制作人:洪晓婧,第一章程序设计概述第二章C语言概述第三章数据类型、运算符与表达式第四章程序控制结构第五章数组第六章指针第七章函数,第八章用户自定义数据类型第九章文件,第一章程序设计概述,主要内容:第一节程序和程序设计语言第二节算法概述第三节结构化程序设计方法本章小结习题,第一节程序和程序设计语言,一、程序与程序设计的概念,作为一种能自动计算的机器,计算机通过执行一系列指令来完成给定的计算工作。因此,要让计算机完成某项任务,就必须将完成这项任务的方法和具体步骤编写成计算机可以直接或间接执行的一系列指令,使之执行这些指令后,就可以完成给定的任务。这样的一系列指令的集合就称为计算机程序或简称程序,编写这些指令就是程序设计。,第一章第一节,二、程序设计语言,程序设计语言是一组用来定义计算机程序的语法规则,用来向计算机发出指令。人们借助程序设计语言来编写程序,解决不同的问题。程序设计语言按照语言级别可以分为低级语言和高级语言。,第一章第一节,二、程序设计语言,低级语言有机器语言和汇编语言,主要由机器基本指令集构成。它依赖于所使用的计算机硬件,即与特定的机器有关。它具有运行效率高的特点,但编写复杂、费时,容易出差错,而且程序修改维护困难。高级语言的表示方法比较接近于自然语言,在一定程度上与具体的计算机硬件无关,相对来说易于学习和使用,而且也便于维护,但是运行效率不如低级语言。,第一章第一节,二、程序设计语言,下面对程序设计语言做进一步的解释。1.第一代程序设计语言(1GL):机器语言2.第二代程序设计语言(2GL):汇编语言3.第三代程序设计语言(3GL):高级语言4.第四代程序设计语言(4GL):面向问题语言,第一章第一节,第二节算法概述,一、算法的概念,一般来说,为解决一个问题而采取的方法和步骤,就称为算法。计算机算法则是用计算机求解一个具体问题或执行特定任务的一组有序的操作步骤(或指令),是构成计算机程序的核心部分。著名瑞士计算机科学家N.Wirth曾经提出一个公式:程序=数据结构+算法其中,数据结构主要是数据的类型和数据的组织形式,是对程序中数据的描述。算法则是对程序中操作的描述,也就是操作步骤。,第一章第二节,一、算法的概念,需要注意的是,算法一般只是对处理问题思想的一种描述,不是计算机可以直接执行的程序代码。因此算法本身是独立于计算机的,算法的具体实现则由计算机完成。从这个意义上说,程序设计的本质就是要将算法转化为计算机程序。处理一个问题,可以有不同的算法。设计和选择算法是至关重要的。不仅要保证算法正确,还要考虑算法的质量和效率。,第一章第二节,二、算法的表示方法,描述一个算法可以有不同的方式,常见的有以下三种:(1)使用自然语言描述算法;(2)使用流程图描述算法;(3)使用伪代码描述算法。,第一章第二节,二、算法的表示方法,下面仍以求1到100之间所有偶数的和(记为sum)为例说明算法的3种描述方法。假设采用前面提到的最后一种算法,即先求出1到50的和再乘以2。,第一章第二节,二、算法的表示方法,第1种:使用自然语言描述求sum的算法。假设初始值i为1;假设变量sum初始值为0;如果i50时,执行,否则转出执行;计算sum加上i的值后,重新赋值给sum;计算i加1,然后将值重新赋值给i;转去执行;计算sum乘以2的值,输出sum的值,算法结束。使用自然语言描述算法的方法比较容易掌握,但是有些操作不易表述清楚,例如循环操作。另外,还可能造成歧义,使他人对相同的一句话产生不同的理解。,第一章第二节,第2种:使用流程图描述求sum的算法传统的流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能明确地表示算法的运行过程。表1-1给出流程图中所使用的图形的含义。,第一章第二节,表1-1流程图的图形解释,二、算法的表示方法,第2种:使用流程图描述求sum的算法。用流程图描述的算法如图1-1所示。从图1-1中,可以比较清晰地看出算法的执行过程。,第一章第二节,图1-1求sun的算法流程图,二、算法的表示方法,第2种:使用流程图描述求sum的算法。传统流程图的一个主要不足是流程线的用法缺乏规范。由于流程线可以转移流程的执行方向,如果使用不当或流程控制转移不明晰,容易导致程序的混乱和出错。为此,人们(I.Nassi和B.Schneiderman,1973年)设计了一种新的流程图,它没有使用流程线,而是把整个算法写在一个大框图内,这个大框图由若干个小的基本框图构成,算法按照从上到下、从左到右的顺序执行。这种流程图简称N-S流程图。,第一章第二节,二、算法的表示方法,第2种:使用流程图描述求sum的算法。,第一章第二节,图1-2求sun算法的N-S流程图,二、算法的表示方法,二、算法的表示方法,第3种:使用伪代码描述sum的算法伪代码是一种用来书写程序或描述算法时使用的非正式表述方法,主要采用自然语言、数学公式和符号来描述算法的操作步骤,同时采用计算机高级语言(如C、Pascal、VB、C+、Java等)的基本控制结构来描述算法步骤的执行顺序。,第一章第二节,二、算法的表示方法,第3种:使用伪代码描述sum的算法。下面是用伪代码描述sum的算法,并附有注释行。BEGIN/*算法开始*/i1;/*为变量i赋初值*/sum0;/*为变量sum赋初值*/whilei第二节,第三节结构化程序设计方法,一、结构化程序基本控制结构,结构化程序设计方法由著名的计算机科学家E.W.Dijkstra和N.Wirth等人在20世纪60年代后期提出并逐渐发展起来,其基本思想是采用“自顶向下、逐步求精、分而治之”的原则,将一个较为复杂的原问题分解成若干相对独立的小问题,依次细化,直至各个小问题获得解决为止。,第一章第三节,一、结构化程序基本控制结构,按照结构化程序设计的观点,任何算法功能都可以通过三种基本控制结构以及它们的嵌套组合来实现,这三种结构就是顺序结构、选择(分支)结构和循环结构。,第一章第三节,1.顺序结构顺序结构是依次执行指令的结构。即,程序中的指令按照顺序依次执行,每条指令都必须执行,且只执行一次,如图1-3所示,图1-4是相应的N-S流程图。,第一章第三节,图1-3顺序结构,图1-4顺序结构N-S图,一、结构化程序基本控制结构,2.选择(分支)结构选择(分支)结构根据逻辑判断的结果,做不同的处理。一种典型的选择(分支)结构是双分支结构,如图1-5所示,图1-6是相应的N-S流程图。,第一章第三节,图1-3双分支结构,图1-4双分支结构N-S图,一、结构化程序基本控制结构,3.循环结构在循环结构中,当条件满足时,反复执行某条件语句或语句组的操作,直到条件不满足时为止。循环结构也称重复结构。根据条件设置方式和执行方式的不同,可以有两种不同的循环结构,分别为当型循环结构和直到型循环结构,如图1-7和图1-8所示,图1-9和图1-10分别是相应的N-S流程图。,第一章第三节,一、结构化程序基本控制结构,3.循环结构,第一章第三节,图1-7当型循环语句,图1-8直到型循环结构,一、结构化程序基本控制结构,图1-9当型循环语句,图1-10直到型循环结构,二、结构化程序设计的原则和步骤,要利用计算机语言设计一个结构化的程序,一般应遵循以下几个原则:(1)使用语言中的顺序、选择、循环等基本控制结构表示程序逻辑。(2)选用的控制结构只准许有一个入口和一个出口。(3)程序语句组成容易识别的块,每块只有一个入口和一个出口。(4)复杂结构应该用基本控制结构进行组合嵌套来实现。(5)尽量避免使用跳转语句(如GoTo、Break等语句)。,第一章第三节,二、结构化程序设计的原则和步骤,结构化程序设计通常包括以下6个主要步骤。1.问题分析2.建立数学模型3.算法设计在设计算法时,要采用清晰的逻辑结构,同时充分考虑到算法的复杂性问题,即算法的计算时间和占有的空间应尽可能地少。4.程序编码5.测试6.建立程序文档,第一章第三节,作为开篇,本章的主要目的是概要性地介绍程序设计的基本知识,共包含3个小节的内容。第一节简要说明了什么是程序、程序设计和程序设计语言,并对程序设计语言的分类进行了介绍。第二节对算法的概念、其与程序设计的关系以及三种基本的算法表示方法进行了简单描述。第三节介绍了结构化程序设计的基本思想、基本控制结构以及主要步骤。,本章小结,1.1什么是程序设计?1.2低级语言和高级语言的主要区别是什么?1.3为什么说算法是程序设计的灵魂?1.4结构化程序设计的基本思想是什么?,习题,第二章C语言概述,主要内容:第一节C语言的发展历史和特点第二节C语言程序的结构第三节C语言程序的编译和运行本章小结习题,第一节C语言的发展历史和特点,一、C语言的发展历史,C语言是一种高效的编译型结构化程序设计语言,最早由美国贝尔实验室的DennisM.Ritchie在B语言的基础上开发出来,并于1972年在一台DECPDP-11计算机上首次实现。最初的C语言只是为描述和实现Unix操作系统提供一种工作语言而设计的。1973年,KenThompson和DennisM.Ritchie两人合作,把Unix系统90%以上的内容用C语言改写,即Unix的第5版。,第二章第一节,一、C语言的发展历史,随后几年,贝尔实验室又对C语言进行了多次的改进,但仍局限在内部使用。直到1975年Unix第6版公布后,C语言的突出优点才引起人们的普遍注意。1977年出现了不依赖于具体机器的C语言编译文本可移植C语言编译程序,它使C语言移植到其他机器时所需做的工作大大简化,同时也推动了Unix系统迅速地在各种机器上实现。,第二章第一节,一、C语言的发展历史,1978年,BrianW.Kernighan和DennisM.Ritchie出版了名著C程序设计语言(TheCProgrammingLanguage),现在此书已被翻译成多种语言,成为C语言最权威的教材之一。1983年,美国国家标准化协会(ANSI)根据C语言问世以来各种版本对语言的发展和扩充,制定了一套ANSI标准,称为ANSIC。1987年,ANSI又公布了新标准87ANSIC。1990年,国际标准化组织ISO接受87ANSIC为ISOC的标准(ISO98991990)。,第二章第一节,二、C语言的特点,语言之所以风靡全球、被广泛使用,是因为它具有以下优点:(1)可移植性强。(2)语言简洁紧凑,使用方便灵活。(3)数据类型和运算符丰富多样。(4)生成的目标代码质量好,程序执行效率高。,第二章第一节,二、C语言的特点,当然,C语言也不是完美无缺的,在盛行的同时也暴露出了它的局限性:(1)C语言类型自检机制较弱,使得程序中的一些错误不能在编译时被发现。(2)C语言本身缺乏支持代码重用的机制,使得各个程序的代码很难为其他程序所用。,第二章第一节,第二节C语言程序的结构,一、C语言程序的构成,为了说明语言程序结构的特点,先看下面几个例子,这些例子体现了语言程序在组成结构上的特点。例2.1一个简单的例子。#includevoidmain(void)printf(WelcometoCprogram!n);将上述程序输入计算机,进行编译、连接、运行后在屏幕上输出:WelcometoCprogram!,第二章第二节,一、C语言程序的构成,通过这个例子,我们可以初步看到:C的程序结构包含预处理部分“#include”,它的功能是提供标准输入输出函数有关的信息。在使用标准函数库中的函数时,C编译系统要求程序通过预处理命令#include将提供所使用函数有关的信息(如对函数的声明)的头文件“包含”进程序。stdio.h是C编译系统提供的一个头文件名,stdio是“standardinput,它的作用是将双引号内的字符串按原样输出,“n”是换行符,即在输出“WelcometoCprogram!”后换行,分号表示该语句结束。,第二章第二节,一、C语言程序的构成,例2.2求矩形的面积。/*求矩形的面积*/#include/*编译预处理命令*/voidmain()intx,y,area;/*声明部分,定义变量x、y、area为整型*/*以下3行为C语句*/x=8;y=6;/*分别将8、6赋值给变量x、y*/area=x*y;/*计算变量x和y的积,并将其值赋给变量area*/printf(areais%dn,area);/*输出结果*/,第二章第二节,一、C语言程序的构成,以上程序的作用是求长、宽分别为x和y的矩形面积area。程序中的/*/是注释部分。注释可以用汉字或英文字符表示,是对程序的解释和说明,用于提高程序的可读性,在程序的编译和运行时不起作用。注释可以出现在一行中的最右侧,也可以单独成为一行,如果需要,程序中的任意一行都可以加上注释。第5行是声明部分,可以用来声明函数或变量,本例中的声明部分定义了两个变量x和y,int表示指定x和y为整型变量(有关变量的定义详见第3章)。,第二章第二节,一、C语言程序的构成,第8行求积,使area的值为xy。第9行中“%d”是输入输出的“格式控制符”,用来指定输入输出时的数据类型和格式。本例中“%d”表示“以十进制整数形式”输出对应输出项的值。双引号括起来的部分为“格式控制字符串”,本例中,格式控制字符串中的“areais”按原样输出,“%d”则在该位置上以十进制整数形式输出括号内逗号右端变量area的值,即8与6的积,“n”是换行符,实现换行。因此程序运行时输出以下信息:areais48,第二章第二节,一、C语言程序的构成,例2.3基本程序结构例子:主函数与自定义函数及调用。voidmain()/*主函数*/inta,b,c;/*变量声明,定义整型变量a、b、c*/intadd(intx,inty);/*函数声明,声明本函数要调用的add函数*/scanf(%d,%d,/*输出c的值*/,第二章第二节,一、C语言程序的构成,intadd(intx,inty)/*定义函数值为整型,形式参数x、y为整型的add函数*/intz;/*add函数中的声明部分,定义本函数中用到的整型变量z*/z=x+y;return(z);/*返回z的值到该函数被调用处*/当运行程序时输入:123321(代表Enter键,全书同),程序输出如下:add=444,第二章第二节,一、C语言程序的构成,本程序包括两个函数:主函数main和被调用的函数add。add函数的作用是求两个变量的和,并返回求和结果,return语句将z的值返回到主调函数main中。返回值z通过函数名add带回到main函数中调用add函数的位置。程序第4行是对被调用函数add的声明,为了使编译系统能够正确识别和调用add函数,必须在调用add函数之前对add函数进行声明。有关函数声明将在第7章进一步介绍。,第二章第二节,一、C语言程序的构成,通过以上几个例子,可以看到:(1)C语言程序是由函数构成的,函数是C语言程序的基本单位。每一个C语言程序都必须有且只能有一个主函数,还可以包含任意多个不同名的函数。一个C语言程序总是从主函数开始执行,C语言规定必须用main作为主函数名。被调用的函数可以是系统提供的库函数(如printf和scanf函数),也可以是用户根据需要自己编制的函数(如例2.3中的add函数)。main后的一对圆括号中间可以是空的,但这一对圆括号不能省略。程序中的main()是主函数的起始行,也是C语言程序执行的起始行。,第二章第二节,一、C语言程序的构成,(2)一个函数由两部分组成:函数的首部和函数体。函数的首部,即函数的第一行,包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型。函数参数可以省略,如main()就省略了函数参数。函数体,即函数首部下面的大括弧内的部分。函数体内一般有声明部分和执行部分。声明部分用于定义所用到的变量。执行部分由若干个语句组成,称为执行语句,必须放在声明部分之后,语句的数量不限。(3)每个C语言程序都是从main函数开始执行的,不论main函数是放在程序最前头,还是放在程序最后,或在一些函数之前,在另一些函数之后。,第二章第二节,一、C语言程序的构成,(4)C语言本身没有输入输出语句。输入和输出的操作都是由库函数scanf和printf等函数来完成的。(5)可以用/*/对C语言程序中的任何部分作注释。加上必要的注释可以帮助人们阅读和理解程序。,第二章第二节,二、C语言程序的书写格式,C语言程序所有语句都必须以分号“;”结束,函数的最后一个语句也不例外。程序行书写格式比较自由,既允许一行内写几条语句,也允许一条语句分写在几行上,而且C语言程序没有行号。在注释部分中,所有“/*”和“*/”必须成对使用,且“/”和“*”以及“*”和“/”之间不能有空格,否则都会出错。,第二章第二节,二、C语言程序的书写格式,针对C语言程序的构成及书写格式,在编写C语言程序时要注意如下技巧:(1)为避免遗漏,必须配对使用符号,如注释符号、函数体的起止标识符(大括号)、圆括号等,在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。(2)注释的位置,可以单占一行,也可以跟在语句的后面。(3)一个语句或注释如果一行写不下,可另起一行继续写。(4)注释中允许使用汉字。在非中文操作系统下,看到的是一串乱码,但不影响程序运行。,第二章第二节,第三节C语言程序的编译和运行,一、C语言程序的编译过程简介,1.编辑C语言程序当确定了解决问题的方案后,可以用C语言系统提供的编辑功能编写一个C语言源程序,源程序的扩展名为.c。2.编译C语言程序生成目标程序由于计算机只能识别和执行由0和1组成的二进制文件,而不能识别和执行用高级语言编写的源程序,所以必须先用C语言系统的编译程序(即编译器)对其编译,以生成以二进制代码形式表示的目标程序,目标程序的扩展名为.obj。,第二章第三节,一、C语言程序的编译过程简介,3.连接生成可执行程序文件将目标程序与系统的函数库以及其他目标程序进行连接装配,才能形成可执行程序文件,可执行文件的扩展名为.exe。4.运行可执行程序文件将可执行程序文件(扩展名为.exe)调入内存并运行,得到程序的结果。,第二章第三节,二、TurboC+3.0环境中运行C语言程序的步骤,TurboC+3.0开发环境是一个集成编辑、编译、连接、调试的C语言开发环境。以下介绍在TurboC+3.0环境中运行C语言程序的步骤。1.启动TurboC+3.0环境假设TurboC+3.0安装在C盘的tc3子目录下。方法一:从“开始”菜单选择“运行”,输入:cmd再输入cdc:tc3bin再输入tc,出现如图2-2所示的TurboC+3.0主菜单界面。方法二:进入tc.exe文件所在的子目录(如c:tc3bin),双击tc.exe文件,或直接双击桌面上tc.exe文件的快捷方式图标,也出现如图2-2所示的主菜单界面。,第二章第三节,第二章第三节,图2-2进入TurboC+3.0主菜单界面,二、TurboC+3.0环境中运行C语言程序的步骤,2.编辑源程序文件从File菜单选择New(如图2-3所示),进入新建C语言程序环境(如图2-4所示),即可输入源程序,输入的源程序如下:#includevoidmain()inti,sum=0;for(i=1;i第三节,二、TurboC+3.0环境中运行C语言程序的步骤,第二章第三节,图2-3进入新建C语言程序环境,图2-4编辑C语言程序,3.保存源程序文件从File菜单选择Save或者直接按F2键,选取路径并起文件名,如起名为example.c,如图2-5所示。,二、TurboC+3.0环境中运行C语言程序的步骤,第二章第三节,图2-5保存C语言程序,4.编译与连接源程序文件从Compile菜单选择Compile或者直接按快捷键Alt+F9,即可对源程序(如example.c)进行编译,生成目标程序文件(.obj),如图2-6所示;再从Compile菜单选择Link,进行连接,得到一个可执行文件(.exe),如图2-7所示。也可将编译与连接合并为一个步骤进行,操作方法是从Compile菜单选择Make或者直接按F9键。,二、TurboC+3.0环境中运行C语言程序的步骤,第二章第三节,二、TurboC+3.0环境中运行C语言程序的步骤,第二章第三节,图2-6编译C语言程序生成目标程序,图2-7连接生成可执行程序,5.运行程序从Run菜单选择Run或者直接按快捷键Ctrl+F9,运行程序并输出结果。从Window菜单选择UserScreen或者直接按Alt+F5,切换到用户屏幕,可查看程序的运行结果,如图2-8所示。,二、TurboC+3.0环境中运行C语言程序的步骤,第二章第三节,图2-8程序的执行结果,6.退出TurboC从File菜单选择Quit或者直接按Alt+X键,退出TurboC+3.0环境。,二、TurboC+3.0环境中运行C语言程序的步骤,第二章第三节,本章介绍C语言的发展历史、特点,C语言程序的基本结构,C语言程序的基本组成以及C语言程序的编译与执行。C语言是功能强大的计算机高级语言,它既是系统描述语言,又是通用的程序设计语言。C语言有自己规定的基本字符集、标识符、关键字、语句和标准库函数等。,本章小结,C程序的基本结构是:程序由函数组成,函数由语句组成。一个完整的语言程序必须有且只能有一个主函数main,可以有零个或若干个子函数。这些子函数可以是用户自定义的函数,也可以是C编译系统提供的标准库函数。每个函数都由函数说明和函数体两部分组成,函数体必须用一对大括弧括起来。C语言程序中的每个语句都以分号作为结束标志。,本章小结,一个语言程序需要经过编译和连接后才能运行。对语言程序编译后生成目标文件(.obj),对目标文件和库文件连接后生成可执行文件(.exe)。,本章小结,2.1试述C语言的特点。2.2举例说明C语言程序的基本构成和书写格式。2.3参照例题,编写一个C语言程序,输出以下信息:=Hello,World!=,习题,2.4编写一个C语言程序,输入两个数,输出其中大的数。同时编程实现求三个数中的最大者。2.5输入并运行例题中的程序,熟悉调试C语言程序的方法与步骤。,习题,第三章数据类型、运算符与表达式,主要内容:第一节C语言的数据类型第二节常量第三节简单变量第四节库函数第五节运算符和表达式本章小结习题,第一节C语言的数据类型,一、C语言的数据类型,在使用计算机程序处理实际问题时,可能遇到各种类型的数据,例如在处理学生信息时,可能遇到这样一些数据:年龄20岁,它是整数;身高1.75米,它是实数;姓名“张三”,它是一串字符。由此可见,我们编写的程序应该具有处理多种类型数据的能力。图3-1列出了C语言的数据类型。,第三章第一节,一、C语言的数据类型,第三章第一节,一、C语言的数据类型,C语言的基本数据类型可以直接用于定义常量或变量,而构造数据类型需要由用户根据自己要表达的数据形式自行构造,然后才能使用。C语言在处理常量和变量时,都是使用内存中具有特定属性的存储单元来存放数据,但两者的差别是,存储常量的内存单元,其值在程序运行中是不能被改变的;而存储变量的内存单元,其值在程序运行中是允许改变的。,第三章第一节,第二节常量,一、整型常量,整型常量用于表达一个确定的整数,如32。它有以下三种形式:1.十进制整数2.八进制整数以0(零)开头,由07的数字序列构成,如0123表示八进制数123,其值为182+281+380=83,即十进制的83。3.十六进制整数以0 x或0X开头(0 x中的0是数字零),可以由数字09和字母AF或af构成,AF字母用于表示数字1015。例如,0 x2F表示2161+15160=47,即十进制的47。,第三章第二节,一、整型常量,4.整数的后缀一个整型常量的尾部加上字母L或l,则表示该整数为长整型常量。例如,23L是十进制的长整型常量,0 x23L是十六进制的长整型常量。也可以用后缀U或u表示无符号整型常量。例如,234U是十进制无符号整型常量,023U是八进制无符号整型常量。后缀L和U可以同时使用,例如78LU,表示无符号长整型,并且L和U两种后缀的顺序任意。5.整数在机内的存储形式我们知道,数据在计算机中是以二进制形式进行处理的。在大多数机器中,整数采用补码的形式来存储。对于C语言编译系统,TurboC使用2个字节存储一个整数,而VisualC+6.0采用4个字节存储一个整数。,第三章第二节,二、浮点型常量,C语言中的浮点型常量也就是实数,有两种表示形式。1.十进制小数形式2.指数形式它由数字09、字母e(或E)和+、-号组成,它的形式为aEn,意为a10n,其中a为十进制整数或小数,n为十进制整数。例如:2.5e3(表示2.5103),-3.5e-2(表示-3.510-2)。,第三章第二节,二、浮点型常量,在表示浮点型常量时,需要注意以下几点:(1)以指数形式表示实数时,a和n都不能省略,n必须为整数。例如,e5、3e、3e2.5等都是不合法的。(2)以十进制小数形式表示实数时,整数和小数部分可省略其中任一个。例如,35、26.都是合法的。(3)浮点型常量默认的是double型(双精度),如果在后面加上F或f,则其类型为float(单精度),如2.45F、3.5e2F。(4)如果在一个浮点型常量后面加上一个L或l,则表示为longdouble型,如2.4e2L。,第三章第二节,二、浮点型常量,实数在机内是以指数形式存储的,以float类型为例,大多数C编译系统使用4个连续的字节(即32位)存储float类型数据。由实数的存储形式可以看出,小数部分占的位数越多,所能表示的精度越高,指数部分占的越多,所能表示的数值范围越大。,第三章第二节,三、字符常量,字符常量是属于ASCII码字符集中的一个字符,包括英文大小写字母、数字、标点符号以及特殊符号。字符常量的表现形式有两种:(1)使用单引号括起来的一个字符。例如,a、7、?都是字符常量。(2)使用转义字符表示方法表示的字符。转义字符是以反斜杠“”开头,后面跟字符或数字,并用单引号括起来表示字符常量。例如,n表示一个换行符(ASCII码值为10)。换行符是一种控制符,在屏幕上不能显示,用于在输出时进行换行控制。表3-1给出了常用的转义字符及其含义。,第三章第二节,三、字符常量,第三章第二节,三、字符常量,实际上,C语言在内存中存放字符时是用字符数据的ASCII码值存储的。例如,字符a的ASCII码值为97,它在内存中的存储形式与整数97是一样的。也就是说在C语言中,在ASCII码范围内的整数与字符可以通用。一个字符可以以字符形式输出,也可以以整数形式输出。此外,字符数据也可以参加算术运算,即相当于使用其ASCII码值进行运算。,第三章第二节,四、字符串常量,字符串常量是由一对双引号括起来的字符序列,字符串中可以包含任何字符,如空格、转义符,甚至汉字。例如,Howdoyoudo.、$24.5、中国n都是合法的字符串。双引号不属于字符串,而是起界定作用。在C语言中没有提供字符串类型,而是使用字符数组来存储字符串。字符串在机内存储时,所占的字节数等于字符串常量中的字符个数加1。增加的一个字节用于存放0(空字符,ASCII码为0),它作为字符串的结束标志。,第三章第二节,五、符号常量及其定义,C语言提供了一种利用一个标识符来代表一个常数的方法,即定义符号常量,这样可以更确切表明其含义。C语言中使用#define定义符号常量,即给常量起一个名字。其语法格式为:#define标识符常量例如:#definePI3.14#definePRICE30,第三章第二节,五、符号常量及其定义,在上面例子中,PI和PRICE称为符号常量。在C语言中,define称为宏定义,#是预处理命令的开始标志。一旦定义了符号常量,当编译程序对程序进行预处理时,在程序中所有使用这些符号常量的地方都会被该常量值取代。,第三章第二节,五、符号常量及其定义,例3.2符号常量的使用。#include#definePI3.14/*定义符号常量PI*/voidmain()doubler,s;r=20.0;s=PI*r*r;/*使用符号常量PI*/printf(s=%fn,s);,第三章第二节,程序运行结果为:s=1256.000000以上的s=PI*r*r;语句在编译预处理后产生如下的语句:s=3.14*r*r;,五、符号常量及其定义,使用符号常量是一种好的编程风格,它的好处在于:(1)程序便于维护。如果常量在程序中多处出现,当需要改变其值时,要修改多个地方。如果使用符号常量,只要在程序开头的宏定义部分修改一次,就能做到一改全改。这就减少了工作量,并且不易出错。(2)提高程序可读性。从例3.2就可以看出,当我们阅读程序时看到PI,就可以知道它代表圆周率。,第三章第二节,第三节简单变量,一、变量的命名,变量代表计算机内存中的一个存储单元,与常量相反,变量的值在程序运行过程中是可以改变的。变量有以下特性:变量名、变量值、变量类型、变量的存储地址、变量的存储属性。高级语言的编译器在编译连接时会给每一个变量分配一个内存单元,变量的值就存储在该内存单元中。访问变量的值,实际上是通过变量名找到相应的内存地址,然后对其中存储的数据进行访问。,第三章第三节,一、变量的命名,C语言中变量的命名是有特殊限制的。在C语言中,对变量、符号常量、函数、宏、标号、文件名等的命名的有效字符序列称为标识符(ide-ntifier)。C语言规定,标识符可以由字母、数字和下划线构成,且必须由字母或下划线开头,其中字母是指英文26个字母,可以是大写或小写。,第三章第三节,一、变量的命名,C语言规定,关键字不能作为变量名使用(这是将关键字也称为保留字的原因)。例如,int、if、typedef等。此外,C语言中有些标识符是系统预定义的,它们在程序中有特殊的含义,例如,printf、open、ctype等,虽然可以对它们进行重新定义,但建议不要作为变量名使用。以下是合法的标识符,可以作为变量名。n,i2,str_len,g_iMax,month,_number以下是不合法标识符:3d,ye#,xy,$25,int,第三章第三节,一、变量的命名,C语言严格区分大写和小写字母,因此STUDENT、student、Student是三个不同的标识符。一般使用小写字母表示变量名,大写字母表示符号常量名,这样的区分有利于增加程序的可读性。,第三章第三节,二、变量的基本数据类型,变量的数据类型决定了该变量的取值类型、取值范围、所占的内存空间的大小以及所能参加的运算方式等。一个变量的数据类型可以是图3-1所列出的C语言的数据类型中的一种。C语言基本数据类型有以下几类:整型int及其相关类型、浮点型float及其相关类型、字符型char及其相关类型。表3-2列出了TurboC的基本数据类型及相关属性。,第三章第三节,二、变量的基本数据类型,第三章第三节,三、变量的类型定义,在C语言中规定必须对所有用到的变量先定义后使用。定义变量的语法格式如下:数据类型名变量名表;变量名表是一个或多个标识符,每个标识符之间用逗号“,”分隔开,例如:inti,j,k;以上语句定义了三个整型变量i、j、k。其中int与i之间至少要留一个空格,语句最后要以分号“;”结尾,这是因为变量定义是一条语句而不是一条命令(C语言规定一个语句的终结符是分号)。,第三章第三节,四、变量的初始化,一个变量被定义后,它是否就有值了呢?答案是它不是没有值,而是它的值未被确定。因此,在使用一个变量时,必须要确保其有确定的值,这就需要对该变量指定初值,即对变量进行初始化。以下例子演示了对变量进行初始化的方法:doubled1=3.35,d2;也可以用赋值语句给变量指定值,以上语句相当于:doubled1,d2;d1=3.35;其中,d1的值被赋予23.35,而d2的值是不确定的。,第三章第三节,四、变量的初始化,注:C编译器对静态局部变量和全局变量会自动赋给初值,如果是数值类型的静态局部变量和全局变量,编译器通常赋给初值0,如果是字符类型的静态局部变量和全局变量,编译器通常赋给初值空字符,即ASCII码为0的值(有关静态变量和全局变量的相关知识将在第7章中介绍)。,第三章第三节,第四节库函数,一、库函数的使用方式,C语言提供的每一个库函数都在对应的某个头文件中声明其函数原型,在使用某个库函数前都应在程序开始处包含相应的头文件。文件包含可以用预处理命令#include来实现,例如,数学函数的原型都在文件math.h中声明,因此要调用数学函数abs(x)求整数x的绝对值,就应在程序开始位置使用如下预处理命令:#include或#includemath.h,第三章第四节,预处理命令不是C语句,因此结尾不加分号“;”,这一点在编程时要注意。,一、库函数的使用方式,在包含了与某个库函数对应的头文件后,就可以在程序中调用该函数。C语言函数调用的语法格式为:函数名(实参列表);如果是调用无参函数,则“实参列表”可以没有,但括号不能省略。,第三章第四节,二、常用数学函数,C语言中预先定义了丰富的数学函数,用于进行常见的数学运算。这些数学函数可以分为以下几类:三角函数(trigonometricfunctions)、双曲函数(hyperbolicfunctions)、指数与对数函数(exponentialandlogarithmicfunction-s)、幂与绝对值函数(powerandabsoluteval-uefunctions)以及其他函数。C语言提供的数学函数的原型在头文件math.h中声明,使用时应在程序头部包含math.h文件:#include或#includemath.h,第三章第四节,二、常用数学函数,1.三角函数sin、cos、tan函数原型:doublesin(doublex);doublecos(doublex);doubletan(doublex);功能:函数sin、cos、tan用于计算正弦、余弦和正切值,这三个函数的参数都是代表弧度值的double型数据。,第三章第四节,二、常用数学函数,2.绝对值函数abs、fabs、labs函数原型:intabs(intx);doublefabs(doublex);longlabs(longx);功能:abs、fabs和labs函数分别适用于求整数、浮点数和长整型数的绝对值,这三个函数返回参数x的绝对值。例如,abs(-10)等于10,fabs(-5.6)等于5.6,labs(-9999)等于9999。,第三章第四节,二、常用数学函数,3.exp和pow函数函数原型:doubleexp(doublex);doublepow(doublex,doubley);功能:exp函数返回以e为底,参数x为幂的指数值ex;pow函数返回x的y次幂xy。例如,exp(2.0)等于7.389056,pow(2.0,3.0)等于8.0。,第三章第四节,二、常用数学函数,4.log和log10函数函数原型:doublelog(doublex);doublelog10(doublex);功能:log函数返回以e为底,参数x的自然对数值lnx;log10函数返回以10为底,参数x的对数值log10 x。例如,log(7.389056)等于2.0,log10(100.0)等于2.0。,第三章第四节,二、常用数学函数,5.sqrt函数函数原型:doublesqrt(doublex);功能:sqrt函数返回参数x的平方根。例如:sqrt(4.0)等于2.0。6.随机函数rand、srandrand和srand函数的原型在头文件stdlib.h中定义,使用时应在程序开头包含stdlib.h文件。函数原型:intrand(void);voidsrand(unsignedintseed);,第三章第四节,二、常用数学函数,功能:rand函数返回一个值在0RAND_MAX之间的伪随机(pseudorandom)整数,ANSIC要求RAND_MAX至少为32767。srand函数用参数seed来设置一个伪随机数序列的开始点,以便调用rand函数时产生一个新的伪随机数序列。参数seed称为随机数种子。,第三章第四节,三、字符输入输出函数,C语言提供的字符输入输出函数的原型在头文件stdio.h中声明,在使用时应在程序头部包含stdio.h文件:#include或#includestdio.h1.字符输出函数putchar函数原型:intputchar(intc);功能:putchar函数把一个字符输出到标准输出设备(通常是显示器)上,其中参数c可以是字符变量或常量,也可以是一个代表ASCII码的整数。,第三章第四节,三、字符输入输出函数,例3.7利用getchar函数输入一个字符。#includevoidmain()charch;/*定义字符型量ch*/ch=getchar();/*等待键盘输入字符并按回车,并把第一个字符赋给ch*/putchar(ch);/*输出字符*/,第三章第四节,三、字符输入输出函数,执行以上程序,运行到ch=getchar()语句时,程序等待输入字符,从键盘输入一个字符并按回车键后,getchar函数得到输入的字符,并赋给字符型变量ch,程序接着输出该字符。注意:getchar只接收一个字符,如果输入多个字符再按回车键,也只有第一个字符被getchar函数接收。,第三章第四节,四、格式化输入输出函数的一般使用,格式化输入输出函数是C语言提供的库函数,其声明包含在头文件stdio.h中,因此在程序中若要使用格式化输入输出函数,也需要在源程序的开头包含该头文件。1.格式化输出函数printf在C语言中提供了格式化输出函数printf,该函数的功能是将数据按指定的格式输出到标准输出流中。调用printf函数的语法格式为:printf(格式控制字符串,输出列表);,第三章第四节,四、格式化输入输出函数的一般使用,格式控制字符串是使用双引号括起来的用于表示输出格式的字符串,它包括两部分:一部分为普通字符和转义字符,另一部分为输出格式控制符。(1)普通字符在输出时按原样输出,转义字符则输出它所代表的字符(通常为控制字符)。(2)输出格式控制符:以%号开始,后面跟格式字符,用于以指定的格式输出数据。例如,输出int型数据用%d,输出float型和double型数据用%f,输出字符型数据用%c,输出字符串用%s等。输出列表是若干要输出的数据项,它可以是常量、变量或表达式,各参数之间以逗号“,”隔开。输出项的类型、个数、顺序应与格式控制符一一对应。,第三章第四节,四、格式化输入输出函数的一般使用,例3.8用printf函数输出数据。#includevoidmain()inti=100;doubled=35.5;printf(IntegerNumber=%dnDoubleNumber=%fn,i,d);程序运行结果为:IntegerNumber=100DoubleNumber=35.500000,第三章第四节,四、格式化输入输出函数的一般使用,上面例子中的格式控制字符串包括两个格式控制符(%d和%f),以及一些普通和转义字符。输出时,在两个格式控制字符的位置上,依次用i和d的值替换。TurboC默认浮点型数据输出6个小数位数。由于i和d分别是整型和浮点型数据,因此分别用格式控制符%d和%f与之对应。,第三章第四节,四、格式化输入输出函数的一般使用,关于printf()函数的其他说明:(1)如果要输出字符串,可以用格式控制符%s。(2)在printf函数中,可以控制输出数据的宽度。整型数据输出:%md,其中m是非负整数,表示以m列宽度输出数据,若数据本身不足m位,则左补空格(数据右对齐)。若数据的实际宽度超过m列,则按实际宽度输出。浮点型数据输出:%m.nf,指定数据输出总的宽度占m列,小数部分占n列。若数据本身小于m位,则左补空格。字符串数据输出:%ms,表示字符串输出占m列。,第三章第四节,四、格式化输入输出函数的一般使用,2.格式化输入函数scanfscanf函数的功能是从标准输入流中按指定格式接收输入的数据。调用scanf函数的语法格式为:scanf(格式控制字符串,地址列表);其中“格式控制字符串”用于指定输入的格式,它由格式控制符和普通字符两部分构成。地址列表是若干输入数据项的内存地址,它通常是变量的地址,各地址之间用逗号“,”分隔。“格式控制字符串”中的格式控制符数量和类型要与输入数据项从左到右一一对应。,第三章第四节,四、格式化输入输出函数的一般使用,在“格式控制字符串”中包含两种类型的字符:格式控制符和普通字符。(1)格式控制符:以%号开始,后面跟格式字符,用于以指定的格式输入数据。例如,输入int型数据用%d,输入char型数据用%c,输入float型数据用%f,输入double型数据用%lf。(注:%lf中的l是英文字母L的小写,不是数字1。)(2)普通字符:在输入数据时要求按原样输入。,第三章第四节,四、格式化输入输出函数的一般使用,例3.9用scanf函数输入数据。#includevoidmain()inti,j;floatx,y,z;printf(Inputtwointegersiandjseparatedbyaspace:);/*提示语句*/scanf(%d%d,第三章第四节,四、格式化输入输出函数的一般使用,运行以上程序,输出:Inputtwointegersiandjseparatedbyaspace:2450Inputfloatsx,yandzseparatedeachbyacomma:12.5,3.7,2.8i=24,j=50,x=12.500000,y=3.700000,z=2.800000说明:(1)程序中将float型数据赋给double型变量时,数值不变,有效位扩展到16位,在内存中以8个字节存储。(4)不同类型整型(字符型可作为整型的特例)数据间的赋值运算规则是:长度相同,则原样赋值(符号位也原样传送)。当长整型数赋给短整型变量时,截取低位传送。当短整型数赋给长整型变量时,低位直接传送,高位根据低位整数的符号进行扩展,即正数高位全补0(注:unsign

温馨提示

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

评论

0/150

提交评论