计算机程序设计基础_第1页
计算机程序设计基础_第2页
计算机程序设计基础_第3页
计算机程序设计基础_第4页
计算机程序设计基础_第5页
已阅读5页,还剩256页未读 继续免费阅读

下载本文档

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

文档简介

实训项目简介第5章计算机程序设计基础第5章计算机程序设计基础5.1算法5.2程序设计概述5.3程序设计基础5.4程序设计方法5.5编译原理第5章计算机程序设计基础重点:算法的概念,算法的表示;程序的概念;程序设计语言的分类;C/C++程序设计基础。难点:C/C++程序设计基础;编译过程。5.1算法5.1.1什么是算法5.1.2简单的算法举例5.1.3算法的特性5.1.4怎样表示一个算法5.1.5算法的评价标准5.1.1什么是算法做个游戏

一个农夫带着一条狼、一只山羊和一篮蔬菜过河,但只有一条小船,并且每次只能让农夫带一样东西过河。农夫在场的情况下一切相安无事,一旦农夫不在,狼会吃羊,羊会吃蔬菜。问聪明的农夫如何解决过河问题。5.1.1什么是算法5.1.1什么是算法5.1.1什么是算法?5.1.1什么是算法解决方案方案1:先带羊过去,空船回,再带菜过去,带羊回,然后带狼过去,空船回,最后带羊过去。方案2:先带羊过去,空船回,再带狼过去,带羊回,然后带菜过去,空船回,最后带羊过去。

解决问题的关键是先带羊,且第二次回来时也要带羊回来。5.1.1什么是算法把大象放进冰箱里需要几步?2000春晚小品《钟点工》

1、把冰箱门打开2、把大象装进去3、把冰箱门关上又如家中烧开水的过程分几步?5.1.1什么是算法广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。例如:从家到学校,煎鸡蛋等。注意:对同一个问题,可以有不同的解题方法和步骤。为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量(算法分析),选择合适的算法。5.1.1什么是算法计算机算法:一个能够被计算机处理的,有限长的操作序列。计算机算法可分为两大类别:数值运算算法数值运算的目的是求数值解。非数值运算算法非数值运算包括的面十分广泛,最常见的是用于事务管理领域。算法是程序的灵魂,解决“做什么”和“怎么做”的问题。5.1.2简单的算法举例例1求1×2×3×4×5可以用最原始的方法进行:步骤1:先求1*2,得到结果2。步骤2:将步骤1得到的乘积2再乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。这就是最后的结果。例1求1×2×3×4×5×…×1000太繁琐5.1.2简单的算法举例改进的算法:设变量p为被乘数变量i为乘数用循环算法求结果5.1.2简单的算法举例S1:使p=1,或写成1pS2:使i=2,或写成2iS3:使p与i相乘,乘积仍放在变量p中,可表示为:p*ipS4:使i的值加1,即i+1iS5:如果i不大于5,返回重新执行S3;否则,算法结束最后得到p的值就是

5!的值若是1000,求什么?5.1.2简单的算法举例S1:使p=1,或写成1pS2:使i=2,或写成2iS3:使p与i相乘,乘积仍放在变量p中,可表示为:p*ipS4:使i的值加1,即i+1iS5:如果i不大于5,返回重新执行S3;否则,算法结束最后得到p的值就是

5!的值若求1×3×5×7×9×11332211所求相当于i≦115.1.2简单的算法举例例2有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。用ni代表第i个学生学号,gi表示第i个学生成绩S1:1iS2:如果gi≥80,

则输出ni和gi,否则不输出S3:i+1iS4:如果i≤50,返回到步骤S2,继续执行,否则,算法结束5.1.2简单的算法举例例3判定2000—2500年中的每一年是否闰年,并将结果输出。闰年的条件:

(1)能被4整除,但不能被100整除的年份都是闰年,如2008、2012、2048年

(2)能被400整除的年份是闰年,如2000年不符合这两个条件的年份不是闰年例如2009、2100年5.1.2简单的算法举例设year为被检测的年份。算法表示如下:S1:2000yearS2:若year不能被4整除,则输出year的值和“不是闰年”。然后转到S6S3:若year能被4整除,不能被100整除,则输出year的值和“是闰年”。然后转到S6S4:若year能被400整除,则输出year的值和“是闰年”,然后转到S6S5:其他情况输出year的值和“不是闰年”S6:year+1yearS7:当year≤2500时,转S2,否则停止year不能被4整除非闰年year被4整除,但不能被100整除闰年year被100整除,又能被400整除闰年其他非闰年逐渐缩小判断的范围5.1.2简单的算法举例5.1.3算法的特性一个有效算法应该具有以下特点:(1)

有穷性。一个算法应包含有限的操作步骤,而不能是无限的。(2)

确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。(3)

有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。(4)

有一个或多个输出。算法的目的是为了求解,“解”就是输出。没有输出的算法是没有意义的。(5)

