高级语言程序设计:ch05-流程控制_第1页
高级语言程序设计:ch05-流程控制_第2页
高级语言程序设计:ch05-流程控制_第3页
高级语言程序设计:ch05-流程控制_第4页
高级语言程序设计:ch05-流程控制_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

1、n顺序结构顺序结构n分支结构分支结构n循环结构循环结构n程序设计实例程序设计实例n本章小结本章小结顺序结构顺序结构n属性属性 某部分若执行某部分若执行, 则语句顺序全部被执行则语句顺序全部被执行 若不执行,则全部语句一个也不执行若不执行,则全部语句一个也不执行n形式形式 DS DS DS ( ,) AABMAX A BBAB当当n语法语法if语句语句 if ( 表达式表达式 ) 语句语句 if ( 表达式表达式 ) 语句语句 else 语句语句n形式形式 if (e) S1 else S2 if (e) Sn执行过程与执行过程与PAD图图 if (e) S1 else S2eS1FS2TS1e

2、S2n例例5.1 float max ( float a, float b ) if (ab)return a; elsereturn b; return aabreturn bn形式二形式二if ( e ) SeSF Sen布尔表达式布尔表达式n可以嵌套可以嵌套nelse归属问题归属问题if (ab) if (bc) x=0; else x=1;abx=1 x=0bcabx=1 x=0bcnelse 属于最前边的属于最前边的 if ,则,则if (ab) if (bc) x=0; else x=1;相当于相当于 if (ab) if ( bc ) x = 0 ; else x = 1 ;n前

3、述的问题的答案是前述的问题的答案是: 若若 ab 且且 bbx=1 x=0bcnelse 属于第二个属于第二个 if ,则,则 if (ab) if (bc) x=0; else x=1;相当于相当于if ( ab ) if (bc) x = 0 ; else x = 1 ; n上述的问题的答案是上述的问题的答案是 若若 ab 且且 bbx=1 x=0bcn两义性两义性 C标准规定标准规定:else部分与前面最邻近的一个没有配对部分与前面最邻近的一个没有配对 的的 if 配对配对 第二种方案解释。第二种方案解释。 若想描述第一种方案的结构只好用若想描述第一种方案的结构只好用 、 将中间的将中间

4、的 “ if () 语句语句”括起来,构成复合语句。括起来,构成复合语句。abx=1 x=0bcn例例5.3 求方程求方程 ax2 + bx + c = 0 的根的根 是一元二次方程是一元二次方程(a0)有实根有实根(0) 两个不同的实根两个不同的实根(0) 两个相同的实根两个相同的实根(=0)有虚根有虚根(0) 是一元一次方程是一元一次方程(a=0,b0) 是恒等式是恒等式(a=0, b=0)恒等式成立恒等式成立(c=0)恒等式不成立恒等式不成立(c0)xbbaca 242解二次方程解二次方程读入读入 a,b,c求解求解 x1, x2输出输出 x1,x2结束结束二次方程二次方程a0b0一次方

