c程序设计第二章解析_第1页
c程序设计第二章解析_第2页
c程序设计第二章解析_第3页
c程序设计第二章解析_第4页
c程序设计第二章解析_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c程序设计第二章解析c-程序设计第二章解析算法:算法:算法是解决问题的步骤。算法是解决问题的步骤。计算机算法的特征:计算机算法的特征: 可执行性可执行性 确定性确定性 可输入输出信息可输入输出信息算法是程序设计学习的重点。算法是程序设计学习的重点。算法的概念算法的概念 任何算法的描述都可以分解为三种基本结构或它们的组合任何算法的描述都可以分解为三种基本结构或它们的组合 顺序结构顺序结构 分支结构分支结构 循环结构循环结构算法描述的三种基本结构算法描述的三种基本结构顺序结构顺序结构【例例2 21 1】 求两数之和。(加法器)求两数之和。(加法器)#includeusing namespace s

2、td;int main三 return 0;int js1,js2; /加数1,加数2int sum; /和cout 请输入第1个加数: js1;cout 请输入第2个加数: js2;sum = js1 + js2; / 和 = 加数1 + 加数2cout js1 + js2 = sum c+d /*等同于等同于(a+b)(c+d),结果为,结果为0或或1*/y=ab /*计算计算ab的值的值0或或1赋给赋给y,y的值为的值为0或或1*/abc /*等同于等同于(ab)c,先求,先求ab 的值,的值, 再将结果再将结果0或或1与与c比较大小比较大小*/注意注意:数学式数学式abc,应表达为,应

3、表达为ab&bc关系表达式关系表达式 由关系运算符连接的表达式。是一种简单的逻辑表达式。值为由关系运算符连接的表达式。是一种简单的逻辑表达式。值为true或或false。 逻辑运算符逻辑运算符运算符运算符名称名称语义语义!逻辑非, 单目操作数的值为真,则结果为假;反之结果为真&逻辑与,双目当两个操作数全为真时,结果为真,否则为假;|逻辑或,双目两个操作数中有一个为真,则结果为真;逻辑表达式求值的优化逻辑表达式求值的优化( (* *)在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。的运

4、算。称为称为“求值优化求值优化”。已知已知: int a=10, b=20, c=30;: int a=10, b=20, c=30;求:求: ab | c+ab | c+ / /结果以及结果以及a,b,ca,b,c的值的值可见可见: : 表达式表达式 c+ c+ 已不需要计算所以已不需要计算所以: : c c不变仍为不变仍为 3030分析:读入三个数,先求出两个数中较大者,再分析:读入三个数,先求出两个数中较大者,再将该大数与第三个数比较,求出最大数。将该大数与第三个数比较,求出最大数。int main三三 int a, b, c, max; coutabc; couta=atb=b tc=

5、c=b) max=a; else max=b; if (cmax) max=c; cout “最大数为最大数为:”maxendl; return 0;【例例2.5】 从键盘上输入三个整数,输出其中的最大数。从键盘上输入三个整数,输出其中的最大数。程序实例程序实例课后编程:任意4个数找最小值;* 10个数?例例2.4 输入一个年份,判断是否为闰年输入一个年份,判断是否为闰年#includeusing namespace std;int main 三三 int year; cout“输入年份输入年份” year ; if (year%4=0&year%100!=0|year%400=0)

6、cout year “年时闰年年时闰年” endl ; else coutyear“年不是闰年年不是闰年”endl; return 0; if if 语句的嵌套(问题需求)语句的嵌套(问题需求)嵌套嵌套if语句:语句: if 语句中,如果内嵌语句又是语句中,如果内嵌语句又是if语句,就构成了嵌套语句,就构成了嵌套if语句。语句。if 语句可实语句可实现二选一分支,而嵌套现二选一分支,而嵌套if语句则可以实现多选一的多路分支情况。语句则可以实现多选一的多路分支情况。嵌套在嵌套在else分支中分支中:if (表达式表达式1) 语句语句1;else if (表达式表达式2) 语句语句2; else

7、if else 语句语句n;嵌套在嵌套在if分支中:分支中:if () if () ; else; 2.2.2 if 2.2.2 if 语句的嵌套语句的嵌套配对关系实例:配对关系实例:/语句语句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,方程无实根。,方程无实根。 #include #include

8、 #include #include using namespace std;using namespace std;int mainint main三三 float a,b,c;float a,b,c;float delta,x1,x2;float delta,x1,x2;coutcout输入三个系数输入三个系数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;if(delta=0)if(delta=0)