有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。5.1.3算法的特性对于算法使用者来说:可以使用别人已设计好的现成算法和程序;只需根据已知算法的要求给予必要的输入,就能得到输出的结果;对使用者来说算法就像一个黑盒子。对于算法设计者来说:必须知道算法的细节。输入3个数黑箱子3个数中最大数求3个数的最大数5.1.4怎样表示一个算法1、用自然语言表示算法2、用流程图表示算法3、用N-S流程图表示算法4、用伪代码表示算法5、用计算机语言表示算法5.1.2节介绍的算法是用自然语言表示的。用自然语言表示通俗易懂,但文字冗长,容易出现歧义性。用自然语言描述包含分支和循环的算法,不很方便。除了很简单的问题外,一般不用自然语言。1、用自然语言表示算法2、用流程图表示算法流程图表示法:使用图形符号描述解决问题的逻辑步骤,并显示各步骤之间的相互关系。它使用图的形式掩盖了处理步骤的所有细节,只显示从开始到结束的整个流程。用图形表示算法,直观形象,易于理解起止框输入输出框处理框判断框流程线连接点注释框x≧0Y……N……一个入口两个出口2、用流程图表示算法起止框输入输出框处理框判断框流程线连接点注释框③①②①③②③位置不够防止交叉2、用流程图表示算法例1将求1×2×3×4×5的

算法用流程图表示。如果需要将最后结果输出:1ti>5开始2it*iti+1i结束NY例1将求1×2×3×4×5的

算法用流程图表示。如果需要将最后结果输出:1t输出ti>5开始2it*iti+1i结束NY2、用流程图表示算法2、用流程图表示算法

例2有50个学生,要求将成绩在80分以上的学生的学号和成绩输出。将此问题的算法用流程图表示。1ii>50开始i+1i结束NY输入ni、gi1i开始gi≧80输出ni、gii+1ii>50NYYN如果包括输入数据部分①1ii>50开始i+1i结束NY输入ni、gi1igi≧80输出ni、gii+1ii>50NYYN如果包括输入数据部分①①2、用流程图表示算法例3判定2000—2500年中的每一年是否闰年,将结果输出。将此问题的算法用流程图表示。NYN开始2000yearyear不能被4整除year是闰年year不能被100整除year+1yearyear>2500结束Yyear不能被400整除year不是闰年year是闰年year不是闰年YNYN3、用N-S流程图表示算法流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。使用者可以毫不受限制地使流程随意地转来转去,使人难以理解算法的逻辑。归纳起来,算法的处理逻辑可以通过三种基本结构来表示。顺序结构、选择结构、循环结构N-S流程图就是基于这三种基本结构的算法表示方法。3、用N-S流程图表示算法(1)顺序结构AB3、用N-S流程图表示算法(2)选择结构ABYpNAYpN3、用N-S流程图表示算法(3)循环结构①当型循环结构whileAYp1NYx<5N0x输出x的值x+1x输出0,1,2,3,43、用N-S流程图表示算法(3)循环结构②直到型循环结构untilAYp2NYx≧5N0x输出x的值x+1x输出1,2,3,4,53、用N-S流程图表示算法以上三种基本结构,有以下共同特点:(1)只有一个入口(2)只有一个出口一个判断框有两个出口一个选择结构只有一个出口(3)结构内的每一部分都有机会被执行到。也就是说,对每一个框来说,都应当有一条从入口到出口的路径通过它(4)结构内不存在“死循环”3、用N-S流程图表示算法N-S流程图也称盒图。N-S流程图用以下的流程图符号:ABABYNpA当p1成立A直到p2成立顺序结构选择结构循环结构(当型)循环结构(直到型)3、用N-S流程图表示算法例1将求5!的算法用N-S图表示。直到i>51t输出t2it*iti+1i3、用N-S流程图表示算法

例2

将50名学生中成绩高于80分者的学号和成绩输出。将此算法用N-S图表示。直到i>501i1ii+1i输入ni、gii+1i直到i>50gi≧80否是输出ni,gi例3将判定闰年的算法用N-S图表示。直到year>25002000yearyear+1year否是year%4为0否是输出year非闰年year%100不为0year%400为0是否输出year非闰年输出year闰年输出year闰年4、用伪代码表示算法伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用。4、用伪代码表示算法例

求5!。begin(算法开始)1

t2iwhilei≤5{t*iti+1i}printtend(算法结束)5、用计算机语言表示算法要完成一项工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。5.1.5算法的评价标准可以从以下几个方面对算法进行评价:(1)算法的正确性:指算法能正确地完成所要解决的问题。就目前的研究来看,要想通过理论方式证明一个算法的正确性是非常复杂和困难的,一般采用测试的方法,基于算法编写程序,然后对程序进行测试。针对所要解决的问题,选定一些有代表性的输入数据,经程序执行后,查看输出结果是否和预期结果一致,如果不一致,则说明程序中存在错误,应予以查找并改正。经过一定范围的测试和程序改正,不再发现新的错误,程序可以交付使用,在使用过程中仍有可能发现错误,再继续改正,这时的改正称为程序维护。5.1.5算法的评价标准(2)算法的时间复杂度:指依据算法编写出程序后在计算机上运行时所耗费的时间度量。算法的时间复杂度T(n)实际上表示:当问题规模n充分大时,该程序运行时间的一个数量级,用O表示。比较两个算法的时间复杂度时,不是比较两个算法对应程序的具体执行时间,这涉及编程语言、编程水平和计算机速度等多种因素,而是比较两个算法相对于问题规模n所耗费时间的数量级。

