C语言第四次实验报告

C语言第四次实验报告

姓名:雒斌杰 实验地点:一教524 实验时间:2021.5.27

一、实验的目的与要求

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函数,用代码敲出最大公约数。

posted @ 2021-06-09 11:30  雒斌杰的博客  阅读(148)  评论(1编辑  收藏  举报