第七次作业
1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
#include<stdio.h> int isprime(int n); int main() { int m,n,i; for(m=0,i=2;i<=1000;i++) { if(isprime(i)) { printf("%3d ",i); m++; if(m%10==0) { printf("\n"); } } } printf("%d",m); } int isprime(int n) { int ia; for(ia=n-1;ia>=2;ia--) { if(n%ia==0) { return 0; } } return 1; }
2.求两个正整数的最大公约数和最小公倍数。用一个函数gcd(int a,int b)求最大公约数,另一个函数lcm(int a,int b)根据求出的最大公约数求最小公倍数。
#include<stdio.h> int m; int gcd(int a,int b); int lcm(int a,int b); int main() { int x,y,n; scanf("%d %d",&x,&y); m=gcd(x,y); if(gcd(x,y)) { n=x*y; printf("没有公约数,最小公倍数为%d\n",n); } else { n=lcm(x,y); printf("最大公约数为%d,最小公倍数为%d\n",m,n); } } int gcd(int a,int b) { int ii,ia; for(ii=a;ii>=1;ii--) { if(a%ii==0&&b%ii==0) { return ii; } } return 0; } int lcm(int a,int b) { int i=1; while(1) { if(i%a==0&&i%b==0) { break; } else { i=i*m; } } return i; }
3.编写一个函数fun(double x)求表达式x2-5x+4的值,x作为参数传给函数。在主函数中调用该函数求下列式子的值:
y1= 22-5*2+4
y2= (x+15)2-5*(x+15)+4
y3= sin2x-5*sinx+4
求y3用数学函数 sin(x) 头文件math.h
求解y2和y3时需要输入x的值。
样例:
y1=-2, x=0.5时,y2=166.75,y3=1.832721
#include<stdio.h> #include<math.h> double fun(double x); int main() { double y3; int x,y1,y2; scanf("%d",&x); y1=fun(x); y2=fun(x+15); y3=fun(sin(x)); printf("y1=%d,y2=%d,y3=%lf",y1,y2,y3); } double fun(double x) { double i; i=x*x-5*x+4; return i; }
4.用函数实现:火柴棍等式问题。
#include<stdio.h> int sum(int x); int main() { int x,y,z,i; for(x=0;x<=9;x++) { for(y=0;y<=9;y++) { for(z=0;z<=9;z++) { if(x+y==z&&sum(x)+sum(y)+sum(z)==12) { printf("%d+%d=%d ",x,y,z); } } } } } int sum(int x) { int i; switch(x) { case 1 :i=2;break; case 7 :i=3;break; case 4 :i=4;break; case 5 : case 3 : case 2 :i=5;break; case 6 : case 9 : case 0 :i=6;break; case 8 :i=7;break; } return i; }
二、知识点总结
1、函数声明只是告诉程序“我有这个函数”,而程序的反应是“我知道了,帮你看看”,只有在写这个函数时这个函数才真正具有内容。
2、调用函数,可以在任何时候,其方式因函数种类而异。个人认为分两种,及自定义函数的调用和非自定义函数的调用。
3、形参即“模板位置”,实参为“实际内容”,运算时实参被传递到形参代表的“模具位置”进行运算。
4、全局(外部)变量应声明于所运用的函数之前。
三、实验总结
1、火柴问题中,要注意将“多对一”的问题交给switch解决,switch很难解决这种情况下的“一对多”问题。
2、实验二中的全局变量实际多余......