eg:O(1),O(n),O(n2)5.1.5算法的评价标准(3)算法的空间复杂度:依据算法编写出程序后在计算机上运行时所需内存空间大小的度量,也是和问题规模n有关的度量。(4)算法的可理解性:算法是为了人们的阅读与交流,可理解性好的算法有利于人们的正确理解,有利于程序员据此编写出正确的程序。5.2程序设计概述5.2.1程序的概念5.2.2程序设计语言5.2.3程序设计的任务5.2.1程序的概念程序:指为让计算机完成特定的任务而设计的指令序列或语句序列。程序是程序设计人员用某种计算机语言编写的、计算机能够理解并执行的命令集合,能够在目标计算机执行。程序是算法在计算机中的实现。程序设计是沟通算法与计算机的桥梁。使用计算机解决问题时先设计算法,再使用程序设计语言将算法描述为程序,最后由计算机执行程序。5.2.2程序设计语言程序设计语言(programminglanguage):是人类与计算机交流的工具。

是告诉计算机完成某项工作的语言,是一种让人与计算机之间进行交流,让计算机理解人的意图并按照人的意图完成工作的符号系统。程序设计语言分类按程序设计语言的发展阶段可分为:1、机器语言2、汇编语言3、高级语言1、机器语言由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。机器语言的特点:由二进制编码指令构成的语言。是一种依附于机器硬件的语言。机器语言程序可以直接执行。机器语言指令的组成:操作码+操作数

操作码——用于说明指令的功能;操作数——用于说明参与操作的数据或数据所在单元的地址。操作码和操作数都是以二进制的形式表示。1、机器语言【例1】机器语言程序示例。程序功能:把两个内存单元中的数相加,并将结果存入另外一个单元。0001

010101101100

//把地址为01101100的内存单元中的数装入

0101号寄存器0001

0110

01101101

//把地址为01101101的内存单元中的数装入

0110号寄存器0101

000001010110

//把0101和0110寄存器中的数相加,结果存入

0000号寄存器0011000001101110

//把0000号寄存器中的数存入地址为01101110的内存单元中1、机器语言机器语言的优缺点缺点:指令难以准确记忆;程序容易写错;程序难以理解和修改。优点:可直接执行,运行效率高2、汇编语言用一些简洁的英文字母符号串(助记符)来替代一个特定指令的二进制串,这种助记符语言称为汇编语言。汇编语言的特点:由助记符指令构成的语言。也是一种依附于机器硬件的语言。汇编语言源程序需要翻译后才能执行。—汇编程序汇编语言指令的组成:助记符:表示指令的操作码。(如MOV表示数据传送操作,ADD表示加法操作等。)存储单元/寄存器:表示操作数。2、汇编语言【例2】汇编语言程序示例。程序功能:把两个内存单元中的数据相加,并将结果存入另外一个单元。MOVR5,X

//把内存单元X中的数装入R5寄存器ADDR5,Y

//把R5中的数与Y单元中的数相加,结果存入R5MOVZ,R5

//把R5中的数存入Z单元中汇编语言的优缺点优点:指令容易记忆,程序容易编写和理解;——相对机器语言缺点:助记符比较难以记忆,需要编程人员对计算机的硬件结构有比较深入的了解。抽象层次很低,仍然是低级语言。3、高级语言高级语言的特点

由自然语言和数学公式表示的语言。是一种独立于机器硬件的语言。高级语言程序需要编译后才能执行。【例3】高级语言程序示例。程序功能:把两个内存单元中的数相加,并将结果存入另外一个单元。Z=X+Y

//把内存单元X中的数与Y中的数相加,结果存入Z单元3、高级语言高级语言源程序需要先翻译成等价的目标程序,才能为计算机理解和执行。翻译程序的两种模式:(高级语言的两个执行方式)编译方式:先把高级语言的源程序翻译成目标程序,然后经过连接装配程序生成可执行程序,最后运行可执行程序。解释方式:边翻译边执行,不需要翻译成目标程序。5.2.2程序设计语言三种语言的应用比较:机器语言—目前一般不直接用来编写程序。汇编语言—靠近机器,能够充分利用计算机硬件的特性,编写出的程序效率较高,用于对效率要求较高的规模不大的程序(如外设驱动程序、计算机控制程序等)。高级语言—用于编写规模较大的程序。5.2.3程序设计的任务1.分析问题对于接手的任务要进行认真的分析研究所给定的条件分析最后应达到的目标找出解决问题的规律选择解题的方法建立数学模型5.2.3程序设计的任务2.设计算法设计出解题的方法和具体步骤3.用计算机语言描述算法(即写出源程序)4.对源程序进行编辑、编译和连接5.运行程序,分析结果结果错了,程序肯定错结果对了,程序未必对1、分析问题分析解决问题所需要的数据(条件)——输入;此例中要求输入圆半径确定要计算机解决什么问题,即“做什么”——处理;此例中要求计算圆面积和周长明确最后得到的结果——输出。此例中要求输出圆面积和周长练习:已知圆的半径,求圆的面积和周长,并输出结果。5.2.3程序设计的任务2、设计算法设计出解决某一问题的一组(有限个)求解步骤,即怎么做。本例用计算圆面积和周长公式即可得到结果注意:

为计算机设计算法就必须依据计算机的工作原理(冯•诺依曼型计算机),因为设计的算法和程序最终要让计算机去执行。有些问题的算法计算机与人工的方法是不同的,例如:记录原始数据和中间结果,计算机要利用存储器,而人工需要纸和笔。5.2.3程序设计的任务2、设计算法自然语言描述流程图描述

先用键盘输入圆的半径,再利用公式计算出圆的面积和周长,最后输出圆面积和周长。5.2.3程序设计的任务2、设计算法自然语言描述流程图描述5.2.3程序设计的任务3、编写程序#include<stdio.h>intmain(){floatr,length,area;printf("Entertheradius\n");scanf("%f",&r);length=2*3.14*r;area=3.14*r*r;printf("Radiusis%f\n",r);printf("Areais%f\n",area);printf("Lengthis%f\n",length);getchar();return0;}5.2.3程序设计的任务#include<iostream.h>intmain(){ doubler;

