版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++程序设计与数据结构基础何峰heaven@序言:计算机与程序设计什么是计算机?狭义的说计算机是一个辅助计算的工具3体验:请计算1234×5678要求:不得借助任何工具,包括纸笔,完全心算心算的困难在哪里?——顾此失彼4古代的“计算机”5机械计算机6帕斯卡加法机(1642)电子计算机7ENIAC——信息时代的蒸汽机
冯·诺伊曼结构运算、控制、存储、输入、输出8冯·诺伊曼(Neumann,Johnvon,1903~1957),美籍匈牙利科学家,“计算机之父”运算控制存储输入输出图灵机大多计算问题,都能够通过“有限次的、简单而机械的演算步骤”而得到答案9阿兰·麦席森·图灵(AlanMathisonTuring,1912.6.23—1954.6.7),英国数学家、逻辑学家,被称为人工智能之父。
1011第二代晶体管计算机 IBM709412基于集成电路的第三代计算机 IBM360第四代 PC时代131976年第一台苹果电脑SteveWozniak&SteveJobs141981年IBMPC1982年IBMXT1984年IBMAT第一台笔记本电脑151982年Compaq16无所不在的计算机173C融合汽车电子18嵌入式系统(EMBEDDEDSYSTEM)19计算机应用的领域科学计算过程检测与控制信息管理计算机辅助系统20计算机会不会取代人类?21目前的计算机还不具备自己思考的能力,需要你告诉它应该怎么做——程序设计程序设计就是“把要计算机做的事,用计算机能听懂的语言,描述给计算机”计算机要“做的事”通常就是处理数据计算机是一个用来处理数据的工具告诉计算机怎么做——算法程序=数据结构+算法计算机只懂二进制语言——机器语言2223Howtotalkwithacomputer?一个游戏:“聪明”的灯泡选择运算开:计算加法关:计算减法X开:1关:0Y开:1关:0结果为1结果为0X+Y=?X-Y=?24开关1:开,加法;关,减法。开关2:开,1;关,0。开关3:开,1;关,0。开关关开关开0101一条指令操作码:控制信息操作数:数据信息计算机语言以二进制为基础程序就是若干条指令的集合;编写程序的过程就是程序设计;通过程序设计让计算机完成特定功能例如,反复执行100,101会怎样计算机并不一定只能计算思考:如何进行更复杂的控制与计算?25一台计算机中到底有多少个“开关”?一个开关称为一个位(bit)8个bit一组,称为一个字节(Byte)每一个字节有一个顺序的编号,称为“地址”2G的内存大约包含231×8个开关(160亿)00:代表加法01:代表减法10:代表乘法11:代表除法000:0001:1010:2011:3100:4101:5110:6111:7为什么一定要用开关?26计算机存储示意图27机器语言、汇编语言与高级语言例:假设x=1,y=2,求z=x+y28011101000000000100100100000000101111010100001000MOVA,#0x01ADDA,#0x02MOV0x08,Amain(){ charx=1,y=2,z; z=x+y;}数据类型常量变量C语言英语字母表达式单词语句句子函数段落程序文章C语言学习的思路30实践:VC6快速入门HelloWorld!C语言编程入门练习一:Hello,World!目标:熟悉开发环境323233工作区workspace输出窗口Output主窗口菜单与工具栏33343536工作区的改变3738程序说明:编译预处理行main()函数:void、函数体{…}每个语句用“;”作为结束。注释练习二:简单的输入与输出39程序说明:变量(数组)要先声明后使用。练习三:求一个数的绝对值40程序的结构:顺序选择循环练习四:比较两个数的大小41程序说明:if…elseif…else结构练习五:基本的算数运算42练习六:已知直角三角形的两条直角边,求斜边43第一部分C++结构化程序设计第一章C++程序设计基础44本章内容①C++语言概述②C++程序开发过程③C++程序实例④基本数据类型⑤常量、变量及引用⑥运算符与表达式⑦基本输入/输出45§1.4基本数据类型思考:在计算机中如何表示一个数?在计算机中如何表示一个整数?在计算机中如何表示一个负数?在计算机中如何表示一个实数?46x=233;x=1233;x=-23;31s30e23f220X=(-1)s×2e-127×(1.f)x=14.25;01000001011001000000000000000000(14.25)10=(1110.01)2=1.11001*23
=1.11100010000000000000000*2(130-127)思考:绝对值最大最小的数是多少?0<e<255:X=(-1)s×2e-127×(1.f)e=0,f≠0:X=(-1)s×2-126×(0.f)e=0,f=0:X=0e=255,f≠0:NaNe=255,f=0:X=InfASCII码表47在计算机中如何表示一个字符?文本char数值整数int实数短整型short长整型long有符号signed无符号unsigned单精度float双精度double有符号signed无符号unsigned基本数据类型§1.4基本数据类型48程序中处理的数据分为不同的类型。类型不同,存储方式和使用的场合也不同。数据类型基本数据类型整型(int)字符型(char)浮点型(float、double)布尔型(bool)非基本数据类型构造类型指针类型空类型(void)数组类型结构类型(struct)联合类型(union)枚举类型(enum)类类型(class)49基本数据类型:C++系统已定义的类型。可以直接利用这些类型名来定义数据。
类型名说明
字节
取值范围
bool布尔型
1true,false[singned]char有符号字符型
1-128~+127unsignedchar无符号字符型
10~255[signed]shortint有符号短整型
2-32768~32767unsignedshortint无符号短整型
20~65535[signed]int有符号整型
4-2147483648~+2147483647unsignedint无符号整型
40~4294967295[signed]longint长整型
4-2147483648~+2147483647unsignedlongint无符号长整型
40~4294967275float浮点型
43.4×10-38~3.4×10+38double双浮点型
81.7×10-308~3.4×10+308longdouble长双浮点型
103.4×10-4932~3.4×10+4932
50§1.5常量、变量及引用程序中可以直接使用的常数称为常量在程序中可以改变值的量称为变量。51常量直接出现在语句中变量占据了存储器中某一固定的位置,变量所占据的位置在内存中的编号,称为变量的地址。使用一个变量,要关心几个问题:该变量在哪?——变量的地址占据了多大的一块空间?——变量的类型怎样方便地引用它?——变量名该位置存了什么?——变量的值在C语言中,变量的管理是系统自动完成的变量要先声明,后使用!常量分为整型浮点型字符型字符串常量布尔常量521)整型常量十进制整数:如0、15、-247。八进制整数:以数字0开头,如015,0238。十六进制整数:以0x或0X开头,如:0x516,0x8AB,0xb2ff。八进制和十六进制只能表示无符号整数。长整型,如:12345L无符号整型.如:7895u或7895U53小数形式:3.14159,-0.55,-123.0,.65, 65.
指数形式:+5.25e-8,0.5678e05、2)浮点型常量(又称实型)指数形式表示浮点型数时e(或E)前可以是整数或小数,但e后的指数部分必须是整型数。浮点型数总是按double类型存储的,只有在数的后面加上f才按float类型存储,如1.234E-6f。长双精度(longdouble)型常量通常在双精度数后面加上l或L表示,如1.2345e-12L。说明:543)字符型常量字符型常量是用单引号括起来的单个字符例如:′A′、′S′、′*′、′a′、′\n′
说明:字符型常量中的单引号作为定界符,不是字符型常量内容。字符型常量具有数值,其值就是该字符的ASCII码值。而且值可以作为整数参与运算:如‘a’+5 结果为字符’f’如‘9’-6 结果为数字字符’3’如’A′+32 结果为’a’‘f’
–’d’ 结果为整数2。可以是ASCII字符集中任意可打印字符,包括空格.转义字符(见P9表1.2)554)字符串常量用双引号括起来的一串字符。“Thisisastring”、“a”、“ABC
xyz\n”、“1234”、“中国_天津”说明:字符串中可以包含空格、转义字符、中文字符等。双引号作为字符串的定界符,计算字符串长度时双引号不计算在内。编译程序在存储字符串常量时自动在字符串最后加一个‘\0’作为一个字符串的结束标志,‘\0’占一个字节位置。一个字符占一个字节,一个汉字占两个字节。在程序设计中字符串通常用字符数组或字符指针存放。56#include<iostream.h>voidmain(){boolx=true,y=false;cout<<x<<“”<<y<<endl;}10运行结果:5)布尔常量布尔常量仅有两个值,即true(真)和false(假)c把所有的非0视为true,0视为false。57
符号常量为常量起一个名字,称为符号常量。符号常量在使用前必须进行说明。符号常量的说明形式为:const数据类型名常量名=常量值;或
数据类型名const常量名=常量值;
例:constintm=100;constfloatpi=3.14159;说明:符号常量在说明时一定要赋初值,其值程序中不能修改。符号常量名不要和一般变量名重名。使用符号常量可以提高程序的可读性,增强程序的可维护性。582、变量1)变量名/标识符的命名规则标识符用来为变量、符号常量、数组、函数、类型等命名命名标识符有以下规则:必须由字母、下划线和数字组成第1个字符应是字母或下划线字符a、x1、data_5、count等为合法的标识符,1x、x?2、α、变量1等不是合法的标识符。标识符的长度视具体的编译系统而定;不能使用C++的关键字作为标识符;C++中变量名区分大小写,因此ex1和EX1是两个不同的变量名
_for和For是不是合法的标识符?592)声明变量:程序中的变量名在使用之前必须声明。(先声明后使用)例如:chara,b,c;intx,y;等3)变量的初始化:在定义的同时可给其赋值chara=’A’;intx=0,y=12;
doublew1=12.3456,w2=-0.4567e-4;charch(‘B’);longintx1(1),y1(100);doubledata1(12.056),data2(-0.12e-4);60程序举例:#include<iostream.h>voidmain(){intd1=5,d2=20;doublex1=12.5,x2=-5.0;charch1(‘*’),ch2(‘A’);cout<<d1+d2<<endl;cout<<x1-x2<<endl;cout<<ch1<<““<<ch2+3<<endl;}2517.5*D运行结果:61给程序中定义过的变量再起一个别名,这个名字称为引用(reference)。格式:
数据类型&引用名=变量名;
或
数据类型&引用名(变量名);#include<iostream.h>voidmain(){inta(5);int&rea=a;cout<<a<<″″<<rea<<endl;rea=10;cout<<a<<″″<<rea<<endl;}输出结果:
5
510
105area103、引用62§1.7运算符与表达式表达式由操作数和运算符组成操作数:常量、变量及函数调用。例如:3+a-sqrt(4)运算符:对操作数进行的运算和处理。C++的表达式既可以单独作为语句使用,也可以在其他语句中作为测试的条件以及调用函数的参数使用例如:3+4;cout<<3+4<<endl;if(3+4>10)…f1(3+4);631、算术运算符与算术表达式算术运算符包括:
+(加)-(减)*(乘)/(除)%(取余)
使用规则:
+、-、*、/与一般数学运算相同,其中“-”可作一元运算符使用,表示取负。优先级为:先*、/、%,后+、-。两个整型数相除,取商的整数部分。例如:8/5结果为1,5/8结果为0两实型数相除,结果为实型数,例如:8.0/5.0结果为1.6。a×b、ab、a·b、a±b、(a+b)2、c*[a÷(b+c)]2常见错误:64inta=10,b=4;doublex=1.5;charc1=’A’;longw=12345;表达式
1:(a+b)*x-w/c1表达式
2:a*x-b*x+w/15+(c1+4)算术表达式举例:
表达式1和表达式2的计算过程及最后类型。讨论:%用于求两个整数相除的余数,例如:8%5为3,10%5为0参加运算的两个操作数的类型不同时,按由低到高规则转换后计算65赋值运算符与赋值表达式1)简单赋值运算符,形式为:变量=操作数其中操作数可以是常量、变量和C++任意合法的表达式a=5;b=a;c=3+4;赋值号“=”左边必须是变量。 错误:a+b=3;赋值表达式的值和类型为“=”号左边变量的值和类型。例如:在上例中,s=8/3;说明:inta(15);doubledata,s;data=-8.1245;s=a*50+data/3;662)复合赋值运算符将算术运算和赋值放在一起的缩写形式包括:+=-=*=/=%=a+=3;相当于a=a+3;a+=b;相当于a=a+b;a-=b;相当于a=a+b;a*=b;相当于a=a*b;a/=b;相当于a=a/b;a%=b;相当于a=a%b;说明:当复合赋值运算的右边是表达式时,将表达式视为一个整体,例如a-=x+y;相当于:a=a-(x+y)由于有存储功能,复合赋值运算符左边必须是变量名。以下是错误的:a+=b+=c+d=12;(a+=b+=c+=12是正确的。)67自增和自减运算符自增自减运算符有如下4种形式:++i 前置自增,将i的值先加1,再使用i的值i++ 后置自增,先使用i的值,然后i的值加1--i 前置自减,将i的值先减1,再使用i的值。
i-- 后置自减,先使用i的值,然后i的值减1。说明:
因为有加减和赋值的功能,运算对象必须是变量,不能是常数或表达式单独作为一个语句使用时,前置增1(减1)或后置增1(减1)是一样的,但若和其他运算符组合使用,采用前置或后置就会产生不同的结果。运算符++(或--)是一个整体,使用时两个+(或-)之间不要有空。68自增自减运算符举例:#include<iostream.h>voidmain(){inta(2),b(2),d1,d2;a++;b--;cout<<“a=“<<a<<“b=“<<b<<endl;d1=++a;cout<<“a=”<<a<<“d1=“<<d1<<endl;d2=b--;cout<<“b=“<<b<<“d2=“<<d2<<endl;}
a=3b=1a=4
d1=4b=0d2=1输出结果:++(或--)运算符是单目运算符,优先级高于算术运算。例1:a=3;b=4;x=a+++b++;y=a+++(++b);例2:intx=3;cout<<x++<<x++<<x++<<endl;692、关系运算符与关系表达式关系运算符用于比较两个数的大小,共有6种:<小于<=小于等于>大于>=大于等于==等于!=不等于说明:关系表达式的值是0和1,当关系式成立时为1;否则为0。关系运算符两边操作数可以是整型、浮点型、字符型、指针及枚举型。关系运算符可以在一个关系式中连续使用,但若用-1<=x<=1式判断是否在[-1,1]区间,则是错误的。
错误写法:≤、≥、≠、0<x<1070关系运算符使用举例:输出结果为:#include<iostream.h>voidmain(){inta=5,b=6;cout<<"a>b:"<<(a>b)<<'\n';cout<<"a<=b:"<<(a<=b)<<'\n';cout<<"a==b:"<<(a==b)<<'\n';cout<<"a!=b:"<<(a!=b)<<'\n';}a>b:0a<=b:1a==b:0a!=b:1表达式1<a<4的值是什么?正确写法:
a>1&&a<4注意区别“=”和“==”。例如a=3;b=4;c=a=b;c得4,c=a==b;c得0。注意==和!=运算符的优先级比其它关系运算符低。713、逻辑运算符与逻辑表达式逻辑运算符用于对操作数进行逻辑操作。&& 逻辑“与”|| 逻辑“或”!
逻辑“非”(一元运算符)说明:逻辑表达式的值取值为1或0。逻辑运算符两边的操作数可以是任意基本数据类型,只要是0或非0值即可。任何非0值的数据都作为1参与逻辑运算。注意多个&&或||符使用时的“短路操作”。例:a=3,b=4;执行a++||b++;后,a为4,b仍为472逻辑运算符使用举例:#include<iostream.h>voidmain(){inta,b,c,x,y;a=1;b=2;c=0;cout<<a++-1<<endl;cout<<(a&&b||!c)<<endl;cout<<b/++a<<endl;x=++a||++b&&++c;//短路cout<<a<<b<<c<<x<<endl;a=b=c=-1;y=++a&&++b&&++c;//短路cout<<a<<b<<c<<y<<endl;}0104201
0-1-10
输出结果为:734、其它运算符1)条件运算符与条件表达式条件运算符是三元运算符,形式为:e1?e2:e3
其中:e1一般为关系或逻辑式;e2和e3为任意表达式。e1e2的值e3的值非00例:a=x>y?x+y:x-y;当x=1;y=2和x=2,y=1时,a分别为?功能:条件表达式举例:例:m=a>b?(a>c?a:c):(b>c?b:c); a=1;b=2;c=3;则m=? a=1;b=3;c=2;则m=? a=3;b=2;c=1;则m=?742)逗号运算符与逗号表达式逗号表达式:用逗号将几个表达式隔开。逗号表达式的形式为:
e1,e2,…,en作用:从左到右计算各表达式值,并以最后一个表达式的值作为逗号表达式的值。x=(a=1,b=3,++b,a+b);x=1;y=2;cout<<x,y<<endl;逗号表达式举例:753)求字节运算符求字节运算符是个一元运算符形式为:sizeof(e)其中:e可以是任意类型的变量、类型名或表达式。作用:求e在内存中占用的字节数。inta,b,i;doublex;a=sizeof(x);b=sizeof(float);i=sizeof(a*x)+100;例如:charc[]=“中文测试123”;i=sizeof(c);i=sizeof(100);i=sizeof(12.345);764)类型转换符利用类型转换符强制转换成所需要的类型。使用格式是:(类型名)表达式或类型名(表达式)作用:将“表达式”的值转换成“类型名”所指定的类型。例如:inta,b;doublex(10.5),y(3.8);a=int(x+y)-10;b=(int)x+y-10;整数转换为字符型,则去掉多余的高位;长整型转换为一般整型时,去掉多余高位;浮点型转换成整型时,去掉小数部分;双精度型转换成单精度时,按单精度型位数舍入。转换后数据的精度受到影响。转换原则:(short)32867:00000000000000001000000001100011变为整型,截取低16位:1000000001100011,真值为-32669非基本数据类型也可以做强制转换。例P18c1=(enumcolour)3;775、运算符的优先级和结合性优先级:不同操作符之间进行操作的先后顺序。几种不同的运算符出现在一个表达式中时,优先级别高的先计算,优先级别低的后计算
结合性:
当连续几个相同级别的运算符进行计算时,有的是由左到右逐个运算,有的是由右到左逐个运算。P19表1.3例:x=1+2*3%4>5!=6&&7||8;结果:178§1.7基本输入/输出输入输出又称I/O(Input/Output)操作。输入:指在程序运行时由输入设备(常指键盘)向程序提供数据;输出:是指将程序的运行结果在输出设备(常指显示器)上显示。
输入输出791)cin的使用形式:
cin>>变量1>>变量2>>……>>变量n;使用cin一次可以输入多个值。可以输入任何基本类型的数据。用空格、制表符或回车作为输入的两个数据之间的分隔。例如:
inta,b,c;doublex1,y1;cin>>a>>b>>c;
cin>>x1>>x2;
输入、输出流对象:cincout不能输入给常量例如cin>>5;错误变量可以有两种得到值的途径:用赋值语句用输入流注意:80cout<<e1<<e2<<……<<en
;其中:每个ei可以是常量、变量、表达式、字符串、函数调用等。当是表达式时,输出表达式结果的值;若是函数调用,则输出函数调用后的结果;当是字符串时,将字符串原样输出。例如:
intn=10;
cout<<3.14159<<″″<<n<<′\n′;
cout<<″n=″<<n<<endl;使用cin和cout在程序开始处要写入预编译命令:#include<iostream.h>注意2)COUT的使用形式:81
输入输出格式:默认格式输出:输出一个整型数或字符时,原样输出值;输出float或double型数时,默认6位有效数字#include<iostream.h>voidmain(){inta=123;longintb=1234567;floatx1=12.34,x2=23.456789;doubley=12.34567890123;cout<<”a=”<<a<<’\n’<<”b=”<<b<<endl;cout<<”x1=”<<x1<<”“<<”x2=”<<x2<<endl;cout<<”y=<<y<<endl;}a=123b=1234567x1=12.34x2=23.4568y=12.3457
82在输入输出流中使用控制符C++提供控制符控制输出数据的格式。
dec转换为十进制数输入/输出
hex转换为十六进制数输入/输出
oct转换为八进制数输入/输出
setw(int)设置输出的宽度
setprecision(int)设置浮点数输出的有效数字位数
setfill(char)设置填充字符
endl插入换行符使用以上格式控制符时,要加上头文件:
#include<iomanip.h>注意:83输出结果:使用格式控制符举例:#include<iomanip.h>#include<iostream.h>voidmain(){intx=24;doubley=12.3456789;cout<<dec<<x<<"";cout<<hex<<x<<"";cout<<oct<<x<<'\n';cout<<dec;//以下仍按十进制输出
cout<<setw(8)<<x<<","<<x<<endl;cout<<setw(8)<<setfill('*')<<x<<endl;cout<<setprecision(5)<<y<<endl;}24183024,24******2412.34684§1.2C++程序开发过程出错编辑源程序预处理程序编译程序链接程序装入程序输出结果执行程序输入、修改源程序出错出错磁盘输入数据85§1.3C++程序实例例1:在屏幕输出Hello,youarewelcome!/*Helloprogram*/#include<iostream.h>voidmain(){cout<<″Hello,youarewelcome!″;//你好,欢迎你!}程序说明:两种注释编译预处理行main()函数:void、函数体{…}、程序执行处语句:一行可以写若干条语句,每个语句用“;”作为结束。原则上一行一句、一句一行。86例2:编写程序从键盘任意输入2个数,输出这2个数的和。#include<iostream.h>voidmain(){inta,b,n;cout<<″请输入两个数:″;cin>>a>>b;n=a+b;cout<<″a+b=″<<n<<endl;}程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论