9、 cout cout方程有两个相同实根方程有两个相同实根:;:;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方程有两个不同实根方程有两个不同实根:;:; coutx1=x1tx2=“x2endl; coutx1=x1tx2=“x2endl; else els

10、e cout cout方程无实根方程无实根!endl; /delta0!endl; /delta0 return 0; return 0; 条件运算符条件运算符“?:” ?:” 三元运算符“?:”可以用来简化if语句表达。其构成的表达式格式为: 表达式表达式1 ? 表达式表达式2 : 表达式表达式3例如: 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#include #include using namespace std;using

11、 namespace std;int mainint 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来实现。 #include int main 三 char grade ; cout Input grade

12、 of score (a_d) : grade ; 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;跳出跳出switch语句语句 switch语句语句程序实例程序实例例例 根据考试成绩的等级打印出百分制分数,根据考试成绩的等级打印出百分制分数,允许输入大写或小写字母。允许输入大写或小写字母。# incl

13、ude 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 error n ; retrun 0;或 共同执行一个语句

14、switch语句语句#include using namespace std;int main( )float num1,num2;char op;cout输入操作数输入操作数1,运算符,操作数,运算符,操作数2:num1opnum2; switch(op) case +: coutnum1opnum2=num1+num2endl; break; case -: coutnum1opnum2=num1-num2endl; break; case *: coutnum1opnum2=num1*num2endl; break; case /: coutnum1opnum2=num1/num2end

15、l; break; default : coutop是无效运算符是无效运算符!; return 0; 【例例2.10】 设计一个计算器程序,实现加、减、乘、除运算。设计一个计算器程序,实现加、减、乘、除运算。分析:读入两个操作数和运算符,根据运算符完成相应运算。分析:读入两个操作数和运算符,根据运算符完成相应运算。/*【例2.9】运输公司对所运货物实行分段计费。设运输里程为s,则运费打折情况如下(自学)s250不打折扣250=s5002%折扣500=s10005%折扣1000=s202X8%折扣202X=s300010%折扣3000=s15%折扣设每公里每吨的基本运费为p,货物重量为w,折扣为

16、d,则总运费应该分段计算。设计程序,当输入p、w和s后,计算运费f。*/编程训练(编程训练(* *)/“输入运输单价p,重量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.1;f+=p*w*(s-202X)*(1-d);s=202X; 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=

17、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); 【例例2 23 3】求求4 4个整数的和。个整数的和。( (更多?更多?) ) 循环结构循环结构循环条件 循环体 truefalse注意:注意:1)循环开始前对循环条件进行初始化;)循环开始前对循环条件进行初始化;2)在循环体语句中要包含修改循环条件的语句,否则循环将不能终)在循环体语句中要包含修改循环条件的语句,否则循环将不能终止而陷入死循环。止而陷入死循环。whilewhile语句

18、语句while语句也称为当循环语句也称为当循环,语句格式为:语句格式为:while (表达式表达式) 循环体语句;循环体语句; 一个合适的判断是否继续的条件相当重要。循环条件 循环体 truefalse直到型循环直到型循环do-while do-while 语句语句 do-while语句称为直到循环,语句称为直到循环,格式为:格式为: do 循环体语句循环体语句 ; while(表达式表达式); forfor语句语句 循环条件三要素 第一、条件一般需要进行一定的初始化操作。第二、循环需要有结束的机会。 第三、在循环中改变循环条件的成立因素 for循环语句的格式循环语句的格式for ( 表达式表

19、达式1;表达式表达式2; 表达式表达式3 ) 循环体语句循环体语句 ;表达式表达式2循环体循环体表达式表达式1表达式表达式3关键字关键字初始表达式初始表达式循环控制循环控制逻辑表达式逻辑表达式循环后置表达式循环后置表达式for(条件初始化;条件;条件改变) 需要循环执行的语句; #include #include using namespace std;using namespace std;int mainint main三三 int sum = 0; / int sum = 0; /变量变量sumsum将用于存储累加和,必须初始化为将用于存储累加和,必须初始化为0 0。 int i = 1

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

21、i是每次要加的数,它从1开始。 do sum += i; i+; while ( i= 100) ; cout 1到100的累加和为: sum endl; /输出累加结果: 例:用 dowhile 语句实现求从1到100的累加和。 用用 for for 语句实现求从语句实现求从1 1到到100100的累加和。的累加和。 # include using namespace std;int main 三三 int i , sum = 0 ; for ( i =1 ; i = 100 ; i + ) sum + = i ; cout sum = sum endl ;return 0;例:用while

