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为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
四、实验小结:本次实验知道了什么是辗转相除法,不足之处还有很多会一一改正
五、近期个人学习小结
近期学习到了很多,如循环语句,函数定义等,不足的地方也有很多,比较重点的地方重点复习,不太重要的地方也要初略复习。