y6.3函数的调用 History 【例6.4】用函数求2个整数的最大公约数和最小公倍数。 #include "stdio.h" gcd函数: 已知:两个整数a、b void main() 求:公约数 int x,y,gys,gbs; 解:辗转相除法 scanf("%d%d",&x,&y); 答:公约数; gys=gcd(x y);gbs=lcm(x,y): lcm函数: printf("最大公约数为:%dn',gyS水 已知:两个整数a、b 求:公倍数 printf(("最小公倍数为:%d小n",gbs); 解:ab/公约数 答:公倍数; int gcd(int a,int b) intlcm(int a,int b) int r;r=a%b; return a*b/gcd(a,b);} while(r!=0) (a=bb=r;r=a%b;) return b;) a、b的值发生变化; X、y是否发生变化?
6.3 函数的调用 【例6.4】 用函数求2个整数的最大公约数和最小公倍数。 #include "stdio.h" void main( ) { int x,y,gys,gbs; scanf("%d%d",&x,&y); gys=gcd(x,y); gbs=lcm(x,y); printf("最大公约数为:%d\n",gys); printf("最小公倍数为:%d\n",gbs); } int gcd(int a,int b) { int r; r=a%b; while(r!=0) {a=b;b=r;r=a%b;} return b;} int lcm(int a,int b) { return a*b/gcd(a,b);} gcd函数: 已知:两个整数a、b 求:公约数 解:辗转相除法 答:公约数; lcm函数: 已知:两个整数a、b 求:公倍数 解:a*b/公约数 答:公倍数; a、b的值发生变化; x、y是否发生变化?
y6.3函数的调用 History 【例6.5】歌德巴赫猜想的一种描述为:任意一个大于4的偶数都可以分解为两个素数的 和的形式。编写程序对10至20之间的偶数验证歌德巴赫猜想,即将10至20之间的偶数表 示成2个素数之和的形式,每个偶数写出一种表示形式即可。 判断素数的函数 (1)使用标记法 (2)循环体中使用breaki语句 int prime (int m) int prime (int m) inti,k=1; int i; if(m<2)k=0; if (m<2)return 0; for(i=2:i<=m/2:i++) for(i=2;i<=m/2;i++) if(m%i-0)break; if(m%i=0)k=0; if(i>m/2)return 1; return k; else return 0;
6.3 函数的调用 【例6.5】歌德巴赫猜想的一种描述为:任意一个大于4的偶数都可以分解为两个素数的 和的形式。编写程序对10至20之间的偶数验证歌德巴赫猜想,即将10至20之间的偶数表 示成2个素数之和的形式,每个偶数写出一种表示形式即可。 (1)使用标记法 int prime (int m) { int i,k=1; if (m<2) k=0; for(i=2;i<=m/2;i++) if(m%i==0) k=0; return k; } (2)循环体中使用break语句 int prime (int m) { int i; if (m<2) return 0; for(i=2;i<=m/2;i++) if(m%i==0) break; if(i>m/2) return 1; else return 0; } 判断素数的函数
6.3函数的调用 History #include"stdio.h" int prime (int m) int i; if(m<2)return0; /*注意1和小于1的数都不是素数*/ for(i=2;i<=m/2;i+) if(m%i=0)return0: return 1; } main() int m,i; for(m=10;m<=20;m+=2) {for(i=3;i<=m/2;it+) if(prime(i)=1&&prime(m-i)-1) /*本条件成立表示和m-都是素数*》 printf("%5d=%2d+%2d\n",m,i,m-i); break; /*如果要输出所有可能的组合,就不加break*/
6.3 函数的调用 #include "stdio.h" int prime (int m) { int i; if (m<2) return 0; /*注意1和小于1的数都不是素数*/ for(i=2;i<=m/2;i++) if(m%i==0) return 0; return 1; } main() { int m,i; for (m=10;m<=20;m+=2) { for(i=3;i<=m/2;i++) if(prime(i)==1&&prime(m-i)==1) /*本条件成立表示i和m-i都是素数*/ { printf("%5d=%2d+%2d\n",m,i,m-i); break; /*如果要输出所有可能的组合,就不加break*/ } } }
y6.3函数的调用 History m! 【例6.6】利用数学公式C”= ns(0m一,计算C4的值。 #include "stdio.h" double jiec(int n) double y=1; int i; for(i=1;i<=n;i++) y=y*i; return (y); } main() int i; i=jiec(9)/(jiec(4)*jiec(9-4)); printf("%d小n",i)房
6.3 函数的调用 【例6.6】利用数学公式 ,计算 的值。 #include "stdio.h" double jiec(int n) { double y=1; int i; for(i=1;i<=n;i++) y=y*i; return (y); } main( ) { int i; i=jiec(9)/(jiec(4)*jiec(9-4)); printf ("%d\n",i); } 4 C 9
6.3函数的调用 ART History 6.3.3对被调函数的类型声明 函数声明的一般形式为: 类型标识符函数名(形参表列): 可以省略对被调函数的类型声明: (1)函数的定义出现在主调函数之前: (2)函数的类型为整型时: (3)将类型声明放在所有函数之前
6.3 函数的调用 6.3.3 对被调函数的类型声明 函数声明的一般形式为: 类型标识符 函数名(形参表列); 可以省略对被调函数的类型声明: (1)函数的定义出现在主调函数之前; (2)函数的类型为整型时; (3)将类型声明放在所有函数之前