c程序设计解析学习教案

上传人:莉**** 文档编号:110475430 上传时间:2022-06-18 格式:PPTX 页数:87 大小:596.49KB
收藏 版权申诉 举报 下载
c程序设计解析学习教案_第1页
第1页 / 共87页
c程序设计解析学习教案_第2页
第2页 / 共87页
c程序设计解析学习教案_第3页
第3页 / 共87页
资源描述:

《c程序设计解析学习教案》由会员分享,可在线阅读,更多相关《c程序设计解析学习教案(87页珍藏版)》请在装配图网上搜索。

1、会计学1c程序设计程序设计(chn x sh j)解析解析第一页,共87页。第二页,共87页。算法:算法:算法是解决问题的步骤。算法是解决问题的步骤。计算机算法的特征:计算机算法的特征: 可执行性可执行性 确定性确定性 有穷性有穷性 可输入输出信息可输入输出信息算法是程序设计算法是程序设计(chn x sh j)(chn x sh j)学习的重点。学习的重点。第三页,共87页。第四页,共87页。顺序顺序(shnx)(shnx)结构结构【例例2 21 1】 求两数之和。(加法器)求两数之和。(加法器)#includeusing namespace std;int main() return 0;

2、int js1,js2; /加数(ji sh)1,加数(ji sh)2int sum; /和cout 请输入第1个加数(ji sh): js1;cout 请输入第2个加数(ji sh): js2;sum = js1 + js2; / 和 = 加数(ji sh)1 + 加数(ji sh)2cout js1 + js2 = sum c+d /a+bc+d /* *等同于等同于(a+b)(c+d)(a+b)(c+d),结果为,结果为0 0或或1 1* */ /y=aby=ab / /* *计算计算abab的值的值0 0或或1 1赋给赋给y y,y y的值为的值为0 0或或1 1* */ /abcab

3、c / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再将结果再将结果0 0或或1 1与与c c比较比较(bjio)(bjio)大小大小* */ /注意注意:数学数学(shxu)式式abc ,应表达为,应表达为ab&bc第九页,共87页。运算符运算符名称名称语义语义!逻辑非, 单目操作数的值为真,则结果为假;反之结果为真&逻辑与,双目当两个操作数全为真时,结果为真,否则为假;|逻辑或,双目两个操作数中有一个为真,则结果为真;第十页,共87页。逻辑逻辑(lu j)(lu j)表达式求值的优化表达式求值的优化( (* *)在求逻辑表达式值的过程中,一旦表达式的值能够

4、确定,就不再逐步进在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面行下面(xi mian)的运算。称为的运算。称为“求值优化求值优化”。已知已知: int a=10, b=20, c=30;: int a=10, b=20, c=30;求:求: ab | c+ ab | c+ / /结果结果(ji gu)(ji gu)以及以及a,b,ca,b,c的的值值可见可见: : 表达式表达式 c+ c+ 已不需要计算所以已不需要计算所以: : c c不变仍为不变仍为 3030第十一页,共87页。分析:读入三个数,先求出两个数中较大者,再将该大分析:读入三个数,先求出两个数中较大者,再

5、将该大数与第三个数比较,求出最大数。数与第三个数比较,求出最大数。int main() int a, b, c, max; coutabc; couta=atb=b tc=c=b) max=a; else max=b; if (cmax) max=c; cout “最大数为最大数为:”maxendl; return 0;【例【例2.5】 从键盘从键盘(jinpn)上输入三个整数,输出其中的最大数。上输入三个整数,输出其中的最大数。程序程序(chngx)(chngx)实例实例课后编程:任意4个数找最小值;* 10个数?第十二页,共87页。例例2.4 输入一个年份,判断输入一个年份,判断(pndu

6、n)是否为闰年是否为闰年#includeusing namespace std;int main () int year; cout“输入年份输入年份(ninfn)” year ; if (year%4=0&year%100!=0|year%400=0) cout year “年时闰年年时闰年” endl ; else coutyear“年不是闰年年不是闰年”endl; return 0;第十三页,共87页。v嵌套在嵌套在else分支分支(fnzh)中中:vif (表达式表达式1) 语句语句1;velse if (表达式表达式2) 语句语句2;v else if v else 语句语句n;v嵌