5、程一次方程退化退化0=0c=0矛盾矛盾c=0一次方程一次方程常数等式常数等式x=c/b=0两实根两实根:x1=x2两虚根两虚根:x1,x2二实根二实根:x1,x20计算计算否则否则if(a!=0) delta=b*b-4*a*c; if(delta0) printf(x1=%g ,x2=%gn, (-b+sqrt(delta)/(2*a),(-b-sqrt(delta)/(2*a); else if(delta=0)printf(x1=x2=%fn,-b/(2*a); elseprintf(x1=%g+%gi , x2=%g-%gin, -b/(2*a),sqrt(-delta)/(2*a),

6、 -b/(2*a),sqrt(-delta)/(2*a) );else / 以下处理以下处理a=0的情况的情况 if(b!=0)printf(x=%gn,-c/b); elseif(c=0) printf(0=0!n);else printf(%g=0n,c);演示例演示例5.3程序程序switch ( e ) case C1 :S1 break; case C2 :S2 break ; . . . case Cn :Sn break ; default :S0 switch ( e ) case C1 :S1 case C2 :S2 . . . case Cn :Sn default : S

7、0第一种形式多分支第一种形式多分支第二种形式多分支第二种形式多分支switch ( e ) case C1 :S1 break; case C2 :S2 break; . . . case Cn :Sn break; default :S0 其他其他计算计算 e 值值e=? S1 S2 S3 S4 S5S0C1C2C3C4C5结束结束计算计算 e 值值e=C1S1e=C2S2e=C3S3e=C4S4e=C5S5S0switch ( e ) case C1 :S1 case C2 :S2 . . . case Cn :Sn default : S0S1S2S3S4S5e=?C1C2C3C4C5S

8、6其它其它S1S2S3S4S5e=?C1C2C3C4C5S6其它其它n例例5.4 高速公路每公里的收费标准按不同种类汽车如下高速公路每公里的收费标准按不同种类汽车如下: 小汽车(小汽车( car ) 0.50 元元 卡车(卡车( truck ) 1.00 元元 大客车(大客车( bus ) 1.50 元元编程序,为某高速公路收费站计算各种车辆的收费额。编程序,为某高速公路收费站计算各种车辆的收费额。单价单价=0.50单价单价=1.00单价单价=1.50车型车型小汽车小汽车卡车卡车大客车大客车录入车型、行驶里程录入车型、行驶里程输出:行驶费单价输出:行驶费单价里程里程#include stdio

9、.henum tsort car , truck , bus sort ; / 车种说明车种说明int i ; float mileage, price ;/ 里程、费用里程、费用void main ( ) / 输入车种输入车种 printf ( “please choose ( 1.car 2.truck 3.bus ):” ) ; scanf (“%d”, & i ) ; switch ( i ) case 1 : sort = car ; break ; case 2 : sort = truck ; break ; case 3 : sort = bus; printf ( “

10、please input mileage : “ ) ; / 输入里程输入里程 scanf ( “%f”,&mileage ) ; switch ( sort ) / 计算计算 case car : price = 0.50 ; break ; case truck : price = 1.00 ; break ; case bus : price = 1.50; printf( “ cost= %.2fn”, price*mileage );/ 输出输出 演示例演示例5.4程序程序n计算数列计算数列 的前的前n项和。项和。1(1)kak ks=0; k=1;开始开始k = n结结束束

11、FTs = s+ak ;k = k+1 ; s=0; k=1;s = s+ak ;k = k+1 ; 开始开始k = n结束结束FTn循环循环 指程序的某部分被反复的重复执行多次指程序的某部分被反复的重复执行多次n循环程序设计循环程序设计 编写重复执行的程序编写重复执行的程序n循环体循环体 被重复执行的部分被重复执行的部分nC 的三种不同的重复性语句的三种不同的重复性语句, 它们是它们是 while 语句语句 先判断条件的循环;先判断条件的循环; do 语句语句 后判断条件的循环;后判断条件的循环; for 语句语句 也是先判断条件的循环。也是先判断条件的循环。n需要弄清楚的需要弄清楚的 循环

12、控制方式是什么?循环控制方式是什么? 控制条件是什么?控制条件是什么? 重复执行部分(称为重复执行部分(称为“循环体循环体”)是什么?)是什么?n语法语法 while 语句语句 while (表达式表达式 ) 语句语句n一般形式一般形式while ( e ) SSeFwhile eSn计算数列计算数列 的前的前n项和。项和。1(1)kak k s=0; k=1;开始开始k = n结结束束FTs = s+ak ;k = k+1 ; s=0; while k =ns+=1/(k*(k+1) ; 开始开始结束结束k=1;k+=1; void main ( ) int n , k=1; float s

13、=0; printf(“please input n:n”); scanf(“%d”,&n); while ( keps结结束束FTe = e+r ;n = n+1 ;r= r/n ; e=1 ; n=1; r=1 ; while r epse=e+r ; 开始开始结束结束r=r*1/n ;n=n+1;float logari( float eps ) int n ; float e,r ; e=1.0; n=1; r=1.0; while ( reps ) e=e+r; n=n+1; r=r/n; return e ; e=1.0; n=1; r=1.0;e=2.0; n=2; r=

14、0.5;e=2.5; n=3; r=0.1667;e=2.6667; n=4; r=0.0417;.n语法语法do 语句语句 do 语句语句 while ( 表达式表达式 );n一般形式一般形式do S while ( e );SeTdo-while eS 例例5.6 考虑本节开始的问题,编一个函数考虑本节开始的问题,编一个函数 s(n) ,计算数列的计算数列的ak的前的前 n 项和项和ak kk11() sum = 0 ; k = 1 ; do-while k= n返回返回s(n)return sumsum += 1/(k*(k+1);k = k+1sum=0; k=1;sum+= ak ;

15、k = k+1 ; 开始开始k = n结束结束FTfloat s ( int n ) int k ; float sum ; sum = 0 ; k = 1 ; do sum + = 1.0/(k*(k+1); k+ ; while( k 0yy = yy+4开始开始结束结束求求 yy 后第一个闰年后第一个闰年yy 是闰年是闰年输出输出yyn= n-1/*PROGRAM find leap year*/#include stdio.hvoid main()int yy,n;printf(please input begin year:);scanf(%d,&yy);printf(ple

16、ase input the number of the leap year:);scanf(%d,&n);yy=(yy/4+1)*4;doif( (yy%4=0)&(yy%100!=0)|(yy%400=0) )printf(year %dt,yy);n-;yy=yy+4;while(n0);演示例演示例5.7程序程序例例5.8 g (x) = 0 x = f (x)等价变换等价变换n采用迭代法方法求解采用迭代法方法求解x=f(x)方程的根方程的根 选定一个选定一个 x的初值的初值 x0 ; 以以 x0 代入右端计算出一个值代入右端计算出一个值 x1=f(x0) 若若 x1 等

17、于等于x0 ,显然,显然 x0 为根,转向为根,转向 否则若否则若 x1x0 则令则令 x0=x1 ,转向,转向 结束,停止计算结束,停止计算f (x)y=xf (x0)x0 x1f (x1)x*x2可以使用简单迭代的情况可以使用简单迭代的情况f (x2)f (x)y=xf (x1)x2x1f (x0)x*x0不可以使用简单迭代的情况不可以使用简单迭代的情况f (x2)n简单迭代方法使用条件简单迭代方法使用条件 对于方程对于方程xf(x),当任意,当任意x (a, b) 存在存在0 L 1,使,使 |f(x)|L1 则方程则方程x = f(x)在在(a, b)上有唯一的根上有唯一的根x* 且对

18、任意初值且对任意初值x0 (a, b)时时 迭代序列迭代序列xk+1=f (xk) (k = 0, 1, )收敛于收敛于x*n在实际工作中,决大部分计算都是近似计算,只要在实际工作中,决大部分计算都是近似计算,只要求求 X1X0 即即X1 - X0X0 = X1X1 = f(X0)开始开始结束结束32g(x)=2x +0.5x -x+0.093=032f(x)=2x +0.5x +0.093= x#include stdio.h#include math.h#define eps 1e-6void main() float x0,x1; x0=0.0; x1=0.0; do x0=x1; x1

19、=2*x0*x0*x0 +0.5*x0*x0 +0.093; while(fabs(x1-x0)eps); printf(x=%fn,x0);演示例演示例5.8程序程序SeFwhile eSSeTdo-while eSn一般形式一般形式 for ( e1; e2 ; e3) S e1初值表达式初值表达式 用于设置该循环开始的一些初值用于设置该循环开始的一些初值 e2终值表达式终值表达式 用于控制循环结束用于控制循环结束 e3增量表达式增量表达式 用于每次循环体执行后对控制条件的修正用于每次循环体执行后对控制条件的修正e1e2Se3F结束结束for ( e1 ; e2 ;e3 )Se=1.0;n

20、=1;r=1.0;while ( reps ) e=e+r; n=n+1; r=r/n; e=1.0;n=1;for ( r=1.0; reps; r=r/n ) e=e+r; n=n+1; sum=0;k=1;r=1.0;while ( k=n ) sum=sum+1.0/(k*(k+1); k+; sum=0;for ( k=1; k=n;k+ ) sum=sum+1.0/(k*(k+1);例例5.9 5.9 编程序求向量内积。由终端输入两个编程序求向量内积。由终端输入两个n n维向量维向量X,Y. X,Y. 计算其内积计算其内积XY XY 。 xy = 0 for( i=1;i=n ;i

21、+) scanf(“%f%f”, &xi, &yi )s(n)返回返回return xy xy = xy + xi*yifloat S (int n ) int i ; float xy,xi,yi ; xy = 0; for (i=1;i=n;i=i+1 ) scanf(“%f%f”, &xi, &yi ) ; xy = xy + xi * yi ; return xy; 0 xy0-112n例例5.10编程序,画函数编程序,画函数 y=f(x)=e-x sin(2X)在在0,2区间上的图形区间上的图形* *x = 0; for(i=1 ;i=40; i+)开

22、始开始结束结束计算计算 y = f(i*0.05)确定确定 y 坐标,在相应位置印坐标,在相应位置印 *#define dx 0.05#define dy 0.05#define pi 3.14159265#define y0 40#define endx 40void main( ) int n , i ,j ; float x , y ; x = 0 ; for ( i=0; i=endx; i+ ) y = exp(-x) * sin( 2 * pi * x ) ; n = y0+ (int)( y/dy ) ; for (j=0;j=n;j+) printf( ); printf(*n

23、); x = x + dx ; 演示例演示例5.10程序程序程序设计实例程序设计实例n打印打印99表表n打印打印100以内素数以内素数n模拟计算器模拟计算器n十六进制数翻译十六进制数翻译1 12 2 43 3 6 94 4 8 12 165 5 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81* 1 2 3 4 5 6 7 8 9 打印前打印前 9 行行打印底行打印底行开始开始结束结束1 12 2 43 3 6 94 4 8 12 165 5

24、 10 15 20 256 6 12 18 24 30 367 7 14 21 28 35 42 498 8 16 24 32 40 48 56 649 9 18 27 36 45 54 63 72 81打印前打印前9行行打印前打印前9行行结束结束打印第打印第 i 行行 for (i=1;i=9;i+)打印第打印第i行行6 6 12 18 24 30 369 9 18 27 36 45 54 63 72 81行号行号本行数值本行数值打印第打印第i行行结束结束打印行标打印行标 i for(j=1;j=i;j+)打印打印 i*j9 9 18 27 36 45 54 63 72 816 6 12 1

25、8 24 30 36* 1 2 3 4 5 6 7 8 9打印底行打印底行打印底行打印底行结束结束 for (i=1;i=9;i+)印印 i印印 */*PROGRAM print table9*9 */#include stdio.hvoid main() int i,j; for(i=1;i10;i+) printf(%4d,i); for(j=1;j=i;j+) printf(%4d,i*j); printf(n); printf(%4c,*); for(i=1;i10;i+) printf(%4d,i);演示例演示例5.11程序程序 for (i=2;i=2;j-)flag = true

26、 i%j = 0bool prime( int n ) int j ; for ( j = n / 2 ; j = 2 ; j- ) if ( n%j = 0 ) return false ; return true ;bool prime( int); void main( ) int i ; for ( i = 2 ;i = 2 ; j- ) if ( n%j = 0 ) flag=false ; return flag ;演示例演示例5.12程序程序bool prime( int n ) int j ; for ( j = n / 2 ; j = 2 ; j- ) if ( n%j =

27、0 ) return false ; return true ;bool prime( int); void main( ) int i ,x; printf(“input x:”); scanf(“%d”,&x); for ( i = 2 ;i A读字符读字符=w W是运算符是运算符+-*/WA = A + BA = A - BA = A * BA = A / B显示显示 A读数读数=B读字符读字符=W结束结束void main() float a,b; char w; scanf(%f,&a); scanf(%c,&w); while(w=+)|(w=-)|(w=*

28、)|(w=/) scanf(%f,&b); switch(w) case +: a=a+b; break; case -: a=a-b; break; case *: a=a*b; break; case /: a=a/b; printf(%.2f ,a); scanf(%c,&w); 演示例演示例5.13程序程序n编一个函数编一个函数convert,从终端读入一个十六进,从终端读入一个十六进制数,把它翻译成十进制。制数,把它翻译成十进制。若翻译正确,则若翻译正确,则convert返回返回true否则若翻译错误,则否则若翻译错误,则convert返回返回falseDX.Dn十六

29、进制数的形式十六进制数的形式 AB.1f . ef 12f 12f.n主程序中主程序中若若convert()返回真值,则说明翻译成功返回真值,则说明翻译成功若若intflag为真,打印整数值(为真,打印整数值(n中保存)中保存)否则,打印实数数值(否则,打印实数数值(f中保存)中保存)打印打印“successful!”否则打印否则打印“fail”mainconvert()打印打印“失败失败”打印打印 “成功成功”结束结束intflag打印整数打印整数打印浮点数打印浮点数n判断字符是否是十六进制数字对应的字符判断字符是否是十六进制数字对应的字符bool isdigit(char ch)retur

30、n (ch=0)&(ch=A)&(ch=a)&(ch=0)&(ch=A)&(chch 翻译整数部分翻译整数部分返回返回翻译小数部分翻译小数部分读读(ch)读读(ch) ch=空白空白ch= r或或n返回真返回真合并整数,小数部分合并整数,小数部分,返回操作返回操作f=n+fn = 0n = n*16+value(ch)读读(ch) ch是数字是数字ch= .f = 0 ; g = 1.0读读(ch)ch是数字是数字f=f+g*value(ch)读读(ch)g = g/16返回假返回假/*PROGRAM convert hexadecimal number

31、 to decimal number*/#include stdio.h#define radix 16/确定是哪种进制确定是哪种进制int n;/全局保存整数全局保存整数float f;/全局保存实数全局保存实数bool intflag;/标志是否是整数标志是否是整数int calculate_char(char ch);/进算十六进制字符对应的数值进算十六进制字符对应的数值bool isdigit(char ch);/判断字符是否是十六进制字符判断字符是否是十六进制字符bool convert();/翻译函数翻译函数void main()if(convert()if(intflag)pri

32、ntf(%d n,n);elseprintf(%f n,f);printf(Successful!n);elseprintf(Fail!n);/* 翻译函数翻译函数 */bool convert() char ch; float g; intflag=true; ch=getchar();/*滤掉前导空白字符滤掉前导空白字符*/while(ch= )ch=getchar();/*翻译整数部分翻译整数部分*/n=0;while( isdigit(ch) )n=n*radix + calculate_char(ch) ;ch=getchar(); if(ch=.)intflag=false;/*翻

33、译小数部分翻译小数部分*/f=0.0;g=1.0;ch=getchar();while( isdigit(ch) )g=g/radix;f=f+g* calculate_char(ch) ;ch=getchar(); /*整数部分与小数部分合并整数部分与小数部分合并*/f=f+n; if(ch=r|ch=n)return true; elsereturn false;演示例演示例5.14-1程序程序n前导空白字符部分;前导空白字符部分;n整数部分;整数部分;n小数点;小数点;n小数部分;小数部分;解法二解法二 状态图状态图(矩阵矩阵)方法方法 DX.DS0S1S2S3S4其他字符其他字符S0S

34、2S1S4数字数字小数点小数点小数点小数点数字数字数字数字空白字符空白字符空白字符空白字符其他字符其他字符小数点小数点空白字符空白字符其他字符其他字符S3数数字字空白字符空白字符其他字符其他字符小数点小数点n状态矩阵状态矩阵 数字数字sort=0小数点小数点sort=1空白字符空白字符sort=2其他字符其他字符sort=3S0拼整数拼整数/S1/S2/S0Err1/S4S1拼整数拼整数/S1/S2整数整数 结束结束/S4Err2/S4S2拼小数拼小数/S3Err3/S4实数实数 结束结束/S4Err4/S4S3拼小数拼小数/S3Err3/S4合并合并 结束结束/S4Err4/S4处理前导字符

35、状态处理前导字符状态(S0);处理整数部分状态处理整数部分状态(S1);处理小数点部分状态处理小数点部分状态(S2);处理小数部分状态处理小数部分状态(S3);处理错误状态和结束状态处理错误状态和结束状态 (S4)开始开始初始化:初始化: s = 0;n = 0;f = 1.0 ; g = 1;s4结束结束形成形成 sort读读(ch)s01230错误错误(3);s = 4合并整数、小数;合并整数、小数;s=4sort12拼小数拼小数; s = 33错误错误(4);s = 40s = 2;sort12拼整数拼整数; s = 13错误错误(1);s = 40s = 2s=4sort12拼整数拼整

36、数; s = 13错误错误(2);s = 40错误错误(3);s = 4s=4sort12拼小数拼小数; s = 33错误错误(4);s = 4/* 十六进制翻译函数十六进制翻译函数2 */#include stdio.h#define radix 16int n ; /* 整数部分整数部分 */float f ; /* 小数部分小数部分 */bool intflag, errflag ; /* 整数标志、错误标志整数标志、错误标志 */char ch ; /* 当前读入字符当前读入字符 */int num ;/* ch 对应的数值对应的数值 */float g ;/* 翻译小数部分权值翻译小

37、数部分权值 */int s , sort ;/* 状态、字符类状态、字符类 */void com_integer(void); /* 翻译整数部分翻译整数部分 */void com_real(void);/* 翻译小数部分翻译小数部分 */int sort_char(char );/*字符分类、形成字符分类、形成 sort */int calculate_char(char); /*计算合法字符的数值计算合法字符的数值*/void com_error(int ); /*错误处理错误处理*/void com_integer(void) /* 翻译整数部分翻译整数部分 */n = n*radix+

38、num; void com_real(void) /* 翻译小数部分翻译小数部分 */g = g/radix;f = f+num*g; bool convert2 ( ) /* 状态矩阵方法翻译函数状态矩阵方法翻译函数 */intflag = true ; /* 首先假设翻译的是整数首先假设翻译的是整数 */errflag = true ; /* 首先假设翻译正确首先假设翻译正确 */ s = 0; /* 状态初值状态初值 */ g = 1.0 ; /* 小数部分的权值小数部分的权值 */ n = 0; /* 整数单元整数单元 */ f = 0; /* 实数单元实数单元 */ while (

39、s4 ) ch=getchar();/读入字符读入字符 sort=sort_char(ch);/为字符分类为字符分类 if(sort=0)num=calculate_char(ch);/字符对应的数值字符对应的数值switch ( s )/状态操作状态操作 case 0: switch (sort) case 0: com_integer(); 遇到数字翻译整数遇到数字翻译整数 s = 1 ; break ; case 1: s = 2 ; 遇到小数点遇到小数点 break ; case 2: break ; 前导字符前导字符 case 3: com_error(1); break;case

40、1: switch (sort) case 0: com_integer(); 翻译整数翻译整数 break ; case 1: s = 2; 翻译整数时遇到小数点翻译整数时遇到小数点 break ;case 2: s = 4; 翻译整数时遇到空白字符翻译整数时遇到空白字符 break ; case 3: com_error(2); 翻译整数遇其它字符翻译整数遇其它字符 break;case 2: switch ( sort ) case 0: com_real(); 翻译小数翻译小数 s = 3 ; break ; case 2: s = 4; 翻译整数时遇到空白字符翻译整数时遇到空白字符

41、intflag = false ; break ; case 1: com_error(3); 存在两个以上小数点存在两个以上小数点 break; case 3: com_error(4); 遇到非法字遇到非法字 break; case 3: switch ( sort ) case 0: com_real(); 翻译小数翻译小数 break ; case 2: s = 4; 翻译整数时遇到空白字符翻译整数时遇到空白字符 intflag = false ; f = n+f ; break ; case 1: com_error(3); 存在两个以上小数点存在两个以上小数点 break ; ca

42、se 3: com_error(4); 翻译小数遇非法字符翻译小数遇非法字符 break; /* switch( s ) */ /* while( s=0| n0)r+=(n%10)!n=n/10return rr+=st=n%10while(t0)s=1s=s*tt=t-1int f(int n)int r,s,t;r=0;while(n/100|n0)t=n%10;s=1;while(t0)s=s*t;t=t-1;r=r+s;n=n/10;return r; n=2;j-)prime(int m)结束结束return falsem%j= 0return true/* PROGRAM wri

43、teprime */#include stdio.hbool prime( int m ) int j ; for ( j = m / 2 ; j = 2 ; j- ) if ( m%j = 0 )return false ; return true ;int u,v,n;void main( ) n=0; u=3; v=u+2; while(n10)if ( prime(u)&prime(v)&(v-u)=2 ) printf(%5d %5dn , u , v ) ;n+; u+; v+; H(int x,int n)结束结束return 1n= 0计算计算Hn(x)retu

44、rn 2*xn= 1返回返回Hn(x)的值的值h0=1; h1=2*x for(i=2;i=n;i+)h2=2*x*h1-2*(i-1)*h0h0=h1h1=h2return h2int H(int x,int n)int h0,h1,h2;if(n=0)return 0;if(n=1)return 2*x; h0=1;h1=2*x;for(int i=2;i=n;i+)h2=2*x*h1-2*(i-1)*h0;h0=h1;h1=h2;return h2;want()结束结束x=0;y=0;z=0;x+x=?()x-y+y-z+z+ch!=r&ch!=nch=getchar()x,y,

45、z某个某个不是零不是零return falsereturn truebool want()int x=0,y=0,z=0; char ch;doch=getchar();switch(ch)case:x+;break;case:x-;break;case:y+;break;case:y-;break;case(:z+;break;case):z-; break;while(ch!=r&ch!=n);if(x!=0|y!=0|z!=0)if(x!=0)printf( is wrong!n);if(y!=0)printf( is wrong!n);if(z!=0)printf( is wr

46、ong!n); return false;else return true;main结束结束打印打印big*B+mid*M+sm*S=SUMfor(big=0;big=SUM/B;big+)for(mid=0; mid=SUM/M;mid+)#include stdio.h#define SUM 100#define B 3#define M 2#define S 0.5void main() int big,mid,sm; for(big=0;big=SUM/B;big+) for(mid=0;mid=SUM/M;mid+)sm=SUM-big-mid;if(big*B+mid*M+sm*S

47、=SUM) printf(big=%d,mid=%d,small=%dn, big,mid,sm);int fact ( int n ; int ans ) ans=1; WHILE n1 DO ans=n*ans; n=n-1 参数声明之间用逗号分参数声明之间用逗号分隔隔循环语句错误循环语句错误函数没有返回语句函数没有返回语句int fact ( int n) int ans=1; while(n0) ans=ans*n; n=n-1 return ans;for(i=1;i5;i+)打印上半部分打印上半部分for(i=5;i8;i+)打印下半部分打印下半部分A B C D E F G A

48、B C D E F G A A B C D E F GB C D E F G A AB C D E F G B C D E F G A A B B BB B B C D E F GC D E F G A BA BC D E F G C D E F G A BA B C C C C CC C C C C D E F GD E F G A B CA B CD E F G D E F G A B CA B C D D D D D D DD D D D D D D E F GE F G A B C DA B C DE F GE F G A B C DA B C D C C C C CC C C C C F G F G A B C D EA B C D EF GF G A B C D EA B C D E B B BB B B G G A B

温馨提示

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

评论

0/150

提交评论