实验项目:函数与宏定义
姓名:涂宇昌 实验地点:家 实验时间:2020/4/26
一、实验目的与要求
1、熟练地掌握函数的定义方法和调用规则。
2、掌握再 C语言程序种主调函数和被条用函数之间进行数据传递的规则。
3、了解函数的返回值及其类型,并正确使用它
4、了解局部变量和全局变量的作用城及它们与存储分类的关系,理解变量的存在性和可见性的概念
5、练习递归函数的使用
二、实验内容
1、实验练习:6.3.1-1
1问题的简单描述:编写程序,从键盘输入三角形的3条边,调用三角形函数求出其面积,并输出结果。
2实验代码:
#include<math.h> #include<stdio.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); } void main() { float a,b,c,ts; printf("请输入三角形的三边; "); 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 ",ts); else printf("Date error!"); }
3问题分析:要用math.h,海伦公式求面积方程:s=(a+b+c)/2
2、实验练习:6.3.1-2
1问题的简单描述:编写函数,求出从主调函数传来的数值i的阶乘值,然后将其传回主调函数并输出
2实验代码:
#include<stdio.h> #define N 5 long function(int i) { static long f=1; f=f*i; return f; } void main() { long product; int i; for(i=1;i<=N;i++) { product=function(i); printf("%d的阶乘是%d ",i,product); } }
3问题分析:按照书上的来,再多看看同学的就好了
3、实验练习:6.3.1-3
1问题的简单描述:编写程序,从键盘输入两个整数,调用gdc()函数求他们的最大公约数,并输出结果。
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; } void main() { int x,y; int fac; printf("请输入两个整数:"); scanf("%d,%d",&x,&y); getchar(); fac=gcd(x,y); printf("The great common divisor is%d",fac); }
3问题分析:temp可以用作a,b交换的中介。相除的最大公约数表示为:a=b;b=remainder;remainder=a%b
4、实验练习:6.3.1-4
1问题的简单描述:输入整数n,输出高度为n的等边三角形。
2实验代码:
#include<stdio.h> void trangle(int n) { int i,j; for(i=1;i<=n;i++) { for (j=0;j<n-i;j++) printf(" "); for (j=0;j<2*i-1;j++) printf("*"); putchar (' '); } } void main() { int n; printf("Please input int n: "); scanf("%d",&n); printf(" "); trangle(n); }
3问题分析:普通三角形,理清何时输出*即可
5、实验练习:6.3.2-1
1问题的简单描述:若正整数 A 的所有因子( 包括 1 但不包括自身,下同)之和为 B ,而 B 的因子之和为 A,则称 A 和 B 为一对亲密数。例如,6的因子之和为1+2+3=6,因此6与6为一对亲密数。求出500以内的所有亲密数对。
2实验代码:
#include<stdio.h> facsum(int m) { int sum=1,f=2; while (f<=m/2) { if (m%f==0) sum=sum+f; f=f+1; } return sum; } main() { int m=3,n,k; while (m<=500) { n=facsum(m); k=facsum(n); if (m==k&&m<=n) printf("%d %d ",m,n); m++; } }
3问题分析:按照模板一样中间加上void,会得不出结果,记得去掉。要了解facsum是什么意思,for循环从m=3才开始调用facsum。
6、实验练习:6.3.3-1
1问题的简单描述:编写程序,分别从键盘输入数据x和y,计算x的y次幂并输出。
2实验代码:
#include"stdio.h" long getpower(int x,int y) { if(y==1) return x; else x=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 ",num,power,answer); }
3问题分析:这波我是真的裂开了,幸好看了同学的,调用的递归函数方程为:x=x*getpower(x,y-1);
7、实验练习:6.3.3-2
1问题的简单描述:用递归方法计算学生的年龄。已知第一位学生年龄最小为10岁,其余学生一个比另一个大2岁,求第5位学生的年龄。
2实验代码:
#include<stdio.h> int age(int n) { int c; if (n==1) c=10; else c=age(n-1)+2; return c; } main() { int n=5,sage; sage=age(n); printf("第%d位学生的年龄为:%d ",n,sage); }
3问题分析:递归公式sage=age(n)
三、实验小结
实验报告圆满结束。非常感谢此次会作业的同学,谢谢他们对我这次作业编程过程中的帮助。我们有讨论、有质疑、有对喷、有理解,却没有打架、我很庆幸,选择了优秀而又负责的同学。同学们编程思维都很好,办事有效率,很负责,对我的很多问题都能予以分析、理解与肯定,例如:输入数据的合理性、函数与宏定义的应用、界面的美观方便;我们一起讨论,大力帮助。
在编码过程中,看别人实验报告可以让你很快发现错误,并且在发现问题后能够更快的提出解决方案,通过查看,我编写代码的质量以及速度都有着很大的提高。除此之外,C语言程序设计使我的思维方式也有所转变,在今后的编程中,我会增加对函数与宏定义的使用。