C语言第四次实验报告
C语言第四次实验报告
一、实验的目的与要求
1、巩固对函数概念的理解,增强程序设计能力
2、学会调用函数输出三角形,并用for循环的嵌套输出指定的结果
3、掌握C语言中定义函数和通过“值传递”调用函数的方法。
4、巩固模块化程序设计的方法 。
5、掌握递归函数和进一步练习阅读检查与调试修改C程序的方法。
二、实验内容:
1、实验练习6.3
1、问题简单描述:手动输入三角形三条边,用海伦公式求出面积
2、实验代码:
/* SY6-3.C */
#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("a,b,c:\n");
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 errot!");
}
3.问题分析:对海伦公式使用不流畅,注意三角形是否能形成三角形,还需要判断一下,细节
2.实验练习6.4
1、问题简单描述:编写程序,输出1-5的阶乘。
2、实验代码:
/* sy6.4 */
#include "stdio.h"
#define N 5
long function (int i)
{
static long f=1;
f=f*i;
return f;
}
int main()
{
long product;
int i=1;
for(i=1;i<=N;i++)
{
product=function(i);
printf("%d的阶乘是%d\n",i,product);
}
}
3.问题分析:
3、实验练习:6.5
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("please input two integers:");
scanf("%d,%d",&x,&y);
fac=gcd(x,y);
printf("the great common divisor is%d",fac);
}
3.问题分析:辗转相除法的应用
4、实验练习6.6
1、问题简单描述:手动输入整数n,则输出高度为n的等边三角行
2、实验代码:
/* sy6-6.c*/
#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');
}
}
main()
{
int n;
printf("请输入一个整数n:");
scanf("%d",&n);
printf("\n");
trangle(n);
}
3.问题分析:将空格和符号搭配使用。
5.实验练习6.7
1、问题简单描述:若正整数 A 的所有因子( 包括 1 但不包括自身,下同)之和为 B ,而 B 的因子之和为 A,则称 A 和 B 为一对亲密数。 求出500以内的所有亲密数对。
2、实验代码:
/* sy6-7.c */
#include <stdio.h>
int facsum(int m)
{
int sum=1,f=2;
while(f<=m/2)
{
if(m%f==0)
sum=sum+f;
f++;
}
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.问题分析:明白亲密数对的含义,facsum(n)函数的理解;
三、辗转相除法
辗转相除法又称欧几里得算法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。
欧几里得算法是用来求两个正整数最大公约数的算法。古希腊数学家欧几里得在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里得算法。
扩展欧几里得算法可用于RSA加密等领域。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
四、实验小结
复习了辗转相除法,不仅在数学应用,代码实现了,学习了facsum函数,用代码敲出最大公约数。