C语言编程入门教程学习教案_第1页
C语言编程入门教程学习教案_第2页
C语言编程入门教程学习教案_第3页
C语言编程入门教程学习教案_第4页
C语言编程入门教程学习教案_第5页
已阅读5页,还剩429页未读 继续免费阅读

下载本文档

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

文档简介

1、会计学1C语言编程入门教程语言编程入门教程第1页/共434页计算机语言第2页/共434页第3页/共434页第4页/共434页第5页/共434页高级语言源程序 机器指令目的程序结果编译程序第6页/共434页执行效率高。第7页/共434页第8页/共434页第9页/共434页axby c z (两个函数组成)353555第10页/共434页第11页/共434页第12页/共434页第13页/共434页第14页/共434页当项数较多时该算法不适用s=i110第15页/共434页01123364105该算法通用,是好算法第16页/共434页第17页/共434页1 1)若若i10i10转转, ,否则转否则转

2、输出输出s s的值的值特点:通俗易懂、文字冗长、含义不大严格。第18页/共434页第19页/共434页s+i s i+1 i S+i s S+i s i10 输出s 0 s 1 i 直观形象,易于理解,次序清楚YN第20页/共434页第21页/共434页ABab第22页/共434页pABab成立不成立第23页/共434页输入x X=0? 10000y 1/xy 输出y YN第24页/共434页当型循环直到型循环P1AAP2aabbYYNN第25页/共434页第26页/共434页 0 s 1 i S+i s i+1 i i10 输出s 顺序结构循环结构yn第27页/共434页ABP成立不成立AB

3、AB当P1直到P2顺序结构选择结构循环结构第28页/共434页输入x X=0?是否10000y 1/xy 输出y 第29页/共434页0 s 1 i 输出s 1 i 0 s s+i s i+1 i s+i s i+1 i 输出s 第30页/共434页第31页/共434页第32页/共434页第33页/共434页第34页/共434页3第35页/共434页程序中何时使用常量?何时使程序中何时使用常量?何时使用变量?用变量?第36页/共434页以以 0 x0 x 开 头 的 整 数 , 如 :开 头 的 整 数 , 如 :0 x10,0 xff,0 x2a0 x10,0 xff,0 x2a等。等。第3

4、7页/共434页21474836472147483647第38页/共434页第39页/共434页类型?类型?第40页/共434页第41页/共434页3083081010308308第42页/共434页第43页/共434页第44页/共434页据一个字节据一个字节第45页/共434页若若int x; char c;int x; char c;则则x=a; c=97; x=97; x=a; c=97; x=97; c=a; c=a; 都允许都允许a97第46页/共434页第47页/共434页C C语言中专门的字符串变量,语言中专门的字符串变量,可用字符数组存放(以后介绍)。可用字符数组存放(以后介绍

5、)。第48页/共434页3第49页/共434页第50页/共434页第51页/共434页算术表达式的值算术表达式的值第52页/共434页第53页/共434页结合性。结合性。基本算术运算符都是基本算术运算符都是左结合性左结合性。第54页/共434页 a+b a-b a+b a-b x+y x-ya+b/a-b ?(a+b)/(a-b)2*x*x+3*x-1 (*不能省)(a+b)/(a-b)/(x+y)/(x-y)(a+b)/(a-b)/(x+y)/(x-y)(a+b)/(a-b)/(x+y)*(x-y)第55页/共434页第56页/共434页c=(long)a*b/100;c=(long)(a*

6、b)/100;第57页/共434页j=+i; j=?j=+i; j=?j=i+; j=i+; j=?j=?第58页/共434页第59页/共434页556506 7-26-1第60页/共434页第61页/共434页内存单元中。内存单元中。第62页/共434页不变原则。不变原则。int a=A;int a=A;第63页/共434页第64页/共434页值。值。第65页/共434页第66页/共434页第67页/共434页第68页/共434页第69页/共434页逗号运算符的优先级最低逗号运算符的优先级最低, ,且是且是左结合性。左结合性。逗号运算符只起到连接作用,没逗号运算符只起到连接作用,没有实际操作

7、有实际操作。第70页/共434页第71页/共434页第72页/共434页第73页/共434页 第74页/共434页第75页/共434页第76页/共434页a=125,b= 453,c=65535a=125,b= 453,c=65535第77页/共434页第78页/共434页第79页/共434页第80页/共434页第81页/共434页第82页/共434页第83页/共434页第84页/共434页第85页/共434页UIR1R2R3第86页/共434页I=U/R1+U/R2+U/R3;I=U/R1+U/R2+U/R3;int U=220,R1=30,R2=60,R3=45;int U=220,R1=