7、套在嵌套在if分支中:分支中:if () if () ; else; 第十四页,共87页。配对关系配对关系(gun x)实例:实例:/语句语句1:if(n%3=0)if(n%5=0) coutn是是15的倍数的倍数endl;else cout n是是3的倍数但不是的倍数但不是5的倍数的倍数endl;/语句语句2:if(n%3=0) if(n%5=0) coutn是是15的倍数的倍数endl; else cout n 0, 方程有两个不同实根;方程有两个不同实根;*若若delta0,方程无实根。,方程无实根。 第十六页,共87页。#include #include #include #inclu

8、de using namespace std;using namespace std;int main()int main() float a,b,c;float a,b,c;float delta,x1,x2;float delta,x1,x2;coutcout输入输入(shr)(shr)三个系数三个系数a(a!=0), b, c:endl;a(a!=0), b, c:abc;cinabc;couta=atb=btc=cendl;couta=atb=btc=cendl;delta=bdelta=b* *b-4b-4* *a a* *c;c;第十七页,共87页。if(delta=0)if(de

9、lta=0) cout cout方程有两个方程有两个(lin )(lin )相同实根相同实根:;:;coutx1=x2=-b/(2coutx1=x2=-b/(2* *a)endl;a)0)else if(delta0) delta=sqrt(delta); delta=sqrt(delta); x1=(-b+delta)/(2 x1=(-b+delta)/(2* *a);a); x2=(-b-delta)/(2 x2=(-b-delta)/(2* *a);a); cout cout方程有两个方程有两个(lin )(lin )不同实根不同实根:;:; coutx1=x1tx2=“x2endl;

10、coutx1=x1tx2=“x2endl; else else cout cout方程无实根方程无实根!endl; /delta0!endl; /delta0 return 0; return 0; 第十八页,共87页。例如(lr): int a=6,b=7,min; 1) min=ab? a:b; /min=62) min=ab? +a:+b; /min=7 a=7 b=73) min=ab? a+:b+; /min=6 a=7 b=7第十九页,共87页。#include iostream#include using namespace std;using namespace std;int

11、 main()int main() char ch; char ch; cout ch = ; cout ch ; cin ch ; if ( ch = A & ch = A & ch = Z ) ch += 32 ; ch += 32 ; cout ch endl ; cout ch = A & ch = 32 & i=48) /错误!case里只能写变量的可能值,不能写条件。 . /在这种情况下,只能通过 if.else来实现。 第二十六页,共87页。#include int main () char grade ; cout Input grade of score (a_d) : gr

12、ade ; switch ( grade ) case a : cout 85_100 n ; break; case b : cout 70_84 n ; break; case c : cout 60_69 n ;break; case d : cout 60 n ; break; default : cout error n ; return 0;跳出跳出(tio ch)switch语句语句v switch语句语句(yj)程序程序(chngx)(chngx)实例实例第二十七页,共87页。例例 根据根据(gnj)(gnj)考试成绩的等级打印出百分制分数,允许输入大写或小写字考试成绩的等级打

13、印出百分制分数,允许输入大写或小写字母。母。# include int main () char grade ; cout Input grade of score (a_d or A_D) : grade ; switch ( grade ) case a : case A : cout 85_100 n ; break ; case b : case B : cout 70_84 n ; break ; case c : case C : cout 60_69 n ; break ; case d : case D : cout 60 n ;break ; default : cout e

14、rror n ; retrun 0;v switch语句语句(yj)第二十八页,共87页。#include using namespace std;int main( )float num1,num2;char op;cout输入输入(shr)操作数操作数1,运算符,操作数,运算符,操作数2:num1opnum2; switch(op) case +: coutnum1opnum2=num1+num2endl; break; case -: coutnum1opnum2=num1-num2endl; break; case *: coutnum1opnum2=num1*num2endl; br

