C#入门经典(第4版).ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 入门 经典
- 资源描述:
-
C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),C,入门经典(第,4,版),第,01,章,C,语言编程,C,语言是一种功能强大、简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务。我们可以利用,C,语言创建程序,(,即一组指令,),,并让计算机依指令行事。,用,C,语言编程并不难,本书将用浅显易懂的方法介绍,C,语言的基础知识,读完本章,读者就可以编写第一个,C,语言程序了,其实,C,语言很简单。,。,1.1,创建,C,程序,C,程序的创建过程有,4,个基本步骤或过程:编辑,编译,链接,执行。这些过程很容易完成,(,就像翻转手臂一样简单,而且可以随时翻转,),,首先介绍每个过程,以及它们对创建,C,程序的作用,。,编辑,编译,链接,执行,1.1.1,编辑,编辑过程就是创建和修改,C,程序的源代码,我们编写的程序指令称为源代码。有些,C,编译器带一个编辑器,可帮助管理程序。通常,编辑器是提供了编写、管理、开发与测试程序的环境,有时也称为集成开发环境,(,缩写为,IDE),。,1.1.2,编译,编译器可以将源代码转换成机器语言,在编译的过程中,会找出并报告错误。这个阶段的输入是在编辑期间产生的文件,常称为源文件。,编译器能找出程序中很多无效或无法识别的错误,以及结构错误,例如程序的某部分永远不会执行。编译器的输出结果称为对象代码,(object code),,存放它们的文件称为对象文件,(object file),,这些文件的扩展名在,Windows,环境中通常是,.obj,,在,Linux/UNIX,环境中通常是,.o,。编译器可以在转换过程中找出几种不同类型的错误,它们大都会阻止对象文件的创建,1.1.3,链接,链接器,(linker),将源代码文件中由编译器产生的各种模块组合起来,再从,C,语言提供的程序库中添加必要的代码模块,将它们组合成一个可执行的文件。链接器也可以检测和报告错误,例如,遗漏了程序的某个部分,或者引用了一个根本不存在的库组件。,1.1.4,执行,执行阶段就是当成功完成了前述,3,个过程后,运行程序。但是,这个阶段可能会出现各种错误,包括输出错误及什么也不做,甚至使计算机崩溃。不管出现哪种情况,都必须返回编辑阶段,检查并修改源代码。,1.2,创建第一个程序,本节先浏览一下创建,C,语言程序的流程,从输入代码到执行程序的所有,4,个步骤。在这个阶段,若不了解所键入的代码信息,别担心,笔者会解释每一个步骤。,1.3,编辑第一个程序,我们可以修改程序,在屏幕上输出其他信息,例如可以将程序改成:,/*Program 1.2 Your Second C Program*/,#include,int main(void),printf(If at first you dont succeed,,,try,,,try,,,try again!),;,return 0;,1.4,处理错误,犯错乃人之常情,没什么难为情的。幸好计算机一般不会出错,而且非常擅长于找出我们犯的错误。编译器会列出在源代码中找到的一组错误信息,(,甚至比我们想象的多,),,通常会指出有错误的语句。此时,我们必须返回编辑阶段,找出有错误的代码并更正。,有时一个错误会使后面本来正确的语句也出现错误。这多半是程序的其他部分引用了错误语句定义的内容所造成的。当然,定义语句有错,但被定义的内容不一定有错,。,1.5,剖析一个简单的程序,编写并编译了第一个程序后,下面是另一个非常类似的例子,了解各行代码的作用:,/*Program 1.3 Another Simple C Program-Displaying a Quotation*/,#include ,int main(void),printf(Beware the Ides Of March!),;,return 0;,。,注释,预处理命令,定义,main,()函数,关键字,函数体,输出信息,参数,控制符,1.5.1,注释,上述示例的第一行代码如下:,/*Program 1.3 Another Simple C Program-Displaying a Quotation*/,这不是程序代码,因为它没有告诉电脑执行操作,它只是一个注释,告诉阅读代码的人,这个程序要做什么。位于,/*,和,*/,之间的任意文本都是注释。只要编译器在源文件中找到,/*,,就忽略它后面的内容,一直到表示注释结束的,*/,为止。,/*,可以和,*/,放在同一行代码上,也可以放在不同的代码行上。,1.5.2,与处理命令,下面的代码行:,#include /*This is a preprocessor directive*/,严格说来,它不是可执行程序的一部分,但它很重要,事实上程序没有它是不执行的。符号,#,表示这是一个预处理指令,(preprocessing directive),,告诉编译器在编译源代码之前,要先执行一些操作。编译器在编译过程开始之前的预处理阶段处理这些指令。预处理指令相当多,大多放于程序源文件的开头,1.5.3,定义,main,()函数,函数是两个括号之间执行某组操作的一段代码。每个,C,程序都由一个或多个函数组成,每个,C,程序都必须有一个,main(),函数,因为每个程序总是从这个函数开始执行。因此假定创建、编译、链接了一个名为,progname.exe,的文件。执行它时,操作系统会调用这个程序的,main(),函数。,1.5.4,关键字,在,C,语言中,关键字是有特殊意义的字,所以在程序中不能将关键字用于其他目的。关键字也称为保留字。在前面的例子里,,int,就是一个关键字,,void,和,return,也是关键字。,C,语言有许多关键字,我们在学习,C,语言的过程中,将逐渐熟悉这些关键字。附录,C,列出了完整的,C,语言关键字表。,1.5.5,函数体,1.5.6,输出信息,例子中的,main(),函数体包含了,个调用,printf(),函数的语句:,printf(Beware the Ides of March!);/*This line displays a quotation*/,printf(),是,个标准的库函数,它将引号内的信息输出到屏幕上,在这个例子里,调用这个函数会显示引号内的一段警示语:双引号内的字符串称为字符串字面量。注意这行代码用分号作为结尾。,1.5.7,参数,包含在函数名,(,如上面语句中的,printf(),函数,),后的圆括号内的项称为参数,它指定要传送给函数的数据。当传送给函数的参数多于一个时,要用逗号分开。,在上面的例子中,函数的参数是双引号内的文本字符串。如果不喜欢例子中引号内的文本,可以改用自己想输出的句子。例如,使用马克白,(Macbeth),的一句话:,printf(Out,,,damned Spot!Out I say!);,修改源代码后,必须再次编译及链接程序,才可执行。,1.5.8,控制符,反斜杠,(),在字符串里有特殊的意义,它表示转义序列的开始。转义序列可以在字符串中插入无法指定的字符,例如制表符及换行,或编译器在某些情况下会混淆的字符,例如双引号一般用于界定字符串。反斜杠后面的字符表示是哪种转义序列。在这个例子里,,n,表示换行。还有其他许多转义序列。显然,反斜杠是有特殊意义的,所以需要一种方式在字符串中指定反斜杠。为此,应使用两个反斜杠,(),。同样,如果要输出双引号,就用,1.6,用,C,语言开发程序,如果读者从未写过程序,对,C,语言开发程序的过程就不会很清楚,但它和我们日常生活的许多事务是相同的,万事开头难。一般首先大致确定要实现的目标,接着把该目标转变成比较准确的规范。有了这个规范后,就可以制订达到最终目标的一系列步骤了。就好比光知道要盖房子是不够的,还得知道需要盖什么样的房子,它有多大,用什么材料,要盖在哪里。这种详细规划也需要运用到编写程序上,。,了解问题,详细设计,实施,测试,1.6.1,了解问题,第一步是弄清楚要做什么。在不清楚应提供什么设施:多少间卧房、多少间浴室、各房间多大等等之前就开始建造房子,会有不知所措之感。所有这些都会影响建造房子所需的材料和工作量,从而影响整个房子的成本。一般来说,在满足需求和完成项目的有限资金、人力及时间之间总会达成某种一致。,1.6.2,详细设计,要建造房子,必须有详细的计划。这些计划能让建筑工人按图施工,并详细描述房子如何建造,具体的尺寸、要使用的材料等。还需要确定何时完成什么工作。例如,在砌墙之前须先挖地基,所以这个计划必须把工作分为可管理的单元,以便执行起来井然有序。,1.6.3,实施,有了房子的详细设计,就可以开始工作了。每组建筑工人必须按照进度完成他们的工作。在下一阶段开始前,必须先检查每个阶段是否正确完成。省略了这些检查,将可能导致整栋房子倒塌。,当然,假使程序很大,可以一次编写,部分。一个部分完成后,再写下,部分。每个部分都要基于详细的设计规范,在进行下一个部分之前,应尽可能详细地检查每个部分的功能。这样,程序就会逐步完成预期的任务,1.6.4,测试,房子完成了,还要进行许多测试:排水设备、水电设施、暖气等。任何部分都有可能出问题,这些问题必须解决。这有时是一个反复的过程,一个地方的问题可能会造成其他地方出问题。,1.7,函数及模块化编程,到目前为止,“函数”这个词已出现过好几次了,如,main(),、,printf(),、函数体等。下面将深入研究函数是什么,为什么它们那么重要。,大多数编程语言,(,包含,C,语言,),都提供了一种方法,将程序切割成多个段,各段都可以独立编写。在,C,语言中,这些段称为函数。一个函数的程序代码与其他函数是相互隔绝的。函数与外界有一个特殊的接口,可将信息传进来,也可将函数产生的结果传出去。这个接口在函数的第一行即在函数名的地方指定。,1.8,常见错误,错误是生活中的一部分。用,C,语言编写计算机程序时,必须用编译器将源代码转换成机器码,所以必须用非常严格的规则控制使用,C,语言的方式。漏掉一个该有的逗点,或添加不该有的分号,编译器都不会将程序转换成机器码。,即使实践了多年,程序中也很容易出现输入错误。这些错误可能在编译或链接程序时找出。但有些错误可能使程序执行时,表面上看起来正常,却不定时地出错,这就需要花很多时间来跟踪错误了,。,1.9,要点,1.10,小结,本章编写了几个,C,程序。我们学习了许多基础知识,本章的重点是介绍一些基本概念,而不是详细探讨,C,程序语言。现在读者应该对编写、编译及链接程序很有信心了。也许读者目前对如何构建,C,程序只有模糊的概念。以后学了更多的,C,语言知识,编写了一些程序后,就会清楚明白了,。,第,02,章,编程初步,现在读者一定很渴望编写程序,让计算机与外界进行实际的交互。我们不希望程序只能做打字员的工作,显示包含在程序代码中的固定信息。的确,编程的内涵远不止此。,理想情况下,我们应能从键盘上输入数据,让程序把它们存储在某个地方,这会让程序更具多样性。程序可以访问和处理这些数据,而且每次执行时,都可以处理不同的数据值。每次运行程序时输入不同的信息正是整个编程业的关键。在程序中存储数据项的地方是可以变化的,所以叫做变量,(variable),,而这正是本章的主题,2.1,计算机,的内存,首先看看计算机如何存储程序要处理的数据。为此,就要了解计算机的内存,在开始编写第一个程序之前,先简要介绍计算机的内存。,计算机执行程序时,组成程序的指令和程序所操作的数据都必须存储到某个地方。这个地方就是机器的内存,也称为主内存,(main memory),,或随机访问存储器,(Random Access Memory,,,RAM),。,2.2,什么是变量,变量是计算机里一块特定的内存,它是由一个或多个连续的字节所组成。每个变量都有一个名称,可以用该名称表示内存的这个位置,以提取它包含的数据或存储一个新数值,。,2.3,计算机绘图系统的硬件组成,变量有几种不同的类型,每种变量都用于存储特定类型的数据。首先看看用于存储数值的变量。在程序里存放数字的方法很多,下面从最简单的方法开始,。,整数变量,变量的命名,变量的使用,变量的初始化,算术语句,2.3.1,整数变量,首先是存储整数的变量。整数是没有小数点的数字。例如:,1,10,999,000,000,-1,这些数值是整数,但这对程序而言并不完全正确。整数是不能包含逗号的,所以第二个值在程序里应该写成,10999000000,。,2.3.2,变量的命名,给变量指定的名称一般称为变量名。变量的命名是很有弹性的。它可以是一个或多个大写或小写字母、数字和下划线,(_)(,有时下划线也算做字母,),。下面是一些正确的变量名:,Radius,diameter,Auntie_May,Knotted_Wool,D678,2.3.3,变量的使用,前面介绍了如何声明及命名变量,但这和在第一章学到的知识相比并没有太多用处。下面编写另一个程序,在产生输出前使用变量的值。,2.3.4,变量的初始化,在上面的例子,用下面的语句声明每个变量:,int Cats;/*The number of cats as pets*/,用下面的语句设定变量,Cats,的值:,Cats=2;,将变量,Cats,的值设为,2,。,2.3.5,算术语句,上面的程序是第一个真正做了些事情的程序。它非常简单,仅仅相加了几个数字,但这是非常重要的一步。它是运用算术语句进行运算的一个基本例子。下面介绍一些更复杂的计算,。,2.4,变量与内存,前面介绍了整数变量,但未考虑过它们占用多少内存空间。每次声明变量时,计算机都会给它分配一块足够大的内存空间,来保存该类型的变量。相同类型的不同变量总是占据相同大小的内存,(,字节数,),。但不同类型的变量需要分配的内存空间就不一样了。,2.5,整数变量类型,有,5,种基本的变量类型可以声明为存储带符号的整数值,(,无符号的整数值参见下一节,),。每种类型都用不同的关键字或关键字组合来指定,。,无符号的整数类型,使用整数类型,指定整数常量,2.5.1,无符号的整数类型,对于每个存储带符号整数的类型,都有一个对应的类型来存储无符号的整数,它们占用的内存空间与无符号类型相同。每个无符号的类型名称都与带符号的类型名称相同,但要在前面加上关键字,unsigned,。,2.5.2,使用整数类型,在大多数情况下,,int,或,long,类型的变量就能满足我们的需求,偶尔需要,unsigned int,或,unsigned long,。下面是声明这些类型的例子:,unsigned int count=10;,unsigned long inchesPerMile=63360UL;,int balance=-500;,2.5.3,指定整数常量,整数变量有不同的类型,整数常量也有不同的类型。例如,如果将整数写成,100,,它的类型就是,int,。如果要确保它是,long,类型,就必须在这个数值的后面加上一个大写,L,或小写,l,。所以,,long,类型的整数,100,应写为,100L,。虽然写为,100l,也是合法的,但应尽量避免,因为小写字母,l,与数字,1,很难辨别。,2.6,浮点数,浮点变量用来存储浮点数。浮点数包含的值带小数点,也可以表示分数和整数。下面是浮点数的例子:,1.6 0.00008 7655.899,由于浮点数的表示方式,它的位数是固定的。然而它的取值范围要比整数大得多。浮点数通常表示为一个小数值乘以,10,的次方。,。,2.7,浮点数变量,浮点数变量的声明方式和整数变量类似。只需给浮点数类型使用对应的关键字即可:,float Radius;,double Biggest;,如果需要存储至多有,7,位精确值的数,(,范围从,10-38,到,10+38),,就应需要使用,float,类型的变量。类型,float,的值称为单精度浮点数。从表,2-6,中得知,它占用,4,个字节。使用类型,double,的变量可以存储双精度浮点数。类型,double,的变量占用,8,个字节,有,15,位精确值,范围从,10-308,到,10+308,。它足以满足大多数的需求。但某些特殊的应用程序需要更精确、更大的范围,此时可以使用,long double,。,。,2.8,使用浮点数完成除法运算,如前所见,除法运算使用的是整数操作数时,通常会得到整数结果。除非除法运算的左操作数刚好是右操作数的整数倍,否则其结果是不正确的。当然,在将饼干分给孩子们的例子中,整数除法运算的方式是没问题的,但将,10,尺长的厚板均分成,4,块时,就有问题了。这时就需要用到浮点数了,。,控制小数位数,控制输出字段宽度,2.8.1,控制小数位数,在上个例子的输出中有太多不必要的,0,。擅长使用量尺和锯子,并不说明能用长度为,2.500000,量尺切割木板,更不用说用,2.500001,长度的量尺了。可以用格式指定符指定小数点后面的位数。例如,要使输出的小数点后有两位数,就可以使用格式指定符,%.2f,。如果小数点后需要有,3,位数,则可以使用,%.3f,。,2.8.2,控制输出字段宽度,输出的字段宽度是输出值所使用的总字符数,(,包括空格,),,它一般是默认的。,printf(),函数确定了输出值需要占用多少个字符位置,小数点后的位数由我们指定,并将它用作字段宽度。但我们可以自己确定字段宽度。如果要求输出一列排列整齐的数值,就应确定其字段宽度。如果让,printf(),函数指定字段宽度,输出的数字列就不整齐,。,2.9,较复杂的表达式,算术要比两个数相除复杂得多。事实上,如果要进行复杂的算术运算,也可以使用笔和纸。有了加减乘除的工具,就可以开始进行一些真正复杂的计算了。,对于较复杂的的计算,需要更多地控制表达式的计算顺序。括号可以提供这方面的能力。当遇到错综复杂的情况时,括号还有助于使表达式更清晰,。,2.10,定义常量,前面的例子将,Pi,定义为变量,但它是一个不会改变的常量,,的值是一个不循环的无限小数,其值总是固定不变。唯一的问题是,在指定它时精确到几位数。最好确保它的值在程序里保持不变,使之不会因错误而改变,。,极限值,sizeof,运算符,2.10.1,极限值,当然,一定要确定程序中给定的整数类型可以存储的极限值。头文件,定义的符号表示每种类型的极限值,。,2.10.2,sizeof,运算符,使用,sizeof,运算符可以确定给定的类型占据多少字节。当然,在,C,语言中,sizeof,是一个关键字。表达式,sizeof(int),会得到,int,类型的变量所占的字节数,所得的值是一个,size_t,类型的整数。,size_t,类型在标准头文件,(,和其他头文件如,),中定义,对应于一个基本整数类型。但是,与,size_t,类型对应的类型可能在不同的,C,库中有所不同,所以最好使用,size_t,变量存储,sizeof,运算符生成的值,即使知道它对应的基本类型,也应如此,。,2.11,选择正确的类型,必须仔细选择在计算过程中使用的变量类型,使之能包含我们期望的值。如果使用了错误的类型,程序就可能出现很难检测出来的错误,。,2.12,定义常量,在程序,2.14,计算季度收入的表达式中,可以控制操作的执行,得到正确的结果:,RevQuarter=QuarterSold/150*Revenue_Per_150;,要使结果正确,必须修改这个语句,以浮点数的方式计算表达式。如果可以把,QuarterSold,的值转换为,float,类型,该表达式就会以浮点数的方式计算,问题就解决了。要把变量从一种类型转换为另一种类型,应把目标类型放在变量前面的括号中,。,自动转换类型,隐式类型转换的规则,赋值语句中的隐式类型转换,2.12.1,自动转换类型,该程序的第二个版本的输出如下:,Sales revenue this quarter is:$1930.50,即使表达式中没有显式转换类型,结果也是浮点数形式,但它仍是错误的。这是因为编译器在处理涉及不同类型的值操作时,会自动把其中一个操作数的类型转换为另一个操作数的类型,2.12.2,隐式类型转换的规则,确定二元运算中的哪个操作数要转换为另一个操作数的类型时,其机制相当简单。其基本规则是,将值域较小的操作数类型转换为另一个操作数类型,但在一些情况下,两个操作数都要转换类型。,2.13,再谈数值数据类型,为了完整论述数值数据类型,下面讨论一些前面未提及的内容。第一个未涉及的类型是,char,。,char,类型的变量可以存储单个字符的代码。它只能存储一个字符代码,(,即一个整数,),,所以被看作整数类型。可以像其他整数类型那样处理,char,类型存储的值,因此可以在算术运算中使用它,。,字符类型,字符的输入输出,宽字符类型,枚举,存储布尔值的变量,复数类型,2.13.1,字符类型,在所有数据的类型中,,char,类型占用的内存空间最少。它一般只需一个字节。存储在,char,类型变量的整数可以表示为带符号或无符号的值,这取决于编译器,。,2.13.2,字符的输入输出,使用,scanf(),函数和格式指定符,%c,,可以从键盘上读取单个字符,将它存储在,char,类型的变量中,。,2.13.3,宽字符类型,wchar_t,类型的变量存储多字节字符码,一般占用两个字节。在处理,Unicode,字符时,就需要使用,wchar_t,类型。,wchar_t,类型在标准头文件,中定义,所以需要在使用该类型的源文件中包含该头文件。在,char,类型的字符常量前面加上修饰符,L,,就可以定义一个宽字符常量,。,2.13.4,枚举,在编程时,常常希望变量存储一组可能值中的一个。例如一个变量存储表示当前月份的值。这个变量应只存储,12,个可能值中的一个,分别对应于,112,月。,C,语言中的枚举,(enumeration),就用于这种情形,。,2.13.5,存储布尔值的变量,_Bool,类型存储布尔值。布尔值一般是比较的结果,true,或,false,;第,3,章将学习比较操作,并使用其结果做出判断。,_Bool,类型的变量值可以是,0,或,1,,对应于布尔值,false,和,true,。由于值,0,和,1,是整数,所以,_Bool,类型也被看作整数类型,。,2.13.6,复数类型,本节假定读者学过复数。如果读者未学过这个内容,可以跳过本节。如果对复数的概念比较模糊,这里将介绍它的基本特性。,复数的形式是,a+bi(,在电子学中是,a+bj),,其中,i,是,1,的平方根,,a,和,b,是实数。,A,是实数部分,,bi,是复数的虚数部分。复数可以看作实数,(a,b),的有序对,2.14,赋值操作的,op=,形式,C,语言是一种非常简洁的语言,提供了一些操作的缩写形式。考虑下面的代码:,number=number+10;,这类赋值操作是给一个变量递增或递减一个数字,它非常常见,所以有一个缩写形式:,number+=10;,2.15,数学函数,math.h,头文件包含各种数学函数的声明。为了了解这些数学函数,下面介绍最常用的函数。所有的函数都返回一个,double,类型的值。,2.16,设计一个程序,下面设计本章末的一个真实例子。在一个新程序中试用一些数值类型是一个很不错的想法。这里将从头开始编写一个程序,涉及编程的所有基本要素,包括问题的初始描述、问题的分析、解决方案的准备、编写程序、运行程序,以及测试它,确保它正常工作。该过程的每一步都会引入新问题,而不仅仅是纸上谈兵,。,问题,分析,解决方案,2.16.1,问题,许多人都对树的高度很感兴趣。如果将树砍倒,量出它的高度,就可以确定离树多远才是安全的。这对于患有神经衰弱的人来说非常重要。问题是如何不使用非常长的梯子,就可以确定树的高度,因为长梯也会对人和树枝带来危险。为了确定树的高度,可以向朋友求助,最好找一个个子比较矮的朋友。假定要测量的树比自己和朋友都高。比自己还矮的树很容易测量出其高度,除非这棵树长满了刺,。,2.16.2,分析,现实问题很少能用适合于编程的方式来表达。在编写代码之前,需要确保完全理解了问题及其解决方式。只有这样,才能估计出创建解决方案所需的时间和精力。,分析阶段应增强对问题的理解,确定解决它的逻辑过程。一般这需要大量的工作,这包括找出问题阐述中模糊或遗漏的细节。只有全面理解了问题,才能开始以适合编程的形式表达解决方案,。,2.16.3,解决方案,第一步获取计算树高需要的值。这意味着必须包含,stdio.h,头文件,因为需要使用,printf(),和,scanf(),函数。接着确定存储这些值的变量。之后,就可以使用,printf(),提示输入数字,使用,scanf(),从键盘上读取值,。,2.17,小结,本章介绍了许多基础知识,讨论了,C,程序的构建方式、各种算术运算、如何选择合适的变量类型等。除了算术运算之外,还学习了输入输出功能,通过,scanf(),将值输入变量,通过,Printf(),函数把文本、字符值和数值变量输出到屏幕上。读者可能不能第一次就掌握所有这些内容,但可以在需要时复习本章。,。,第,03,章,条件判断,第,2,章学习了如何在程序中执行计算。本章将在可以编写的程序种类和构建程序的灵活性方面迈出一大步。我们要学习一种非常强大的编程工具:比较表达式的值,根据其结果,选择执行某组语句。,也就是说,可以控制程序中语句的执行顺序。到目前为止,程序中的所有语句都严格按顺序执行。本章将改变这种状况,。,3.1,判断过程,这里将从程序中的基本元素开始。在程序中做出判断,就是选择执行一组程序语句,而不执行另一组程序语句。在现实生活中,我们总是要做判断。我们每天睡醒后,都要决定是否去工作,。,算术比较,设计关系运算符的表达式,基本的,if,语句,扩展,if,语句:,if-else,在,if,语句中使用代码块,嵌套的,if,语句,更多的关系运算法,逻辑运算符,条件运算符,运算符的优先级,3.1.1,算术比较,要做判断,就需要一种比较机制。这涉及到一些新运算符。由于要处理数字,比较数值就是做判断的基本操作,。,3.1.2,设计关系运算符的表达式,看看下面的例子:,5 4,这些表达式称为逻辑表达式或布尔表达式,因为每个表达式都会得到两个结果之一:,true,或,false,。如上一章所述,,1,表示值,true,,,0,表示,false,。第一个表达式是,false,,因为,5,不小于,4,。第二个表达式也是,false,,因为,1,不等于,2,。第三个表达式是,true,,因为,5,大于,4,3.1.3,基本的,if,语句,有了做判断的关系运算符后,就需要使用一个语句来做判断。最简单的语句就是,if,语句。如果要比较自己和他人的体重,并根据结果打印不同的句子,就可以编写如下程序:,if(your_weight my_weight),printf(You are heavier than me.n);,if(your_weight=,大于等于,=,小于等于,!=,不等于,这些运算符都很简单,下面是一些例子,从几个算术例子开始。,3.1.8,逻辑运算符,有时执行一个测试不足以做出判断,而需要合并两个或多个检查,如果这些条件都是,true,,才执行某个操作。或者如果一个或多个条件为,true,,就执行一个计算。,例如,只有自己感觉良好,且当天是工作日,才去上班。仅感觉良好并不意味着要在周六或周日上班。另外,如果生病了或当天是周末,就可以呆在家中。这些都需要使用逻辑运算符,。,3.1.9,条件运算符,条件运算符可用于测试数据,它根据一个逻辑表达式等于,true,还是,false,,执行两个表达式中的一个。由于涉及到三个操作数,一个逻辑表达式和另外两个表达式,因此这个运算符也称为三元运算符。,3.1.10,运算符的优先级,本章的例子都使用了括号,下面该探讨运算符的优先级了。运算符的优先级确定了表达式中运算符的执行顺序。运算符包括逻辑运算符,&,、,!,和,|,,以及比较运算符和算术运算符。表达式中有多个运算符时,如何确定哪个运算符先执行?优先级顺序对表达式的结果有很大的影响。,3.2,多项选择问题,在编程时,常常会遇到多项选择问题。例如根据候选人是否来自,6,所不同大学中的一所,来选择一组不同的动作。另一个例子是根据某一天是星期几,来执行某组语句。在,C,语言中,有两种方式处理多项选择问题。一种是采用,else-if,形式的,if,语句,这是处理多项选择的最常见方式。另一种是,switch,语句,它限制了选择某个选项的方式,但在使用,switch,语句的场合中,它提供了一种非常简洁且便于理解的解决方案,。,给多项选择使用,else-if,语句,Switch,语句,Goto,语句,3.2.1,给多项选择使用,else-if,语句,从一组选项中选择一项的,else-if,语句如下:,if(choice1),/*Statement or block for choice 1*/,else if(choice2),/*Statement or block for choice 2*/,else if(choice3),/*Statement or block for choice 2*/,/*,and so on,*/,else,/*Default statement or block*/,每个,if,表达式可任意组成,只要其结果是,true,或,false,即可。如果第一个,if,表达式,choice1,是,false,,就执行下一个,if,。如果,choice2,是,false,,就执行下一个,if,。继续下去,直到找到一个结果为,true,的表达式为止。此时,就执行该,if,中的语句或语句块。然后结束这个执行序列,执行,else-if,语句后面的语句块。,3.2.2,Switch,语句,switch,语句允许根据一个整数表达式的结果,从一组动作中选择一个动作。下面用一个简单的例子来说明其工作原理。假定在一家彩票销售点,数字,35,可赢得一等奖,数字,122,可赢得二等奖,数字,78,可赢得三等奖,。,3.2.3,Goto,语句,If,语句允许根据测试的结果选择执行两个语句块中的一个。这是一个强大的工具,可以改变程序的自然执行顺序,程序不再从,A,执行到,B,,再到,C,和,D,,而可以执行到,A,,再决定是否跳过,B,和,C,,直接执行,D,。,3.3,按位运算符,在进入本章的大型示例之前,还要先学习一组运算符,它们看起来类似于前面介绍的逻辑运算符,但实际上与逻辑运算符完全不同。这些运算符称为按位运算符,因为它们操作的是整数值中的位,。,按位运算符的,op=,用法,使用按位运算符,3.3.1,按位运算符,的,op=,用法,所有的二元按位运算符都可以在,op=,形式的赋值语句中使用,但,运算符例外,它是一元运算符。,3.3.2,使用,按位运算符,从学术的角度来看,按位运算符很有趣,但它们用于什么场合?它们不用于日常的编程工作,但在一些领域非常有效。按位与,&,、按位或,|,运算符的一个主要用途是测试并设置整数变量中的各个位。此时可以使用各个位存储涉及二选一的数据。例如,可以使用一个整数变量存储一个人的几个特性。在一个位中存储这个人是男性还是女性,使用,3,个位指定这个人是否会说法语、德语或意大利语。再使用另一个位记录这个人的薪水是否多于,$50 000,。在这,4,个位中,都记录了一组数据。下面看看这是如何实现的。,3.4,设计程序,在第,3,章的最后,要应用所学的内容,建立一个有用的程序,。,问题,分析,解决方案,3.4.1,问题,我们要编写一个简单的计算器,进行加、减、乘、除操作,在执行除操作时,还要确定其余数。这个程序必须能以自然的方式进行计算,例如,5.6*27,或,3+6,。,3.4.2,分析,本程序涉及的所有数学知识都很简单,但输入过程会增加复杂性。我们需要检查输入,确保用户没有要求计算机完成不可能的任务。还必须允许用户一次输入一个计算式,例如:,34.87+5,或者,9*6.5,3.4.3,解决方案,获得用户输入是很简单的,可以使用,printf(),和,scanf(),,所以需要,头文件。这里介绍的唯一的新知识是获得输入的方式。如前所述,可以让用户更自然地输入每个数字和要执行的操作,而不是逐个输入它们。可以这么做是因为,scanf(),允许这么做,这里在列出程序的第一部分之后讨论其细节。,3.5,小结,本章用一个相当复杂的例子来结束。在前两章中,仅介绍了,C,程序的基础知识,读者能完成一些有用的工作,但程序一旦开始,就不能控制程序的执行顺序。本章开始体验,C,语言的强大,并学习在执行过程中使用用户输入的数据或计算的结果,来确定下一步的操作。,本章学习了如何比较变量,再使用,if,、,if-else,、,else-if,和,switch,语句来影响结果。还学习了如何使用逻辑运算符合并变量之间的比较操作。现在读者应对如何做出判断有了很多认识,能使程序代码沿着不同的路径执行。,第,04,章,循环,上一章学习了如何比较数据项,并根据其结果进行判断。我们可以根据程序的输入选择计算机如何做出反应。本章将介绍如何重复执行一个语句块,直到满足某个条件为止,这称为循环。,语句块的执行次数可以简单地用一个计数器来控制,语句块重复执行指定的次数,或者还可以更复杂一些,重复执行一个语句块,直到满足某个条件为止,例如用户输入,quit,。后者可以编写上一章的计算器示例,使计算过程重复需要的次数,而不必使用,goto,语句,。,4.1,循环,如前所述,使一系列语句重复执行指定的次数,或重复执行它们,直到满足某个条件为止的编程机制称为循环。循环和比较数据项是基本的编程工具。能比较数据值和重复执行语句块后,就可以合并这两个功能,控制语句块的执行次数。例如,可以重复执行一个操作,直到比较的两个数据项相同为止。当它们相同时,就可以执行另一个操作,。,4.2,递增和递减运算符,递增运算符,(+),和递减运算符,(),会将存储在整数变量中的值递增或递减,1,。假设定义一个整数变量,number,,它的当前值是,6,。可以用下面的语句给它加,1,:,+number;/*Increase the value by 1*/,4.3 for,循环,使用,for,循环的基本形式可以使语句块重复执行指定的次数。假设要显示,110,之间的数字,可以不用编写,10,条,printf(),语句,而可以这么写:,intcount=0;,for(count=1;count=10;+count),printf(n%d,count);,4.4 for,循环的一般语法,for,循环的一般形式如下:,for(starting_condition;continuation_condition;action_per_iteration),Statement;,Next_statement;,重复执行的语句由,Statement,表示。通常这等价于包含在括号中的语句块,(,一组语句,),。,4.5,再谈递增和递减运算符,前面的示例使用了递增运算符,下面深入探讨递增和递减运算符的作用。它们都是一元运算符,只使用一个操作数,用来将存储在整数类型变量中的值加,1,或减,1,。,递增运算符,递增运算符的前置和后置形式,递减运算符,4.5.1,递增运算符,先看看递增运算符。它的形式是,+,,给所操作的变量加,l,。例如,假如变量的类型是,int,,下面的,3,条语句有相同的结果:,count=count+1;,count+=1;,+count;,4.5.2,递增运算符的前置和后置形式,前面将,+,运算符放在变量前面,这叫做前置形式。这个运算符也可以写在变量的后面,展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




C#入门经典(第4版).ppt



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/12073369.html