第7次作业
1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
1 #include<stdio.h> 2 int isprime(int m); 3 int main() 4 { 5 int a=0,i; 6 for(i=2;i<=1000;i++) 7 { 8 if(isprime(i)) 9 { 10 printf(" %3d",i); 11 a++; 12 if(a%10==0) 13 { 14 printf("\n"); 15 } 16 } 17 } 18 printf("\n一共%d个质数",a); 19 return 0; 20 } 21 int isprime(int m) 22 { 23 int i,glad=1; 24 for(i=2;i<m;i++) 25 { 26 if(m%i==0) 27 { 28 glad=0; 29 break; 30 } 31 } 32 if(glad==1) 33 return 1; 34 else 35 return 0; 36 }
2.求两个正整数的最大公约数和最小公倍数。用一个函数gcd(int a,int b)求最大公约数,另一个函数lcm(int a,int b)根据求出的最大公约数求最小公倍数。
1 #include<stdio.h> 2 int gcd(int a,int b); 3 int lcm(int a,int b); 4 int main() 5 { 6 int a,b; 7 printf("请输入两位整数"); 8 scanf("%d,%d",&a,&b); 9 if(gcd<=0||lcm<=0) 10 { 11 printf("error"); 12 } 13 else 14 { 15 printf("最大公约数是%d\n最小公倍数是%d\n",gcd(a,b),lcm(a,b)); 16 } 17 return 0; 18 } 19 int gcd(int a,int b) 20 { 21 int max,s1; 22 if(b>a) 23 { 24 max=a; 25 a=b; 26 b=max; 27 } 28 while(1) 29 { 30 s1=a%b; 31 if(s1==0) 32 { 33 break; 34 } 35 a=b; 36 b=s1; 37 } 38 return b; 39 } 40 int lcm(int a,int b) 41 { 42 int sum; 43 sum=a*b/gcd(a,b); 44 }
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
1 #include<stdio.h> 2 #include<math.h> 3 double fun(double x); 4 int main() 5 { 6 double x,y1,y2,y3; 7 printf("请输入x的值"); 8 scanf("%lf",&x); 9 y1=2*2-5*2+4; 10 y2=fun(x+15); 11 y3=fun(sin(x)); 12 printf("分别得出%.3lf,%.3lf,%.3lf",y1,y2,y3); 13 return 0; 14 } 15 double fun(double x) 16 { 17 double sum,y1,y2,y3; 18 sum=x*x-5*x+4; 19 return sum; 20 }
4.用函数实现:火柴棍等式问题。
1 #include<stdio.h> 2 int sum(int a); 3 int sum(int b); 4 int sum(int z); 5 int main() 6 { 7 int a,b,x,y,z,g,e; 8 for(a=0;a<=9;a++) 9 for(b=0;b<=9;b++) 10 { 11 g=a+b; 12 if(g>9) 13 { 14 break; 15 } 16 17 x=sum(a); 18 y=sum(b); 19 z=sum(g); 20 e=x+y+z; 21 if(e==12) 22 { 23 printf("%d+%d=%d\n",a,b,g); 24 } 25 } 26 return 0; 27 } 28 int sum(int e) 29 { 30 int s1; 31 switch(e) 32 { 33 case 0:s1=6; 34 case 9:s1=6; 35 case 6:s1=6; break; 36 case 1:s1=2; break; 37 case 2:s1=5; 38 case 3:s1=5; 39 case 5:s1=5; break; 40 case 4:s1=4; break; 41 case 7:s1=3; break; 42 case 8:s1=7; break; 43 } 44 return s1; 45 }
附加题
函数实现万年历,其中需定义以下函数
int isValidate(int year,int month) // 输入数据的合法性验证
int isLeap(int year) // 判断闰年
int days(int year,int month) // 计算某年某月的天数
int totalDays(int year,int month) // 计算某年某月到1900年1月1日的总天数
void printCanlender(int year,int month) // 输出万年历
二。知识点总结
1:实参和行参不同,都代指一个函数。
2:主函数可以代指输出,自定义函数可以任意形式,但int isprime中与主函数对应。
三、实验总结(实验中遇到的问题及解决方法)
1 :如果使用int,那么从使至终都用int,否则错误。
2:个人以为int isprime更像是定义函数所在的一句话