22、循环实现简单的统计功能 #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 个成绩(每个成绩后请加回车键): endl; while ( i = num) cout 请输入第 i score; sum += score; i+; /输出统计结果: cout 参加统计的成绩数目: num endl; cout 总分为

23、: sum endl; return 0; 小练习小练习题一:用for循环在屏幕上逐行输出数字:200。 for(int i=1;i=200;i+) cout i endl; 题二:能被、整除,这些数称为的因子,请循环列出的所有因子。 for(int i=1;i=36;i+) if(36 % i = 0) /余数为,说明整除 cout i 202X) cout i , sum endl; break; continue 语句结束本次循环,接着判断是否执行下一次循环。例:求整数1100的累加值,但要求跳过所有个位为3的数。 int sum = 0; for(int i = 1; i=100;i+

24、) if( i % 10 = 3) continue; sum += i; cout sum endl; 多重循环多重循环题:输出以下内容,要求使用两种方法,第一种方法采用单层循环,第二种方法采用双层循环。 方法一: 分析:单层循环的思路是:从输出到,并且,每当输出三个数字时,多输出一个换行符。 答案: for(int i=1;i=9;i+) cout i; if( i % 3 = 0) /又一次用到“求余”操作。 cout endl; 123 456 789 方法二: 分析:双层循环的思路是:输出三行,每行输出三个数字。 答案: for(int i=1;i=3;i+) for(int j=1

25、;j=3;j+) cout (i-1)*3+j; cout endl; 123 456 789 题:请输出以下内容: 1 12 123 1234 12345 123456 1234567 12345678 123456789 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; ?分析:外层循环用于控制输出9行;内层循环用于输出每行的数字。每一行

26、都是从1开始,但第一行输出1个数字,第二行输出2个,第三行输出3个 答案: for(int i=1; i=9; i+) for(int j=1; j=i; j+) cout j; cout endl; 输出以下图形:输出以下图形: coutendl;第行:只有第列本身打星,第列和第列(自身)的距离是 第行:除了第列以外,增加第、列,和与的距离都为 第行:增加了、两列要打星,两列和的距离都为 规律就是:在第行内,凡是和第列的距离小于的列,都要打星,其余的列打空格。 #include using namespace std; int main三 for(int row=1;row=5;row+)

27、for(int col=1;col -row & col-5 row) cout *; else cout ; cout endl; return 0; 【例例2.12】 用迭代法求用迭代法求a的平方根近似值。求平方根的迭代公式为:的平方根近似值。求平方根的迭代公式为: 要求前后两个迭代根之差小于要求前后两个迭代根之差小于10- 5。迭代法求解:迭代法求解:a是已知正数,是已知正数,x 0是迭代初值,给是迭代初值,给x 0一个值,假定一个值,假定 x 0 = a/2;则用迭代公式依次;则用迭代公式依次计算:计算:x1=(x0+a/x0)/2;x2=(x1+a/x1)/2;xk+1=(x

28、k+a/xk)/2;当当|xk+1 xk|(是一个较小的正数是一个较小的正数)时,迭代终止,取时,迭代终止,取xk+1的值为的值为a的平方根近似值的平方根近似值。编程训练编程训练int main( ) float x0,x1,a; couta; if(a0)couta不能开平方不能开平方!=1e-5); cout a的平方根为:的平方根为:x1endl; return 0;do-while do-while 语句语句【例例2.142.14】运行结果:运行结果:0 1 1 2 35 8 13 21 3455 89 144 233 377610 987 1597 2584 4181【例例2.142

29、.14】 设计程序输出设计程序输出FibonaciiFibonacii数列的前数列的前2020项,要求每行输出项,要求每行输出5 5个数据个数据。Fibonacii数列定义如下:数列定义如下:算法分析:除了第算法分析:除了第0项和第项和第1项外,每一项都是由类似方法产生,即前两项之和;所以项外,每一项都是由类似方法产生,即前两项之和;所以求当前项时,只需要记住前两项;程序不需要为每一项设置专用变量;求当前项时,只需要记住前两项;程序不需要为每一项设置专用变量;属递推算法。属递推算法。#include#includeusing namespace std;using namespace std;

