第六章 函数与宏定义
第四次实验报告
实验项目:
1.函数的定义和调用
2.模块化程序设计
姓名:魏志远 实验地点: 教学楼514教室 实验时间:4月30日
一、实验目的与要求
1.函数的定义和调用
·调用area()函数求三角形的面积。
·在求面积函数中运用海伦公式。
2.模块化程序设计
·掌握C语言中定义函数的方法。
·掌握通过“值传递”调用函数的方法。
二丶实验内容
6.4.1实验练习
1.问题描述
一:编写程序,从键盘输出三角形的3条边,调用三角形面积函数求出其面积,并输出结果。
二:编写函数,求出从主调函数传来的数值i的阶乘值,然后将其传回主调函数并输出。
三:编写程序,从键盘输入两个整数,调用gcd()函数求它们的最大公约数,并输出结果。
四:输入函数n,输出高度为n的等边三角形。
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 x,y,z,ts; printf("请输入三角形的三条边:"); scanf("%f%f%f",&x,&y,&z); if(x+y>z||x-y<z) { ts=area(x,y,z); printf("area=%f",ts); } else { printf("输入数据有误!"); } }
#include <stdio.h> long function(int i) { static int f=1; f=f*i; return (f); } main() { int i,n,p; printf("请输入需要计算阶乘的数:"); scanf("%d",&n); for(i=1;i<=n;i++) { p=function(i); printf("%d的阶乘是:%d\n",i,p); } }
#include<stdio.h> int gcd(int a,int b) { int t,r; if(a<b) { t=b; b=a; a=t; } r=a%b; while(r!=0) { a=b; b=r; r=a%b; } return (b); } main() { int x,y; int fac; printf("please input two integers: "); scanf("%d%d",&x,&y); fac=gcd(x,y); printf("The great common divisor is:%d",fac); }
#include <stdio.h> void trangle(int n) { int i,j,k; for(i=1;i<=n;i++) { for(j=1;j<n+1-i;j++) { printf(" "); } for(k=1;k<=i*2-1;k++) { printf("*"); } printf("\n"); } } main() { int n; printf("请输入一个整数:"); scanf("%d",&n); trangle(n); }
3.问题分析
对于函数的调用时,静态常量和动态常量理解不清,导致不知道上面时候是静态常量,会保留下去不理解,所以不能编写正确代码。
6.4.2实验练习
1.问题描述
一:若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。求500以内的所以亲密数。
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+=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\n",m,n); } m++; } }
3.问题分析:编写代码时忘记进行二次定义,所以导致结果出不来。
三、实验小结
收获:对于函数的定义和函数的调用有了一定的了解,知道函数的定义可以使代码变得清晰易懂。并且,对于细节的把控有了一定的掌握和注意。
不足:不明白函数定义时常量是何种常量,静态常量和动态常量有细微而又宏大的差距,导致结果完全不同。
要去加深对于基本概念和理论的理解,在理解后去亲手尝试,才能更加深刻。