《第章第3章ppt课件》由会员分享,可在线阅读,更多相关《第章第3章ppt课件(176页珍藏版)》请在金锄头文库上搜索。
1、第一章第一章 C+基础知识基础知识1.1 程序设计基本概念程序设计基本概念1. 程序=算法+数据结构2. 算法:解决问题所列出来的步骤3. 程序设计语言:面向机器的语言;面向过程的语言;面向对象的语言4. 先进的模块化的程序设计思想9/5/20241C+程序设计1.2 C+语言的发展语言的发展 汇编语言 BCPL语言(Base compined Programing Language) 面向过程的C语言: C、Turbo C 面向对象的C语言:C+、C#、 Visual C+、 Visual C+.NET 29/5/20242C+程序设计1.3 面向对象的程序设计 1抽象和封装对象 2. 类
2、2派生和继承 3多态性1.4 C+语言的程序结构 顺序结构 选择结构 循环结构9/5/20243C+程序设计1.5 C+语言的作用 1. 求解计算问题 2. 大量数据的处理 3. 编写应用软件 4. 编写系统软件9/5/20244C+程序设计1.6 C+语言的特点n精练、简洁、灵活、方便n运算符丰富,表达能力强n能部分代替汇编语言n目标代码效率高n可移植性好n支持面向对象的程序设计n语言向下、向上的兼容性强n有很强的数据处理能力9/5/20245C+程序设计1.7 C+语言程序及程序结构语言程序及程序结构 例1. 在屏幕上显示出”One World, One Dream”程序如下:/EX1_1
3、.CPP/* This program demonstrates the construction of a c+ program file */ #include main() /*主函数标记(名字)*/ coutxy; coutSum=addxy(x,y); 9/5/20247C+程序设计例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; cout“Average=”p); 9/5/20248C+程序设计关于程序
4、及程序结构的说明:1.程序一般有三大件:输入、计算、输出。程序一般有三大件:输入、计算、输出。2.iostream.hiostream.h为头文件,程序中使用的函数需要它。为头文件,程序中使用的函数需要它。3.程序由多行语句组成。一行一般放一个语句。程序由多行语句组成。一行一般放一个语句。4.一行可以放多个语句,但语句间要用一行可以放多个语句,但语句间要用“ “;” ”分分开。开。5.程序可以由一个主函数和程序可以由一个主函数和0 0到多个子函数组成,到多个子函数组成,程序执行总是从主函数开始。程序执行总是从主函数开始。6.主函数块一定用主函数块一定用 括起来,表示程序的开始和括起来,表示程序
5、的开始和结束。结束。9/5/20249/5/20249 9C+C+程序设计程序设计7. 每一语句结束是否使用“,”要分别记忆。8.(头文件、函数名字、大部分地方出现的“)”、复合语句的第一行、宏定义)。9. 不带“;”的语句称函数。10 ./* */和/均为注释,其中的内容是给读程序人看的。一般用于对程序的解释。11. 解决一个问题的编程方法(使用不同的语句)有很多种。12. 主函数和子函数其位置谁先后不要求。13. 程序中的字母大小写意义不同(如A和a是两个不同的变量)。13. 一定要成对出现。14. 程序中使用的所有变量必须在使用前用指定的命令说明。9/5/202410C+程序设计15.
6、注意语句放置的位置。 mian() ; ; 16. 保存C+程序使用的文件名后缀是 .cpp, 经编译后其文件名后缀是 .exe9/5/202411C+程序设计17. 程序中用到的变量(对象)使用前均需说明.18. “” 称为插入运算符.19. / 注释只能注释一行20. /* */ 可以多行注释21. 新版C+中头文件的 “.h”可省。22. 标准版要求: int main() return 0: 23. 复合语句、空语句、表达式语句9/5/202412C+程序设计例4:编写程序,从键盘输入3个实型数,求这3个数的平均值程序如下: #include “iostream.h” main() f
7、loat a,s=0,p; /*对将使用的实型变量说明*/ int i; for (i=1;ia; s=s+a; p=s/3; cout“Average=“p变量名 说明: 1. 输入的数据类型要与变量的类型一致 2. 多变量输入时,个数据间用空格分开,最后用回车9/5/202414C+程序设计 1.8.2 数据计算输出 命令: cout 表达式 说明: 1. 使用setw(n)命令可指定数据间隔宽度,但要使用头文件#include 。 2. 具有计算和输出功能。 3. 可连续不间隔输出。 4. 可将”n”, “t”, “ “, endl ,setw(n) 放在句中, 起到换行、间隔、换行结束
8、作用。9/5/202415C+程序设计 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 empty application finish ok 3. filenew C+ source f
9、ile 输入文件名 ok。9/5/202416C+程序设计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. 转第二步,输入下一个程序。9/
10、5/202417C+程序设计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
11、其他同单文件7转第二步,输入下一个程序,添加到项目中。9/5/202418C+程序设计1.10常用的操作常用的操作1. 项目的关闭。 fileClose workspace2. 项目(.dsw)的打开。 fileopen workspace 选择盘区、文件夹、文件 单击open 按钮打开文件,或者从 fileResent Workspace中选择最近操作的文件.3项目的保存 选择 filesave 或者Control +S),输入文件名(要有后缀:.cpp)确认”add to project” 被选中。4利用项目工作区窗口打开源程序。5保存源程序(选择filesave 或者Control +S
12、),输入文件名(一定要有后缀:.cpp)确认”add to project”选中。9/5/202419C+程序设计6. 将盘上已有的文件添加到项目中。 方法1: ProjectAdd to projectFiles 方法2:右击工作区窗口的Source Files,从快捷菜单中选择Add Files To Folder命令。 7. 打开文件。 方法1: fileopen。 方法:或者从 fileResent Files打开最近操作的文件。8. 删除项目中的文件 在工作区窗口右击文件名,选择删除9/5/202420C+程序设计1.11 常见问题的解决常见问题的解决 1. 如果运行结果不是当前的程
13、序的结果怎么办? 检查步骤。 2. 编译出错后如何才能进入修改状态? 3. 运行进入死循环怎么办? 使用CTRL+BREAK组合键 4. 如何在VC+与WINDOWS窗口之间切换? 缩小VC窗口。 5. 错按F9键后,如何取消断点? 再按F9键。 9/5/202421C+程序设计6. 在Output窗口快速定位出错的源代码位置 方法1: 双击某个错误 方法2: 光标移到错误处,按回车键本章要求:1. 根据例子会编写简单程序。2. 掌握上机的全过程3. 掌握程序的结构及具体要求。9/5/202422C+程序设计实验一实验一任务:1. 编程且上机运行:输入圆的半径,求圆的面积和周长。2. 编程且上
14、机运行:输入3个整数,求这3个数的平均值。3. 编程且上机运行:输入5个整数,求这求5个数的平方和。4. 编程且上机运行:输入7个整数,求这求7个数每个数的平方根。提示:求平方根函数是 sqrt(x),且要使用头文件:iomanip.h。6. 程序出错的原因及纠正方法7. 体会及感受9/5/202423C+程序设计第二章第二章 数据和表达式数据和表达式2.1 C语言的词法符号语言的词法符号2.1.1 关键字2.1.2 标识符 标识符可以是变量名、函数名等。 标识符有字母、数字、下画线组成,但第一个字符必须是字母或下画线。名字最长32个字符。 字母大小写是有区别的。9/5/202424C+程序设
15、计2.1.3 标点符号标点符号9个个# ( ) , ; : 2.1.4 分隔符分隔符 空格 2.2 数据类型数据类型2.2.1. 整型常量整型常量: (-32768-32767) 100, 10, -50, 2345 0100, -012 0x100, 0xabcf2.2.2. 实型常量实型常量 3.141592, 2.718,100 (单精度实型,7位有效位) 14159e-12, 2.718e+5 (单精度指数表示法) 1.2345678912345, -1.2345d+10 (双精度及其双精度指数表示法)9/5/202425C+程序设计2.2.3. 符号常量符号常量(需要先宏定义) #d
16、efine PI 3.141592 #define PRICE 100说明: 宏定义行末不能用”;” 符号常量中的值只能引用,不允许修改.如: PI=2.718 (错) Y=PI*5 (正确)2.2.4. 字符常量字符常量 A, 1, a9/5/202426C+程序设计2.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 5678
17、 9”, “computer”, “中国郑州”9/5/202427C+程序设计2.3 变量及其变量的定义2.3.1 变量名字:用字母或”_”开始,后可以跟字母、 数字、下划线。总长度根据使用环境不同,规定不同。例如,正确的变量名字:A,a, add, find, sum, w2000_1, _2003 不正确的变量名字:float, main, 2003_1, new.0032.3.2 变量的作用:放数字、字符、字符串。9/5/202428C+程序设计2.3.3 变量的定义: 2.3.3.1. 整型变量的定义及赋值 int a,b,c=2; int x=y=z=10; int m=2; int
18、 n=3; long int sum=0,add; long hello;9/5/202429C+程序设计整型变量又分:1. 基本整型变量 int a; /*在内存占两个字节的地址单元*/2. 短整型变量 short b;3. 长整型变量 long c; /*在内存占四个字节的地址单元*/4. 无符号基本整型变量 unsigned int d; (65535)5. 无符号短整型变量 unsigned short e;6. 无符号长整型变量 unsigned long f;。9/5/202430C+程序设计说明:1. 一个整型变量在内存占两个字节的地址单元。2. 无符号整型变量比有符号整型变量允
19、许的数值大一倍加1。3. 短整型变量 与基本整型变量允许的数值相同。4. 长整型变量允许的数值是:-21474836482147483647。5. 一个长整型变量在内存占四个字节的地址单元。6. 变量说明且未赋初值时,变量中的值是任意(随机)的。 问题: 1. 为什么一个整型变量只能容纳-32768到327672. 求10!时其结果使用什么类型的变量?9/5/202431C+程序设计2.3.3.2. 实型变量的定义及赋值float a,b,ccc=3.1415; /* (单精度实型,6-7位有效位)*/float sum=0.0;double f1, f2=1.414d12 /*双精度实型变量
20、,有效位16-17位*/float new=2.713e3; long double t1;说明:变量说明且未赋初值时,变量中的值是 任意(随机)的。 注意赋值和计算时的舍入误差 如:float x=3.1415926 实际输出为: 9/5/202432C+程序设计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”,
21、 “ok”, “please”; 错误的定义和赋值:char d8=“computer”;说明: 变量中的字符串结束时有一个结束标记“0”。标记不参加任何运算。注意: C程序中所有的字符均使用英文字符。9/5/202433C+程序设计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的值是什么?说明: 数学
22、表达式写成C语言表达式应注意: 写在一行上,不能再有肩码或脚码。例如:x2 应写成x*x,y1应写成y1。 必要时加括号,而且只用小括号。例如: 求立方根,使用pow(x,1.0/3)。 使用系统提供的函数。例如:exp应写成exp(x) 。 注意在计算机计算时,1.0/3*3 和 1/3*3 都不会等于1。9/5/202434C+程序设计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的值是多少(
23、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)9/5/202435C+程序设计2.4.3. 关系运算符及其表达式 = 63 的结果是1(真)还是0(假)9/5/202436C+程序设计2.4.4. 逻辑运算符及其表达式 ! (非) & (与) | (或)关系成立,其值为1(真),否则其值为0(假)训练:写出下列的逻辑表达式 m大于90同时n也大于90 m大于90或者n大于90 m不大于90同时n也不大于90 m不大
24、于90同时n等于90 5大于等于3且6等于90的结果是1还是0 963 的结果是1还是0 mn90应该怎么写。9/5/202437C+程序设计 常用的几条规则: 1| a= ? a|a= ? 1&a= ? 0&a= ? a| !a= ? a&a= ? 例:求下列各变量a,b,c,d的值。 static int a=5,b=3,c=2,d,k=1,h; a=! k&h | +h+=k; c=h&k !=!h | !(k&h) d=3*k+a-h6*k | k1&an ? m: n (其中,m,n可以是又一个问号表达式)。训练:(1) 根据题目,写出问号表达式。 x0,r取1;x0 ? 1 : x
25、=0 ? 0: -1(2) 找出a,b,c中最大的数: (m=(ab ? (ac? a: c) : (bc ? b: c)9/5/202439C+程序设计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/99/5/202440C+程序设计2.4.7. 逗号运算符及逗号表达式例: int n=10
26、 8*n, n*n, n+n ;训练:给出下列逗号表达式的结果: int 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)9/5/202441C+程序设计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;
27、 k=k-1; m=m/n; x=x*j; m=m+n+7 m=m*n+k /* ? */9/5/202442C+程序设计实验二任务: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
28、) 求摄氏温度C(结果保留两位小数)。8. 使用宏定义定义符号常量 PI,求圆半径r=2.456时的园周长,园面积。9. 上机输出转义字符:xaa、 111、121,观察输出结果。10 编程:float ccc=3.123456789后按实型f输出ccc的值,观察舍入后的变化。9/5/202443C+程序设计 第第3章章 选择结构控制语句选择结构控制语句3.1 选择结构的三种形式选择结构的三种形式3.1.1 单分支结构 例:求x 的绝对值 if (x0) x= -x 例:求x 的平方根 main() int x; coutx; if (x=0) coutsqrt(x); 9/5/202444C
29、+程序设计3.1.2 双分支结构双分支结构If (表达式表达式) 语句语句1; else语句语句2;例例: 求求x绝对值绝对值if (x0) cout-x; else coutb) couta; else coutb; 9/5/202445C+程序设计例:实现大小写字母转换(加密) main() char a; couta; if (a96) a-=32; else a+=32; coutb) cout a“ “b ); else coutb“ “b) if (bc) coutatbtc) coutatctb); else coutctatc) coutbtatc) coutbtcta); e
30、lse coutctbtabc; if (ab) a=a+b; b=a-b; a=a-b; if (ac) a=a+c; c=a-c; a=a-c; if (bc) b=b+c; c=b-c; b=b-c; coutatbt0 y=f(x)= 0 x=0 -1 x0) k=1; else if (x=0) k=0; else k=-1; coutx“ “n; k=(n%4=0) & !(n%100=0) | n%400=0 /* n%100!=0 */ if (k=1) coutn“ is a leap year ”“n”; 9/5/202452C+程序设计例:商品优惠销售,优惠比例例:商品优
31、惠销售,优惠比例f如下:如下:优惠比例(优惠比例( f ) 优惠条件优惠条件 0 x100 f= .05 100=x500 .1 500=x2000 .15 2000=x已知商品价格已知商品价格 x 元,求优惠后实际应付多少钱元,求优惠后实际应付多少钱y。 y= x- x*f9/5/202453C+程序设计程序:程序:main() float x=2789,k,y; if (x100) k=0; else if (x500) k=.05; else if (x2000) k=.1; else k=.15; y=x-k*x; coutx“ “x; while (x!=0) switch (x/1
32、0) case 0: case 1: case 3: case 4: case 5: s1=s1+1;break;9/5/202458C+程序设计 case 6: s6=+1;break; case 7: s7=+1;break; case 8: s8=+1;break; case 9: case 10: s9=+1;break; cinx; cout“059=“s1; cout“059=“s6; cout“059=“s7; cout“059=“s8; cout“059=“s9); 9/5/202459C+程序设计switch 语句的嵌套语句的嵌套 switch (表达式表达式1) case
33、常量表达式常量表达式1:语句:语句1; case 常量表达式常量表达式2:语句:语句2; switch (表达式表达式11) case 常量表达式常量表达式11:语句:语句11; case 常量表达式常量表达式12:语句:语句12; default :语句:语句n+1; 例:输入月份例:输入月份,输出对应的春、夏、秋、冬。输出对应的春、夏、秋、冬。例:输入数字月份例:输入数字月份,输出对应的英文数字月份输出对应的英文数字月份例:输入数字例:输入数字,输出对应的英文星期输出对应的英文星期9/5/202460C+程序设计任务:任务:1编写程序,将两个数由大到小输出。编写程序,将两个数由大到小输出。
34、2编写程序,将四个数由大到小输出编写程序,将四个数由大到小输出.。3编写程序,输入一个年份编写程序,输入一个年份n, 判断是否是闰年。判断是否是闰年。9/5/202461C+程序设计4. 有选民有选民n个人,编写程序,统计张、王、李、赵每个人个人,编写程序,统计张、王、李、赵每个人有多少张选票。有多少张选票。5. 编写程序,输入一个编写程序,输入一个4位数位数,将其组成一个反序的将其组成一个反序的4位数位数(例如(例如1357,反序后为,反序后为7531)。)。6编写程序,输入一个英文句子,统计一个英文句子中编写程序,输入一个英文句子,统计一个英文句子中元音字母出现的个数。元音字母出现的个数。
35、7自己构造一个分段函数,编写程序,输入自变量的值,自己构造一个分段函数,编写程序,输入自变量的值,求函数值。求函数值。9/5/202462C+程序设计8. 银行定期存款年利息如下银行定期存款年利息如下: 一年定期一年定期 2.9% 三年定期三年定期 3.36% 五年定期五年定期 4.56%某顾客存款某顾客存款n元元,存期是存期是y年年,求求y年后本利共多少元年后本利共多少元?9/5/202463C+程序设计第第4章章 循环结构程序设计循环结构程序设计4.1 循环语句的四种循环格式4.1.1 goto 格式 if goto 9/5/202464C+程序设计例: 计算s=1+2+3+50 #inc
36、lude main() int i=0, s=0; loop: if (i51) s=s+i; i=i+1; goto loop; couts=sendl; 9/5/202465C+程序设计4.1.2 while格式格式 while ; 例例: 计算计算 s=1+2+3+509/5/202466C+程序设计 #include main() int i=0, s=0; while (i50) i=i+1; s=s+i; couts=sendl; 9/5/202467C+程序设计4.1.3 do- while格式格式 do ; while 例例: 计算计算 s=1+2+3+509/5/202468
37、C+程序设计#include main() static int i, s; do s=s+i; i=i+1; while (i51); couts=sendl; 9/5/202469C+程序设计 4.1.4 for( ) 格式格式 for(;) 说明:说明:1.决定了循环的初值决定了循环的初值, 决定决定循环的条件循环的条件, 决定循环的增量。决定循环的增量。2.在循环中只执行一次。在循环中只执行一次。,在循环中每次都要执行一次。在循环中每次都要执行一次。9/5/202470C+程序设计例:求例:求S=1+2+3+100 程序程序1: #include main() int i, s=0;
38、for (i=1; i101; i+) s+=i; cout“sum=”sendl; 9/5/202471C+程序设计程序程序2: #include main() int i=1, s; for (s=0; i101; i+) s+=i; coutsum= sendl; 9/5/202472C+程序设计程序程序3: #include main() int i=1, s=0; for (; i101;) s+=i+; coutsum= sendl; 9/5/202473C+程序设计程序程序4: #include main() int i=1, s=0; for (; i101; s+=i+);
39、coutsum=sendl; 9/5/202474C+程序设计程序程序5: #include main() int i=100, s=0; for (; i ; i-) s+=i ; coutsum= sendl; 9/5/202475C+程序设计例:编程计算下列各项例:编程计算下列各项S=1+2+3+100S=1+22+32+1002S=1+3+5+99S=1+1/2+1/3+1/100S=1/1+1/22+1/32+1/1002n!=1*2*3*nS=k!=1+2!+3!+n!S=1-2+3+(-1)nnS=1-1/2+1/3+(-1)n/nS=1-22+32-+(-1)n 1002e=1
40、+1/1!+1/2!+1/3!+1/n!直到最后一项小于直到最后一项小于0.000019/5/202476C+程序设计ex=1+x/1!+x2/2!+x3/3!+xn/n!直到最直到最后一项小于后一项小于0.001s=1-1/2!+1/3!+(-)(n+1)/n! 直到最后一直到最后一项小于项小于0.001s=1+x+x/2!+x/3!+x/n! 直到最后一项直到最后一项小于小于0.00001s=1-x+x/2!-x/3!+(-)(n+1)x/n! 直到最直到最后一项小于后一项小于0.001/4=1-1/3+1/5-1/7+ 求求,直到最后一项直到最后一项小于小于0.0019/5/202477
41、C+程序设计2. 循环可以从小向大循环可以从小向大,也可以从大到小。也可以从大到小。例例: 计算计算s=1+2+3+100 #include main() int i, s=0; for (i=100;i0;i-) s=s+i; cous=sendl;9/5/202478C+程序设计3循环变量的值起三个作用,一是记数,二是可循环变量的值起三个作用,一是记数,二是可以参加循环体计算,三是用做数组的下标。以参加循环体计算,三是用做数组的下标。例例: 计算计算10个数的和个数的和 #include main() int i, s=0; static int a10=1,3,4,5,4,3,3,3,4
42、,2; for (i=1;i10;i+) s=s+ai; couts=sendl; 9/5/202479C+程序设计4. 三个表达式可以有,也可以全无,但三个表达式可以有,也可以全无,但“;”不不能少。如果表达式能少。如果表达式2无,程序将进入无限循环。无,程序将进入无限循环。5. 可以用可以用break命令中断循环命令中断循环.例例: 计算计算s=1+3+5+n直到最后一项为直到最后一项为99止止. #include main() int i, s=0; for (i=1; ;i=i+2) if (i=101) break; s=s+i; coutsendl;9/5/202480C+程序设计
43、6. 可以用可以用continue命令中断当前这一次循环命令中断当前这一次循环,继续下一次继续下一次循环循环.例例: 计算计算s=1+3+5+99 #include main() int i, s=0; for (i=1;i100;i+) if (i%2=0) continue; s=s+i; couts=sendl; 9/5/202481C+程序设计4.2 多层循环多层循环例:开设例:开设3门课程门课程,计算每个学生平均成绩计算每个学生平均成绩 #include main() int i,j,s=0; int a53=87,78,79,87,98,67,56,79,98; for (i=0;
44、i3;i+) s=0; for(j=0;j3;j+) s=s+aij; coutaij ; couts/3endl; 9/5/202482C+程序设计4.3 循环中断循环中断 break 4.4 exit()函数函数例例: 从键盘上输入字母从键盘上输入字母,然后输出比它的然后输出比它的ASCII码大码大1 的字的字母母#include #include stdio.h main() char ch=a; coutinput letter s=; 9/5/202483C+程序设计while (ch!=#) ch=getchar(); if (ch=z|ch=Z ) putchar(ch-25);
45、 else putchar(ch+1); 9/5/202484C+程序设计 题题1:输出九九乘法表:输出九九乘法表 1 2 3 4 5 6 7 8 91 1 2 3 4 5 6 7 8 92 2 4 6 8 10 12 14 16 189 9 18 27 36 45 54 63 72 819/5/202485C+程序设计#include #include iomanip.hmain()int k,j;cout ; for(k=1;k10;k+) coutksetw(5); /width(5) coutn; 9/5/202486C+程序设计 for(k=1;k10;k+) coutsetw(5)
46、k; for(j=1;j10;j+) coutsetw(5)k*j; coutendl; / cout.width(5);coutk*j;9/5/202487C+程序设计#include #include iomanip.hmain()int k,j; cout ; for(k=1;k10;k+) cout.width(5); coutk; coutn;for(k=1;k10;k+) coutsetw(5)k; for(j=1;j10;j+) cout.width(5);coutk*j; coutendl; 9/5/202488C+程序设计题题2:判断:判断m是否是素数。是否是素数。 #inc
47、lude main() int k,m,h=1; cinm; for(k=2;km;k+) if (m%k=0) h=0; if( h=1) coutm“ is a prime number”endl; 9/5/202489C+程序设计 题题3;求出;求出100以内的所有素数以内的所有素数 #include main() int k,m; for(m=3;m100;m=m+1) for(k=2;km;k+) if (m%k=0) break; if(k=m) coutmis a prime numberendl; 9/5/202490C+程序设计题题4:求:求m,n 的最大公约数的最大公约数
48、#include main( ) int m,n,m1,n1,r; cinmn; m1=m;n1=n; r=m%n; while (r!=0) m=n;n=r;r=m%n; coutm=m1endl; coutn1=n1endl; coutr=nendl; 9/5/202491C+程序设计题5:求Fibonaccii(斐波那契)数列中前20项中每一项(递推法) 0,1,1,2,4,7,13, #include main() long k,a=0,b=1,c=1,d; for(k=1;k18;k+) d=a+b+c; coutdt; a=b;b=c;c=d; 9/5/202492C+程序设计题题
49、6:2000年人口年人口13亿,年增长亿,年增长0.5%和和2.1%,多少年后达到或超过,多少年后达到或超过20亿亿(87,21)? #include main() int n=0; float f=13,e=0.005; while (f20) f=f*(1+e); n=n+1; coutnendl; 9/5/202493C+程序设计题题7:产生:产生10个学生的成绩个学生的成绩,呈正态分布呈正态分布#include #include #include math.h#include stdlib.h#include iomanip.h main( ) int k;float x;srand(
50、time(NULL); for(k=1;k11;k+) x=rand()/32767.0*90; x=sin(x*3.14/180)*71+30; cout(int)xsetw(5); if (k%10=0) coutendl; 9/5/202494C+程序设计题题13:梯形法求积分:梯形法求积分:sin(x)dx题题14: 用牛顿迭代法求方程用牛顿迭代法求方程x5+2x3-x2+x+1=0在在0附近的根。附近的根。题题15:找出:找出1000以内的水仙花数。三位数的立方和等于自身以内的水仙花数。三位数的立方和等于自身(13+53+33=153)题题16:根据以下算术式,求:根据以下算术式,求
51、A、B、C、D A B C D - C D C- A B C题题17:输出图形:输出图形 A A B C A B C D E A B C D E F G9/5/202495C+程序设计 第第5 5章章 函数及其应用函数及其应用5.1 5.1 函数种类函数种类5.1.1 命令函数例如:getchar(),putchar()等。5.1.2标准库函数例如: fabs(),pow(),rand(),sin(x),sqrt(),fexp()5.1.35.1.3自定义函数自定义函数 9/5/202496C+程序设计5.2 自定义函数的概念及使用方法自定义函数的概念及使用方法例1:求两个数中的最大数#inc
52、lude int imax (int m, int n)return (mn ? m:n); void main() int a=6,b=9; coutimax(a,b); 9/5/202497C+程序设计例2:求x的n次方#include iostream.hvoid main() float mpow(float ,int); coutpow=mpow(3.,3)endl; float mpow(float a,int n)int i; float k=1; for(i=1;i=n;i+) k=k*a; return (k); 9/5/202498C+程序设计5.3 5.3 自定义函数的三
53、种形式自定义函数的三种形式5.3.1 无参函数,例如main(),getchar()等。 主函数与子函数之间不传输数据。例:输出字符四方形 * * * *void print()int i; for(i=1;i5;i+) coutr; res(a, b, r); coutr=rsetw(10)a=asetw(10)b=bendl;9/5/2024105C+程序设计float res(float &a,float &b,float r)a=3.14159*r*r; b=2*3.14159*r; return 0; 例:编写函数(过程、子程序)程序1.求n的阶乘 f(n)2.求三个数的最大数(可以
54、求多个数的最大数)3.求两个正整数的最大公约数(可以求多个数的最大公约数) f (m,n)4.求n+(n+1)+(n+2)+(n+k)5.用子函数完成x2,x3,xn9/5/2024106C+程序设计5.5 C+5.5 C+库函数库函数 被直接调用的函数称为库(内部)函数。函数名 函数原型 要用到的头文件abs() int abs(int n) stdlib.hfabs() double abs(double x) math.hcos() double cos(double x) math.hexp() double exp(double x) math.hlog() double log(d
55、ouble x) math.hpow() double pow(double x, double y) math.hsqrt() double sqrt(double x) math.hsin() double sin(double x) math.htan() double tan(double x) math.hkbhit() int kbhit() conio.hexit() void exit(int n) stdlib.hrand() double rand(double x) stdlib.h9/5/2024107C+程序设计5.6 作用域和存储类作用域和存储类5.6.1 作用域1
56、. 块作用域 块内说明的变量只能在本块有效。2. 文件作用域 文件作用域就是全局作用域。9/5/2024108C+程序设计例:读程序,观察全局变量和局部变量的关系#include int i; /全局变量,文件作用域void main() i=5; /文件作用域的i赋初值 /子块1 int i; /局部变量,块作用域 i=7; couti=iendl; /输出7 couti=iendl;/输出5 9/5/2024109C+程序设计3. 函数原型作用域 函数的作用域只限定在函数原型的函数中。4. 函数作用域 在函数内均有效, 不受块作用域的限制, 只有标号属于函数作用域(在goto语句中使用)。
57、5.6.2 存储类 1. 局部变量及其概念l形参是局部变量。l在一个复合语句中定义的变量。l在一个函数中定义的变量。9/5/2024110C+程序设计2. 全局(外部)变量及其概念l函数外部定义的变量。l用extern 说明的变量。3. 动态(自动)变量l程序运行期间,分配内存单元,运行结束,内存单元就释放。l形参、局部变量都是动态变量。l动态变量用auto说明或省略。9/5/2024111C+程序设计4. 静态变量l调用函数结束,变量值保留,下次调用值仍存在。l静态变量用static 说明。l数组只有定义成静态时,才能初始化。l静态变量自动赋0值。l何时需要定义静态数组:保留函数的变量值和数
58、组初始化。9/5/2024112C+程序设计例: 读程序,理解静态变量#include #include void main() int count(int); do count(0); while(!kbhit(); cout”Function COUNT() have been called”count(1)”timesn” 9/5/2024113C+程序设计int count(int i) static int c=0; if(i) return c; else return +c; return 0;说明:未从键盘上按下键时,反复循环调函数count(), C一直自加,从键盘上一旦按下
59、键时,结束循环,输出C值。9/5/2024114C+程序设计5. 寄存器变量作用:存取速度快。特点:只允许使用三个寄存器变量,且必须是形参和局部变量才能使用。用法:用 register 说明。9/5/2024115C+程序设计5.7 5.7 内联函数内联函数 大量、多次调用函数,要占计算机很多时间,为了用空间换时间,才用内联函数。只要在定义函数,或者对函数原型说明时,在行首加上inline 即可。例:求圆面积#includeinline double calArea(double radius) return 3.14*radius*radius;9/5/2024116C+程序设计void m
60、ain() double r=3.0; /r是圆的半径double area;area=calArea(r); /调用内联函数,编译时此处被替换为calArea函数体语句coutareaendl;return 0; 9/5/2024117C+程序设计5.8 带有缺省参数的函数带有缺省参数的函数 函数说明时,先对形参初始化,调用函数时,若给实参,就使用实参,否则使用说明时给出的初始值。例:求四方体体积#include #include int get_volume(int length, int width = 2, int height = 3);9/5/2024118C+程序设计void m
61、ain()int x = 10, y = 12, z = 15;cout Some box data is ;cout get_volume(x, y, z) endl;cout Some box data is ;cout get_volume(x, y) endl;cout Some box data is ;cout get_volume(x) endl;9/5/2024119C+程序设计cout Some box data is ;cout get_volume(x, 7) endl;cout Some box data is ;cout get_volume(5, 5, 5) end
62、l;return 0;int get_volume(int length, int width, int height) coutsetw(5)lengthsetw(5)widthsetw(5)height ;return (length * width * height); 9/5/2024120C+程序设计说明:l默认参数的说明一定要放在函数使用之前。l对形参的初始化可以是任意表达式。l如部分形参初始化,必须自右向左。l如果函数说明出现在不同程序块, 允许提供和使用不同的默认值。9/5/2024121C+程序设计5.9 5.9 参数数目可变函数参数数目可变函数 根据需要,函数的参数可多可少
63、,函数参数多少可变的函数称参数数目可变函数。例:从n个数中找出最大数#include #include 9/5/2024122C+程序设计int main()int a,b,c,d,e;int max(int,int.); cinabcde; coutThe bigger between a and b is max(2,a,b)endl; coutThe bigger in the five number is max(5,a,b,c,d,e)endl;return 0;9/5/2024123C+程序设计int max(int num,int integer.) va_list ap; in
64、t m=integer; va_start(ap,integer); for(int i=1;im) m=t; coutiendl; va_end(ap); return m; 9/5/2024124C+程序设计说明:l必须使用头文件stdarg.h。l定义函数和函数原型的书写要求。l要用到三个专用函数和一个类型定义关键字: va_start, va_arg, va_end和va_list 。l请将此题改为求实型数最大值。 5.10 5.10 函数重载(函数重载(overloadoverload)一个函数可以当几个函数使用。根据形参的类型,调用不同的函数。函数定义不能少。9/5/2024125
65、C+程序设计例: 用一个函数add( ) 实现两个整型数相加和两个实型数相加#includevoid main(void) int m, n;double x, y;int add(int m, int n);double add(double x, double y);coutmn;9/5/2024126C+程序设计coutinteger “m+n=add(m,n)endl;coutxy;coutreal number x+y= add(x,y)endl;int add(int m, int n) return m+n; double add(double x, double y) retu
66、rn x+y; 9/5/2024127C+程序设计5.11 5.11 外部函数外部函数能被其他文件调用的函数称为外部函数。外部函数要用extern 说明。5.12 5.12 函数递归函数递归函数递归的两个基本条件1. 边界条件2. 递归表达式3. 函数自身调用自身9/5/2024128C+程序设计举例:计算 n! (c=f(n-1)*n)#include long fac(int n) long f;if (n=1) c=1;else c=fac(n-1)*n;return(f);9/5/2024129C+程序设计void main()long fac(int n);int n;long y;
67、coutn;y=fac(n);coutn!=yendl;9/5/2024130C+程序设计1. 计算 1+2+3+ +1002. 计算 0,1,1,2,3,5,8,. 第前20项(return (f(n-1)+f(n-2);)5.13 5.13 编译予处理编译予处理概念:在对程序编译之前就进行替换处理,称予处理(有三种: 嵌入指令(文件包含)、宏定义、和条件编译)。用途:1. 有利于程序的移植与兼容.2. 增加程序的兼容性.3. 减少程序的运行时间4. 减少程序的长度9/5/2024131C+程序设计5.13.1 嵌入指令#include 方法:建立多个*.cpp文件,按执行顺序放在#incl
68、ude 中。5.13.2 宏定义方法与用途1. 不带参数的宏定义(用一个标识符代表一个字符串或一个常量,不做语法检查。)#define PI 3.14159 (宏定义的标识符常使用大写字母,以有别于变量)9/5/2024132C+程序设计#define N 100 (N可以用作数组的下标)#define R 3#define A PI*R*R#define C CONPUTER#define pr cin#define N “n” 例: prxN9/5/2024133C+程序设计2. 带参数的宏定义(用一个标识符代表一个函数,不做语法检查。)#define PI 3.14159#define
69、circle (A,L,R) A=PI*R*R;L=2*PI*PI #define MAX(x,y) (x)(y) ? (x) ? (y)#define mul(x1,x2) x1*x2 / 注意(x1)*(x2)例:定义一个求两个数之积的宏名mul, 且求:2+3,6+2和3.1,3的积#define mul(x1,x2) x1*x2main() coutmul(2+3,6+2)mul(3.1, 2);9/5/2024134C+程序设计说明: 1. 根据计算的结果决定其类型。2. 实参是表达式时, 形参要用( )。3. 一个#define 只能定义一个宏名。4. 带参宏近似带参函数的定义及用
70、法。5. 带参宏的宏中可以有进出两种参数。6. 宏名可以作为定义数组时的下标(static int aN )7. 如果要修改宏名的内容,只能用define。8. 可以使用#undef 解除宏定义。9/5/2024135C+程序设计例: 定义一个宏, 求x 的绝对值#define abs(x) (x0 ? x : -x) 使用时: int a=-3; coutabs(a); 例: 定义一个宏, 判断x 是否是偶数(偶数取 1)#define num(x) (x%2 ? 0 : 1)9/5/2024136C+程序设计5.13.3 条件编译指令格式1: #if #else #endif9/5/202
71、4137C+程序设计格式2 (连续判断)#if #elif #else#endif9/5/2024138C+程序设计 例:读程序,理解条件编译#include #define NUM 100main()#if num=100 cout”hello”endl;#else cout”thank”endl;#endifreturn 0;9/5/2024139C+程序设计以上程序相当于:main()#include cout”hello”endl; return 0;9/5/2024140C+程序设计5.13.4 测试某个宏是否定义#ifdef (如果定义则)#ifndef (如果没有定义则)#end
72、if (定义结束)5.14程序的多文件组织程序的多文件组织5.14.1 连接属性内部连接 同一程序块内。外部连接 不同程序块实现的程序块连接9/5/2024141C+程序设计 5.14.2 分割编译 独立编译、独立保存,最后再连接。9/5/2024142C+程序设计第第6章章 数组及其应用数组及其应用6.1 数组的概念数组的概念 下标变量的集合。 一维数组、二维数组、和多维数组以及字符串数组及在计算机内存中排列方法。6.2 数组的定义及初始化数组的定义及初始化(一维和多维一维和多维)static int a10, b200=1,2,3,4,5;static float d56=1,2,3,4,
73、5,0,2,3;int k333; 说明:1. static 定义为静态数组,地址固定; auto 定义动态数组,不用就撤消。2. static 可以初始化数组,不给数值时,元素自动置0。3. 数组名的起法与变量名字起法相同。4. 数组名字与变量名字不能相同。5. 数组元素从0 开始。(A0)6. 数组又称做数组变量。7. 数组中的一个单元又称做一个元素,一个元素可以放一个数据。8. 注意定义数组时的下标和使用数组时下标的区别。9. 引用数组或给数组赋值时,下标不能越界使用。否则可能引起计算机系统崩溃。10. 不用static 定义数组时,自动为auto(局部)11. 无论是局部变量还是局部数
74、组变量,注意未初始化时,其中的值是任意的。6.3 数组的输入(赋值)、输出和应用数组的输入(赋值)、输出和应用6.3.1 一维数组的应用例:将一维数组反序放入另一个一维数组。#include void main() int a10,b10; int i; for(i=0;i10;i+)ai=i*2-1; b10-i-1=ai;for(i=0;i10;i+) coutAi=ai; cout Bi=biendl; 例:将10个数字反序输出。#include void main() int a10=1,2,3,4,5,6,7,8,9,10; int i; for(i=0;i10;i+) couta9
75、-iendl; 例:将某一企业12个月的月产值、年总产值和年均产值放入一个一维数组。#include void main() int a15=0,1,2,3,4,5,6,7,8,9,10,11,12,0; int i; for(i=1;i13;i+) a13+=ai; a14=a13/12; for(i=1;i15;i+) coutaiendl;例:求数列的前20项:0,1,1,2,4,7,#include void main() static int i, a20=0,1; for(i=2;i20;i+) ai=ai-1+ai-2; a14=a13/12; for(i=0;i15;i+) c
76、outaiendl;例:从n个评委的打分中找最高分。#include #define N 10void main() int aN, i,max=0; for(i=0;iai; for(i=0;iN;i+) if (maxai) max=ai; for(i=1;iN;i+) coutaiendl; coutmax;例:将n个数字排序,并输出排序后的结果和排序前的数值。例:统计n个1 到 m-1 中每个数出现的个数。#include #include stdlib.h#include iomanip.h#define M 10void main()static int n,aM,i,k; cin
77、n; srand(time(NULL); for(i=0;in;i+) k= rand()/32787.*M; ak=ak+1; for(i=0;iM;i+) coutaistr2, 其值为正整数 str1=str2, 其值为0 str1str2, 其值为负整数 strlen(str) 测串 str长度 strlwr(str) 将大写字母转换为小写字母 strupr(str) 将小写字母转换为大写字母说明: 1. 其中str为字符串或者字符数组.2. 字符串的比较规则 相同为相等 (“ok” =“ok”) 部分相同,长串为大 (“work”Beijing”6.4.4 字符串数组的应用字符串数组
78、的应用例: 将存入字符数组的英文单词输出。例:将 n个国家名字(单词)排序#include iostream.h#include string.hvoid main()int k,j;char name20=iraq,iran,india,nepal,norway,peru,poland,spain,sudan,tunis;char d20;for(k=0;k9;k+) for(j=k+1;j0) strcpy(d,namej); strcpy(namej,namek); strcpy(namek,d); for(k=0;k10;k+) coutnameka;for(k=0;ak;k+) if
79、 (ak=l | ak=L) s+=1;coutaendl;coutsendl; 6.5 数组元素作为函数参数数组元素作为函数参数例:求5以内的平方,存于一维数组#include iostream.h#include iomanip.hvoid main()int a52,k;int s(int x);for(k=0;k5;k+)ak0=k+1;ak1=s(ak0);coutak0setw(8)ak1endl;int s(int x)return (x*x);6.6 数组作为函数的参数数组作为函数的参数例: 计算四个季度产值和(结果放在每行的第5元素)。#include void RowSum
80、(int a 5, int nrow) for (int i = 0; i nrow; i+)for(int j = 0; j 4; j+)ai4 += aij; void main(void)static int Table35 = 1,2,3,4,2,3,4,5,3,4,5,6; /调用子函数,计算各行和RowSum(Table,3); /输出数组元素for (int i = 0; i 3; i+) for (int j = 0; j 5; j+) cout Tableij ; cout endl; 说明:1.整个数组作为实参时,只写数组名即可 如 /A行2.函数定义中必须给出列下标,行下
81、标可以不给出。3.函数中使用数组仍要进行类型说明。4.数组作为实参和形参,有一方改变了其元素值,双方的数组的元素值均改变。5.使用数组做实参和形参,可以函数程序中带回多个值。 在回答复旦大学学生“如何才能走上成功道路?”的提问时,奥巴马说,成功的人都是那些愿意不断努力工作的,同时还不断地通过寻找新途径进行提高的人,他们不仅仅是接受现状、接受常规,而是不断地努力更新和改进的人。他们不满足于现状,一直在扪心自问,看看是否能够以不同的方式来解决问题,不管是在科学领域,还是在艺术领域,只有这些人才能出人头地。 9/5/2024168C+程序设计第第7章章 指针指针7.1 指针指针7.1.1 指针及指针
82、变量的概念int a=20 , b=30 , c=50,d ;int *p,*x; (*表示定义指针变量)p=&a; (&表示取出变量的地址)d=*p; (在赋值语句中,*表示取出地址中的内容)x=&p;物理地址(假定) 内存单元内容 变量2000 20 a2002 30 b2004 50 c 3000 2000 p4000 3000 x 9/5/2024169C+程序设计1变量的指针:变量的地址(如:变量a 的地址是2000,用&a表示,变量c 的地址是2004,用&c表示)2变量的内容:就是变量指针所指内容。(如:a=*p=*(&a)=20)3指针变量:存放变量地址的变量。(p=2000)
83、4指针的指针变量:存放着另一个指针变量的地址(如:x中存放的是3000)。9/5/2024170C+程序设计看上例,请回答下列问题:a= ?&a= ?p= ?*p= ?&p= ?x= ?&x= ?*x= ?*x= ?9/5/2024171C+程序设计7.1.2 指针变量的定义指针变量的定义int a,b,c,p1,*p2,*x;float *p3,*p4;说明:指针变量也有类型,不同类型的指针变量指向不同类型的数据地址。注意,定义时,*p 表示指针变量,但在使用时 ,*p 表示的是非指针变量注意区别:int *p,a=10;p=&a;*p=a; /a放在等号右边是“读”a=*p; /a放在等号
84、左边是“写”9/5/2024172C+程序设计7.1.3 指针变量的访问指针变量的访问例7-1:通过指针变量输出两个变量的值#include “iostream.h”main()int a=3,b=5; int *pa, *pb; / 定义时,定义时,*pa 是指针变量 pa=&a; pb=&b; /使用时,使用时,pa 是指针变量 cout“a=”*pa”t”b=”*pb;9/5/2024173C+程序设计例7-2: 利用指针变量,将两个整型数中较大的数输出。#include iostream.hvoid main()int a=3,b=5; int *pa=&a, *pb=&b;cout*
85、pb ? *pa : *pb)endl; 9/5/2024174C+程序设计例7-3:利用指针变量,将两个变量中的值互换。方法一:(值交换)#include iostream.hmain() int a=10,b=20,c; int *pa, *pb; pa=&a,pb=&b; c=*pa;*pa=*pb;*pb=c; couta=*patb=*pbendl; 10202010交换前交换后9/5/2024175C+程序设计方法二:(地址交换) pa pb#include iostream.hmain() int a=3,b=5;int *pa,*pb,*p; pa=&a,pb=&b; p=pa;pa=pb;pb=p; couta=*ptb=*pb;abba交换前交换后9/5/2024176C+程序设计