8、30,R2=60,R3=45;float I;float I;printf(“n printf(“n I=%f”,I);I=%f”,I);第87页/共434页 第88页/共434页第89页/共434页第90页/共434页第91页/共434页第92页/共434页第93页/共434页a=123,b=150,c=23a=123,b=150,c=23第94页/共434页 printf(“n I=%f”,I); printf(“n I=%f”,I); 第95页/共434页第96页/共434页第97页/共434页1/x 1/x 当当x0 x0时时 10000 10000 当当x=0 x=0时时第98页/共

9、434页ifif语句的最常见形式为:语句的最常见形式为: if(if(关系表达式关系表达式) )语句语句1 1; else else 语句语句2 2;如:如: if(if(x!=0 x!=0) y=1/x;) y=1/x; else y=10000; else y=10000;其中其中 x!=0 x!=0 就是一个关系表达式就是一个关系表达式 !=!= 就是一个关系运算符就是一个关系运算符第99页/共434页5 51 1 关系运算符和关系表达式关系运算符和关系表达式1 1、关系运算符、关系运算符用于进行比较运算的运算符。共有六种:用于进行比较运算的运算符。共有六种: = = = != = =

10、= !=优先级与结合性:优先级与结合性: 前前4 4种大于后两种。种大于后两种。 低于算术运算符而高于赋值运算符。低于算术运算符而高于赋值运算符。 左结合性。左结合性。第100页/共434页2 2、关系表达式、关系表达式一般形式:一般形式:表达式关系运算符表达式表达式关系运算符表达式 如:如:ab a+bb+cab a+bb+c 经过关系运算后最终有一个值经过关系运算后最终有一个值-关系表达式关系表达式的值的值。 关系表达式的值只有关系表达式的值只有 0 0( (假假)或)或1 1(真真)第101页/共434页例:例:设设 a=2, b=4, c=1 a=2, b=4, c=1 计算以下关系表

11、达式计算以下关系表达式的值:的值: ab ab a+bb+ca+bb+cab ab 可以是字符表达式可以是字符表达式(x=2x=2)(y=5) (y=5) 可以是赋值表达式可以是赋值表达式(a(bc) (a(bc) 甚至可以是关系表达式甚至可以是关系表达式ab= =bcab= =byx+zyxy=yzxy=yz=xzyz=xzyxz yxz (x=y-2)z+1=x+y(x=y-2)z+1=x+ya=x+y=x+zx+1a=x+y=x+zx+1第103页/共434页5 52 2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式有时,只用一个简单的关系表达式无法完整地有时,只用一个简单的关系表达式无

12、法完整地表达一个条件,如:表达一个条件,如: y= y= 其中的条件需要用逻辑表达式来表达:其中的条件需要用逻辑表达式来表达: x!=0 &a!=0 x!=0 &a!=0 &就是一种逻辑运算符。就是一种逻辑运算符。1/x+1/a 1/x+1/a 当当x0,a0 x0,a0时时 10000 10000 其它其它第104页/共434页1 1、逻辑运算符、逻辑运算符& & 逻辑与逻辑与 两个操作数都为真时两个操作数都为真时&运算结果为真。运算结果为真。| 逻辑或逻辑或 两个操作数之一为真时即为真。两个操作数之一为真时即为真。! ! 逻辑非逻辑非 (单目

13、运算单目运算) 操作数为真(操作数为真(假假)时为假()时为假(真真)。)。 如:如:若若 a=2, b=3, c=0 a=2, b=3, c=0 则:则: ab&bc ab&bc 0 0 ab|bc ab|bc 1 1 !(ab) !(ab) 0 0第105页/共434页优先级优先级(由高到低):(由高到低):! ! 逻辑非逻辑非算术运算符算术运算符关系运算符关系运算符&逻辑与逻辑与|逻辑或逻辑或赋值运算符赋值运算符结合性:结合性:左结合性左结合性第106页/共434页2 2、逻辑表达式、逻辑表达式 实际上,前面所举例子即为逻辑表达式实际上,前面所举例子即为逻辑表达式

14、: ab&bc ab|bc !(ab)ab&bc ab|bc !(a=b=c a=b=c 5=4=35=4=3a=b&b=ca=b&b=ca=0&b!=0 | a!=0&b=0a*b=0a*b=0&a+b!=0第110页/共434页第111页/共434页5 53 if3 if语句语句1 1、ifif语句的三种形式语句的三种形式 if if(表达式表达式)语句;)语句; 有一分支为空。有一分支为空。 scanf(“%d”,&score);scanf(“%d”,&score); if( if(score=60score=60)

15、 printf(“pass”) printf(“pass”); ; 第112页/共434页 if if(表达式表达式)语句)语句1 1; else else 语句语句2 2; if(if(x!=0 x!=0) y=1/x;) y=1/x; else y=10000; else y=10000;第113页/共434页 if if(表达式表达式1 1)语句)语句1 1; else if(else if(表达式表达式2 2) )语句语句2 2; else if(else if(表达式表达式3 3) )语句语句3 3; else else 语句语句n n; if(score=100) printf(“

16、A”);if(score=100) printf(“A”); else if(score=90) printf(“B”); else if(score=90) printf(“B”); else if(score=80) printf(“C”); else if(score=80) printf(“C”); else if(score=70) printf(“D”); else if(score=70) printf(“D”); else if(score=60) printf(“E”); else if(score=60) printf(“E”); else printf(“F”); els

17、e printf(“F”);第114页/共434页 对于:对于: 1/x 1/x 当当x0 x0时时10000 10000 当当x=0 x=0时时一般用:一般用:if(x!=0) y=1/x;if(x!=0) y=1/x;else y=10000;else y=10000;也可用:也可用:y=10000;y=10000;if(x!=0) y=1/x;if(x!=0) y=1/x;y=y=? ?y=1/x;y=1/x;if(x=0)y=10000if(x=0)y=10000第115页/共434页 例:(习题)例:(习题): :x (x1)2x-1 (1x10)10) 3x-11 (x10)y=y