30、int mainint main三三 int fib0=0,fib1=1,fib2,n; int 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) /控制每行控制每行5 5个数据个数据 coutendl; coutendl; fib0=fib1; fi

31、b0=fib1; fib1=fib2; fib1=fib2; return 0; return 0; 例例2.15 输入一个不超过输入一个不超过9 9位的整数,将其反向后输出。例如输入位的整数,将其反向后输出。例如输入247247,变成,变成742742输出。输出。算法分析:算法分析:1、将整数的各个数位逐个分开,用一个数组保存各位的值,然后反、将整数的各个数位逐个分开,用一个数组保存各位的值,然后反向组成新的整数。向组成新的整数。2、将整数各位数字分开的方法是,通过求余得到个位数,然后将整数、将整数各位数字分开的方法是,通过求余得到个位数,然后将整数缩小十倍,再求余,并重复上述过程,分别得到

32、十位、百位缩小十倍,再求余,并重复上述过程,分别得到十位、百位,直到,直到整数的值变成整数的值变成0为止。为止。程序如下:程序如下:int main三三int i,num,subscript;int digit9;cout输入一个不超过输入一个不超过9位的整数:位的整数:num;cout原来的整数为:原来的整数为:num0);for(i=0;isubscript;i+) /整数的反向组合整数的反向组合num=num*10+digiti;cout反向后整数为:反向后整数为:numendl;return 0;4、多项式求和y=1+1/2!+1/3!+1/4!.1/n!y=1-1/2!+1/3!-1

33、/4!.1/n!y=1-1/3!+1/5!-1/7!.1/n!【例2.22】 输入一个小于1的数x,求sinx的近值,要求误差小于。近似计算公式如下:int main三三const double epsilon=0.0001; /用用epsilon保存误差保存误差double x,sinx,item;int n=2,sign=-1; /sign保存符号保存符号coutx;sinx=x;item=x*x*x/6; /第一项作为初值,第二项为误差项第一项作为初值,第二项为误差项while(itemepsilon)sinx=sinx+item*sign; /将当前项累加进结果,注意符号作为因子将当前

34、项累加进结果,注意符号作为因子item=item*x*x/(2*n)*(2*n+1); /推算新的误差项推算新的误差项sign=-sign; /注意符号的变换注意符号的变换n+; coutsin(x)=sinxendl;return 0;5、循环嵌套例子、循环嵌套例子【例例2.16】 打印九九表。打印格式为:打印九九表。打印格式为:* 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算法:算法:1 1、输出表头,用一个循环语句即可;、输出表头,用一个循环语句即可;2 2、输出表体:、输出表体:for (i=1; i10;

35、 i+) for (i=1; i10; i+) couti; couti; / /输出行号输出行号 输出第输出第i i行数据;行数据; /A/A coutendl; / coutendl; /准备输出下一行准备输出下一行 3 3、A A行细化:行细化: for (j=1; j=i; j+) coutsetw(4)ifor (j=1; j=i; j+) coutsetw(4)i* *j;j;int mainint main三三 int i,j;int i,j;coutsetw(3)coutsetw(3)* *setw(4) ;setw(4) ;for(i=1;i10;i+)for(i=1;i10

36、;i+) coutsetw(4)i; / coutsetw(4)i; /输出表头输出表头( (乘数乘数) )coutendlendl;coutendlendl;for(i=1;i10;i+)for(i=1;i10;i+) coutsetw(3)isetw(4) ; / coutsetw(3)isetw(4) ; /输出行号输出行号( (被乘数被乘数) )for(j=1;j=i;j+)for(j=1;j=i;j+) coutsetw(4)i coutsetw(4)i* *j;j;/输出表中数据输出表中数据( (乘积乘积) )coutendl; /cout2,m是素数的条件是不能被是素数的条件是不

37、能被2,3,,(,(m的平方根取整)的平方根取整)整除。因此可以整除。因此可以用用2,3,k(k为为m的平方根取整)逐个去除的平方根取整)逐个去除m,如果被,如果被其中某个数整除了,则其中某个数整除了,则m不是素数,否则是素数。不是素数,否则是素数。算法属于穷举法。算法属于穷举法。 筛选法,(枚举法,穷举法),递推法筛选法,(枚举法,穷举法),递推法int main三三int m,i,k;cout输入整数输入整数m:m;if(m=2) coutm是素数是素数endl;elsek=sqrt(m);for(i=2;ik) cout m是素数是素数endl;/循环提前终止表示是非素数循环提前终止表示