15、eak; case /: coutnum1opnum2=num1/num2endl; break; default : coutop是无效运算符是无效运算符!; return 0; 【例【例2.10】 设计一个计算器程序,实现加、减、乘、除运算设计一个计算器程序,实现加、减、乘、除运算(yn sun)。分析:读入两个操作数和运算分析:读入两个操作数和运算(yn sun)符,根据运算符,根据运算(yn sun)符完成符完成相应运算相应运算(yn sun)。第二十九页,共87页。/*【例2.9】运输公司对所运货物实行分段计费。设运输里程为s,则运费打折情况如下(自学(zxu))s250不打折扣25

16、0=s5002%折扣500=s10005%折扣1000=s20008%折扣2000=s300010%折扣3000=s15%折扣设每公里每吨的基本运费为p,货物重量为w,折扣为d,则总运费应该分段计算。设计程序,当输入p、w和s后,计算运费f。*/编程训练编程训练(xnlin)(xnlin)(* *)第三十页,共87页。/“输入运输单价p,重量(zhngling)w和里程s:” f=0, c=s/250 s1=s;switch(c) default:d=0.15;f+=p*w*(s-3000)*(1-d);s=3000; case 8: case 9: case 10: case 11: d=0

17、.1;f+=p*w*(s-2000)*(1-d);s=2000; case 4: case 5: case 6: case 7: d=0.08;f+=p*w*(s-1000)*(1-d);s=1000; case 2: case 3: d=0.05;f+=p*w*(s-500)*(1-d);s=500; case 1: d=0.02; f+=p*w*(s-250)*(1-d);s=250; case 0: d=0; f+=p*w*s*(1-d); 第三十一页,共87页。【例【例2 23 3】求】求4 4个整数个整数(zhngsh)(zhngsh)的和。的和。( (更更多?多?) ) 循环循环(

18、xnhun)(xnhun)结构结构第三十二页,共87页。循环条件 循环体 truefalse注意:注意:1)循环开始前对循环条件进行初始化;)循环开始前对循环条件进行初始化;2)在循环体语句中要包含修改)在循环体语句中要包含修改(xigi)循环条件的语句,循环条件的语句,否则循环将不能终止而陷入死循环。否则循环将不能终止而陷入死循环。一个合适的判断是否继续的条件相当重要。第三十三页,共87页。循环条件 循环体 truefalse直到型循环直到型循环第三十四页,共87页。forfor语句语句(yj) (yj) 循环(xnhun)条件三要素 第一、条件一般需要进行一定的初始化操作。第二、循环需要有

19、结束(jish)的机会。 第三、在循环中改变循环条件的成立因素 第三十五页,共87页。表达式表达式2循环体循环体表达式表达式1表达式表达式3关键字关键字初始初始(ch sh)表达式表达式循环循环(xnhun)控控制制逻辑表达式逻辑表达式循环后置表达式循环后置表达式for(条件初始化;条件;条件改变) 需要循环执行的语句; 第三十六页,共87页。#include #include using namespace std;using namespace std;int main() int main() int sum = 0; / int sum = 0; /变量变量sumsum将用于存储累加和

20、,必须初始化为将用于存储累加和,必须初始化为0 0。 int i = 1; /i int i = 1; /i是每次要加的数,它从是每次要加的数,它从1 1开始开始(kish)(kish)。 while ( i= 100) while ( i= 100) sum += i; sum += i; i+; i+; cout 1 cout 1到到100100的累加和为:的累加和为: sum endl; / sum endl; /输出累加结果:输出累加结果: 例:用 while 语句(yj)实现求从1到100的累加和。 第三十七页,共87页。#include using namespace std;in