18、=第116页/共434页 main()main() float x,y; float x,y; scanf(“%f”,&x); scanf(“%f”,&x); if(x1) y=x;if(x1) y=x; else if(x10) y=2 else if(x10) y=2* *x-1;x-1; else y=3 else y=3* *x-11;x-11; printf(“n y=%f”,y); printf(“n y=%f”,y); 第117页/共434页说明:说明:语句中的表达式可以是任意表达式:语句中的表达式可以是任意表达式: if(if(x x) y=1/x;) y=1/

19、x; else y=10000; else y=10000; 一个一个ifif结构不可分割:结构不可分割: if(x) y=1/x;if(x) y=1/x; z=10;z=10; else y=10000; else y=10000;一个分支中包含多个语句时,要用一个分支中包含多个语句时,要用 : if(a0) if(amax) max=b; if(bmax) max=b; if(cmax) max=c; if(cmax) max=c; printf(“n max=%d”,max); printf(“n max=%d”,max); 第120页/共434页 例:例:从键盘输入三个整数到变量从键盘

20、输入三个整数到变量a,b,c,a,b,c,要求按要求按从大到小的顺序输出。从大到小的顺序输出。 两种典型算法:两种典型算法: 枚举法枚举法(将各种可能的排列枚举出来)。(将各种可能的排列枚举出来)。 换位法换位法(将(将a,b,ca,b,c中的数据换位)。中的数据换位)。第121页/共434页换位法换位法main()main() int a,b,c,t; int a,b,c,t; scanf(“%d,%d,%d”,&a,&b,&c); scanf(“%d,%d,%d”,&a,&b,&c); if(ab) t=a; a=b; b=t;if(ab)

21、t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; if(b=80)if(score=80) if(score=90) printf(“A”);if(score=90) printf(“A”); else printf(“B”); else printf(“B”);else else if(score=60) printf(“C”);if(score=60) printf(“C”); else printf(“D”); else printf(“D”);注意注意elseelse与与if

22、if的匹配的匹配第123页/共434页3 3、条件运算符、条件运算符如果两个分支的内容都是给同一个变量赋值如果两个分支的内容都是给同一个变量赋值,则可用简单的条件运算符处理:,则可用简单的条件运算符处理: if(ab) max=a;if(ab) max=a; else max=b; else max=b;可用:可用: max=max=ab ab ? ? a a : : b b; ;赋值运算符右边为一条件表达式。赋值运算符右边为一条件表达式。条件表达式的一般形式:条件表达式的一般形式: 表达式表达式1 1 ? 表达式表达式2 2 : 表达式表达式3 3第124页/共434页条件表达式的执行过程:

