c++程序设计基础实例教程.doc
C+第一章 C+基础知识1.1 程序设计基本概念1. 程序=算法+数据结构2. 算法:解决问题所列出来的步骤3. 程序设计语言:面向机器的语言;面向过程的语言;面向对象的语言4. 先进的模块化的程序设计思想1.2 C+语言的发展 汇编语言 BCPL语言(Base compined Programing Language) 面向过程的C语言: C、Turbo C 面向对象的C语言:C+、C#、 Visual C+、 Visual C+.NET1.3 面向对象的程序设计 1抽象和封装对象 2. 类 2派生和继承 3多态性1.4 C+语言的程序结构 顺序结构 选择结构 循环结构1.5 C+语言的作用 1. 求解计算问题 2. 大量数据的处理 3. 编写应用软件 4. 编写系统软件1.6 C+语言的特点n 精练、简洁、灵活、方便n 运算符丰富,表达能力强n 能部分代替汇编语言n 目标代码效率高n 可移植性好n 支持面向对象的程序设计n 语言向下、向上的兼容性强n 有很强的数据处理能力1.7 C+语言程序及程序结构 例1. 在屏幕上显示出”One World, One Dream”程序如下:/EX1_1.CPP/* This program demonstrates the construction of a c+ program file */ #include <iostream.h> main() /*主函数标记(名字)*/ cout<<(“One World, One Dream”); 例2:从键盘上输入两个数,求这两个数的和。程序如下:#include "iostream.h"int addxy(int a, int b) return (a+b); main() /主函数标记(名字) int x,y; cin>>x>>y;cout<<“Average=”<<p); 关于程序及程序结构的说明:1.程序一般有三大件:输入、计算、输出。2.iostream.h为头文件,程序中使用的函数需要它。3.程序由多行语句组成。一行一般放一个语句。4.一行可以放多个语句,但语句间要用“;”分开。5.程序可以由一个主函数和0到多个子函数组成,程序执行6.主函数块一定用括起来,表示程序的开始和结束。7. 每一语句结束是否使用“,”要分别记忆。8.(头文件、函数名字、大部分地方出现的“)”、复合语句的第一行、宏定义)。9. 不带“;”的语句称函数。10 ./* */和/均为注释,其中的内容是给读程序人看的。11. 解决一个问题的编程方法(使用不同的语句)有很多种。12. 主函数和子函数其位置谁先后不要求。13. 程序中的字母大小写意义不同(如A和a是两个不同的变量)。13. 一定要成对出现。14. 程序中使用的所有变量必须在使用前用指定的命令说明。15. 注意语句放置的位置。 <头文件> mian() <变量说明> <函数体> <变量说明> <函数体> 16. 保存C+程序使用的文件名后缀是 .cpp, 经编译后其文件名后缀是 .exe17. 程序中用到的变量(对象)使用前均需说明.18. “<<” 称为提取运算符,”>>” 称为插入运算符.19. / 注释只能注释一行20. /* */ 可以多行注释21. 新版C+中头文件的 “.h”可省。22. 在C+标准版中,using namespace std 是说明命名空间的。23. 标准版要求: int main() return 0: 24. 复合语句、空语句、表达式语例4:编写程序,从键盘输入3个实型数,求这3个数的平均值程序如下: #include “iostream.h” main() float a,s=0,p; /*对将使用的实型变量说明*/int i; for (i=1;i<4;i+) cin>>a; s=s+a; p=s/3;cout<<“Average=“<<p<<endl; cout<<"Sum="<<addxy(x,y);例3 用C+语言编写程序,求5个数的平均值程序如下:#include “iostream.h ”main() float s,p; static int a5=1,2,3,4,5; s=a0+a1+a2+a3+a4; p=s/5;说明: 从键盘输入数据,是程序运行后才开始输入。一个cin 命令至少使用一次回车,如果一个cin命令给几个变量赋值,输入数据时各数据之间用回车、空格或TAB键分开均可。1.8 基本的输入输出命令 1.8.1 接收键盘的输入 命令: cin >>变量名 说明: 1. 输入的数据类型要与变量的类型一致2. 多变量输入时,个数据间用空格分开,最后用回车1.8.2 数据计算输出 命令: cout >>表达式 说明: 1. 使用setw(n)命令可指定数据间隔宽度,但要使用头文件#include <iomanip.h>。 2. 具有计算和输出功能。 3. 可连续不间隔输出。 4. 可将”n”, “t”, “ “, endl ,setw(n) 放在句中, 起到换行、间隔、换行结束作用。5. “n”可以与字符串放在一起,仍起换行作用。 6. “t” 将光标移到下一个显示区,一个显示区占8个字符宽。1.9 C+语言程序的上机过程 1.9.1 运行单个C+语言程序的全过程1. 从“开始”、“程序”启动Microsoft Visual c+ 6.0,进入Visual C+ 6.0环境2. 依次选择和单击:filenewwin32 console application输入项目名称选择文件夹 okA simple application finish ok3. filenew C+ source file 输入文件名 ok。4. 在编辑窗口输入程序。5. 保存(选择filesave 或者Control +S),输入文件名(一定要有后缀:.cpp)。6. 编译:工具栏中的 compile或菜单栏的Build项中选择 compile 或(ctrl + F7 ) 。7. 如果出错,移动Build 窗口滚动条,双击提示出错的代码行,改错,再编译。8. 建立 exe 文件:Build选择 Build 或者 F7 。9. 执行文件:BuildExecute, (ctrl + f5) 执行结束,看结果后击任意键返回。10. 再保存。11. 转第二步,输入下一个程序。1.9.2 运行多个C+语言程序的全过程1. 从“开始”、“程序”、启动Microsoft Visual c+ 6.0,进入Visual C+ 6.0环境。2. 依次选择和单击:filenewwin32 console application输入项目名称选择文件夹 okA empty project finish ok3 filenew C+ source file 输入文件名 ok。4在编辑窗口输入程序。5保存(选择filesave 或者Control +S),输入文件名(一定要有后缀:.cpp)确认”add to project”选中。6其他同单文件7转第二步,输入下一个程序,添加到项目中。1.10常用的操作1. 项目的关闭。fileClose workspace2. 项目(.dsw)的打开。fileopen workspace 选择盘区、文件夹、文件 单击open 按钮打开文件,或者从 fileResent Workspace中选择最近操作的文件.3项目的保存 选择 filesave 或者Control +S),输入文件名(要有后缀:.cpp)确认”add to project” 被选中。4利用项目工作区窗口打开源程序。5保存源程序(选择filesave 或者Control +S),输入文件名(一定要有后缀:.cpp)确认”add to project”选中。6. 将盘上已有的文件添加到项目中。 方法1: ProjectAdd to projectFiles 方法2:右击工作区窗口的Source Files,从快捷菜单中选择Add Files To Folder命令。 7. 打开文件。 方法1: fileopen。 方法:或者从 fileResent Files打开最近操作的文件。8. 删除项目中的文件 在工作区窗口右击文件名,选择删除1.11 常见问题的解决1. 如果运行结果不是当前的程序的结果怎么办? 检查步骤。2. 编译出错后如何才能进入修改状态?3. 运行进入死循环怎么办? 使用CTRL+BREAK组合键4. 如何在VC+与WINDOWS窗口之间切换? 缩小VC窗口。5. 错按F9键后,如何取消断点? 再按F9键。6. 在Output窗口快速定位出错的源代码位置 方法1: 双击某个错误 方法2: 光标移到错误处,按回车键本章要求:1. 根据例子会编写简单程序。2. 掌握上机的全过程3. 掌握程序的结构及具体要求。实验一任务:1. 编程且上机运行:输入圆的半径,求圆的面积和周长。2. 编程且上机运行:输入3个整数,求这3个数的平均值。3. 编程且上机运行:输入5个整数,求这求5个数的平方和。4. 编程且上机运行:输入7个整数,求这求7个数每个数的平方根。提示:求平方根函数是 sqrt(x),且要使用头文件:iomanip.h。6. 程序出错的原因及纠正方法7. 体会及感受第二章 数据和表达式2.1 C语言的词法符号2.1.1 关键字2.1.2 标识符 标识符可以是变量名、函数名等。 标识符有字母、数字、下画线组成,但第一个字符必须是字母或下画线。名字最长32个字符。 字母大小写是有区别的。2.1.3 标点符号9个# ( ) , ; : 2.1.4 分隔符 空格 2.2 数据类型2.2.1. 整型常量: (-32768-32767) 100, 10, -50, 2345 0100, -01 0x100, 0xabcf2.2.2. 实型常量 3.,2.718,100 (单精度实型,7位有效位)14159e-12, 2.718e+5 (单精度指数表示法)1.45, -1.2345d+10 (双精度及其双精度指数表示法)2.2.3. 符号常量(需要先宏定义) #define PI 3. #define PRICE 100说明: 宏定义行末不能用”;” 符号常量中的值只能引用,不允许修改.如: PI=2.718 (错) Y=PI*5 (正确)2.2.4. 字符常量 A, 1, a2.2.5. 转义字符 n (10) 换行 b (8) 向左倒退一列 r (13) 回车,将当前位置移到本行开头 f (12) 换页 xhh 用16进制1位或两位表示。 ddd 用8进制1位到3位表示。 101 101-1 000 001-65-A2.2.6. 字符串常量“HELLO”, “1234 567”, “computer”, “中国郑州”2.3 变量及其变量的定义2.3.1 变量名字:用字母或”_”开始,后可以跟字母、 数字、下划线。总长度根据使用环境不同,规定不同。例如,正确的变量名字:A,a, add, find, sum, w2000_1, _2003不正确的变量名字:float, main, 2003_1, new.0032.3.2 变量的作用:放数字、字符、字符串。2.3.3 变量的定义:2.3.3.1. 整型变量的定义及赋值 int a,b,c=2; int x=y=z=10; int m=2; int n=3; long int sum=0,add; long hello;整型变量又分:1. 基本整型变量 int a; /*在内存占两个字节的地址单元*/2. 短整型变量 short b;3. 长整型变量 long c; /*在内存占四个字节的地址单元*/4. 无符号基本整型变量 unsigned int d; (65535)5. 无符号短整型变量 unsigned short e;6. 无符号长整型变量 unsigned long f;。说明:1.一个整型变量在内存占两个字节的地址单元。2. 无符号整型变量比有符号整型变量允许的数值大一倍加1。3.短整型变量与基本整型变量允许的数值相同。4. 长整型变量允许的数值是:-。5.一个长整型变量在内存占四个字节地址单元。6. 变量说明且未赋初值时,变量中的值是任意(随机)的。问题: 1. 为什么一个整型变量只能容纳-32768到327672. 求10!时其结果使用什么类型的变量?2.3.3.2. 实型变量的定义及赋值float a,b,ccc=3.1415; /* (单精度实型,6-7位有效位)*/float sum=0.0;double f1, f2=1.414d12 /*双精度实型变量,有效位16-17位*/float new=2.713e3; long double t1;说明:变量说明且未赋初值时,变量中的值是 任意(随机)的。 注意赋值和计算时的舍入误差 如:float x=3. 实际输出为:2.3.3.3. 字符变量的定义及赋值char a=m; 一个字符变量在内存占一个字节的地址单元。char b,c,d;char m=65,n=a+1;2.3.3.4. 字符串变量的定义及赋值char a10;char b20=”hello”, c10=“thank you”; char str510=“”,”,”news”,”ok”,”please”; 错误的定义和赋值:char d8=“computer”;说明: 变量中的字符串结束时有一个结束标记”0”。标记不参加任何运算。注意: C程序中所有的字符均使用英文字符。2.4 运算符及表达式2.4.1. 算术运算符及其表达式+、-、*、/、%、pow(x,n)说明:整数除整数,商为整数。例如:17/3=5,5/9=0%为求余运算。例如:15%4=3。除数、被除数要求为整型。求方运算,使用函数pow(x,n),且要用头文件:math.h。训练:假设n是一个正整数,表达式 n%2+(n+1)%2的值是什么?说明: 数学表达式写成C语言表达式应注意:写在一行上,不能再有肩码或脚码。例如:x2 应写成x*x,y1应写成y1。 必要时加括号,而且只用小括号。例如: 求立方根,使用pow(x,1.0/3)。 使用系统提供的函数。例如:ex 应写成exp(x) 见教材248页。注意在计算机计算时,1.0/3*3 和 1/3*3 都不会等于1。2.4.2. 自加1、自减1运算例如:n=2; n+; 等价于 n=n+1 n=2: n+; n-; +n;-n; r=2; m=-n; p=r+;说明: 自加1、自减1运算只适用于整型变量。训练:若i=2 (i+)+(i+)+(i+) 后 ,i的值是多少(9) 若i=2 (-i)+(-i) 后 ,i的值是多少(2) 若i=2 i=(i+i+i) 后 ,i的值是多少(9) 若i=2 i=(i-i) 后 ,i的值是多少(1) i-+-i (2) i-i (1) i-i (error)2.4.3. 关系运算符及其表达式> >= < <= = !=说明: 后两个关系符运算优先级低于前四个. 关系成立,其值为1(真),否则其值为0(假)训练:写出下列的关系表达式 m大于等于n, n等于90 9>6>3 的结果是1(真)还是0(假)2.4.4. 逻辑运算符及其表达式 ! (非) && (与) | (或)关系成立,其值为1(真),否则其值为0(假)训练:写出下列的逻辑表达式 m大于90同时n也大于90 m大于90或者n大于90 m不大于90同时n也不大于90 m不大于90同时n等于90 5大于等于3且6等于90的结果是1还是0 9>6>3 的结果是1还是0 m>n>90应该怎么写。常用的几条规则: 1| a= ? a|a= ? 1&&a= ? 0&&a= ? a| !a= ? a&&a= ? 例:求下列各变量a,b,c,d的值。 int a,b,c,d,k=1,h=0; a=! k&&h | +h+>=k; b=k>h&& ! h+=! k| 1&&h; c=h&&k !=!h | !(k&&h)=h+55 | (h=(k=(h=3)*5)*2 - +k);2.4.5. 条件表达式(问号表达式)例:m=m>n ? m: n (其中,m,n可以是又一个问号表达式)。训练:(1) 根据题目,写出问号表达式。 x>0,r取1;x<0,r取-1;x=0,r取0;(2) 找出a,b,c中最大的数: (m=(a>b ? (a>c? a: c) : (b>c ? b: c)2.4.6 . 赋值表达式同类型赋值,例如:int a=10, b; b=a升级赋值, 例如:float x; int k=300; x=k;降级赋值, 例如:float x=3.14; int n; n=x+6混合类型运算, float x=3.14; int n; n=3; x+n (其结果取最高级)类型强制转换,3.0/9 或 (float)3/92.4.7. 逗号运算符及逗号表达式例: int n=10 8*n, n*n, n+n ;训练:给出下列逗号表达式的结果: m=10,n=100 p=(n+n,n*n,n-2) p=n+n,n*n,n-2例: int n=10; p=(n=n+n,n=n*n,n=n-2)2.4.8. 复合赋值运算 a=a+3 可以写成复合赋值运算式:a+=3 x=x*(y+z) 可以写成复合赋值运算式:x*=y+z a=(b=5) 可以写成复合赋值运算式:a=5,b=5 练习:int a=12; 求a 的值。 a += a -= a * a ; (采用左结合计算方法:结果= - 264) 将下列各式写成复合赋值运算式 i=i+1; k=k-1; m=m/n; x=x*j; m=m+n+7 m=m*n+k /* ? */实验二任务:1.编程且上机运行:输入3个数,求这3个数中的最大数。2.编程且上机运行:输入5个数,求这求5个数每个数的立方根。3.编程且上机运行:输入4个数,求这4个数中的最小数。4.编程且上机运行:求多项式 ax3+bx2+c的值(a=2,b=3, c=4, x=1.414)。5.编程且上机运行:输入3组数,每组3个数,求每组数的最大数。6.编程且上机运行:输入a,b 两个数,分别求他们的积、商和余数。7.编程且上机运行:已知华氏温度,根据公式: C = 5/9(F-32) 求摄氏温度C(结果保留两位小数)。8. 使用宏定义定义符号常量 PI,求圆半径r=2.456时的园周长,园面积。9.上机输出转义字符:xaa、 111、121,观察输出结果。10 编程:float ccc=3.后按实型f输出ccc的值,观察舍入后的变化。第3章 选择结构控制语句3.1 选择结构的三种形式3.1.1 单分支结构 例:求x 的绝对值 if (x<0) x= -x 例:求x 的平方根 main() int x; cout<<“please input char ”; cin>>x; if (x>=0) cout<<sqrt(x); 3.1.2 双分支结构If (表达式) 语句1; else语句2;例: 求x绝对值if (x<0) cout<<-x; else cout<<x;例:输出两个数中的较大数程序:main() int a=5,b=8; if (a>b) cout<<a; else cout<<b; 例:实现大小写字母转换(加密) main() char a; cout<<“please input char ”; cin>>a; if (a>96) a-=32; else a+=32; cout<<a; 例:将两个数由大到小输出程序:main() int a=5,b=8;if (a>b) cout<< a<<“ “<<b ); else cout<<b<<“ “<<a);3.1.3 多分支结构 If (表达式) 语句1; else If (表达式1) 语句2; else If (表达式2) 语句3; else If (表达式n) 语句n; else 语句n+1;例:将三个数由大到小输出main() int a=8,b=17,c=5; if (a>b) if (b>c) cout<<a<<t<<b<<t<<c); else if (a>c) cout<<a<<t<<c<<t<<b); else cout<<c<<t<<a<<t<<b); else if (a>c) cout<<b<<t<<a<<t<<c); else if (b>c) cout<<b<<t<<c<<t<<a); else cout<<c<<t<<b<<t<<a); 例:将三个数由大到小输出#include “iostream.h”main() int a,b,c; cin>a>>b>>c; if (a<b) a=a+b; b=a-b; a=a-b; if (a<c) a=a+c; c=a-c; a=a-c; if (b<c) b=b+c; c=b-c; b=b-c; cout<<a<<t<<b<<t<<c); 例:求分段函数的值 1 x>0 y=f(x)= 0 x=0 -1 x<0main() int x=5,k; if (x>0) k=1; else if (x=0) k=0; else k=-1; cout<<x<<“ “<<k; 例:输入一个年份n, 判断是否是闰年。(能被4整除,但不能被100整除的年份是闰年,或者能被400整除的也是闰年)。程序:main() int n,k; cin>>n; k=(n%4=0) && !(n%100=0) | n%400=0 /* n%100!=0 */ if (k=1) cout<<n<<“ is a leap year ”<<“n”; 例:商品优惠销售,优惠比例f如下:优惠比例( f ) 优惠条件 0 x<100 f= .05 100<=x<500 .1 500<=x<2000 .15 2000<=x已知商品价格 x 元,求优惠后实际应付多少钱y。 y= x- x*f程序:main() float x=2789,k,y; if (x<100) k=0; else if (x<500) k=.05; else if (x<2000) k=.1; else k=.15; y=x-k*x; cout<<x<<“ “<<y; 3.2 if语句的嵌套If (表达式) 复合语句1; else if (表达式) ; 复合语句1; 3.3 switch 语句switch (表达式) case 常量表达式1:语句1; case 常量表达式2:语句2; case 常量表达式n:语句n; default :语句n+1;说明:1. 表达式允许是任何类型。2各常量(a,b,1,3,5,+,-,*,+)表达式的值不能相同。3各case和default语句出现的顺序任意。4switch结构允许无default :语句。5如果(表达式)的值与某一常量表达式的值相同,即从此句开始,计算机将执行其后的所有语句,如果不希望执行其后的语句,可使用break语句跳走。6case 后如果是多个执行语句,可以不使用 。7根据需要,多个case 可以共同使用一组执行语句。例:在一次考试中,统计出每一个分段成绩(0-59,60-69,70-79,80-89,90-100)的人数。使用循环和scanf()输入。当输入0时循环结束。程序: main() int i, s1=0,s6=0,s7=0,s8=0,s9=0; float x; cin>>x; while (x!=0) switch (x/10) case 0: case 1: case 3: case 4: case 5: s1=s1+1;break;case 6: s6=+1;break; case 7: s7=+1;break; case 8: s8=+1;break; case 9: case 10: s9=+1;break; cin<<x; cout<<“059=“<<s1; cout<<“059=“<<s6; cout<<“059=“<<s7; cout<<“059=“<<s8; cout<<“059=“<<s9); switch 语句的嵌套 switch (表达式1) case 常量表达式1:语句1; case 常量表达式2:语句2; switch (表达式11) case 常量表达式11:语句11; case 常量表达式12:语句12; default :语句n+1; 例:输入月份,输出对应的春、夏、秋、冬。例:输入数字月份,输出对应的英文数字月份例:输入数字,输出对应的英文星期任务:1编写程序,将两个数由大到小输出。2编写程序,将四个数由大到小输出.。3编写程序,输入一个年份n, 判断是否是闰年。4. 有选民n个人,编写程序,统计张、王、李、赵每个人有多少张选票。5. 编写程序,输入一个4位数,将其组成一个反序的4位数(例如1357,反序后为7531)。6编写程序,输入一个英文句子,统计一个英文句子中元音字母出现的个数。7自己构造一个分段函数,编写程序,输入自变量的值,求函数值。8. 银行定期存款年利息如下: 一年定期 2.9% 三年定期 3.36% 五年定期 4.56%某顾客存款n元,存期是y年,求y年后本利共多少元?第4章 循环结构程序设计4.1 循环语句的四种循环格式4.1.1 goto 格式<标示符: > if <表达式> <循环体;> goto <标示符;> 例: 计算s=1+2+3+50 #include <iostream.h> main() int i=0, s=0; loop: if (i<51) s=s+i; i=i+1; goto loop; cout<<"s="<<s<<endl; 4.1.2 while格式 while <表达式> <循环体>; 例: 计算 s=1+2+3+50#include <iostream.h> main() int i=0, s=0; while (i<50) i=i+1; s=s+i; cout<<"s="<<s<<endl; 4.1.3 do- while格式 do <循环体> while <表达式;>例: 计算 s=1+2+3+50#include <iostream.h>main() static int i, s; do s=s+i; i=i+1; while (i<51); cout<<"s="<<s<<endl; 4.1.4 for( ) 格式 for(<表达式1>;<表达式2>;<表达式3>) <循环体> 说明:1. <表达式1>决定了循环的初值, <表达式2>决定循环的条件, <表达式3>决定循环的增量。2. <表达式1>在循环中只执行一次。<表达式2>,<表达式3>在循环中每次都要执行一次。例:求S=1+2+3+100 程序1: #incl