一.实验内容
1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
#include<stdio.h> int isprime(int n); int main() { int i,n; n=0; for(i=2;i<=1000;i++) { if(isprime(i)) { printf("%4d",i); n++; if(n%10==0) printf(" "); } } printf("一共有%d个。 ",n); } int isprime(int n) { int i; for(i=2;i<=n-1;i++) { if(n%i==0) return 0; } return 1; }
2.求两个正整数的最大公约数和最小公倍数。用一个函数gcd(int a,int b)求最大公约数,另一个函数lcm(int a,int b)根据求出的最大公约数和最小公倍数。
#include<stdio.h> int gcd(int a,int b); int lcm(int a,int b); int main() { int a,b,c,d; printf("请输入两个整数"); scanf("%d%d",&a,&b); c=gcd(a,b); d=lcm(a,b); printf("gcd=%d ",c); printf("lcm=%d ",d); return 0; } int gcd(int a,int b) { int e,min,i; if(a>b) { min=b; } else { min=a; } for(i=1;i<=min;i++) { if(a%i==0&&b%i==0) { e=i; } } return e; } int lcm(int a,int b) { int c; c=gcd(a,b); return (a*b/c); }
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 x,y1,y2,y3; printf("x*x-5*x+4 ,请输入x的值。 "); scanf("%lf",&x); y1=fun(2); y2=fun(x+15); y3=fun(sin(x)); printf("%.3lf%.3lf%.3lf",y1,y2,y3); } double fun(double x) { double y; y=x*x-5*x+4; return y; }
4.用函数实现:火柴棍等式问题。
#include<stdio.h> int huo(int a); int main() { int a,b,c; for(a=0;a<=9;a++) for(b=0;b<=9;b++) { c=a+b; if(c>9) break; if(huo(a)+huo(b)+huo(c)==12) { printf("%d+%d=%d ",a,b,c); } } return 0; } int huo(int a) { int i; switch(a) { case 0: case 6: case 9:i=6;break; case 1:i=2;break; case 2: case 3: case 5:i=5;break; case 4:i=4;break; case 7:i=3;break; case 8:i=7;break; } return i; }
二.知识点总结
1.第一道题素数用isprime(int n)函数,第二道题最大公约数和最小公倍数用gcd(int a,intb),lcm(int a,int b)函数,第三道题用fun函数。函数的运用,分主调函数和被调用函数,当在main函数中执行到被调用函数时,程序转向执行被调用函数中的语句,直到遇到return语句或是将函数体中的语句执行完。当被调用函数执行完毕后,程序返回到主调函数中继续执行函数调用处之后的语句。
2.三种函数调用的方式:函数语句,函数表达式,函数参数。
3.函数的运用,注意函数的返回值。一般是通过return语句返回到主函数的,return语句的作用是从被调用函数返回到调用处继续执行主调函数中的代码。当执行return语句两种情况后,函数中剩余的语句不会再执行。
三.实验总结
1.第一道题中素数判断的条件,for语句中for(i=2;i<=1000;i++)。然后注意要求的每行10个,语句表达为if(n%10==0)符合的话即换行。做题时有错误的地方是被调用的函数中的语句没有充分调用,将其复杂化了,后改正,所以在做函数编程题要注意主调函数和被调用函数的关系,让代码运行正确。
2.第二道题有小问题,就是开始编的程序思维没有问题,但gcd(int a,int b),lcm(int a,int b)函数调用不上去,在主调函数中出现的情况就是输入的是什么,就直接输出,下边的程序都没有运行。
3.第三道题程序没有问题,要注意的就是由已给的y1= 22-5*2+4;y2= (x+15)2-5*(x+15)+4; y3= sin2x-5*sinx+4 ;在编程的时候在声明变量后的表达为y1=fun(x);y2=fun(x+15);y3=fun(sin(x));再输出。然后在后边对y声明,return y。
4.火柴棍的考虑要各数字需要的火柴棍多少,在开始声明变量,因为是*+*=*的形式,必须符合各数字,加号,等号,所需的火柴棍总和为16,然后输出。以下调用函数,首先输入变量,判断火柴的数量,使用switch函数判断各数字相应的火柴棍的量,在被调用函数最后返回变量。最后返回主调函数最终输出。