23、条件表达式的执行过程: ab ab ? ? a a : : b b 优先级:优先级:低于关系运算符,高于赋值运算符。低于关系运算符,高于赋值运算符。结合性结合性:右结合性。:右结合性。 表达式表达式1 1条件表达式条件表达式取表达式取表达式3 3的值的值条件表达式条件表达式 取表达式取表达式2 2的值的值 非00第125页/共434页 例:求例:求a,b,ca,b,c中的最大值:中的最大值:max= ab max= ab ? ? (ac (ac? ?a a: :c) c) : : (bc (bc? ?b b: :c) ;c) ;第126页/共434页5 54 switch4 switch语句(

24、语句(多分支多分支) 适用于根据一个表达式的值就可确定走适用于根据一个表达式的值就可确定走哪个分支的情况。哪个分支的情况。 switchswitch(表达式表达式) 常量表达式常量表达式1 1: 语句语句1 1 常量表达式常量表达式2 2: 语句语句2 2 常量表达式常量表达式n n: 语句语句n n default default: 语句语句n+1n+1 第127页/共434页例:成绩分档:例:成绩分档:switch(switch(score/10score/10) ) case 10: printf(“A”); case 10: printf(“A”); case 9: printf(“B

25、”); case 9: printf(“B”); case 8: printf(“C”); case 8: printf(“C”); case 7: printf(“E”); case 7: printf(“E”); case 6: printf(“F”); case 6: printf(“F”); default : printf(“G”); default : printf(“G”); 注:应使用注:应使用break.break.第128页/共434页第129页/共434页5 55 5 程序举例程序举例 ( (习题习题5.10) 5.10) 有有4 4个圆塔,圆心分别为:(个圆塔,圆心分别

26、为:(2 2,2)2),(-2-2,2 2),(),(-2-2,-2-2),(),(2 2,-2-2),圆半),圆半径为径为1 1。这。这4 4个塔的高度为个塔的高度为10m,10m,塔以外无建筑塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为(塔外的高度为0 0)。)。第130页/共434页算法设计:算法设计: 条件条件“在某一圆内在某一圆内” ” : “ “在圆在圆1 1内或在圆内或在圆2 2内或在圆内或在圆3 3内或在圆内或在圆4 4内内” 若设变量若设变量c1c1、c2c2、c3c3、c4c4分别代表是否在相应分别代表是否在相应

27、的圆内,则以上条件为:的圆内,则以上条件为: c1|c2|c3|c4c1|c2|c3|c4 10 在某一圆内在某一圆内0 在圆外在圆外 (x,yx,y) h=h=第131页/共434页c1=(x-2)c1=(x-2)2 2+(y-2)+(y-2)2 211c2=(x+2)c2=(x+2)2 2+(y-2)+(y-2)2 211c3=(x+2)c3=(x+2)2 2+(y+2)+(y+2)2 211c4=(x-2)c4=(x-2)2 2+(y+2)+(y+2)2 211第132页/共434页main()main() int h,c1,c2,c3,c4; int h,c1,c2,c3,c4; fl

28、oat x,y; float x,y; scanf(“%f%f”,&x,&y); scanf(“%f%f”,&x,&y); c1=(x-2) c1=(x-2)* *(x-2)+(y-2)(x-2)+(y-2)* *(y-2)=1;(y-2)=1; c2=(x+2) c2=(x+2)* *(x+2)+(y-2)(x+2)+(y-2)* *(y-2)=1;(y-2)=1; c3=(x+2) c3=(x+2)* *(x+2)+(y+2)(x+2)+(y+2)* *(y+2)=1;(y+2)=1; c4=(x-2) c4=(x-2)* *(x-2)+(y+2)(x-2)

29、+(y+2)* *(y+2)=1;(y+2)=1; if(c1|c2|c3|c4) h=10;if(c1|c2|c3|c4) h=10; else h=0; else h=0; printf(“n h=%d”,h); printf(“n h=%d”,h); 第133页/共434页第134页/共434页6 62 2 用用gotogoto语句和语句和ifif语句构成循环语句构成循环例例: : 对于计算对于计算 s=1+2+3+4+5+6+7+8+9+100 s1 is+i s i+1 ii10 输出syn第135页/共434页 s=0;s=0; i=1; i=1; lable:lable:s+=i

30、;s+=i; i+; i+; if(i=10) if(i=10) goto lablegoto lable; ; printf(“%d”,s) printf(“%d”,s) ;语句标号 无条件转向语句 goto goto 语句可以构语句可以构造循环,但不主张用造循环,但不主张用,因为它容易破坏结,因为它容易破坏结构化程序设计。构化程序设计。 goto 语句可以构造循环,但不主张用,因为它容易破坏结构化程序设计。第136页/共434页 6 63 while3 while语句语句 whilewhile语句是专门用于实现循环控制的语语句是专门用于实现循环控制的语 句之一。句之一。 其一般形式为:其一

