5

C语言设计实验报告

实验项目:C语言函数与宏定义实验报告

姓名:付余 实验地点:一教524

一、实验目的与要求

1、掌握函数的定义方法和调用规则

2、掌握在C语言程序中主调函数和被调函数之间进行数据传递的规则

3、了解函数的返回值及其类型并正确使用

4、了解局部变量和全局变量的作用及他们与存做分类的关系,理解变量的存在性和可见性的概念

二、实验内容

实验一:求两个数的最大公约数

代码

#include<stdio.h>
int gcd(int a,int b)
{
	int temp=0;
	int remainder=0;
	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,fac;
	printf("输入两个整数:");
	scanf("%d %d",&x,&y);
	fac=gcd(x,y);
	printf("公约数为:%d",fac);
	return 0;
}

问题分析:注意两个数中较大的数,以及循环的跳出

实验二:输出高度为n的等边三角形

代码

#include<stdio.h>
char trangle(int n)
{
	int i,j,k;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n-i;j++)
		printf(" ");
		for(k=1;k<=2*i-1;k++)
		printf("*");
		printf("\n");
	}
}
main()
{
	int n;
	char ch;
	printf("输入一个整数:");
	scanf("%d",&n);
	ch=trangle(n);
	printf("%c",ch);
	return 0; 
}

问题分析:只需注意如何控制高度

实验三:计算ackerman函数

代码

#include<stdio.h>
int ack(int n,int x,int y)
{
	int a;
	if(n==0)
	a=x+1;
	else if(n==1&&y==0)
	a=x;
	else if(n==2&&y==0)
	a=0;
	else if(n==3&&y==0)
	a=1;
	else if(n>=4&&y==0)
	a=2;
	else
	a=ack(n-1,ack(n,x,y-1),x);
	return a;
}
main()
{
	int n,x,y,result;
	printf("输入n,x,y:");
	scanf("%d %d %d",&n,&x,&y);
	result=ack(n,x,y);
	printf("ack(%d,%d,%d)=%d\n",n,x,y,result);
	return 0;
}

问题分析:注意条件语句的嵌套

实验四:模块化设计求定积分

代码

#include<stdio.h>
double f(double x);
double sab(double a,double b,int n)
{
	double h,result,x1,x2,x3=0,t;
	int k; 
	h=(b-a)/n;
	x1=f(a);
	x2=f(b);
	for(k=1;k<=n-1;k++)
	{
		t=a+k*h;
		x3+=f(t);
	}
	result=h*(x1+x2)/2+h*x3;
	return result;
}

#include<stdio.h>
#include<math.h>
#include"sab.h"
double f(double x)
{
	double result;
	result=x*x*exp(x);
	return result;
}
main()
{
	double a,b,result;
	int n;
	printf("输入a,b,n:");
	scanf("%lf,%lf,%d",&a,&b,&n);
	result=sab(a,b,n);
	printf("%lf",result);
	return 0;
}
#include<stdio.h>
#include<math.h>
#include"sab.h"
double f(double x)
{
	double result;
	result=1/(25+x*x);
	return result;
}
main()
{
	double a,b,result;
	int n;
	printf("输入a,b,n:");
	scanf("%lf,%lf,%d",&a,&b,&n);
	result=sab(a,b,n);
	printf("%lf",result);
	return 0;
}

问题分析:注意定义数据的类型,输入输出需一致

三、什么是辗转相除法

用较大数除以较小数,再用出现的余数去除除数,再用出现的余数去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

四、实验小结:本次实验知道了什么是辗转相除法,不足之处还有很多会一一改正

五、近期个人学习小结

近期学习到了很多,如循环语句,函数定义等,不足的地方也有很多,比较重点的地方重点复习,不太重要的地方也要初略复习。

posted @ 2021-05-31 22:58  阿萨德安全大青蛙  阅读(67)  评论(0编辑  收藏  举报