cout<<"Entertheradius\n";

cin>>r; doublelength=2*3.14*r; doublearea=3.14*r*r;

cout<<"园的周长是:"<<length<<endl <<"圆的面积是:"<<area<<endl;

return0;}5.3程序设计基础5.3.1C++语言的基本要素5.3.2C++语言的数据类型5.3.3常量变量和对象5.3.4运算符和表达式5.3.5基本语句5.3.6三种基本程序结构(以C++语言为例)5.3.1C++语言的基本要素自然语言的学习过程:(语法规则)单字->组词->造句->句子构成文章计算机语言的学习过程:(语法规则)合法字符->单词(标识符、常量、表达式等)->语句->程序5.3.1C++语言的基本要素1.字符集C++语言中最小的语法单位是字符,所有合法字符的集合称为字符集。(1)英文字母(大小写不同)(2)数字:0,1,2,…,9。(3)标点符号:逗号(,)、分号(;)、单引号(’)、双引号(”)、冒号(:)、空格()、左花括号({)、右花括号(})、回车(Enter)。5.3.1C++语言的基本要素1.字符集(4)单字符运算符号:左右圆括号()、左右方括号[]、加(+)、减(-)、乘(*)、除(/)、取余数(%)、小数点(.)、大于(>)、等于(=)、小于(<)、叹号(!)、破折号(~)、和号(&)、尖号(^)、分割符(|)、问号(?)。(5)特殊用途的符号:井字号(#)、反斜线(\)、下划线(_)。注意:以上字符均为英文字符。5.3.1C++语言的基本要素2.标识符C++语言中各种对象的名字用标识符表示。例如常量名、变量名、函数名、类名、对象名、文件名等。标识符是由字母、数字和下划线三种字符构成的且第一个字符必须是字母或下划线的字符序列。5.3.1C++语言的基本要素2.标识符标识符的分类(1)关键字(保留字):预先定义好的标识符,具有特定的含义和用途,C++编译器对其进行特殊处理。注:每个关键字都有固定的含义,用户不能改变关键字的用途。如何识别关键字?

使用VC++6.0的编辑环境时,缺省是蓝色的字符即为关键字。5.3.1C++语言的基本要素(1)关键字(保留字):5.3.1C++语言的基本要素2.标识符标识符的分类(2)预定义标识符::也具有特定含义,如库函数名;但允许用户将这类标识符另作他用,改变其原有意义。(3)用户标识符:用户根据自己需要定义的标识符。注:不能与关键字同名,也尽量不要与预定义标识符同名。5.3.1C++语言的基本要素2.标识符用户标识符的命名规则:①由字母、数字和下划线组成;②必须以字母或下划线开头;③对大小写敏感;④不能与关键字同名。例如:intchar;//char是关键字,不能用做变量名char89_name;//变量名不能以数字开头intis-loan;//中划线不能出现在变量名中

//字符间的连接应该采用下划线5.3.1C++语言的基本要素一般的编程操作流程为:编辑(edit)编译(compile)链接(link或make或build)调试运行(debug或run)该过程循环往复,直至完成。编辑源程序(键入程序).cpp编译程序.obj链接.exe调试运行编辑将源程序输入到计算机中,生成后缀为.cpp的源程序文件。编译将源程序转换为后缀为.obj的目标程序文件。链接将若干目标文件与库文件连在一起,生成一个后缀为.exe的可执行文件。运行调试5.3.1C++语言的基本要素源程序用源语言写的,有待翻译的程序“.cpp”-cplusplusfile目标程序也称为“结果程序”,是源程序通过翻译程序加工以后所生成的程序。“.obj”-objectfile目标代码为机器代码(机器指令)可执行文件可以直接执行的机器语言文件“.exe”-executablefile5.3.1C++语言的基本要素5.3.1C++语言的基本要素C++集成开发环境:1.TurboC++2.

C++Builder3.

Dev-C++4.

VisualC++VisualC++6.0在项目文件管理、调试及操作的亲和力等方面上都略胜一筹,故本书以其比较流行的汉化版本VisualC++6.05SP6中文企业版作为编程环境。5.3.1C++语言的基本要素使用VC++6.0创建C++程序的过程:1.创建工作文件夹2.启动VisualC++6.0

3.添加C++程序

1)创建工程:新建->工程->win32consoleapplication->输入工程名称,指定工程存储位置,确定->空的工程,确定。2)创建源文件新建->文件->c++源文件->输入文件名,确定。4.编辑源程序(即输入源程序)5.编译、链接和运行5.3.1C++语言的基本要素方法建议:1)课前准备、课后复习2)看懂课件上的内容,不懂?提问、email、网上查找3)务必要自己动手编程、调试、运行4)从模仿、照抄开始,多练习5)上机:课前准备、不做其他无关事5.3.1C++语言的基本要素最简单的C++语言程序举例例:要求在屏幕上输出以下一行信息。

Helloworld!#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}函数的名字,表示主函数C++程序必须有一个

main函数5.3.1C++语言的基本要素#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}

主函数类型5.3.1C++语言的基本要素#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}

函数体5.3.1C++语言的基本要素#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}

输出流cout,

是标准输出设备的名称输出语句5.3.1C++语言的基本要素插入运算符“<<”;