31、般形式为: while (while (表达式表达式) ) 语句语句 含义:当表达式的值为非含义:当表达式的值为非0 0时,执行循环体,否时,执行循环体,否则执行后续语句。则执行后续语句。语句关键 表达循环条件的表达式循环体 语句关键字第137页/共434页 执行过程执行过程: : while (while (表达式表达式) ) 语句语句 表达式循环体0非0第138页/共434页i1 0? s=0 i=1s=s+ii=i+1例:用例:用whilewhile语句实现前面算法:语句实现前面算法:main()main() int i=1,s=0; int i=1,s=0; while(i=10)wh

32、ile(i=10) s=s+i; s=s+i; i+; i+; printf(“n %d”,s); printf(“n %d”,s); 注意与注意与ifif语句的区别。语句的区别。循环体中要有使循环条件趋于成立的条件循环体中要有使循环条件趋于成立的条件yn第139页/共434页 while(i=10)while(i=10) s=s+i; s=s+i; i+; i+; 可简写为:可简写为: while(i=10) s+=i+;while(i=10) s+=i+;第140页/共434页非0(真)0(假)表达式循环体 6 64 do-while4 do-while语句语句 do-whiledo-wh

33、ile语句主要用于实现直到型循环。语句主要用于实现直到型循环。 其一般形式为:其一般形式为: dodo 循环体循环体 while(while(表达式表达式););执行过程:执行过程:第141页/共434页真s=0i=1i10?s=s+ii=i+1假例:用例:用do-whiledo-while语句实现前面算法:语句实现前面算法: main()main() int i=1,s=0; int i=1,s=0; dodo s+=i+; s+=i+; while(i=10);while(i=10); printf(“n%d”,s); printf(“n%d”,s); 注意注意与与whilewhile语句

34、的区别。语句的区别。 第142页/共434页假表达式2求解表达式1循环体求解表达式3真 6 65 for 5 for 语句语句 forfor语句是一种使用最为灵活,语句是一种使用最为灵活,并且是用得最多的循环控制语句,并且是用得最多的循环控制语句,其一般形式为:其一般形式为: for(for(表达式表达式1;1;表达式表达式2;2;表达式表达式3)3) 循环体循环体大体含义:大体含义: 对于()的情况执行循环体内容对于()的情况执行循环体内容。第143页/共434页例:用例:用forfor语句实现前面的算法:语句实现前面的算法:s=0;s=0;for(i=1;i=10;i+) s+=i; fo

35、r(i=1;i=10;i+) s+=i; 标准形式标准形式表达式1 表达式2表达式3循环体可以理解:可以理解: 循环变量循环变量i i从初值从初值1 1开始到终值开始到终值1010,步长为,步长为1 1,重复执行,重复执行循环体。循环体。第144页/共434页forfor语句的常见变化:语句的常见变化: s=0; i=1;s=0; i=1; for(;i=10;i+)s+=i; for(;i=10;i+)s+=i; s=0;s=0; f o r ( i = 1 ; i = 1 0 ; ) s + = i + + ; f o r ( i = 1 ; i = 1 0 ; ) s + = i + +

36、 ; s=0;i=1; s=0;i=1; f o r ( ; i = 1 0 ; ) s + = i + + ; f o r ( ; i 1 0 ) i f ( i 1 0 ) break;break; s=10;i=10; s=10;i=10; for(;-i;) s+=i; for(;-i;) s+=i;省略表达式省略表达式2 2表达式表达式2 2是任是任意表达式意表达式第146页/共434页 s=0; s=0; for(i=1,j=10;ij;i+,j-) s+=i+j; for(i=1,j=10;ij;i+,j-) s+=i+j; 1 2 3 4 5 6 7 8 9 10 1 2 3

37、4 5 6 7 8 9 10在程序设计中不要过分追求它的多变性在程序设计中不要过分追求它的多变性ij用逗号表达式用逗号表达式第147页/共434页例:例:求求n! n!=1n! n!=1* *2 2* *3(n-1)3(n-1)* *n n 参照累加求和参照累加求和main()main() int i,n=5 int i,n=5,s=1;s=1; for(i=1;i=n;i+)s for(i=1;i=n;i+)s* *=i;=i; printf(“n s=%d”,s); printf(“n s=%d”,s); 注意注意s s的初值。的初值。注意当注意当n n较大时的情况。较大时的情况。求和与连