21、t main() int sum = 0; /变量sum将用于存储累加和,将它初始化为0,这很重要。 int i = 1; /i是每次要加的数,它从1开始。 do sum += i; i+; while ( i= 100) ; cout 1到100的累加和为: sum endl; /输出(shch)累加结果: 例:用 dowhile 语句(yj)实现求从1到100的累加和。 第三十八页,共87页。用用 for for 语句语句(yj)(yj)实现求从实现求从1 1到到100100的累加和。的累加和。 # include using namespace std;int main () int i

22、 , sum = 0 ; for ( i =1 ; i = 100 ; i + ) sum + = i ; cout sum = sum endl ;return 0;第三十九页,共87页。例:用while循环实现(shxin)简单的统计功能 #include using namespace std;int main() float sum,score; int num; /num 用于存储有几个成绩需要统计。 int i; /i 用于计数 sum = 0; /初始化: i = 1; cout =成绩统计程序= endl; cout num; cout 总共需要输入 num 个成绩(每个成绩后

23、请加回车键): endl; 第四十页,共87页。while ( i = num) cout 请输入第 i score; sum += score; i+; /输出统计结果: cout 参加统计的成绩数目(shm): num endl; cout 总分为: sum endl; return 0; 第四十一页,共87页。小练习小练习(linx)(linx)题一:用for循环在屏幕上逐行输出(shch)数字:200。 for(int i=1;i=200;i+) cout i endl; 题二:能被、整除,这些(zhxi)数称为的因子,请循环列出的所有因子。 for(int i=1;i=36;i+)

24、if(36 % i = 0) /余数为,说明整除 cout i 2000) cout i , sum endl; break; 第四十四页,共87页。第四十五页,共87页。例:求整数(zhngsh)1100的累加值,但要求跳过所有个位为3的数。 int sum = 0; for(int i = 1; i=100;i+) if( i % 10 = 3) continue; sum += i; cout sum endl; 第四十六页,共87页。多重循环多重循环(xnhun)(xnhun)题:输出以下内容,要求使用两种方法(fngf),第一种方法(fngf)采用单层循环,第二种方法(fngf)采用

25、双层循环。 方法一: 分析:单层循环(xnhun)的思路是:从输出到,并且,每当输出三个数字时,多输出一个换行符。 答案: for(int i=1;i=9;i+) cout i; if( i % 3 = 0) /又一次用到“求余”操作。 cout endl; 123 456 789 第四十七页,共87页。方法二: 分析:双层循环(xnhun)的思路是:输出三行,每行输出三个数字。 答案: for(int i=1;i=3;i+) for(int j=1;j=3;j+) cout (i-1)*3+j; cout endl; 123 456 789 第四十八页,共87页。题:请输出(shch)以下内

26、容: 1 12 123 1234 12345 123456 1234567 12345678 123456789 第四十九页,共87页。cout 1 endl; cout 12 endl; cout 123 endl; cout 1234 endl; cout 12345 endl; cout 123456 endl; cout 1234567 endl; cout 12345678 endl; cout 123456789 endl; ?第五十页,共87页。分析:外层循环用于控制(kngzh)输出9行;内层循环用于输出每行的数字。每一行都是从1开始,但第一行输出1个数字,第二行输出2个,第三

27、行输出3个 答案: for(int i=1; i=9; i+) for(int j=1; j=i; j+) cout j; cout endl; 第五十一页,共87页。输出输出(shch)(shch)以下图形:以下图形: coutendl;第五十二页,共87页。第行:只有第列本身打星,第列和第列(自身)的距离是 第行:除了第列以外,增加(zngji)第、列,和与的距离都为 第行:增加(zngji)了、两列要打星,两列和的距离都为 规律就是:在第行内,凡是和第列的距离小于的列,都要打星,其余的列打空格。 第五十三页,共87页。#include using namespace std; int m