指示将后面的数据送到输出设备上去;#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}

换行符5.3.1C++语言的基本要素“…”:表示字符串常量,

原样输出。#include<iostream.h>intmain(){

cout<<”Helloworld!.\n”;return0;}

当main函数执行结束前将整数0作为函数值5.3.1C++语言的基本要素#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}

表示语句结束预处理指令5.3.1C++语言的基本要素C++库文件5.3.1C++语言的基本要素C++语言程序的结构特点:1.一个程序由一个或多个源程序文件组成小程序往往只包括一个源程序文件一个源程序文件中可以包括四个部分:预处理指令全局声明函数定义类定义#include<stdio.h>等在函数之外进行的数据声明每个函数用来实现一定的功能5.3.1C++语言的基本要素2.函数是C++程序的主要组成部分一个C程序是由一个或多个函数组成的必须包含一个main函数(只能有一个)程序总是从main开始执行。3.一个函数定义包括两个部分:函数首部(函数头):intmain()函数体:函数首部下面的花括号内的部分{}。intmain(){}C++程序源文件1源文件2源文件n全局声明函数定义1编译预处理函数首部函数体类定义...C++语言程序构成5.3.1C++语言的基本要素5.3.1C++语言的基本要素#include<iostream.h>intmain(){

cout<<”Helloworld!\n”;return0;}

5.3.2C++语言的数据类型数据类型规定了该类型数据所占内存空间的大小,及其所能够进行的操作。高级语言内部通常提供一组基本数据类型,包括类型名,各种类型值的文字量写法,并为每个类型提供一组可用操作。使用者不必了解每个类型值的具体表示形式,不必了解操作的实现方式,就可以通过类型名和相应操作,使用各个基本类型。高级语言也允许程序员根据需要构建数据类型,称为构造数据类型。5.3.2C++语言的数据类型5.3.2C++语言的数据类型1、整型int整型规定了整数的表示形式,整数的运算(操作),以及整数在计算机中的表示范围。整型数的内部表示:二进制补码整型数的表示范围:取决于二进制位数整型类型标识符:int类型修饰符:long,short,signed,unsignedc++规定:

char<=shortint<=int<=longint5.3.2C++语言的数据类型1、整型int

在32位编译器中:int(基本整型):占4个字节short(短型)2字节long(长型)4字节signed(有符号,缺省值)unsigned(无符号)注意:long,short,signed,unsigned修饰int时int可省略5.3.2C++语言的数据类型1、整型int

扩充的整型类型如下:有符号基本整型

[signed]int;无符号基本整型

unsignedint;有符号短整型

[signed]short[int];无符号短整型

unsignedshort[int];有符号长整型

[signed]long[int];无符号长整型

unsignedlong[int]5.3.2C++语言的数据类型在32位编译器中整型的表示范围类型长度(位数)前缀表示范围short[int]16[signed]-32768~32767unsigned0~65535int32

[signed]-2147483648~2147483647unsigned0~4294967295long[int]32[signed]-2147483648~2147483647unsigned0~42949672955.3.2C++语言的数据类型2、实型实型又称浮点型,是用来表示具有小数点的实数。数值以规范化的二进制数指数形式存放。浮点型,用于表示实型的类型有float(单精度)、double(双精度)和longdouble(长双精度)。5.3.2C++语言的数据类型2、实型取值范围类型长度(位数)表示范围有效位float32-3.4x1038~3.4x10387位double64-1.8x10308~1.8x1030815位longdouble80-1.2x104932~1.2x10493219位注:赋值范围是参考的钱能的教材;5.3.2C++语言的数据类型3、布尔类型bool用于表示逻辑量的“真”和“假”,因此也称为逻辑类型。0表示false,1表示true占1字节的存储空间注意:任何数值都可自动转换成bool值0可被转换成false任何不等于0的数值都被转换成true5.3.2C++语言的数据类型4、字符型char字符类型用于表示ASCII编码字符。在32位系统中字符型数据占1字节。它有三种不同的类型:char1字节signedchar1字节unsignedchar1字节系统表示字符型数据时,不是将字符本身的形状存入内存,而是将字符的ASCII码存入内存。5.3.2C++语言的数据类型在32位编译器中字符型的表示范围类型长度(位数)前缀表示范围char8[signed]-128~1278unsigned0~2555.3.3常量变量和对象1、常量在程序的执行过程中其值不能被改变的量。(1)整型常量:如1000,12345,0,-345(2)浮点型常量(实型常量):十进制小数形式:如0.34-56.790.0指数形式:如12.34e3(代表12.34103)

(E或e前必须有数字,且指数必须是整数)5.3.3常量变量和对象1、常量(3)字符常量普通字符常量:由单引号括起来的单个字符,

如‘A’,‘a’,‘x’,‘?’,‘$’,‘‘

。转义字符:以转义符“\”开头的格式字符。使用转义字符的目的是表示不可见的字符。经常用的不可见字符用一个转义符后跟一个专门的字符来表示;当转义字符引导符后接数字时,用来指定字符的ASCII码值。默认为八进制,数字前加x/X为十六进制。5.3.3常量变量和对象常见转义字符 字符形式 功能

\‘ 单引号

\“ 双引号

\? 问号

\\ 反斜杠字符“\” \a 响铃

\b 退格

\n 换行

\t 水平制表符

\v 垂直制表符

\r 回车

\ooo o表示八进制数,与该八进制对应的字符

\xhh

