




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 初识C+语言1.1 关于C+C+是一种计算机通用的高级程序设计语言。开始形成的是C语言,那些想建立更快更有效的代码的程序员非常欣赏C语言。但有一位名叫 Bjarne Stroustrup的人却不满足于仅仅是生产快速代码,他想创建面向对象的C语言编程。他开始对C语言的内核进行必要的修改,使其能满足面向对象模型的要求。C+从此产生。C+自诞生以来,经过开发和扩充已成一种完全成熟的编程语言。现在C+已由ANSI、BSI、DIN、其他几个国家标准机构和ISO定为标准。ISO标准于1997年11月4日经投票正式通过。C+ 标准演变了许多年。C+模板是近几年来对此语言的一种扩展,模板是根据类型参数来产生函数和类的机制,有时也称模板为“参数化的类型”。使用模板,可以设计一个对许多类型的数据进行操作的类,而不需要为每个类型的数据建立一个单独的类。标准模板库(Standard Tempalte Library,STL )就是基于这个C+语言扩展的。C+ 标准可分为两部分, C+语言本身和C+标准库。C+标准库提供了标准的输入/输出、字符串、容器(如矢量、列表和映射等)、非数值运算(如排序、搜索和合并等)和对数值计算的支持。应该说, C/C+包含了相对少的关键字,而且很多最有用的函数都来源于库。C+标准库实现容器和算法的部分就是STL。STL 是数据结构和算法的一个框架,数据结构包括矢量、列表和映射等,算法包括这些数据结构的查找、拷贝和排序等。1994年7月,ANSI/ISO C+标准委员会投票决定接受STL为C+标准库的一部分。STL的产生是为了满足通用性的设计目标,而不是为了提高性能。1.1.1 C+的发展:C+程序设计语言是由来自AT&T 贝尔实现室的Bjarne Stroustrup设计和实现的,它兼具Simula语言在组织与设计方面的特性以及适用于系统程序设计的C语言特性。C+最初的版本被称作“带类的C(C with classes)”,在1980年被第一次投入使用;当时它只支持系统程序设计和数据抽象技术。 支持面向对象程序设计的语言特性在1983年被加入C+;之后,面向对象设计方法和面向对象程序设计技术就逐渐进入了C+领域。在1985年,C+ 第一次投入商业市场。在1987至1989年间,支持范型程序设计的语言特性也被加进了C+随着若干独立开发的C+实现产品的出现和广泛应用,正式的C+标准化工作在1990年启动。标准化工作由ANSI(American National Standard Institute)以及后来加入的ISO(International Standards Organization)负责。1998年正式发布了C+语言的国际标准。1.1.2 C+的开发环境:Visual Studio 6.0这个虽然是Microsoft公司的老版本的开发环境,但是鉴于其后继版本Visual Studio.NET的庞大身躯,以及初学者并不那么高的功能要求,所以推荐这个开发环境给C+的初学者,供其学习C+的最基本的部分,比如C的那部分子集,当然你别指望他能够支持最新的C99标准。在日常的开发中,仍然有很多公司使用这个经典稳定的环境,比如笔者就看曾亲见有些公司将其编译器替换为GCC做手机开发之用。Visual Studio.NET作为Microsoft公司官方正式发布的最新版本开发环境,其中有太多激动人心的功能。结合其最新的C+编译器。对于机器配置比较好的开发人员来说,使用这个开发环境将能满足其大部分的要求。Borland C+ Builder XC+BuilderX则是完全从C+的角度思考得出的一个功能丰富的IDE。其最大的特点是跨平台,跨编译器,多种Framework的集成,并且有一个WxWindows为基础的GUI设计器。尤其是采用了纯C+来重写了整个Framework,摒弃了以前令人无奈的版本。对于C+的开发来说,从编译器,到库,到功能集成都是非常理想的。可以预见,Borland C+ Builder X 2.0很值得C+爱好者期待。唯一令人难堪之处是作为一个C+的开发工具,其IDE是用Java写的,在配置不够理想的机器上请慎重考虑再安装。Dev C+GCC是一个很好的编译器。在Windows上的C+编译器一直和标准有着一段距离的时候,GCC就是一个让Windows下开发者流口水的编译器。Dev-C+就是能够让GCC跑在Windows下的工具,作为集成开发环境,还提供了同专业IDE相媲美的语法高亮,代码提示,调试等功能。由于使用Delphi开发,占用内存少,速度很快,比较适合轻量级的学习和使用。1.2 Dev-cpp的环境启动Dev-c+后的环境如下:在这个环境中,编辑好源代码后,单击可以编译源代码,如果编译有错误,则列出错误,并停止编译,这个操作的快捷键为Ctrl+F9。如果编译成功,则可以单击,运行编译好的程序。当然,也可以单击,编译当前的程序并运行。这个操作的快捷键为F9.一些有用的快捷键:Ctrl+y:删除当前行Ctrl+n:新建源文件窗口Insert:插入与改写状态切换1.3 C+程序结构1.3.1 Hello Word!输入以下程序并编译、运行。#include using namespace std;int main() coutHello Word!endl;从这个mini程序可以看到C+程序的一般格式。注释如下:#include /包含要使用的库函数。这里是输入输出功能。因为一个/信息系统总要输入输出信息,所以基本上每个程序都会/包含它。using namespace std; /把std名字空间打开,程序可以正确识别std中的名字了,/如cout,endl等(开盖子语句)。int main() /主函数,执行入口,在最新标准中,它必须返回int/类型数据 /函数的内容必须放在括号中 coutHello Word!endl; /输出信息 /函数结束还可以看到,程序的语句必须用分号结束在Dev-cpp中,执行后屏幕一闪,就回到编辑界面,怎样让程序等一会,让我们能看清执行结果。有两种方法:int main() coutHello Word!endl; getchar();这种方法调用函数getchar(),它等待从命令行得到一个字符,回车结束。所以回车后回到编辑界面。或:int main() coutHello Word!endl; system(“pause”);这种方法调用Windows中的cmd命令“pause”,按任意键回到编辑界面。练习:(1)在Dev-cpp中编写代码,让它说一些你想说的话。注意,在它可以说中国话,只要把它放到英文的引号中就行。(2)编程序显示一首唐诗(3)编程,用字符*组成一个3列5行的平行四边形1.3.2 能说会算放在引号中的内容会原样输出。如果不放在引号中呢?比如编程计算123321.#include using namespace std;int main() cout321*123endl; getchar();可以看到,对于没有放到引号中的类型,C+会把这些内容作为表达式,计算并输出这个表达式的值。练习:(1)计算半径为12的球的体积(2)一元二次方程的系数分别为1 ,5,3,求这个方程的根。 C+中的常用算术运算符:运算C+中的运算符+-*/求余数1.3.3 变量如果在Hello Word程序中,去掉引号,会发生什么。试一试。对了,它把Hello看成了一个变量,并报告说Hello这个变量没有定义。C+是一种强类型语言,要求所有的变量都要先定义后使用。定义变量的方法为:类型名 变量名如:int a; /定义一个变量,变量名为a,它的类型为整型double c,d; /定义两个变量,变量名为c和d,它们的类型都为doubleint b=12; /定义一个变量,变量名为b,类型为整型,同时给变量b赋值,让变量b的值为/12.要改变一个变量的值,可以使用赋值号“=”,它的作用是:计算出等号右边的表达式的值,然后把这个结果赋值给等号右边的变量。如执行以下语句:b=-1;可以让变量b的值为-1C+常用基本数据类型类型说明长度(字节)表示范围备注char字符型1-128127unsigned char无符号字符10255int整型4约21亿unsigned int无符号整型40到约42亿double双精度型8约1030815位有效位bool布尔型1true和false练习:(1)计算半径为12的球的体积,把球的半径保存在变量r中,把球的体积放到变量v中。(2)一元二次方程的系数分别为1 ,5,3,求这个方程的根。把系数分别保存在变量a,b,c中。判别式结果保存在d中,根分别保存在x1和x2中。(3)在第一题中,如果忘记给变量r赋值,会得到什么结果。为什么?(4)在第一题中,如果把变量v的类型设置成了int,会得到什么结果,为什么?(5)编写程序,输入三角形的三边,求三角形的面积。公式为:area=sqrt(s(s-a)(s-b)(s-c)其中s为半周长s=(a+b+c)/2(6)运行如下的程序,会得到什么结果,想一想,为什么?int main() int a=10000; int b=a*a*a; coutbr;v=3.14*4/3*r*r*r; cout vendl; system(pause);练习:1.输入两个数,放到变量a,b中,然后交换变量a,b的值,并输出2.做一个自己的程序,当程序运行时输入数据,完成某个计算任务。1.4 文件操作1.4.1 建立文件流举例:编程计算两个数的和、差、积、商。输入:从文本文件jisuan.in读入数据。文件格式为:只有两个数,中间用空格分隔如:5 2输出:输出到文件jisuan.out中,格式为:每行一个数,分别为和、差、积、商的结果。如:73102.5参考代码:#include #include using namespace std;int main() int a,b; ifstream inf(jisuan.in); /设置输入文件流inf并初始化 ofstream outf(jisuan.out); /设置输出文件流outf并初始化 infab; outfa+bendl; outfa-bendl; outfa*bendl; outfa*1.0/bendl; 1.4.2 用文件流替换标准输入输出流同上面的问题,参考代码:#include #include using namespace std;int main() int a,b; freopen(jisuan.in,rt,stdin); /把文件流重定向到标准输入流cin freopen(jisuan.out,wt,stdout); /把文件流重定向到标准输出流cout cinab; couta+bendl; couta-bendl; couta*bendl; couta*1.0/bab;if (ab) couta;elsecout (比较左值是否大于右值)= (比较左值是否大于或等于右值,也称为不小于) (比较左值是否小于右值)=(比较左值是否小于或等于右值,也称为不大于)!= (比较左右值是否不相等)特别要注意,关系运算符的“等于”,是由两个=组成。如果写成了一个,就成了赋值语句。要命的是,许多编译器并不报错,所以一定要小心。关系运算的结果为逻辑值。对于复杂的条件,需要用到逻辑运算符。逻辑运算的结果为逻辑值。C+的逻辑运算符有三个:符号 意思 例子 & 并且 (and) 条件1 & 条件2 | 或者 (or) 条件1 | 条件2 ! 非 (not) ! 条件 下面列出了 &(与) 操作的所有可能条件及结果:真 & 真 = 真真 & 假 = 假假 & 假 = 假下面列出了 | (或)操作的所有可能条件及结果真 | 真 = 真真 | 假 = 真假 | 假 = 假以下则为 ! 操作:!真 = 假!假 = 真练习:1、判断一个数是偶数或奇数。2、判断一个字母是大写字母,小写字母,还是数字3、程序运行时,输入三个数,把它们按从小到大的顺序输出。输入文件threenum.in:三个数,由空格分隔输出文件threenum.out:三个由空格分隔的从小到大的数1.5.2 switch语句:多级if.else.显然是为了那些可能需要进行多级判断才能做出选择的情况。C+为了简化多级判断,提供了switch语句。switch 语句的格式:switch ( 整型或字符型变量 ) case 变量可能值1 : 分支一; break; case 变量可能值2 : 分支二; break; case 变量可能值3 : 分支三; break; . default : 最后分支;在 switch 的语法里,我们要学到4个关键字:switch、case 、break、default。在switch ( 变量 )这一行里,变量只能是整型或字符型。程序先读出这个变量的值,然后在各个case里查找哪个值和这个变量相等,如果相等,就算条件成立,程序执行相应的分支,直到碰上break或者switch语句结束。实例:模拟网络调查,要求输出不同的选项,供网友选择(通过简单地输入数字),程序根据网友的选择,输出相应不同的结果。#include int main(int argc, char* argv) int fromWay; cout 请通过输入序号,选择您如何来到本网站。 endl; cout 1) - 通过搜索引擎 endl; cout 2) - 通过朋友介绍 endl; cout 3) - 通过报刊杂志 endl; cout 4) - 通过其它方法 fromWay; switch (fromWay) case 1 : cout 您是通过搜索引擎来到本网站的。 endl; break; case 2 : cout 您是通过朋友介绍来到本网站的。 endl; break; case 3 : cout 您是通过报刊杂志来到本网站的。 endl; break; case 4 : cout 您是通过其它方法来到本网站的。 endl; break; default : cout 错误的选择!请输入14的数字做出选择。 endl; getchar(); return 0;首先,int fromWay定义了一个整型变量,准备用来存储用户输入的选择。程序将根据fromWay值,在下面的各个case中找到匹配的值。本例中switch带有四个case,值分别是1、2、3、4。如果输入的是2,所以程序进入下面这个case:case 2 : cout 您是通过朋友介绍来到本网站的。 endl; break;程序打出您是通过朋友介绍来到本网站的。 这行内容。最后遇上 break;于是跳出整个switch语句。同样的道理,如果用户输入的是其它的数,如1或3,则会进入相应的case 1 或case 3分支。但如果用户输入的数在所有的case 里都找不到时,会怎么样?比如,用户输入5。这种情况下,default分支将起作用,所有case里的值都不匹配时,switch进入default分支。如果连default也没有,那么程序在switch语句里什么也不做,直接完成switch语句。看一看switch,case,break,default的中文意思,对理解前面的一切也会有帮助,它们分别是:开关,情况,中断,默认(值)。那么用一句话套起来的说法就是:根据开关值的不同,执行不同的情况,直到遇上中断;如果所有的情况都不符合开关值,那么就执行默认的分支。关于switch中非常重要的几个注意点如下:第一、switch( 整型或字符型变量 )中,变量的类型只能是整型和字符类型。它们包含 int,char。实型(浮点型)数就不行,例如:float a = 0.123;switch(a) /错误!a不是整型或字符类型变量。 .第二、case之后可以是直接的常量数值,如例中的1、2、3、4,也可以是一个使用常量计算式,如2+2等,但不能是变量或带有变量的表达式,如 a * 2等。当然也不能是实型数,如4.1,或2.0 / 2等。switch(formWay) case 2-1 : /正确 . case a-2 : /错误 . case 2.0 : /错误 .另外,在case与常量值之后,需要一个冒号,注意不要疏忽。实例:从键盘上读入年和月,输出该月有多少天。练习:1、 铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超50公斤,超过部分每公斤加收0.10元。编一程序完成自动计费工作。2、 输入a,b,c三个不同的数,将它们按由小到大的顺序输出。3、 当前小学生的成绩单由以前的百分制改为优秀、良好、合格、不合格四个等级的等级制。编一程序完成分数的自动转换工作。转换规则如下:60分以下的为不合格;60到69分为合格;70到89分为良好;90分以上的为优秀。(提示:可以利用DIV运算来使程序更简明)1.5.3 while循环语句while循环语句的语法为:while(条件) 需要循环执行的语句; 即:如果条件成立,就一直执行。图示:注意:如果开始就不成立,则循环中的语句一次也不会被执行因为条件成立,就一直执行循环中的语句。所以在循环中一定要有语句能改变相关环境,让条件逐步不成立,以退出循环。1.5.4 for循环语句for循环在C/C+程序中用得最多,因为它的功能最强,使用最灵活。for 循环的语法:for(初始化;循环条件;改变条件) 循环体语句; for的结构中,不仅提供了的“循环条件”的位置,同时也提供了初始化,和改变条件的位置。这三者虽然在同一行上,但并不是依次连接地执行。for循环的执行过程为:(1)初始化语句首先被执行(并且只被执行一次);(2)然后程序检查条件是否成立,如果成立就执行循环体中的语句,否则直接结束循环。(3)执行完一遍循环以后,程序执行“改变条件”语句。for循环也是可以嵌套的。for循环执行过程示意:初始化语句循环条件循环体语句改变条件NoYes退出循环1.5.5 do . while 循环语句:do需要循环执行的语句;while(条件);和while循环最明显的区别在于do.while循环中,判断是否继续循环的条件,放在最后。也就是说,就算是条件一开始就不成立,循环也要被执行一次。do.while中的条件和while循环中的条件一样是:“允许继续循环的条件”,而不是“结束循环的条件”。 do.while循环的流程图:实例:编程实现求从1到100的累加和:用While实现:用Do实现:用For实现:练习:1、求n个数的和。输入文件:qiuhe.in 格式为:第一行为一个整数,表示要求n个整数的和。第二行为n个由空格分开的整数。输出文件:qiuhe.in 格式为:一个数,表示n 个数的和。2、从键盘输入一系列正整数,当输入0时,表示输入结束,输出这些数的和。3、输出九九乘法口诀表4、从键盘输入一个数,判断这个数是否是素数。5、百钱百鸡问题:公鸡每只5元,母鸡每只3元,小鸡三只1元,用100元钱买100只鸡,求公鸡,母鸡,小鸡的只数6、编程输出以下等腰三角形: * * * * *7、Nocomachns定理:任何一个N3,一定可以表示成n个连续的奇数和。输入n(n=100),输出n3对应的表达式。8、验证哥德巴赫猜想:任何充分大的偶数都可由两个素数之和表示。将4到2000中的所有公偶数分别用两个素数之和表示出来。例如,S=8,则输出:4=226=338=359、填写数字设有下列算式:求出口中的数字,假设被除数为y,除数为x,求出x,y的值。1.5.6 break和continue语句1、break的作用与用法:循环就象绕圈子,比如,体育课,跑1200米,跑道一圈400米,所以我们要做的事就是一边跑一边在心里计数(当然要记数,否则老师万一少计一圈,我们可就玩完了),当计数到3圈时,“循环”结束。如果,我在跑步时不幸由于体力不支而晕倒怎么办?有两种办法:一种是在判断是否继续循环的条件中加入新增条件的判断: 假设原来的循环表达为:while(已跑完的圈数 3)跑一圈;那么,加上附加条件后,循环表达为:while(已跑完的圈数 3 & 我还跑得好好的) 跑一圈第二种方法是在循环中使用条件分支,在指定的条件成立时,中途跳出循环,用于实现跳出的关键字为:break。while(已跑的圈数 3 ) 跑一圈; if(我身体感觉不妙) break;在循环中,每跑完一圈,都检查一下自已是否感觉不妙,如果是则程序执行break,直接跳出while,而不管此时圈数是否到达3圈。可能你会问:为什么要break呢?直接用原来的方法,在while处判断条件不是很好吗?break的长处在于,它可以在循环体内的任意位置进行判断。 2、多层循环中的break:break只能跳出当前层的循环,所以,如果有多层循环,则在内层的break跳出循环后,外层的循环还将继续。前面说跑步的例子,一圈400米,我们每跑100检查一下是否有肚子疼什么的,如果疼得利害就break后不跑了。这和现实不符,我们应该每跑一步就检查一次是否肚子疼最合理。一圈得分成几步呢?显然不能再像上面分成四次检查那样写代码了,我们加一层循环,也就是把跑一圈的工作用一个循环来实现:while(一圈未结束) 跑一步;然后,我们在每跑完一步时加入一个判断:while(一圈未完)跑一步; if(我身体感觉不妙) break;把这跑一圈的代码加入外层循环:while(已跑完图数 3) while(一圈未完) 跑一步; if(我身体感觉不妙) break; 外层的while用于负责一圈一圈循环跑完三圈,内层的while用于负责一步一步地
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 品质意识考试试题及答案
- 渠道维护工(技师)技能鉴定理论考试题库(含答案)
- 2025年铆工理论考试题库(含答案)
- 催化汽油吸附脱硫装置操作工操作考核试卷及答案
- 平板显示膜生产工技术考核试卷及答案
- 2025年公路工程试验检测师资格考试(公共基础)综合能力测试题及答案(洛阳)
- 多重耐药菌预防与控制标准操作规程试题含答案
- 职业病诊断医师考试(职业性尘肺病)复习题及答案(清远2025年)
- 刀具考试试题及答案
- 2025年食品安全管理员考试参考题目及答案(一)
- (2025)中国石油化工集团中石化招聘笔试试题及答案
- 以桂为墨:高中桂花文化校本课程的开发与实践探索
- 2025年计算机二级JAVA考试中的真题练习试题及答案
- 游戏俱乐部投资合同协议书
- 数字政府效能评估体系-洞察阐释
- 三级老年人能力评估师试题(附答案)
- 2025年电力机车钳工(高级)职业技能鉴定理论考试题库(含答案)
- 国家开放大学《政府经济学》形考任务1-4答案
- 委托品牌代工合同协议
- 智联招聘银行试题及答案
- 珠宝购销合同书范本珠宝购销合同书5篇
评论
0/150
提交评论