38、乘都是最常用的算法,要熟练掌握。求和与连乘都是最常用的算法,要熟练掌握。 第148页/共434页例:求自然数例:求自然数1-1001-100中能被中能被3 3整除的数之和。整除的数之和。 main()main() int i,s=0; int i,s=0; printf(“n %d”,s); printf(“n %d”,s); 求能被求能被3 3整除但不被整除但不被7 7整除的数之和?整除的数之和?for(i=1;i=100;i+) s+=i;for(i=1;i=100;i+) if(i%3=0)s+=i;for(i=3;i=100;i+=3) s+=i; for(i=3;i=100;i+=3

39、) if (i%7)s+=i; 第149页/共434页例:求任意例:求任意100100个数中的最大值。个数中的最大值。 main()main() int i,a,max; int i,a,max; max=?max=? for(i=1;i=100;i+) for(i=1;imax) max=a;if(amax) max=a; printf(“n max=%d”,max); printf(“n max=%d”,max); 循环体中没有引用循环变量。循环体中没有引用循环变量。i i的作用?的作用? 求任意个数中的最大值?求任意个数中的最大值?for(i=1; ;i+)for(i=1; ;i+) i

40、f(a=-9999)break;if(a=-9999)break;max=-32768;max=-32768;第150页/共434页外重循环内重循环执行200次要掌握多重循环执行的全过程6 66 6 循环的嵌套循环的嵌套 循环体内又包含另一个完整的循环结构循环体内又包含另一个完整的循环结构( (多重多重循环循环) )。 for(i=1;i=10;i+)for(i=1;i=10;i+) for(j=1;j=20;j+) for(j=1;j=20;j+) s+=i+j; s+=i+j; 第151页/共434页以上多重循环结构可以简写为:以上多重循环结构可以简写为: for(i=1;i=10;i+)

41、for(i=1;i=10;i+) for(j=1;j=20;j+) for(j=1;j=20;j+) s+=i+j; s+=i+j;第152页/共434页例:找出行号乘以列号等于例:找出行号乘以列号等于100100的座位。的座位。 main()main() int i,j; int i,j; for(i=1;i=30;i+) for(i=1;i=30;i+) for(j=1;j=20;j+) for(j=1;j=20;j+) if(i if(i* *j=100)j=100) printf(“n%d,%d”,i,j); printf(“n%d,%d”,i,j); 注意循环的关系第153页/共43

42、4页例:百钱买百鸡问题。例:百钱买百鸡问题。 给定给定100100块钱,要求正好买块钱,要求正好买100100只鸡,已知公鸡只鸡,已知公鸡5 5元元/ /只,母鸡只,母鸡3 3元元/ /只,小鸡只,小鸡1 1元元/3/3只,问公鸡、母只,问公鸡、母鸡和小鸡应各买多少只?鸡和小鸡应各买多少只?若考虑用方程组:若考虑用方程组: x+y+z=100 x+y+z=100 5x+3y+z/3=100 5x+3y+z/3=100 是一多解问题。是一多解问题。第154页/共434页用测试法求解的程序:用测试法求解的程序: main()main() int x,y,z; int x,y,z; for(x=1;

43、x=100;x+) for(x=1;x=100;x+) for(y=1;y=100;y+) for(y=1;y=100;y+) for(z=1;z=100;z+) for(z=1;z=100;z+) if(x+y+z=100&5 if(x+y+z=100&5* *x+3x+3* *y+z/3.0=100)y+z/3.0=100) printf(“n%d,%d,%d”,x,y,z); printf(“n%d,%d,%d”,x,y,z); 第155页/共434页程序可进一步简化为:程序可进一步简化为: main()main() int x,y,z; int x,y,z; for(x

44、=1;x=20;x+) for(x=1;x=20;x+) for(y=1;y=33;y+) for(y=1;y=33;y+) z=100-x-y; z=100-x-y; if(5 if(5* *x+3x+3* *y+z/3.0=100)y+z/3.0=100) printf(“n%d,%d,%d”,x,y,z); printf(“n%d,%d,%d”,x,y,z); 用测试法求解问题的典型例子用测试法求解问题的典型例子第156页/共434页测试法求解的程序设计有两个要点:测试法求解的程序设计有两个要点: 通过循环列出所有可能的解。通过循环列出所有可能的解。 对所有列出的可能的解进行条件测试。对