h表示十六进制数,与该十六进制对应的字符5.3.3常量变量和对象1、常量(3)字符常量转义字符:例如:’\101’,表示’A’;‘\x41’,表示’A’注意:0、‘0’和‘\0’的区别0表示整数‘0’表示数字0字符‘\0’表示ASCII码值为0的字符,“空操作”1、常量(4)字符串常量由一对双引号括起来的字符序列,

如”CHINA”,”a”,”123”。字符串常量中字符的个数称为字符串长度。在C++中,存储字符串常量时总是以‘\0’结束。"CHINA""a"'a'CHINA\0a

\0a注意:字符常量和字符串常量区别开来字符串长度和字符串所占内存空间数的区别5.3.3常量变量和对象5.3.3常量变量和对象2、变量在程序运行过程中,其值可以被改变的量;用来存放初始值、中间结果或最终结果。变量的作用是存取程序中需要处理的数据,对应内存中的一块存储区域,该区域的名称即为变量名,该区域的内容是变量的值。变量有3个基本要素合法的变量名变量的数据类型变量的数值

12a5.3.3常量变量和对象…………1243078124307912430801243081124308212430831243084124308512430861243087124308812430891243090内存空间内存地址存储单元(1Byte)12变量a的地址变量a的数值例:inta=12;2、变量一般要先定义,再使用,变量定义的一般形式为:

数据类型名变量名;5.3.3常量变量和对象2、变量变量名是内存空间的一个标识,对变量名的操作也是对其内存空间的操作。如:int

myAge,myWeight;

myAge=20;

myWeight=100;

myAge=myAge+1;5.3.3常量变量和对象2、变量变量模式:变量保存数据的方式,称为“变量模式”。变量模式包括值模式和引用模式两种。值模式指的是变量是保存值的容器,其中保存相应的值。12x5.3.3常量变量和对象2、变量变量模式:引用模式则在变量里保存对一个数据对象的引用,数据对象里保存着数据值。12x5.3.3常量变量和对象3、对象对象的概念很广泛,通常指在程序运行中存在的任何元素。例如:变量、有名的常量、代码段、动态分配的内存块、程序中的文字量、字符串等等。在程序运行中,需要创建和使用的各种程序对象有:(1)程序变量(2)程序常量(3)匿名数据对象

(4)动态分配的匿名数据对象

(5)计算中生成的临时数据对象,如函数返回值、运算符的计算结果等

(6)其他对象,如程序的运行系统所需要的对象。5.3.3常量变量和对象例子:假设圆的半径r=2,计算圆的面积并输出结果。#include<iostream.h>intmain(){

intr=2;doublearea; area=3.14159*r*r;

cout<<"圆的面积为:"<<area<<"\n"; return0; }5.3.4运算符和表达式运算符和表达式是实现数据操作的两个重要组成部分。运算符:即操作符,如+,-,*,/等操作数:是运算符的运算对象,变量、常量、函数等。表达式:是由运算符和操作数按照一定规则组合而成的式子。例:(2*x+a)*sin(b)-201、运算符根据运算符的操作数的个数不同,可将其分为:单目运算符(一元):对一个操作数运算双目运算符(二元):对二个操作数运算三目运算符(三元):对三个操作数运算5.3.4运算符和表达式1、运算符在C++中运算符大致可以分为:算术运算符:+-*/%赋值运算符:=+=-=*=/=%=自增/自减运算符:++、--关系运算符:<<=>>===!=逻辑运算符:&&||位运算符:~&^|<<>>条件运算符:?:逗号运算符:,指针运算符:*&求字节数运算符:sizeof强制类型转换运算符:类型分量运算符:.->下标运算符:[]5.3.4运算符和表达式5.3.4运算符和表达式(1).算术运算符+,-,*,/,%(求余数)。除法运算“/

”,两个整数相除,结果为整数,否则为实数。例如:

5/2=25.0/2=2.55%2=1(x+5)*y+6(2).赋值运算符在C++中,=称为赋值运算符,其使用形式为:

变量名=表达式“=”不同于数学中的等号。inta;a=3;5.3.4运算符和表达式(2).赋值运算符在赋值符“=”之前加上算术运算符,可以构成复合赋值运算符。算术运算+=加赋值-=减赋值*=乘赋值/=除赋值%=求余赋值5.3.4运算符和表达式(2).赋值运算符例如:inta,b;a+=b等效于a=a+ba*=b-4/c+d等效于:

a=a*(b-4/c+d)

不等效于:

a=a*b-4/c+d(3).自增、自减运算符——单目运算符自增:++++i:先加1后使用i++:先使用后加1例:i=3;j1=++i;j1=4相当于执行:i=i+1;j1=i;j2=i++;j2=3相当于执行:j2=i;i=i+1;自减:----i:先减1后使用i--:先使用后减1例:i=3;j1=--i;j1=2相当于执行:i=i-1;j1=i;j2=i--;j2=3相当于执行:j2=i;i=i-1;5.3.4运算符和表达式5.3.4运算符和表达式(4).关系运算符——双目运算符,结果值为真/假。大小判断>、>=、<、<=。相等判断==、!=。2<36>=8a==3a=3

2+3<4-12+(3<4)-15.3.4运算符和表达式(5).逻辑运算符:&&(逻辑与)

||(逻辑或)

!(逻辑非)&&和||是双目(元)运算符!是一目(元)运算符a&&b

:a和b都为真,

a&&b才为真,

否则为假a||b

:a和b都为假,

a||b才为假,

