《模块化程序设计-函数.ppt》由会员分享,可在线阅读,更多相关《模块化程序设计-函数.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、模块化程序设计函数模块化程序设计函数 n n重写例重写例1.1模块化程序设计模块化程序设计 n n函数函数 n n程序设计实例程序设计实例 for(x=for(x=A;xA;x=F;xF;x+)+)for(y=x;y=for(y=x;y=I;yI;y+)+)printfprintf(%c,y);(%c,y);for(y=A;yx;y+)for(y=A;yx;y+)printfprintf(%c,y);(%c,y);for(i=1;i=(5-(x-A)*2);i+)for(i=1;i=(5-(x-A)*2);i+)printfprintf();();for(i=1;i=2*(x-A)+1;i+)
2、for(i=1;i=2*(x-A)+1;i+)printfprintf(%c,x);(%c,x);for(i=1;i=(5-(x-A)*2);i+)for(i=1;i=(5-(x-A)*2);i+)printfprintf();();for(y=x+1;y=for(y=x+1;y=I;yI;y+)+)printfprintf(%c,y);(%c,y);for(y=A;y=for(y=A;y=A;xA;x-)-)for(y=x;y=for(y=x;y=I;yI;y+)+)printfprintf(%c,y);(%c,y);for(y=A;y=x-1;y+)for(y=A;y=x-1;y+)pri
3、ntfprintf(%c,y);(%c,y);for(i=1;i=(5-(x-A)*2);i+)for(i=1;i=(5-(x-A)*2);i+)printfprintf();();for(i=1;i=2*(x-A)+1;i+)for(i=1;i=2*(x-A)+1;i+)printfprintf(%c,x);(%c,x);for(i=1;i=(5-(x-A)*2);for(i=1;i=(5-(x-A)*2);i+)printfi+)printf();();for(y=x+1;y=for(y=x+1;y=I;yI;y+)+)printfprintf(%c,y);(%c,y);for(y=A;y
4、=for(y=A;y=x;yx;y+)+)printfprintf(%c,y);(%c,y);printfprintf(n);(n);abab=sqrtsqrt(xa-xbxa-xb)*()*(xa-xb)+(ya-ybxa-xb)+(ya-yb)*()*(ya-ybya-yb););/边边边边abab长长长长bdbd=sqrtsqrt(xb-xdxb-xd)*()*(xb-xd)+(yb-ydxb-xd)+(yb-yd)*()*(ybyb-yd);-yd);/边边边边bdbd长长长长ad=ad=sqrtsqrt(xa-xdxa-xd)*()*(xa-xd)+(ya-ydxa-xd)+(ya-
5、yd)*()*(yaya-yd);-yd);/边边边边adad长长长长s=(ab+bd+ad)/2;s=(ab+bd+ad)/2;s1=s1=sqrtsqrt(s*(s*(s-abs-ab)*()*(s-bds-bd)*(s-ad);/)*(s-ad);/ABDABD面积面积面积面积bcbc=sqrtsqrt(xb-xcxb-xc)*()*(xb-xc)+(yb-ycxb-xc)+(yb-yc)*()*(yb-ycyb-yc);/边边边边BCBC长长长长cdcd=sqrtsqrt(xc-xdxc-xd)*()*(xc-xd)+(yc-ydxc-xd)+(yc-yd)*()*(ycyc-yd)-
6、yd);/边边边边CDCD长长长长s=(bc+bd+cd)/2;s=(bc+bd+cd)/2;s2=s2=sqrtsqrt(s*(s*(s-bcs-bc)*()*(s-bds-bd)*()*(s-cds-cd);/);/BCDBCD面积面积面积面积重写例重写例1.1#include#include/1/1#include#include/2/2float float xa,ya,xb,yb,xc,yc,xd,ydxa,ya,xb,yb,xc,yc,xd,yd;/3/3float s1,s2,ss,m;float s1,s2,ss,m;/4/4/*/*计算计算计算计算r r、s s两点距离:参数
7、:两点距离:参数:两点距离:参数:两点距离:参数:r r点点点点x x、y y坐标,坐标,坐标,坐标,s s点点点点x x、y y坐标坐标坐标坐标*/float liners(float float liners(float xr,floatxr,float yr,floatyr,float xs,floatxs,float ysys)/5/5return return sqrtsqrt(xr-xsxr-xs)*()*(xr-xs)+(yr-ysxr-xs)+(yr-ys)*(yr-)*(yr-ysys););/6/6 /7/7/*/*计算三角形计算三角形计算三角形计算三角形uvwuvw面积,
8、参数:面积,参数:面积,参数:面积,参数:u u点点点点x x、y y坐标,坐标,坐标,坐标,v v点点点点x x、y y坐标,坐标,坐标,坐标,ww点点点点x x、y y坐标坐标坐标坐标 */float float areauvw(floatareauvw(float xu,floatxu,float yuyu,float float xv,floatxv,float yvyv,float float xw,floatxw,float ywyw)/8/8 float float uvuv,uwuw,vwvw;/三条边长三条边长三条边长三条边长/9/9float s;float s;/10/1
9、0uvuv=liners(=liners(xuxu,yuyu,xv,xv,yvyv););/边边边边uvuv长长长长/11/11uwuw=liners(=liners(xuxu,yuyu,xwxw,ywyw););/边边边边uwuw长长长长/12/12vwvw=liners(xv,=liners(xv,yvyv,xwxw,ywyw););/边边边边vwvw长长长长/13/13s=(uv+uw+vw)/2;s=(uv+uw+vw)/2;/s/s/14/14return return sqrtsqrt(s*(s*(s-uvs-uv)*()*(s-uws-uw)*()*(s-vws-vw);/);/
10、面积面积面积面积/15/15 void void main(voidmain(void)/主函数主函数主函数主函数 printf(pleaseprintf(please input input xa,ya,xb,ybxa,ya,xb,yb,xc,yc,xd,yd:nxc,yc,xd,yd:n););/18/18 scanf(%f%f%f%f%f%fscanf(%f%f%f%f%f%f%f%ff%f,&,&xa,&yaxa,&ya,&xb,&yb,&xc,&yc,&xd,&ydxb,&yb,&xc,&yc,&xd,&yd););/19/19 s1=s1=areauvwareauvw(xaxa,y
11、aya,xbxb,ybyb,xdxd,yd);,yd);/20/20 s2=s2=areauvwareauvw(xbxb,ybyb,xcxc,ycyc,xdxd,yd);,yd);/21/21 ssss=s1+s2;=s1+s2;/22/22 ssss=ss/1000;=ss/1000;/折合成亩折合成亩折合成亩折合成亩 /23/23 m=m=ssss*950;*950;/计算总产量计算总产量计算总产量计算总产量 /24/24 printf(“mprintf(“m=%10.3fn”,m);=%10.3fn”,m);/打印输出打印输出打印输出打印输出 /25/25 子程序子程序n n自顶向下、逐
12、步求精自顶向下、逐步求精”程序设计技术的基程序设计技术的基础础 从问题的整体(最顶层)出发,向下分解问题。从问题的整体(最顶层)出发,向下分解问题。从问题的整体(最顶层)出发,向下分解问题。从问题的整体(最顶层)出发,向下分解问题。逐层细分,得到整个问题的解决方法逐层细分,得到整个问题的解决方法逐层细分,得到整个问题的解决方法逐层细分,得到整个问题的解决方法n使用子程序技术分离了使用子程序技术分离了“做什么做什么”与与“怎怎么做么做”程序逻辑结构清晰,易写,易读,易懂。程序逻辑结构清晰,易写,易读,易懂。程序的设计,调试,维护变得容易程序的设计,调试,维护变得容易n程序执行的主要步骤程序执行的
13、主要步骤从第从第18行主函数开始,执行行主函数开始,执行printf(please input xa,ya,xb,yb,xc,yc,xd,yd:n);输出一行提示信息输出一行提示信息:please input xa,ya,xb,yb,xc,yc,xd,yd:执行第执行第19行函数调用行函数调用scanf(%f%f%f%f%f%f%f%f,&xa,&ya,&xb,&yb,&xc,&yc,&xd,&yd);等待操作员键入数值。设操作员键入等待操作员键入数值。设操作员键入547 411 804 77 39 208 116 332当操作员键入并回车之后,变量当操作员键入并回车之后,变量xa、ya、xb
14、、yb、xc、yc、xd、yd分别取得相应值。分别取得相应值。n n第第第第2020行以行以行以行以xaxa、yaya、xbxb、ybyb、xdxd、ydyd为实参调用为实参调用为实参调用为实参调用函数函数函数函数areauvwareauvw 分别计算分别计算分别计算分别计算xaxa,yaya,xbxb,ybyb ,xdxd,ydyd的值,得的值,得的值,得的值,得547547、411411、804804、7777、116116、332 332 将将将将547547、411411、804804、7777、116116、332332分别分别分别分别 送入送入送入送入areauvwareauvw的
15、形参的形参的形参的形参xuxu、yuyu、xvxv、yvyv、xwxw、ywyw中中中中 进入函数进入函数进入函数进入函数areauvwareauvw ,执行,执行,执行,执行areauvwareauvw的操作部分的操作部分的操作部分的操作部分 第第第第1111行,以行,以行,以行,以xuxu,yuyu,xv,xv,yvyv为实在参数调用函数为实在参数调用函数为实在参数调用函数为实在参数调用函数linersliners,计,计,计,计算边算边算边算边uvuv长长长长 分别计算分别计算分别计算分别计算xuxu,yuyu,xv,xv,yvyv得得得得547547、411411、804804、77
16、77;将将将将547547、411411、804804、7777顺序送入顺序送入顺序送入顺序送入linersliners形参形参形参形参xrxr,yr,yr,xsxs,ysys中中中中 第第第第6 6行返回语句行返回语句行返回语句行返回语句return return sqrtsqrt(xr-xsxr-xs)*()*(xr-xs)+(yr-ysxr-xs)+(yr-ys)*(yr-)*(yr-ysys););计算出表达式的值为计算出表达式的值为计算出表达式的值为计算出表达式的值为 421.432 421.432 带着函数值带着函数值带着函数值带着函数值421.432421.432返回调用处返回调
17、用处返回调用处返回调用处areauvwareauvw中第中第中第中第1111行,给行,给行,给行,给uvuv赋值。赋值。赋值。赋值。uvuv的值为的值为的值为的值为421.432421.432 第第第第1212行,以行,以行,以行,以xuxu,yuyu,xwxw,ywyw为实参调用函数为实参调用函数为实参调用函数为实参调用函数linersliners,计算边计算边计算边计算边uwuw长长长长uwuw。uwuw值为:值为:值为:值为:438.18438.18 第第第第1313行,以行,以行,以行,以xvxv,yvyv,xwxw,ywyw为实参调用函数为实参调用函数为实参调用函数为实参调用函数li
18、nersliners,计算边计算边计算边计算边vwvw长长长长vwvw。vwvw值为:值为:值为:值为:733.736733.736 第第第第1414行,计算出行,计算出行,计算出行,计算出s s796.674 796.674 1515行返回语句。计算表达式的值为行返回语句。计算表达式的值为行返回语句。计算表达式的值为行返回语句。计算表达式的值为82128.582128.5,也就是函数,也就是函数,也就是函数,也就是函数areauvwareauvw的值。的值。的值。的值。带着函数值带着函数值带着函数值带着函数值82128.582128.5返回调用处主程序第返回调用处主程序第返回调用处主程序第返
19、回调用处主程序第2020行行行行 n n第第第第2121行,计算三角形行,计算三角形行,计算三角形行,计算三角形BCDBCD的面积,的面积,的面积,的面积,s2s252473.552473.5n n第第第第2222行,计算总面积,行,计算总面积,行,计算总面积,行,计算总面积,ssss134602134602n n第第第第2323行,折合成亩,行,折合成亩,行,折合成亩,行,折合成亩,ssss134.602134.602n n第第第第2424行,计算总产量,行,计算总产量,行,计算总产量,行,计算总产量,mm127871.9127871.9n n第第第第2525行,输出函数行,输出函数行,输出
20、函数行,输出函数printfprintf在屏幕显示在屏幕显示在屏幕显示在屏幕显示:mm127871.90 127871.90 函数函数n函数概念的组成函数概念的组成函数定义函数定义函数调用函数调用n使用函数注意事项使用函数注意事项先定义该函数(标准库函数除外)先定义该函数(标准库函数除外)类似于数学中的函数定义。类似于数学中的函数定义。再在表达式中调用该函数再在表达式中调用该函数数学中计算某函数的一个特定值。数学中计算某函数的一个特定值。函数定义函数定义(function-declaration)n除标准库函数外除标准库函数外,程序中使用函数必须程序中使用函数必须先定义先定义,然后再用然后再用
21、“函数调用函数调用”调用它。调用它。n标准函数是系统已经定义好的函数,不必定义标准函数是系统已经定义好的函数,不必定义即可直接调用。即可直接调用。n由上述语法可知,一个函数定义的形式是由上述语法可知,一个函数定义的形式是:类型说明符类型说明符 标识符标识符 (参数列表参数列表 )复合语句复合语句float liners(float float liners(float xr,floatxr,float yr,floatyr,float xs,floatxs,float ysys)return return sqrtsqrt(xr-xsxr-xs)*()*(xr-xs)+(yr-ysxr-xs)
22、+(yr-ys)*(yr-)*(yr-ysys););函数类函数类型型函数名字函数名字形参列表形参列表复合语句复合语句函数体函数体函数定义说明符函数定义说明符n 函数定义说明符函数定义说明符 上述形式的第一行称上述形式的第一行称“函数定义说明符函数定义说明符”,形式如,形式如下下 TT F(参数列表参数列表)具体指明以下点:具体指明以下点:l函数的结果类型函数的结果类型 由由“类型说明符类型说明符”(TT)标明;标明;l函数的名字函数的名字 由类型说明符后的由类型说明符后的“标识符标识符”(F)标明;标明;l函数的形式参数个数和每个形式参数的特性函数的形式参数个数和每个形式参数的特性 由由“参
23、数列表参数列表”标明。标明。n n函数类型函数类型函数的结果类型函数的结果类型函数的结果类型函数的结果类型缺省缺省缺省缺省 intint 类型类型类型类型 结果类型不能是数组类型、函数类型结果类型不能是数组类型、函数类型结果类型不能是数组类型、函数类型结果类型不能是数组类型、函数类型 函数可以是无值的,即函数可以是无值的,即函数可以是无值的,即函数可以是无值的,即“无类型无类型无类型无类型”的的的的 void void n参数列表参数列表(parameter-list)组成:组成:每个参数声明具体说明形式:每个参数声明具体说明形式:类型说明符类型说明符 标识符标识符参数列表形式参数列表形式 T
24、 id,T id,.,T id C允许使用无参函数,无参函数的参数列表为空,或使用允许使用无参函数,无参函数的参数列表为空,或使用“空类型空类型”的类型说明符的类型说明符“void”TT F()TT F(void)n复合语句(复合语句(compound-statement)由声明和语句)由声明和语句列表组成列表组成声明部分具体的说明本函数内使用的其它量;声明部分具体的说明本函数内使用的其它量;语句部分规定在本函数中要执行的算法动作。语句部分规定在本函数中要执行的算法动作。n函数定义的形式:函数定义的形式:TT F (T id,T id,.,T id).int f(int x,int y,flo
25、at z)int f(int x,y;float z)int f(int x,y,float z)函数调用函数调用n调用过程调用过程首先顺序计算实参表中各实参值首先顺序计算实参表中各实参值然后把这些值顺序传入形参表的各个形参中然后把这些值顺序传入形参表的各个形参中最后进入函数执行复合语句。最后进入函数执行复合语句。n一般形式一般形式F(U,U,U)F()n例子例子liners(xu,yu,xv,yv)areauvw(xa,ya,xb,yb,xd,yd)sqrt(s*(s-uv)*(s-uw)*(s-vw)主程序主程序调用函数调用函数返回返回结束结束函数函数n参数结合规则参数结合规则静态上看,实
26、参表中的实参与被调用函数中形静态上看,实参表中的实参与被调用函数中形参表的形参,按位置从参表的形参,按位置从左向右依次一一对应左向右依次一一对应对应位置上的形实参间要对应位置上的形实参间要赋值兼容赋值兼容各个实参的计算次序是依赖于实现的。各个实参的计算次序是依赖于实现的。n参数结合动作参数结合动作计算实参表达式的值计算实参表达式的值把实参的值按赋值转换规则,转换成形参的类把实参的值按赋值转换规则,转换成形参的类型。如果不能完成该转换,则称函数参数不一型。如果不能完成该转换,则称函数参数不一致,产生错误致,产生错误把转换后的实参值送入形参把转换后的实参值送入形参3int f(int x,int
27、y)return x*y;void main()int a=3,b=2,x=9;int c;c=f(a+b,a+x);printf(“%dn”,c);printf(“%dn”,x);29程序输出为程序输出为:609abx返回值返回值xycmainf内存内存51260600 xyvzumainf内存内存g返回值返回值返回值返回值n 由左至右由左至右#include stdio.h int x,y;int f(int z)x=x+1;return(z*z);int g(int u,int v)void main()x=0;g(x,f(2);021440 xyvzumainf内存内存g返回值返回值返
28、回值返回值n 由右至左由右至左#include stdio.h int x,y;int f(int z)x=x+1;return(z*z);int g(int u,int v)void main()x=0;g(x,f(2);12144n 并行计算并行计算-不知道结果不知道结果#include stdio.h int x,y;int f(int z)x=x+1;return(z*z);int g(int u,int v)void main()x=0;g(x,f(2);n根据参数出现的位置根据参数出现的位置形式参数形式参数函数声明函数声明(局部于函数的变量局部于函数的变量)int f(int x,
29、int y)return x+y;实际参数实际参数函数调用函数调用void main()int a=2,b=3;f(a+b,b);f(2+b,3);n根据参数值的传递规则根据参数值的传递规则值参值参当调用函数时,把当调用函数时,把实参的值实参的值传入形参变量传入形参变量变参变参当调用函数时,把当调用函数时,把实参的地址值实参的地址值传入形参变量传入形参变量 C C语言中的参数都是语言中的参数都是值参值参n函数返回函数返回返回方式:返回方式:return;return 表达式;表达式;函数运行到复合语句末尾(最后那个闭花函数运行到复合语句末尾(最后那个闭花括号括号“”)后。)后。例子例子retu
30、rn sqrt(xr-xs)*(xr-xs)+(yr-ys)*(yr-ys);return sqrt(s*(s-uv)*(s-uw)*(s-vw);n 函数值函数值n有返回类型的函数有返回类型的函数 int f(int x,int y)if(x=y)return x;else return y;n无返回类型的函数无返回类型的函数 void g(int w)if(w=1)return;else x=3;n有返回类型函数的函数值有返回类型函数的函数值使用使用 return e;向调用函数的主程序传递函数值向调用函数的主程序传递函数值return e;的执行过程是:的执行过程是:计算表达式计算表达式
31、e的值的值把表达式值按赋值转换规则,转换成函数的结把表达式值按赋值转换规则,转换成函数的结果类型;果类型;返回语句中表达式的类型与函数的结果类型必返回语句中表达式的类型与函数的结果类型必须赋值兼容。须赋值兼容。用类型转换后的值作为函数值,并带着它返回用类型转换后的值作为函数值,并带着它返回到调用该函数处到调用该函数处n无返回类型函数的函数值无返回类型函数的函数值void g(int w)if(w=1)return;else x=3;n在函数调用处,所调函数无值可以带回。在函数调用处,所调函数无值可以带回。对于对于无类型无类型函数,在函数调用处不需要函数值,函数,在函数调用处不需要函数值,这种返
32、回是正常的;这种返回是正常的;对于对于有类型有类型函数,在函数调用处极可能需要函数函数,在函数调用处极可能需要函数值参加下一步运算,这将值参加下一步运算,这将带来不可预料的结果带来不可预料的结果n函数原型函数原型为什么使用函数原型为什么使用函数原型任何标识符都必须声明,而且必须先声明任何标识符都必须声明,而且必须先声明后使用后使用在声明定义函数时必须保证函数声明位置在声明定义函数时必须保证函数声明位置在使用前出现在使用前出现从程序行文顺序上控制从程序行文顺序上控制 一般比较难实现一般比较难实现函数原型函数原型 方便灵活方便灵活n一般形式一般形式TT F(T ,T ,.,T);TT F(T id
33、,T id,.,T id);n例子例子 float f(int,float,int,char);float f(int z,float u,int v,char w);n函数原型的功能函数原型的功能满足了满足了C标识符先定义后使用的要求标识符先定义后使用的要求并向编译系统提供所调用函数的信息并向编译系统提供所调用函数的信息函数返回类型函数返回类型函数的参数个数函数的参数个数函数参数特性等信息函数参数特性等信息程序设计风格程序设计风格最好把所有函数原型集中,放在主函数最好把所有函数原型集中,放在主函数之前之前float float xa,ya,xb,yb,xc,yc,xd,ydxa,ya,xb,
34、yb,xc,yc,xd,yd;float s1,s2,ss,m;float s1,s2,ss,m;float liners(float float liners(float xr,floatxr,float yr,floatyr,float xs,floatxs,float ysys);float float areauvw(floatareauvw(float xu,floatxu,float yuyu,float,float xv,floatxv,float yvyv,float,float xw,floatxw,float ywyw););void void main(voidmain(
35、void)printf(pleaseprintf(please input input xa,ya,xb,ybxa,ya,xb,yb,xc,yc,xd,yd:nxc,yc,xd,yd:n););scanf(%f%f%f%f%f%fscanf(%f%f%f%f%f%f%f%ff%f,&,&xa,&ya,&xb,&yb,&xc,&yc,&xd,&ydxa,&ya,&xb,&yb,&xc,&yc,&xd,&yd););s1=s1=areauvwareauvw(xaxa,yaya,xbxb,ybyb,xdxd,yd);,yd);s2=s2=areauvwareauvw(xbxb,ybyb,xcxc,y
36、cyc,xdxd,yd);,yd);ssss=s1+s2;=s1+s2;ssss=ss/1000;=ss/1000;m=m=ssss*950;*950;printf(“mprintf(“m=%10.3fn”,m);=%10.3fn”,m);float liners(float float liners(float xr,floatxr,float yr,floatyr,float xs,floatxs,float ysys)return return sqrtsqrt(xr-xsxr-xs)*()*(xr-xs)+(yr-ysxr-xs)+(yr-ys)*(yr-)*(yr-ysys););f
37、loat float areauvw(floatareauvw(float xu,floatxu,float yuyu,float,float xv,floatxv,float yvyv,float,float xw,floatxw,float ywyw)float float uvuv,uwuw,vwvw;float s;float s;uvuv=liners(=liners(xuxu,yuyu,xv,xv,yvyv););uwuw=liners(=liners(xuxu,yuyu,xwxw,ywyw););vwvw=liners(xv,=liners(xv,yvyv,xwxw,ywyw);
38、);s=(uv+uw+vw)/2;s=(uv+uw+vw)/2;return return sqrtsqrt(s*(s*(s-uvs-uv)*()*(s-uws-uw)*()*(s-vws-vw)程序设计实例程序设计实例n n重写打印字符矩阵重写打印字符矩阵 n n重写打印重写打印100以内素数以内素数 n n验证验证 Pascal 定理定理 重写打印字符方阵重写打印字符方阵 A B C D E F G H I A B C D E F G H I A B C D E F G H I A B B B C D E F G H I A B C D E F G H I A B C C C C C D
39、E F G H I A B C D E F G H I A B C D D D D D D D E F G H I A B C D E F G H I A B C D E E E E E E E E E F G H I A B C D E F G H I A B C D E F F F F F F F F F F FG H I A B C D E F E F G H I A B C D E E E E E E E E E F G H I A B C D E D E F G H I A B C D D D D D D D E F G H I A B C D C D E F G H I A B C
40、 C C C C D E F G H I A B C B C D E F G H I A B B B C D E F G H I A B A B C D E F G H I A B C D E F G H I A打印前打印前 6 行行 打印后打印后5行行xfor(x=A;x=A;x-)void writelinex(char);void main()char x;for(x=A;x=A;x-)writelinex(x);void void writelinex(charwritelinex(char u)u)/打印第打印第打印第打印第u u行行行行char y;char y;intint i;
41、i;for(y=u;y=for(y=u;y=I;yI;y+)+)printfprintf(“%c”,y);(“%c”,y);for(y=A;y=u-1;y+)for(y=A;y=u-1;y+)printfprintf(“%c”,y);(“%c”,y);for(i=1;i=(5-(u-A)*2;i+)for(i=1;i=(5-(u-A)*2;i+)printfprintf(“”);(“”);for(i=1;i=2*(u-A)+1;i+)for(i=1;i=2*(u-A)+1;i+)printfprintf(“%c”,u);(“%c”,u);for(i=1;i=(5-(u-A)*2);i+)for
42、(i=1;i=(5-(u-A)*2);i+)printfprintf(“”);(“”);for(y=u+1;y=for(y=u+1;y=I;yI;y+)+)printfprintf(“%c”,y);(“%c”,y);for(y=A;y=for(y=A;y=u;yu;y+)+)printfprintf(“%c”,y);(“%c”,y);printfprintf(“n”);(“n”);重写打印重写打印100以内素数以内素数 for(i=2;i=2;j-)return true i%j=0#include“#include“stdio.hstdio.h”boolbool prime(prime(in
43、tint);void main()void main()intint i;i;for(i=2;i=100;i+)for(i=2;i=2;j-)for(j=n/2;j=2;j-)if(if(n%jn%j=0)=0)return false;return false;return true;return true;验证验证 Pascal 定理定理n圆内接六边形三双对边延线的交点在一条直线上圆内接六边形三双对边延线的交点在一条直线上ABCDEFB1B2B3读入六个极角的值读入六个极角的值求六个顶点求六个顶点A,B,C,D,E,F 在直角坐标系中的坐标在直角坐标系中的坐标求三双对边交点求三双对边交点B
44、1,B2,B3 坐标坐标验证验证B1,B2,B3 是否在一条直线上是否在一条直线上开始开始结束结束n将将6个点的极坐标个点的极坐标转换成直角坐标转换成直角坐标n已知极角已知极角theta,矢径矢径r,求求一点的直角坐标一点的直角坐标(px,py)coordinatepx=r*cos(theta);py=r*sin(theta);returntrans_abcdef 转换转换a xa,ya转换转换b xb,yb转换转换d xd,yd 转换转换f xf,yf转换转换e xe,ye转换转换c xc,ycreturnn求交点求交点B1,B2,B3的坐标的坐标n已知四点已知四点r,s,t,u求两条直线交
45、点求两条直线交点Bthree_inter求求AB、DE交点交点B1求求BC、EF交点交点B2求求CD、FA交点交点B3returnintersection 求求r,s;t,u直线方程直线方程l1,l2求求l1、l2交点交点Breturnn已知四点已知四点r,s,t,u求两条直线求两条直线l1,l2的方程的方程n已知两点坐标已知两点坐标px,py,qx,qy,求直线的斜率求直线的斜率a和截距和截距bequtionreturn求求r,s直线方程直线方程l1求求t,u直线方程直线方程l2straightline b=(py*qx-qy*px)/(qx-px)return a=(py-qy)/(px-
46、qx)n已知两条直线方程斜率已知两条直线方程斜率分别为分别为ma,na;截距截距mb,nb;求直线交点求直线交点(wx,wy)n验证验证B1,B2,B3是否在一条直线上是否在一条直线上interwx=(nb-mb)/(ma-na);wy=ma*px+mb;returntestreturn 求过求过B1,B2直线方程直线方程L判断判断B3是否在直线是否在直线L上上/*PROGRAM Pascal theorem*/#include math.h#include stdio.h#define PI 3.1415927#define eps 1e-5float radius;/*圆的半径圆的半径 *
47、/float theta1,theta2,theta3,theta4,theta5,theta6;/*六个极角的度数六个极角的度数 */float xa,ya,xb,yb,xc,yc,xd,yd,xe,ye,xf,yf;/*六个顶点的直角坐标六个顶点的直角坐标 */float b1_x,b1_y,b2_x,b2_y,b3_x,b3_y;/*三个交点的直角坐标三个交点的直角坐标 */float b12_a,b12_b;/*B1和和B2构成直线的斜率和截距构成直线的斜率和截距*/*主程序之前这段为主程序之前这段为“函数原型函数原型”以及各个函数返回结果所用变量以及各个函数返回结果所用变量*/voi
48、d trans_abcdef();float px,py;/*用来保存用来保存coordinate()转换的直角坐标转换的直角坐标 */void coordinate(float,float);void three_inter();void intersection(float,float,float,float,float,float,float,float);float l1_a,l1_b,l2_a,l2_b;/*两条直线的斜率和截距两条直线的斜率和截距 */void equation(float,float,float,float,float,float,float,float);flo
49、at a,b;/*直线方程的斜率和截距直线方程的斜率和截距 */void straightline(float,float,float,float);float wx,wy;/*直线交点的直角坐标直线交点的直角坐标 */void inter(float,float,float,float);int test(float,float,float,float,float,float);/*主函数主函数*/void main()/*读入圆形的半径读入圆形的半径*/printf(please input the radius of the circle:);scanf(%f,&radius);/*读入
50、六个角读入六个角*/printf(please input six angle:);scanf(%f%f%f%f%f%f,&theta1,&theta3,&theta3,&theta4,&theta5,&theta6);trans_abcdef();/*计算六个定点坐标计算六个定点坐标*/three_inter();/*求三个交点求三个交点*/if(test(b1_x,b1_y,b2_x,b2_y,b3_x,b3_y)/*验证验证*/printf(ok);else printf(There is an error when:n);printf(theta1=%d theta2=%dn,thet