C语言实验报告五
C语言程序设计实验报告(五)
姓 名:熊晓东
实验地点:家
实验时间: 2020年4月26日
实验项目:
6.3.1练习1 编写由三角形三边求面积的函数
6.3.1练习2 编写求N阶乘的函
6.3.1练习3 求两个整数的最大公约数
6.3.1练习4 打印输出指定图
6.3.2练习1 求500以内的所有亲密数对
6.3.3练习1 编写x的y次幂的递归函数
6.3.2练习2 利用复化梯形公式计算定积分
一、实验目的与要求
1.熟练地掌握函数的定义方法和调用规则。
2.掌握在C语言程序中主调函数和被调用函数之间进行数据传递的规则。
3.了解函数的返回值及其类型,并正确使用它。
4.了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性和可见性的概念
5.理解宏的概念,掌握定义无参宏和带参宏的方法。
二、实验内容
(1)6.3.1练习1 编写由三角形三边求面积的函数
1、问题的简单描述:编写程序,从键盘输入三角形的3条边,调用三角形面积函数求出其面积,并输出结果。
2、实验代码:
··· #include<stdio.h> #include<math.h> float area(float a,float b,float c) { float s,p,area; s=(a+b+c)/2; p=s*(s-a)*(s-b)*(s-c); area=sqrt(p); return area; } main() { float a,b,c,ts; scanf("%f %f %f",&a,&b,&c); ts=area(a,b,c); if((a+b>c)&&(a+c>b)&&(b+c>a)) printf("area=%f\n",ts); else printf("Data error!"); }
3、问题分析:代码的规范很重要,写的时候要写清楚。
(2)6.3.1练习2 编写求N阶乘的函数
1、问题的简单描述:编写函数,求出从主函数传来的数值i阶乘值,然后将其传回主调函数并输出。
2、实验代码:
··· #include<stdio.h> #define N 5 long function(int i) { static long f=1; f=f*i; return f; } main() { long product; int i; for(i=1;i<=N;i++) { product=function(i); //调用函数function()求阶乘,并赋值 printf("%d的阶乘是:%d\n",i,product); } }
3、问题分析:product定义为long型。
(3)6.3.1练习3 求两个整数的最大公约数
1、问题的简单描述:编写程序,从键盘输入两个整数,调用gcd()函数求他们的最大公约数,并输出结果。
2、实验代码:
··· #include<stdio.h> int gcd(int a,int b) { int temp; int remainder; if (a<b) { temp=a; a=b; b=temp; } remainder=a%b; while(remainder!=0) { a=b; b=remainder; remainder=a%b; } return b; } main() { int x,y; int fac; printf("请输入两个整数x,y:"); scanf("%d%d",&x,&y); fac=gcd(x,y); printf("最大公约数为%d",fac); return 0; }
3、问题分析:敲代码的时候要注意细节,有时候会打错。
(4)6.3.1练习4 打印输出指定图
1、问题的简单描述:输入整数n,输出高度为n的等边三角形。
2、实验代码:
··· #include<stdio.h> void trangle(int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n-i;j++) printf(" "); for(j=0;j<=2*i;j++) printf("*"); putchar('\n'); } } void main() { int n; printf("请输入一个整数n:"); scanf("%d",&n); printf("\n"); trangle(n); }
3、问题分析:要找准规律,不能粗心。
(5)求500以内的所有亲密数对
1、问题的简单描述:若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。
2、实验代码:
··· #include<stdio.h> int facsum(int m) { int sum=1,f=2; while(f<=m/2) { if(m%f==0) { sum=sum+f; f++; } else f++; } return sum; } void main() { int m=3,n,k; while(m<=500) { n=facsum(m); k=facsum(n); if(m==k&&m<=n) printf("%d,%d\n",m,n); m++; } }
3、问题分析:无
(6)编写x的y次幂的递归函数
1、问题的简单描述:编写程序,分别从键盘输入数据x和y,计算x的y次幂并输出。
2、实验代码:
··· #include<stdio.h> long getpower(int x,int y) { if(y==1) return x; else return x*getpower(x,y-1); } main() { int num,power; long answer; printf("请输入一个整数:"); scanf("%d",&num); printf("请输入幂次方:"); scanf("%d",&power); answer=getpower(num,power); printf("%d^%d=%1d\n",num,power,answer); }
3、问题分析:按顺序来。
(7)利用复化梯形公式计算定积分
1、问题的简单描述:利用复化梯形公式计算定积分。
2、实验代码:
··· /*利用复化梯形公式计算定积分*/ #include<stdio.h> #include<math.h> double f(double x); double sab(double a,double b,int n) { double h,result,x1,x2,x3=0,t,k; int k; h=(b-a)/n; x1=f(a); x2=f(b); for(k=1;k<=n-1;k++) { t=a+k*h; x3+=f(t); } result=h*(x1+x2)/2+h*x3; return result; }
3、问题分析:这题比较难懂,要反复理解。
三、实验小结
这次试验量比较大,难度对我来说比较高,总的来说实验要严谨仔细,要多想新思路,对着课本有参照的内容可以多参照参照。