Live2D

实验报告五

实验内容:6.3.1练习1、2、3、4 6.3.2练习1、2、3 6.3.3练习1、2、3

姓名:林冷枫

实验时间:2020-4-21

实验时间:2020-4-21

实验地点:家

一、实验目的与要求

1.掌握函数的定义方法和调用规则。
2.掌握C语言程序中主调函数和被调函数之间进行数据传递的规则。
3.了解函数的返回值及其类型,并正确使用。
4.了解局部变量和全局变量的作用域及它们与存储分类的关系, 理解变量的存在性和可见性 的概念。
5.练习递归函数的使用。
6.理解宏的概念,掌握定义无参宏和带参宏的方法。
7.理解文件的概念,并掌握其用法。
8.理解内部函数和外部函数,掌握外部函数的编译和连接方法

二、实验内容

实验6.3.1练习1

  1. 问题的简单描述:已知三角形的3条边,求三角形的面积
  2. 实验代码
#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;
}
int main()
{
	float a,b,c,ts;
	printf("输入三角形的三边:");
	scanf("%f %f %f",a,b,c);
	if((a+b)>c&&(a+c)>b&&(c+b)>a){
		ts=area(a,b,c);
		printf("area=%f",ts);
	}else {
		printf("Data error");
	}

	return 0;
}

3.问题分析:熟练使用头文件

实验6.3.1练习2

  1. 问题的简单描述:求N的阶乘

  2. 实验代码

 #define N 5
long function(int i)
{
	static long f=1;
	f*=i;
	return f;
} 
int main()
{
	int i,product;
	for(i=1;i<N;i++){
		product=function(i);
		printf("%d的阶乘是%d\n",i,product);
	}
	return 0;
}
  1. 问题分析:正确理解宏定义

实验6.3.1练习3

  1. 问题的简单描述:求两个整数的最大公约数

  2. 实验代码

   int gcd(int a,int b)
   {
   	int temp;
   	int remainder;
   	if(a<b){
   		temp=b;
   		b=a;
   		a=temp;
   	}
   	do
   	{
   	 remainder=a%b;
   	 a=b;
   	 b=remainder;
   	}while(remainder!=0);
   	return b;
   }
       int main()
   {
   	int a,b,fac;
   	printf("输入两数:\n");
   	scanf("%d %d",&a,&b);
   	fac=gcd(a,b);
   	printf("\nThe gerat common divistor%d",fac);
   	return 0;
   }
  1. 问题分析:无

实验6.3.1练习4

  1. 问题的简单描述:打印出等边三角形的图案

  2. 实验代码

    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("*");
    		}
    		printf("\n");
    	}
    }
     void main()
    {
    	int n;
    	printf("请输入一个整数:");
    	scanf("%d",&n);
    	printf("\n");
    	trangle(n);
    }
    
  3. 问题分析:无

实验6.3.2练习1

1. 问题的简单描述:求500以内的所以亲密数对。

2. 实验代码
     int facsum(int m)
    {
    	int sum=1,f=2;
    	while(f<=m/2)
    	{
    	if(m%f==0)
    	sum=sum+f;
    	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.3.2练习2

  1. 问题的简单描述:利用复化梯形公式计算定积分。

  2. 实验代码

#include<stdio.h>
double f(double x);
double sab(double a,double b,int n)
{
	double h,result,x1,x2,x3=0,t,k;
	h=(b-a)/n;
	x1=f(a);
	x2=f(b);
	for(k=1;k<=n-1;k++)
	{
		t=a+k*h;
		x3=x3+f(t);
	}
	result=h*(x1+x2)/2+h*x3;
	printf("%lf",result);
	}
     #include<math.h>
     #include"sab.h"
double f(double x)
{
	double result;
	result=x*x*exp(x);
	return result;
}
void main()
{
	double a,b,result;
	int n;
	printf("Please input double a,b and integer n:");
	scanf("%lf,%lf,%d",&a,&b,&n);
	result=sab(a,b,n);
	printf("sab(%lf,%lf,%d)=%lf",a,b,n,result);
}
     #include"sab.h"
double f(double x)
{
	double result;
	result=1/(25+x*x);
	return result;
}

问题分析:关于这题所说的复化梯度公式没怎么理解,在数学学习中没见过,所以知其然而不知其所以然

实验6.3.3练习1

  1. 问题的简单描述:编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入和输出。

  2. 实验代码

    #include<stdio.h>
    long getpower(int x,int y)
    {
    	long s=0;
    	if(y==1)
    	   s=x;
    	   
    	else s=x*getpower(x,y-1);
    	return s; 
    }
        int main()
    {
    	int num,power;
    	long answer;
    	printf("输入一个数:\n");
    	scanf("%d",&num);
    	printf("输入幂次方:\n");
    	scanf("%d",&power);
    	answer=getpower(num,power);
    	printf("%d^%d=%ld\n",num,power,answer);
            return 0;
    }
    

3.问题分析:无

实验6.3.3练习2

  1. 问题的简单描述:编写计算学生年龄的递归函数
  2. 实验代码
int age(int n)
{
	int c;
	if(n==1)
	  c=10;
	else
	  c=age(n-1)+2;
	return c;
}
int main()
{
	int n=5,sage;
	sage=age(n);
	printf("第%d位学生的年龄为%d\n",n,sage);
    return 0;
}

3.问题分析:无

汉诺塔

  1. 实验代码
#include<stdio.h>
void func(int n,char a,char b,char c);
int main()
{
	int n;
	printf("输入移动的块数:\n");
	scanf("%d",&n);
	func(n,'a','b','c');
	return 0;
}
void func(int n,char a,char b,char c)
{
	if(n==1){
		printf("%c->%c\n",a,c);
	}else{
		func(n-1,a,c,b);
		printf("%c->%c\n",a,c);
		func(n-1,b,a,c);
	}
}
  1. 上网查了核心算法

三、实验小结

关于此次实验发现个人对于递归还不能很好的处理。理解不够深刻。

posted @ 2020-04-26 16:10  林冷枫  阅读(229)  评论(0)    收藏  举报