第9章程序设计初步教学目的了解计算机解决问题的基本思路熟悉VC++6.0上机环境,掌握简单程序的编写掌握常用的算法具有初步的程序设计能力,会读、会编、会调试如何学习C/C++语言重在编程思路、编程构思模仿、改写、编写,重视上机实践通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法C/C++发展简史C++:Bell实验室的BjarneStroustrupCSimula67带类的C类基础1979年Cpre预处理器C++1.01985年《C++程序设计语言》C++2.01989年C++3.01993年C语言:Bell实验室的D.M.Ritchie1972年,为了编写UNIX设计的。两个重要的标准:老标准:1978年,《TheCProgrammingLanguage》B.W.Kernighan和D.M.Ritchie合著新标准;1983年,ANSI制定,称为ANSIC引例要求:已知一元二次方程的三个系数a、b、c,求两个实根x1、x2。分析:输入a,b,c系数;根据判别式:问题求解的过程-问题分析与算法设计1.输入a、b、c三个系数2.判别b*b-4*a*c是否0?•0时,输出两个实根•=0时,输出两个重根•0时,输出实根那如何通过C/C++语言实现这一过程?程序设计语言的功能N.Wirth提出:程序=数据结构+算法o用数据类型来描述数据结构•C/C++语言提供的数据类型:如整型、实型(浮点型)、字符型、数组、结构、文件、指针等o用语句来描述算法•结构化程序设计方法:任何由顺序、选择和循环三种控制结构组成;单入口、单出口问题求解的过程-编写源程序C程序由函数组成有且只有一个主函数main2C/C++语言程序结构C/C++程序的结构主要包含三部分:①头文件:包含以#include开头的预编译命令。o如:iostream.h为“cin”、“cout”输入输出函数;math.h为数学函数。o包含函数说明、常量定义o作用:将头文件的内容插入到源文件(.CPP)文件中。o注意:一条文件包含命令只能包含一个文件②C/C++语言程序必须包含这个main()主函数。③函数体:为实现程序功能所编写的语句函数体函数体内的语句序列一般都包括如下成份:o变量和数据类型:用于存放数据;o运算符和表达式:对数据进行处理;o输入和输出:输入欲处理的数据,显示处理后的结果;o控制结构:在处理过程中考虑各种情况或处理的方法。3编码和书写规则①C/C++代码严格区分字母的大小写,一般用小写字母。②每句语句由“;”分号结束,一行可以书写多句语句,一句语句可以分在多行书写。注意:头文件包含是编译预处理命令,不是C语言语句,结束不要加“;”分号。③通过注释语句增加可读性单行注释,用“//”作为注释引导符多行注释,从“/*”开始到“*/”结束5VisualC++6.0简介代码窗口项目工作区输出窗口C/C++程序的编写、运行过程1.创建一个空工程(扩展名为.dsw);Win32ConsoleApplication2.创建一个C++源文件,输入源程序;C++SourceFile(.cpp)3.进行编译、连接、运行。组建|编译TEST.cppCTRL+F7组建|组建TEST.exeF7组建|执行TEST.exeCTRL+F5开始结果语法错误源程序.c/.cpp目标程序.obj可执行程序.exe编辑编译连接运行连接错误运行错误程序的调试、运行步骤问题求解的过程-运行与调试俗话说,“三分编程七分调试”o语法错误o逻辑错误:语义错误(逻辑错误)调试:在程序中查找错误并修改错误的过程。o设置断点:Insert/RemoveBreakpointF9o运行到断点:组建|开始调试|去F5Restart终止当前调试,重新运行,停在第一条语句StopDebuggingShift+F5结束当前调试和运行StepOverF10单步运行,不进入函数体内StepOutShift+F11从函数体运行到外面Watch窗口Variables窗口9.2C/C++语言基础1.常量、变量和数据类型2.运算符和表达式3.内部函数4.计算与类型5.输入和输出1常量、变量和数据类型数据在程序中以常量或变量的形式出现。o常量:在程序运行过程中,其值不能被改变,o变量:在程序运行过程中,其值可以被改变常量、变量有不同的数据类型o规定了存储不同种类的数据o可以对它进行的操作。如:inta,b,c;//变量声明变量的三要素变量名:变量的标识符。如同宾馆房间号。o变量名的命名规则:字母或下划线开头,后跟字母、数字、下划线组成;不要使用规定的保留字。o在C/C++中大小写区分,变量名一般用小写字母。数据类型:指明变量存放的数据类型。不同类型,占用空间不同。如房间类型(套、单人、双人、多人)变量值:可以存放相应数据类型的数据。如宾馆房间住的人。例如:intx=0;基本数据类型为什么要规定类型?o占用空间、取值范围、可以进行的运算变量声明指程序运行过程中其值可变的量定义方式:变量名代表内存中的一个存储单元存放该变量的值该存储单元的大小由变量的数据类型决定例如:inti,sum;定义整型变量floatmin,max;定义单精度浮点型变量doublearea,length;定义双精度浮点型变量数据类型变量名表;变量名:小写字母;见名知义变量的初始化C/C++规定:程序中所有变量必须先定义后使用必须先有确定的值才能参与各种相应的操作,有三种途径:通过输入方法输入(如:cina;)通过赋值语句赋值(如:a=3;)通过初始化方式赋初值(如:intk=3;)初始化是指在定义变量的同时指定变量的初值,有两种方式例如:intk=3,m=3,n(3);chara='A',b='b';()intk=m=n=3;//不允许为多个变量同时初始化数据类型变量名=表达式;数据类型变量名(表达式);符号常量在程序运行过程中其值不能改变的量是以标识符形式出现的常量,作用是便于程序阅读和修改。习惯上符号常量名用大写,而变量名用小写,以示区分。#define标识符常量值const数据类型标识符=常量值;符号常量示例#definePI3.14//constdoublePI=3.14;#includeiostream.hvoidmain(){floatr=3.0,s,l;l=2*PI*r;s=PI*r*r;coutl=l,s=sendl;}l=18.8496s=28.27432运算符和表达式运算符具有三个属性:优先级、目数和结合性(用圆括号简化)1.运算符双目算术运算+-*/%注意:/整数除整数,得整数如:1/2=0,9/4=2,1.0/2=0.51/4*4、1*4/4是否等价?floatx=10/3;x=?%针对整型数据:(求余运算)要求两个操作数都是整型,结果为整除后余下的整余数。如:5%6=5,9%4=1,100%4=0前者为0,后者为13单目算术运算++--++a(或--a)运算符在前即前置,操作数的值先加1(或减1),然后被引用。a++(或a--)运算符在后即后置,操作数的值先被引用,再进行加1(或减1)。例如:inta=3,y;y=a++;//后置,先赋值后自增;y的值为3,a的值为4;y=++a;//前置,先自增后赋值;y的值为4,a的值为4注意:自增、自减不能用于常量和表达式。如:()5++、(a+b)++赋值运算赋值运算符=赋值表达式:用=将一个变量和一个表达式连接起来的式子:变量=表达式例如:d=b*b-4*a*c;x1=(-b+sqrt(d))/(2.0*a);o计算赋值运算符右侧表达式的值o将赋值运算符右侧表达式的值赋给左侧的变量=的左边必须是一个变量x+y=z()sqrt(x)=2()复合赋值运算符+=-=*=/=%=如:sum+=i等价于sum=sum+i如:a*=a+2等价于a=a*(a+2)初始情况下a=3,则执行上述运算后a=?左端只能是变量(或数组元素),不能为表达式或常量,如:a+2*=b()a=b+2=c+5()以“+=”为例:变量+=表达式等价变量=变量+表达式15运算符示例输入秒数,以小时、分、秒形式显示。利用取余、整数相除或整除运算符方便地实现。#includeiostream.hvoidmain(){inth,m,s,x;cinx;h=x/3600;//整数相除得整数s=x%60;//取余数m=(x%3600)/60;couth:m:sendl;}关系运算符(小于)、=(小于等于)、(大于)==(等于)、=(大于等于)、!=(不等于)优先级:(从高到低)(、=、、=)(==、!=)关系运算描述的是一种“判断关系”,其结果有“真(true)”和“假(false)”两种。用“1”代表“真”,用“0”代表“假”例如:53的结果为1,aA的结果为0区分=和==用关系运算符将2个表达式连接起来的式子。表示比较的数学式C/C++关系表达式ox≤10ox≥10ox≠10ox=10思考:x为0到100之间的数能否表示为:0=x=100?x=10x=10x!=10x==10x=0&&x=100条件运算符e1?e2:e3o求e1的值,当e1为true时,计算e2的值,将e2的值作为整个表达式的值,不再计算e3的值;否则取e3的值作为整个表达式的结果,而不计算e2的值。如:max=(xy?x:y);//将x和y中较大的一个数赋值给变量max如:x==0?a++:b++若已知a=4,b=3,x=5则a、b=?a=4b=4思考题对n(0)个人进行分班,每班k(0)个人,最后不足k人也编一班,问要编几个班?(试用条件运算符表达)intn,k,x;x=n%k0?n/k+1:n/k逗号运算符e1,e2,e3,……e1、e2、e3均为表达式,从左向右依次计算各个表达式的值,而将最后一个表达式的值作为整个表达式的值,如:j=3,k=j+2,m=k+2;逗号运算符的优先级别最低常用于循环语句的表达式中结果:j=3k=5m=72.表达式表达式由常量、变量、运算符、函数和圆括号按一定规则组成的式子。如:x1=(-b+sqrt(d))/(2.0*a);注意事项:(1)乘号不能省略。例如,x乘以y应写成:x*y。(2)简化记忆运算符的优先级问题,增加圆括号可以改变表达式中运算符的优先级和增加可读性,圆括号必须成对出现。3.内部函数C/C++中提供了多种内部函数供用户编程序时直接调用,只需把包含内部函数的头文件,通过#include预处理命令装入到程序中。如:程序中要使用平方根函数sqrt,应该在程序加入:#includemath.h常用的内部函数如:pow(1.2,2)的值为1.44(即1.12)log10(123.45)的值为2.091491Sin(45*3.1415/180)+(exp(7)+log(10))/(x+y)4.计算与类型参与计算的数据都有类型,计算过程中就自然会出现数据类型转换问题。(1)不同类型隐式转换(自动)char→int→long→float→double例如:若两端类型不同,则系统自动将右端类型转换为左端类型。整数运算得整数。floaty=3/2;//y的结果是1,而不是1.5floaty=3.0/2;//y的结果是1.5(2)强制转换:(类型)表达式intx=3;floaty=(float)x/2;//y的结果是1.55.输入和输出输入/输出分为两大类:o一类是人—机交互,把人们可以识别的形式(字符串、数)按一定格式输入到程序的变量中,输出相反,按用户要求的格式将变量或常量的值显示;o另一类是程序之间以文件形式数据传送。cin和cout需要在程序前面加头文件:#includeiostream.h#includeiostream.hcin变量1变量