28、ain() for(int row=1;row=5;row+) for(int col=1;col -row & col-5 row) cout *; else cout ; cout endl; return 0; 第五十四页,共87页。【例【例2.12】 用迭代法求用迭代法求a的平方根近似值。求平方根的迭代公式为:的平方根近似值。求平方根的迭代公式为: 要求要求(yoqi)前后两个迭代根之差小于前后两个迭代根之差小于10- 5。迭代迭代(di di)法求解:法求解:a是已知正数,是已知正数,x 0是迭代是迭代(di di)初值,给初值,给x 0一个值,假定一个值,假定 x 0 = a/2;

29、则用;则用迭代迭代(di di)公式依次计算:公式依次计算:x1=(x0+a/x0)/2;x2=(x1+a/x1)/2;xk+1=(xk+a/xk)/2;当当|xk+1 xk|(是一个较小的正数是一个较小的正数)时,迭代时,迭代(di di)终止,取终止,取xk+1的值为的值为a的平方根近似值。的平方根近似值。编程训练编程训练(xnlin)(xnlin)第五十五页,共87页。int main( ) float x0,x1,a; couta; if(a0)couta不能开平方不能开平方!=1e-5); cout a的平方根为:的平方根为:x1endl; return 0;第五十六页,共87页。【

30、例【例2.142.14】运行】运行(ynxng)(ynxng)结果:结果:0 0 1 1 1 1 2 2 3 35 5 8 8 13 13 2121 34 345555 89 89 144 233 144 233 377377610610 987 1597 2584 987 1597 2584 41814181【例【例2.142.14】 设计程序设计程序(chngx)(chngx)输出输出FibonaciiFibonacii数列的前数列的前2020项,项,要求每行输出要求每行输出5 5个数据。个数据。第五十七页,共87页。Fibonacii数列定义数列定义(dngy)如下:如下:1n 1)-f

31、ib(n2)-fib(n1n 1 0n 0 fib(n)算法分析:除了第算法分析:除了第0项和第项和第1项外,每一项都是由类似方法产生,即前两项之和;所项外,每一项都是由类似方法产生,即前两项之和;所以求当前项时,只需要记住前两项;程序以求当前项时,只需要记住前两项;程序(chngx)不需要为每一项设置专用变量;不需要为每一项设置专用变量;属递推算法。属递推算法。第五十八页,共87页。#include#includeusing namespace std;using namespace std;int main()int main() int fib0=0,fib1=1,fib2,n; int

32、 fib0=0,fib1=1,fib2,n; coutsetw(5)fib0setw(5)fib1 coutsetw(5)fib0setw(5)fib1; for(n=3;n=20;n+) for(n=3;n=20;n+) fib2=fib0+fib1; fib2=fib0+fib1; coutsetw(5)fib2; coutsetw(5)fib2; if(n%5=0) / if(n%5=0) /控制控制(kngzh)(kngzh)每行每行5 5个数据个数据 coutendl; coutendl; fib0=fib1; fib0=fib1; fib1=fib2; fib1=fib2; ret

33、urn 0; return 0; 第五十九页,共87页。例例2.15 输入一个不超过输入一个不超过9位的整数位的整数(zhngsh),将其反向后输出。,将其反向后输出。例如输入例如输入247,变成,变成742输出。输出。算法分析:算法分析:1、将整数、将整数(zhngsh)的各个数位逐个分开,用一个数组保存各的各个数位逐个分开,用一个数组保存各位的值,然后反向组成新的整数位的值,然后反向组成新的整数(zhngsh)。2、将整数、将整数(zhngsh)各位数字分开的方法是,通过求余得到个各位数字分开的方法是,通过求余得到个位数,然后将整数位数,然后将整数(zhngsh)缩小十倍,再求余,并重复上

34、述缩小十倍,再求余,并重复上述过程,分别得到十位、百位过程,分别得到十位、百位,直到整数,直到整数(zhngsh)的值变的值变成成0为止。为止。第六十页,共87页。程序如下:程序如下:int main()int i,num,subscript;int digit9;c o u t 输 入 一 个 不 超 过输 入 一 个 不 超 过 9 位 的 整 数位 的 整 数(zhngsh):num;cout原来的整数原来的整数(zhngsh)为:为:num0);for(i=0;isubscript;i+) /整数整数(zhngsh)的反向组合的反向组合num=num*10+digiti;cout反向后