否则为真!a:a真!a假,a假!a真5.3.4运算符和表达式例子:判断年龄在13至17岁之内?age>13&&age<17(不能写成13<age<17)判断年龄小于12或大于65?age<12||age>65判别某一年是否闰年,用逻辑表达式表示:(year%4==0&&year%100!=0)||(year%400==0)如果表达式值为1,则闰年;否则为非闰年例子:(1)若a=4,则!a的值为0(2)若a=4,b=5,则a&&b的值为1(3)若a=4,b=5,则a||b的值为1(4)若a=4,b=5,则!a||b的值为1(5)4&&0||2的值为1(6).运算符的优先级与结合性:优先级,表达式中不同操作符的执行顺序的规定。上述运算符中单目运算符的优先级最高,其次是算术运算,再次是关系运算,然后是逻辑运算,最后是赋值运算。如:a=-5*6+3;5.3.4运算符和表达式!++--(高)算术运算符关系运算符

&&和||赋值运算符(低)(6).运算符的优先级与结合性:结合性,是指表达式中出现同等优先级的操作时,该先做那个操作的规定。它有从左至右和从右至左两种。从右至左:单目运算符,赋值运算符;从左至右:算术运算符,关系运算符;

如:a=3+d*e/5;

注:只有当两个同级运算符共用一个操作数时,结合性才会起作用。5.3.4运算符和表达式5.3.4运算符和表达式2、表达式是由运算符和操作数按照语法规则构成的操作序列,其目的是用来描述一个计算。对于计算过程的控制手段包括:优先级、结合性、括号、运算对象的求值顺序。所谓求值次序,是指表达式中各个操作符的求值次序视编译器不同而不同。 如:doublee=3*d+d++;5.3.5基本语句语句是命令,基本语句提供了语言的基本动作。1、C++语句分类(1)控制语句:

用于实现一定的控制功能。条件语句:用于实现程序执行过程中的条件转移。循环语句:用于实现程序中重复进行某些操作。(2)表达式语句;

a=3; b=3+d*e/5;(3)空语句

;5.3.5基本语句1、C++语句分类(4)函数调用语句;sqrt(4);(5)复合语句;由一对花括号{}括起来的一组语句。如果要在只执行一条语句的地方执行多条语句,那么这多条语句要写成一条复合语句。5.3.5基本语句2、赋值语句(1)赋值语句的基本形式为:

<对象>=<表达式>;

表示把赋值号右侧表达式的值复制给左侧的对象。

例如:a=5;

a的原值为7a7a5

a的新值变成了5

执行赋值语句a=55.3.5基本语句2、赋值语句(2)左值和右值:左值(L-value):可出现在赋值运算符左边的表达式。左值表达式具有存放数据的空间,并且该内存空间可以执行写操作。例如:inta,b;a=3;//ok(a+b)=8;//error赋值表达式的值和类型是左值的值和类型。5.3.5基本语句2、赋值语句(2)左值和右值:右值(R-value)

:可出现在赋值运算符右边的可求值的表达式。说明:左值既可以出现在赋值运算符的左边,又可以出现在右边例如:inta;intb;b=8;//b是左值,8是右值a=b;//a是左值,b为右值32=a+2;//error,32是常量,只能作右值5.3.5基本语句2、赋值语句例子:怎样实现两个变量值的互换?★●AB互换前●★AB互换后★●ABT★5.3.5基本语句2、赋值语句例子:★●ABT★●5.3.5基本语句2、赋值语句例子:ABT★●★●5.3.5基本语句2、赋值语句例子:int

a,b,t;a=3;b=5;t=a;a=b;b=t;5.3.5基本语句3、输入输出语句几乎每一个程序都包含输入输出,输入输出是程序中最基本的操作之一。所谓输入输出是以计算机主机为主体而言的;从输入设备(如键盘、磁盘、光盘、扫描仪等)向主机输入数据称为输入。从主机向输出设备(如显示器、打印机等)输出数据称为输出。5.3.5基本语句3、输入输出语句(1)C语言格式输出函数printf

printf(格式控制,输出表列);“格式控制”是用双引号括起来的字符串,包括两种信息:

格式说明—由“%”和格式字符组成,如%d,%f等。其作用是将输出的数据转换为指定的格式输出。

普通字符—即需要原样输出的字符。“输出表列”是需要输出的一些数据,可以是变量、表达式。例如:inta=3;charb=‘s’;

printf(“a=%d,b=%c\n”,a,b);结果:a=3,b=s5.3.5基本语句格式字符说明%d按实际位数输出十进制整型数据。

%mdm为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。%o以八进制数形式输出整数。%x以十六进制数形式输出整数。%c输出一个字符。%s输出一个字符串。%f输出实数,以小数形式输出。3、输入输出语句(1)C语言格式输出函数printf5.3.5基本语句3、输入输出语句(2)C语言格式输入函数scanf

scanf(格式控制,地址表列)“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。例如:

int

a,b,c;

scanf(“%d%d%d”,&a,&b,&c);

printf(“%d,%d,%d\n”,a,b,c);运行结果:3453,4,55.3.5基本语句3、输入输出语句C++语言中使用面向对象的I/O流,定义了两个输入输出对象:cin和cout。流是C++的一个核心概念,数据从一个位置到另一个位置的流动抽象为“流”。当数据从键盘流入到程序中时,这样的流称为输入流当数据从程序中流向屏幕或磁盘文件时,这样的流称为输出流5.3.5基本语句(1)输入流对象(cin)cin标准输入流对象,对应的输入设备是键盘,可以获得键盘的多个输入值。提取运算符“>>”可以连续写多个,每个提取运算符后面跟一个获得输入值的变量或对象。提取运算符“>>”能自动将cin输入值转换成相应变量的数据类型。从键盘输入的数据的个数、数据类型及顺序,必须与cin中的列举的变量一一匹配。