38、是非素数else cout m不是素数不是素数endl;return 0;【例2.19】 求100之内的所有素数,并将这些素数输出,每行输出 2个数据。一个数如果是其他数的倍数,则这个数肯定不是素数;在由 多个大于1的数 组成的集合中,剔除所有的非素数,剩下的就都是素数了;筛选法筛选法( (* *) )算法二(及所需的相应数据):1、将100之内的整数映射到一个集合。可以采用一个数组a来表示,数组元素值为各个整数;2、在数组a中,从素数2开始剔除掉新找到的素数的整数倍的元素值(置0,非素数);3、输出数组a中数组元素值非0的元素,他们都是素数。第 2步 的细化:for (i=0; i=99;

39、i+)/数组下标099,元素值1100、 if (ai=0) continue; / ai已被定为非素数,并已被筛掉、将数组中所有是ai倍数的元素置0; for( j=i+1;j=99;j+) if(aj%ai=0) aj=0; 算法二:2、在数组a中,从素数2开始剔除掉新找到的素数的整数倍的元素值(置0,非素数);#include#include#includeusing namespace std;const int n=100;int main三三int an;int i,j;for(i=0;in;i+) ai=1+i; /用数组保存整数用数组保存整数1-100a0=0; /1不是素数,

40、置不是素数,置0for(i=1;in;i+) if(ai=0) continue; /该数已经置该数已经置0,判断下一个判断下一个 for(j=i+1;jn;j+)if(aj%ai=0) aj=0; /是是ai倍数的元素置倍数的元素置0; 【例2.19】 求100之内的所有素数,并将这些素数输出,每行输出 2个数据。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;

41、 return 0;运行结果:运行结果:1100之间的素数:之间的素数:2 3 5 7 11 13 17 19 23 2931 37 41 43 47 53 59 61 67 7173 79 83 89 97设鸡翁、母、雏分别为i,j,k,根据题意可得: i*5+j*3+k/3=100;i+j+k=100;两个方程无法解出三个变量,只能将各种可能的取值代入,其中能满足两个方程的就是所需的解,因此这是枚举算法(也叫穷举法)的应用。 i、j、k可能的取值有哪些?分析可知,百钱最多可买鸡翁20,鸡母33,鸡雏300。 7、【例2.20】 中国古代数学史上著名的“百鸡问题”:鸡翁一,值钱五,鸡母一,值

42、钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?这个算法使用三重循环,执行时间函数是立方阶,循环体将执行这个算法使用三重循环,执行时间函数是立方阶,循环体将执行20*33*300=202X00次次。希望在算法上改进一下,如能减少一重循环,将大大缩短运行时间。希望在算法上改进一下,如能减少一重循环,将大大缩短运行时间。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;算法:算法:实际上,当实际上,当i、j确定时,确定时,k就可由题目要求

43、确定为就可由题目要求确定为100-i-j,因此,因此实际上只要用实际上只要用i、j去测试,用钱数检测就可以了。循环体将执去测试,用钱数检测就可以了。循环体将执行行:20*33=660次。次。算法改进为:算法改进为:for (i=0; i+=20;) for (j=0; j+=33;) if ( 5*i+3*j+(100-i-j)/3=100 ) coutijk;枚举法枚举法 #include #include using namespace std;int main三三int i,j,k;cout 公鸡公鸡 母鸡母鸡 小鸡小鸡endl;for(i=0;i=20;i+) for(j=0;j=33

44、;j+)k=100-i-j;if(5*i+3*j+k/3=100)&(k%3=0) /注意注意(k%3=0)非常重要非常重要 ,想一想为什么,想一想为什么 coutsetw(6)isetw(10)jsetw(10)kendl; return 0;枚举法【例2.20】 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?假定两个整数分别为num1和num2,最大公约数应当是不超过其中较小数的一个整数。辗转法:用num1除以num2,求出余数resd,如果resd=0,则当前num2就是最大公约数,如果resd!=0,令num1=num2, num2=resd, 重复以上过程,直到resd=0为止。递推法递推法8、【例2.21】 用欧基里德算法(也称辗转法)求两个整数的最大公约数。int main( )int num1,num2,resd; cout输入两个整数:输入两个整数:num1num2;coutnum1和和num2的最大公约数为:的最大公约数为:;for(;)resd=num1%num2;if(resd=0) break;num1=num2; num2=resd;coutnum2

温馨提示

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

评论

0/150

提交评论