45、所有列出的可能的解进行条件测试。第157页/共434页例:判断一个数例:判断一个数m m是否为素数。是否为素数。main()main() int i,m; int i,m; scanf(“%d”,&m); scanf(“%d”,&m); for(i=2;im;i+) if(m%i=0)break;for(i=2;im;i+) if(m%i=0)break; if(i=m) if(i=m) printf(“n %d is a prime”,m); printf(“n %d is a prime”,m); else else printf(“n %d is not a prime”

46、,m); printf(“n %d is not a prime”,m); 用测试法求解用测试法求解第158页/共434页例:(习题)例:(习题) 打印出所有的打印出所有的“水仙花数水仙花数”,所谓,所谓“水仙水仙花数花数”是指一个三位数,其各位数字的立方和是指一个三位数,其各位数字的立方和等于该数本身。如:等于该数本身。如:153153是一水仙花数,因为是一水仙花数,因为 153=1153=13 3+5+53 3+3+33 3。第159页/共434页main()main() int i,j,k,n; int i,j,k,n; for(n=100;n=999;n+) for(n=100;n=9

47、99;n+) i=? i=? j=? j=? k=? k=? if(i if(i* *i i* *i+ji+j* *j j* *j+kj+k* *k k* *k=n)k=n) printf(“n%d”,n); printf(“n%d”,n); 通过循环列出通过循环列出n n的所有可能的范围的所有可能的范围 i=n/100;k=n%10;j=n/10%10;第160页/共434页main()main() int i,j,k,n; int i,j,k,n; for(i=1;i=9;i+) for(i=1;i=9;i+) for(j=0;j=9;j+) for(j=0;j=9;j+) for(k=0

48、;k=9;k+) for(k=0;k=9;k+) n=in=i* *100+j100+j* *10+k;10+k; if(i if(i* *i i* *i+ji+j* *j j* *j+kj+k* *k k* *k=n)k=n) printf(“n%d”,n); printf(“n%d”,n); 通过循环列出通过循环列出i,j,ki,j,k的所有可能的范围的所有可能的范围第161页/共434页例例:(:(习题习题) 求求S=i! =1 1!+2+2!+3+3!+4+4!+19+19!+20+20!20i=1第162页/共434页main()main() int i,j; int i,j; fl

49、oat t,s=0; float t,s=0; for(i=1;i=20;i+) for(i=1;i=20;i+) s+=?s+=?; ; printf(“n s=%f”,s); printf(“n s=%f”,s); 用两重循环实现用两重循环实现s+=t;t=1;t=1;for(j=1;j=i;j+) tfor(j=1;j=i;j+) t* *=j;=j;第163页/共434页用递推法:用递推法: 递推公式:递推公式:t ti i=t=ti-1i-1.i.i求求S=i! =1 1!+2+2!+3+3!+4+4!+19+19!+20+20!20i=1=1+(i-1)!.i = 1+ti-1.i

50、 20i=220i=2第164页/共434页main()main() int i,j; int i,j; float t=1,s=t; float t=1,s=t; for(i= for(i=2 2;i=20;i+);i=20;i+) t=tt=t* *i;i; s+=t; s+=t; printf(“n s=%f”,s); printf(“n s=%f”,s); 第165页/共434页例:例: 递推公式:递推公式: s=s= i i!1120= = + + + + + 1! 2! 3! 4! 20!1 1 1 1 1t ti i= t= ti-1 i-1 / / i i第166页/共434页

51、t=t/i;t=t/i;第167页/共434页习题习题6.3:6.3: s=a+aa+aaa+aaaa+aaaaa s=a+aa+aaa+aaaa+aaaaa 2+22+222+2222+22222 2+22+222+2222+22222 递推公式:递推公式:t ti i= t= ti-1i-1? ?t ti i= t= ti-1 i-1 * * 10+a10+a第168页/共434页第169页/共434页例:例:求方程求方程 2x2x3 3+3x+3x2 2-4x+1=0-4x+1=0的根。的根。 简单迭代法基本思想:简单迭代法基本思想: 将原方程将原方程f(x)f(x)化为:化为:x x2

52、 2=g(x=g(x1 1) ) x2=(2x1 x2=(2x13 3+3x1+3x12 2+1)/4 +1)/4 迭代公式迭代公式第170页/共434页迭代过程:迭代过程:假定一个x1x2=g(x1)不成立|x2-x1x1=x2输出x2成立第171页/共434页main()main() float x1,x2; float x1,x2; scanf(“%f”,&x1); scanf(“%f”,&x1); while(1) while(1) x2=(2x2=(2* *x1x1* *x1x1* *x1+3x1+3* *x1x1* *x1+1)/4;x1+1)/4; if(fabs

53、(x2-x1)1e-6)break; if(fabs(x2-x1)1e-6)break; ? ? printf(“n %f”,x2); printf(“n %f”,x2); x1=x2;第172页/共434页牛顿迭代法基本思想:牛顿迭代法基本思想: 牛顿迭代公式牛顿迭代公式 f(x1)=f(x1)/(x1-x2)f(x1)=f(x1)/(x1-x2) x2=x1-f(x1)/ f(x1) x2=x1-f(x1)/ f(x1)x1x2yxf (x1)f (x2)第173页/共434页 main()main() float x1,x2,f1,f; float x1,x2,f1,f; scanf(“

54、%f”,&x1); scanf(“%f”,&x1); while(1) while(1) f=2f=2* *x1x1* *x1x1* *x1+3x1+3* *x1x1* *x1-4x1-4* *x1+1;x1+1; f1=6 f1=6* *x1x1* *x1+6x1+6* *x1-4;x1-4; x2=x1-f/f1; x2=x1-f/f1; if(fabs(x2-x1)1e-6) break; if(fabs(x2-x1)1e-6) break; x1=x2; x1=x2; printf(“n %f”,x2); printf(“n %f”,x2); 第174页/共434页例:

55、例:求定积分:求定积分: 数值积分数值积分 f (x)abxsinxxdxab等分nh=b-an第i个矩形:x=?x=a+(i-1).h第175页/共434页#include “math.h” main() int n,i; float a,b,x,y,h,s=0; scanf(“%f%f%d”,&a,&b,&n); h=(b-a)/n; for(i=1;iamax) max=i;if(aiamax) max=i;if(aiamin) min=i;if(aiamin) min=i;第190页/共434页main()main() int i,a,n; int i,a,n;

56、 float aver=0; float aver=0; for(i=0;i100;i+) for(i=0;i100;i+) scanf(“%d”,&a); scanf(“%d”,&a); aver+=a; aver+=a; aver/=100; aver/=100; n=0;n=0; for(i=0;i100;i+) for(i=0;iaver)n+; if(aaver)n+; printf(“n %d”,n); printf(“n %d”,n); 用变量数据结构不合理数据结构不合理第191页/共434页 printf(“n %d”,n); printf(“n %d”,n);

57、 用数组第192页/共434页main()main() int i,a; int i,a; for(i=1;i=100;i+) for(i=1;i=100;i+) scanf(“%d”,&a); scanf(“%d”,&a); 输出输出 int i,a,int i,a,n101;n101;for(i=0;i101;i+) for(i=0;i101;i+) ni=0;ni=0;na+;na+;第193页/共434页 体会数组作体会数组作为存放结果为存放结果的数据结构的数据结构时的优越性时的优越性。第194页/共434页int i,a,nint i,a,n1111;for(i=0;

58、ifor(i=0;i1111;i+)ni=0;i+)ni=0;nna/10a/10+;+;第195页/共434页第196页/共434页ij第197页/共434页printf(“%3d”,aj);printf(“%3d”,aj); 5 8 7 4 3 9 0 1 2 6第198页/共434页ij第199页/共434页 t=ai; ai=ak; ak=t; t=ai; ai=ak; ak=t; f o r ( j = 0 ; j 1 0 ; j + + ) f o r ( j = 0 ; j 1 0 ; j + + ) printf(“%3d”,aj);printf(“%3d”,aj); 第200

59、页/共434页第201页/共434页要特别注意两个循环的范围。第202页/共434页第203页/共434页for(i=0;i10;i+)printf(“%3for(i=0;i10;i+)printf(“%3d”,ai);d”,ai); for(i=1;i10;i+)ai=ai-1;for(i=1;i0;i-)ai=ai-1;for(i=9;i0;i-)ai=ai-1;k=a9;k=a9;a0=k;a0=k;for(j=1;j=3;j+)for(j=1;j=3;j+) k=a9;k=a9;第204页/共434页到的呢?马上答应了条件,结果狐到的呢?马上答应了条件,结果狐狸跑断了腿也没找到,请问兔

60、子躲狸跑断了腿也没找到,请问兔子躲在哪个洞里?在哪个洞里?第205页/共434页12346789105第206页/共434页第207页/共434页printf(“%3d”,i+1);printf(“%3d”,i+1); 第208页/共434页第209页/共434页a0a1a2第210页/共434页张表格,则应定义二维数组来存放。张表格,则应定义二维数组来存放。第211页/共434页变化。变化。第212页/共434页 for(j=0;j4;j+) for(j=0;j4;j+) for(i=0;i3;i+) for(i=0;i3;i+) scanf(“%d”,&aij); scanf(“%d”,&aij); for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j4;j+) for(j=0;j4;j+) scanf(“%d”,&aji); scanf(“%d”,&aji);第213页/共434页j1=j;j1=j; printf(“n %d,%d”,i1,j1); printf(“n %d,

温馨提示

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

评论

0/150

提交评论