cin>><对象1>{>><对象2>…};5.3.5基本语句(1)输入流对象(cin)intnum1,num2,num3;cin>>num1>>num2>>num3;1246doubled;cin>>num1>>d>>num2;232.345.3.5基本语句(2)输出流对象(cout)cout是标准输出流对象,对应的输出设备是显示器,通过cout可以输出一个整数、实数、字符及字符串。插入运算符“<<”可以连续写多个,每个后面可以跟一个要输出的常量、变量、转义序列符及表达式等。

cout<<<对象1>{<<<对象2>…};5.3.5基本语句(2)输出流对象(cout)例如:cout<<"ABCD\t"<<1234<<"\t"<<endl;ABCD 1234

5.3.5基本语句例子:输入两个整数,交换后输出。#include<iostream.h> //头文件,处理C++中的输入和输出操作intmain(){

inta,b,temp;

cin>>a>>b;

//输入两个整数,分别保存在变量a和b中

temp=a; a=b; b=temp;

cout<<"Afterswap…"<<endl; //输出字符串,然后换行

cout<<a<<","<<b<<endl;

//输出变量a和b中的值,然后换行

return0;}5.3.6三种基本程序结构1、顺序结构程序的执行按照语句出现的先后次序顺序进行。程序中的每个语句都会被执行到。5.3.6三种基本程序结构例子:通过键盘输入一个三角形的底和高,计算其面积并输出。#include<iostream.h>

intmain(){floatwidth,height,area;

/*定义变量*/

cout<<"Enterwidthandheight:";

/*输出提示信息*/cin>>width>>height;/*通过键盘输入底和高*/area=(width*height)/2.0;/*计算面积*/cout<<"Thearaeis:"<<area<<endl;/*输出面积的值*/

retrun0;}5.3.6三种基本程序结构说明:(1)C++程序由函数构成,可以包含多个函数,但最少也要包含一个函数,即main()函数。(2)C++程序书写格式自由。(3)C++程序可以包含语句的注释,有助于对程序的理解,不参与程序的运行。

//

单行注释

/*……*/是多行注释;

5.3.6三种基本程序结构2、选择结构对给定条件进行判断,根据判断的结果(真或假)来决定执行两个分支或多个分支程序段中的一个分支。也称为“分支结构”。C++语言有两种选择语句:(1)if语句(2)switch语句if语句的形式简单的if语句:单分支if…else语句:双分支嵌套的if语句:多分支(1)if语句简单的if语句——单分支格式说明if后的()不能省略。语句s可以是0条、1条或多条语句。若为多条语句,语句前后须加上{},变成块语句。if(<e>){<s>}[another]if(<e>)<s>[another]或测试es否是(1)if语句例子:输入两个整数按从小到大排序后输出#include<iostream>usingnamespacestd;intmain(){

inta,b,temp;

cout<<"请输入两个整数:";

cin>>a>>b;

if(a>b)

{

//块开始,另起一行,与if对齐

temp=a;a=b;b=temp;

//缩进

}

//块结束,与最靠近它的{对齐

cout<<"排序的结果为:"<<a<<"\t"<<b<<endl; return0;}

例子:将两个整数按从小到大排序说明:名称空间以“.h”为扩展名,C语言为了使iostream中的定义对程序有效,还需使用下面的名称空间编译指令来指定:usingnamespacestd;std是“名空间”,避免名称冲突。#include<iostream.h>#include<iostream>usingnamespacestd;ANSI/ISOC++if…else语句——双分支格式if(<e>){<s1>}else{

<s2>}[another]if(<e>)<s1>else<s2>[another]或es1否是s2(1)if语句例子:输入两个整数,输出其中的较大值。//**************//*求a、b中的较大值*//**************#include<iostream.h>intmain(){

inta,b,max;

cin>>a>>b;//输入a、b的值

if(a>b) max=a;

else max=b;

cout<<a<<"和"<<b<<"的较大值为:"<<max<<endl; return0; }嵌套的if语句——多分支if-else语句的else分支语句中包含if-else语句。举例:if(<e1>){<s1>}else{

if(<e2>)

{

<s2>

}else{<s3>

}

<s4>}

if(<e1>)

<s1>

elseif(<e2>)<s2>

elseif(<e3>)<s3>

elseif(<em>)<sm>

else<sm+1>(1)if语句#include<iostream.h>intmain(){ floatfScore;

cout<<"请输入一个百分制成绩:";

cin>>fScore;

if(fScore>=90)

cout<<"A"<<endl;

else

if(fScore>=80)

cout<<"B"<<endl;

else

if(fScore>=70)

cout<<"C"<<endl;

else

if(fScore>=60)

cout<<"D"<<endl;

else

cout<<"E"<<endl; return0;}例子:将输入的百分制成绩转换成等级。(1)if语句说明:1)如果在if、esle后有多条语句,则必须用花括号将这些语句括起来,否则只有后跟的第1条语句有效。2)if语句中的条件表达式一般为关系表达式或逻辑表达式,也可以是任意的数值类型。if(a>0)

cout<<“OK\n”;

温馨提示

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

评论

0/150

提交评论