34有返回值函数的定义与调用 个题目是编写带返回值的函数还是编写一个无返回值的 函数取决于程序员自己例31求10个正整数的阶乘 #include <stdio.h> #include <stdio.h> float func(intm)∥有返回值 oid func(intm)∥无返回值 i int i; float fact=1 for(i-l; i<=m; i++) i int i; float fact=1; fact=fact*i: for(i-l; i<=m; i++) return(fact); fact=fact*i: printf(%d!=.0fn",m, fact); void main o i int i, n; float r void main o for(i=1;i<=10;i++) i int 1. n, { scanf(%d”,&n); for(i=1;i=10;i++) r=func(n) scan f(“%d”,&n) printf(%d!=%.0f\n",n,r) func(n);
3.4 有返回值函数的定义与调用 例3-1:求10个正整数的阶乘 #include <stdio.h> void func( int m ) // 无返回值 { int i ; float fact=1 ; for( i=1; i<=m; i++ ) fact=fact*i; printf(“%d!=%.0f\n”, m, fact); } void main ( ) { int i , n; for(i=1; i<=10; i++) { scanf(“%d”, &n); func(n); } } ❖ 一个题目是编写带返回值的函数, 还是编写一个无返回值的 函数, 取决于程序员自己 #include <stdio.h> float func( int m ) // 有返回值 { int i ; float fact=1 ; for( i=1; i<=m; i++ ) fact=fact*i; return( fact ); } void main ( ) { int i , n; float r ; for(i=1; i<=10; i++) { scanf(“%d”, &n); r = func(n); printf(“%d!=%.0f\n”, n, r ); } }
34有返回值函数的定义与调用 例34求两个数的最大公约数和最小公倍数 今求最大公约数的方法:展转相除法 给出两个数,用大数作被除数,小数做除数,如果两数 相除的余数不是0,则除数作为新的被除数,余数作为 新的除数,继续相除,当两数相除的余数是0时结束, 此时除数就是最大公约数。 今求最小公倍数的方法:用两数的乘积除以最大公约数 例:a=25; b=15; s=a%b=10;最小公倍数: a=b;(a=15)b=s;(b=10)s=a%b=5; 25*15/5=75 a=b;(a=10)b=s;(b=5)s=a%b=0; b就是最大公约数
3.4 有返回值函数的定义与调用 例3-4 求两个数的最大公约数和最小公倍数 ❖求最大公约数的方法: 展转相除法 给出两个数, 用大数作被除数, 小数做除数, 如果两数 相除的余数不是0, 则除数作为新的被除数, 余数作为 新的除数, 继续相除, 当两数相除的余数是0时结束, 此时除数就是最大公约数。 ❖求最小公倍数的方法: 用两数的乘积除以最大公约数 例: a=25 ; b=15; s=a%b=10; a=b; (a=15) b=s; (b=10) s=a%b=5; a=b; (a=10) b=s; (b=5) s=a%b=0; b就是最大公约数 最小公倍数: 25*15/5=75
34有返回值函数的定义与调用 例3-4如果题目要求在main函数中输出计算结果,则我们需要 编写带返回值的函数 编写求最大公约数的函数 int gys(int a,intb)∥a为被除数,b为除数 intt,s;∥t用于交换的中间变量,s放余数 if(b>a)∥若除数大于被除数,则交换两数 ita; a=b; b=t; j S=a%ob while((s=a%b)=0) while(s=0) i a=b, b=s, s-a %b;) {a=b;b=s;} return(b);
3.4 有返回值函数的定义与调用 例3-4 如果题目要求在main函数中输出计算结果, 则我们需要 编写带返回值的函数 ▪编写求最大公约数的函数 int gys(int a, int b) //a为被除数, b为除数 { int t, s; // t用于交换的中间变量, s存放余数 if(b>a) // 若除数大于被除数, 则交换两数 { t=a; a=b; b=t; } s=a%b; while(s!=0) { a=b; b=s; s=a%b; } return (b); } while((s=a%b)!=0) { a=b; b=s; }
34有返回值函数的定义与调用 方法1:编写一个main函数,在main中调用gys函数, 然后再计算最小公倍数 #include<stdio. h> void main( int gys(int a, int b) f int p, g,r,z; printf( please input 2 numbers: ) void maino scanf(%od, %d", &p, &q; r=gys(p, q; printf( Greatest common divisor is %dn",r); Ep*g/r printf( lease common multiple is %odn,Z);
3.4 有返回值函数的定义与调用 方法1: 编写一个main函数, 在main中调用gys函数, 然后再计算最小公倍数 void main( ) { int p, q, r, z ; printf("please input 2 numbers: "); scanf("%d, %d", &p, &q); r=gys(p, q); printf(“Greatest common divisor is %d\n", r); z=p*q/r; printf("lease common multiple is %d\n", z ); } #include<stdio.h> int gys(int a,int b) { … } void main( ) { … }
34有返回值函数的定义与调用 方法2:编写求最小公倍数的函数gbs编写main函数, 在main中调用gys函数和gbs函数 编写求最小公倍数的函数 int gbs(inta,intb,inth)说明:参数a为被除数,b为除数, i return(a*b/h); h为求出的最大公约数 void maino f int p, g,r; printf( please input 2 numbers: scanf(%od, %d", &p, &g r-gys(p, g) printf( Greatest common divisor is %dn",r); printf( lease common multiple is %od\n", gbs(p, g, r));
3.4 有返回值函数的定义与调用 ▪编写求最小公倍数的函数 方法2: 编写求最小公倍数的函数gbs, 编写main函数, 在main中调用gys函数和gbs函数 int gbs(int a, int b, int h) { return(a*b/h); } 说明: 参数a为被除数, b为除数, h为求出的最大公约数 void main( ) { int p, q, r ; printf("please input 2 numbers: "); scanf("%d, %d", &p, &q); r=gys(p, q); printf(“Greatest common divisor is %d\n", r); printf("lease common multiple is %d\n", gbs(p, q, r)); }