35、整数反向后整数(zhngsh)为:为:numendl;return 0;第六十一页,共87页。4、多项式求和(qi h)y=1+1/2!+1/3!+1/4!.1/n!y=1-1/2!+1/3!-1/4!.1/n!y=1-1/3!+1/5!-1/7!.1/n! ! 7x! 5x! 3xx)xsin(753【例2.22】 输入一个小于1的数x,求sinx的近值,要求误差小于0.0001。近似计算公式(gngsh)如下:第六十二页,共87页。int main()const double epsilon=0.0001; /用用epsilon保存保存(bocn)误差误差double x,sinx,ite

36、m;int n=2,sign=-1; /sign保存保存(bocn)符号符号coutx;sinx=x;item=x*x*x/6; /第一项作为初值,第二项为误差项第一项作为初值,第二项为误差项while(itemepsilon)sinx=sinx+item*sign; /将当前项累加进结果,注意符号作为因子将当前项累加进结果,注意符号作为因子item=item*x*x/(2*n)*(2*n+1); /推算新的误差项推算新的误差项sign=-sign; /注意符号的变换注意符号的变换n+; coutsin(x)=sinxendl;return 0;第六十三页,共87页。5、循环嵌套例子、循环嵌套

37、例子【例【例2.16】 打印打印(d yn)九九表。打印九九表。打印(d yn)格式为:格式为:* 1 2 3 4 5 6 7 8 9 1 1 2 2 43 3 6 99 9 18 27 36 45 54 63 72 81第六十四页,共87页。算法:算法:1 1、输出表头,用一个循环语句即可;、输出表头,用一个循环语句即可;2 2、输出表体:、输出表体:for (i=1; i10; i+) for (i=1; i10; i+) couti; couti; / /输出行号输出行号 输出第输出第i i行数据行数据(shj)(shj); /A /A coutendl; / coutendl; /准备

38、输出下一行准备输出下一行 3 3、A A行细化:行细化: for (j=1; j=i; j+) coutsetw(4)i for (j=1; j=i; j+) coutsetw(4)i* *j;j;第六十五页,共87页。int main()int main()int i,j;int i,j;coutsetw(3)coutsetw(3)* *setw(4) ;setw(4) ;for(i=1;i10;i+)for(i=1;i10;i+) coutsetw(4)i; / coutsetw(4)i; /输出输出(shch)(shch)表头表头( (乘数乘数) )coutendlendl;couten

39、dlendl;for(i=1;i10;i+)for(i=1;i10;i+) coutsetw(3)isetw(4) ; / coutsetw(3)isetw(4) ; /输出输出(shch)(shch)行号行号( (被乘被乘数数) )for(j=1;j=i;j+)for(j=1;j=i;j+) coutsetw(4)i coutsetw(4)i* *j;j; /输出输出(shch)(shch)表中数据表中数据( (乘积乘积) )coutendl; /coutendl; /准备输出准备输出(shch)(shch)下一行下一行 return 0; return 0; 循环循环(xnhun)嵌套【例

40、嵌套【例2.16】 _打印九九表打印九九表第六十六页,共87页。v 筛选筛选(shixun)法,(枚举法,穷举法),递推法法,(枚举法,穷举法),递推法第六十七页,共87页。int main()int m,i,k;cout输入整数输入整数m:m;if(m=2) coutm是素数是素数(s sh)endl;elsek=sqrt(m);for(i=2;ik) cout m是素数是素数(s sh)endl;/循环提前终止表示是循环提前终止表示是非素数非素数(s sh)else cout m不是素数不是素数(s sh)endl;return 0;第六十八页,共87页。一个数如果是其他数的倍数,则这个数

41、肯定不是素数;在由 多个大于1的数 组成的集合中,剔除所有(suyu)的非素数,剩下的就都是素数了;算法二(及所需的相应数据):1、将100之内的整数映射到一个集合。可以采用一个数组a来表示,数组元素值为各个整数;2、在数组a中,从素数2开始剔除掉新找到的素数的整数倍的元素值(置0,非素数);3、输出数组a中数组元素值非0的元素,他们都是素数。第六十九页,共87页。for (i=0; i=99; i+)/数组下标099,元素(yun s)值11002.1、 if (ai=0) continue; / ai已被定为非素数,并已被筛掉2.2、将数组中所有是ai倍数的元素(yun s)置0; for

42、( j=i+1;j=99;j+) if(aj%ai=0) aj=0; 算法二:2、在数组a中,从素数(s sh)2开始剔除掉新找到的素数(s sh)的整数倍的元素值(置0,非素数(s sh));第七十页,共87页。#include#include#includeusing namespace std;const int n=100;int main()int an;int i,j;for(i=0;in;i+) ai=1+i; /用数组保存整数用数组保存整数(zhngsh)1-100a0=0; /1不是素数,置不是素数,置0for(i=1;in;i+) if(ai=0) continue; /该

43、数已经置该数已经置0,判断下一个判断下一个 for(j=i+1;jn;j+)if(aj%ai=0) aj=0; /是是ai倍数的元素置倍数的元素置0; v 【例2.19】 求100之内的所有素数,并将这些素数输出(shch),每行输出(shch) 2个数据。第七十一页,共87页。int count=0;cout1 n之间的素数:之间的素数:endl;for(i=0;in;i+) /输出所有素数输出所有素数 if(ai!=0) coutsetw(6)ai; count+; if(count%10=0) coutendl;/每行每行10个个 coutendl; return 0;运行运行(ynxn

44、g)结果:结果:1100之间的素数:之间的素数:2 3 5 7 11 13 17 19 23 2931 37 41 43 47 53 59 61 67 7173 79 83 89 97第七十二页,共87页。设鸡翁、母、雏分别为i,j,k,根据题意可得: i*5+j*3+k/3=100;i+j+k=100;两个方程无法解出三个变量(binling),只能将各种可能的取值代入,其中能满足两个方程的就是所需的解,因此这是枚举算法(也叫穷举法)的应用。 i、j、k可能的取值有哪些?分析可知,百钱最多可买鸡翁20,鸡母33,鸡雏300。 第七十三页,共87页。这个算法使用三重循环,执行时间函数这个算法使

45、用三重循环,执行时间函数(hnsh)是立方阶,循环体将执行是立方阶,循环体将执行20*33*300=198000次。次。希望在算法上改进一下,如能减少一重循环,将大大缩短运行时间。希望在算法上改进一下,如能减少一重循环,将大大缩短运行时间。for (i=0; i=20;i+)for (j=0; j=33;j+) for (k=0; k=300;k+) if (i+j+k=100)&(5*i+3*j+k/3=100) coutijk;第七十四页,共87页。枚举法枚举法第七十五页,共87页。 #include #include using namespace std;int main()int i

46、,j,k;cout 公鸡公鸡 母鸡母鸡 小鸡小鸡endl;for(i=0;i=20;i+) for(j=0;j=33;j+)k=100-i-j;if(5*i+3*j+k/3=100)&(k%3=0) /注意注意(zh y)(k%3=0)非常重要非常重要,想一想为什么想一想为什么 coutsetw(6)isetw(10)jsetw(10)kendl; return 0;枚举法第七十六页,共87页。假定两个整数分别为num1和num2,最大公约数应当是不超过其中较小数的一个整数。辗转法:用num1除以num2,求出余数resd,如果(rgu)resd=0,则当前num2就是最大公约数,如果(rgu

47、)resd!=0,令num1=num2, num2=resd, 重复以上过程,直到resd=0为止。第七十七页,共87页。int main( )int num1,num2,resd; cout输入输入(shr)两个整数:两个整数:num1num2;coutnum1和和num2的最大公约数为:的最大公约数为:;for(;)resd=num1%num2;if(resd=0) break;num1=num2; num2=resd;coutnum2endl; return 0;第七十八页,共87页。课堂练习课堂练习国际象棋(gujxingq)棋盘64个格,第一格放一粒米,每一格比前一格多一倍,放满需要

48、多少米!第七十九页,共87页。 各种计算机应用系统通常把一些相关信息组织各种计算机应用系统通常把一些相关信息组织(zzh)起来保存在外存储器中起来保存在外存储器中,称为文件,并用一个名字称为文件,并用一个名字(称为文件名)加以标识(称为文件名)加以标识 C+把文件看成无结构的字节流,把文件看成无结构的字节流,编码方式编码方式(fngsh): 文本文件文本文件 二进制文件二进制文件存取方式存取方式(fngsh): 顺序文件顺序文件 随机文件随机文件 ifstreamifstream、ofstream ofstream 和和 fstream fstream 类用于内存与文件之间的数据传输类用于内存

49、与文件之间的数据传输对文件进行操作,要在程序前增加一条对文件进行操作,要在程序前增加一条 #include 第八十页,共87页。0 1 2 3 4 5 n-1-内存(ni cn)-ifstream finfstream finoutofstream fout读文件(wnjin)写文件(wnjin)读/写文件输入输出文件简介输入输出文件简介第八十一页,共87页。ifstream ifile; /定义输入定义输入(shr)文件,文件,ifile为文件名,可用任意标识符为文件名,可用任意标识符ofstream ofile; /定义输出文件,定义输出文件,ofile为文件名,可用任意标识符为文件名,可

50、用任意标识符文件文件(wnjin)(wnjin)操作的步骤操作的步骤第八十二页,共87页。ifstream ifile; /定义输入文件定义输入文件(wnjin),ifile为文件为文件(wnjin)名,可用任意标识符名,可用任意标识符ofstream ofile; /定义输出文件定义输出文件(wnjin),ofile为文件为文件(wnjin)名,可用任意标识符名,可用任意标识符第八十三页,共87页。ifstream ifile; /定义输入文件,定义输入文件,ifile为文件名,可用任意为文件名,可用任意(rny)标识符标识符ofstream ofile; /定义输出文件,定义输出文件,of

51、ile为文件名,可用任为文件名,可用任意意(rny)标识符标识符3)对文件进行读写操作)对文件进行读写操作最常见的文件读写是顺序的,所谓最常见的文件读写是顺序的,所谓“顺序顺序”指的是从文件头开始进行指的是从文件头开始进行读写。读写。顺序读写可用顺序读写可用C+的提取运算符(的提取运算符()和插入运算符()和插入运算符()进)进行。也可以行。也可以(ky)用读字符的用读字符的get()和读字符串的和读字符串的getling()等函数。等函数。读写是在文件缓冲区中进行。读写是在文件缓冲区中进行。第八十四页,共87页。文件文件(wnjin)(wnjin)操作的步骤操作的步骤第八十五页,共87页。【

52、例【例2.25】将百鸡问题计算结果存入】将百鸡问题计算结果存入(cn r)文件。文件。#include #include using namespace std;int main() int i,j,k; ofstream ofile; /定义定义(dngy)输出文件输出文件 ofile.open(d:myfile.txt); /作为输出文件打开作为输出文件打开 ofile 公鸡公鸡 母鸡母鸡 小鸡小鸡endl; for(i=0;i=20;i+) for(j=0;j=33;j+) k=100-i-j; if(5*i+3*j+k/3=100)&(k%3=0) ofilesetw(6)isetw(10)jsetw(10)k,它不能读白字符它不能读白字符(z f) if(ai=n) break; i+; ai=0; coutaijk; /由文件读入数据由文件读入数据 if(ifile.eof()!=0) break; /当读到文件结束时,当读到文件结束时,ifile.eof()为真为真 coutsetw(6)isetw(10)jsetw(10)kendl; ifile.close(); /关闭文件关闭文件 return 0; 第八十七页,共87页。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!