函数与宏定义

C程序设计实验报告
实验项目:函数与宏定义
姓名:张依君 实验地点:524 实验时间:2021.5.27
一、实验目的与要求(10分)
1、掌握函数的定义和调用规则
2、掌握在C语言程序中主调函数和被调函数之间进行数据传递的规则
3、了解局部变量和全局变量的作用域及它们与存储分类的关系,理解变量的存在性和可见性的概念
4、理解内部函数和外部函数,掌握外部函数的编译和连接方法
二、实验内容(选择你认为本次实验中最具代表性的4个实验项目进行分析 50分)
1、实验练习:6.5
1问题的简单描述:编写程序,从键盘输入两个整数,调用gcd()函数求它们的最大公约数,并输出结果
2实验代码:

int gcd(int a,int b)
{
	int temp;
	int remainder;
	if(a<b)
	{
		a=a^b;
		b=a^b;
		a=a^b;
	}
	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:",x,y);
	
	scanf("%d,%d",&x,&y);
	fac=gcd(x,y);
	printf("The great common divisor is%d",fac);

3问题分析:首先调用gcd()函数求两个整数的最大公约数,其次使用辗转相除法求两个整数的最大公约数,并且最大公约数函数的类型是整型。
2、实验练习:6.7
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; 
}
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(m),返回给定正整数m的所有因子,然后编制主函数,调用函数facsum(),寻找并输出500以内的所有亲密数对
3、实验练习:6.11
1问题的简单描述:用递归方法计算学生的年龄。已知第1位学生的年龄最小为10岁,其余学生一个比另一个大2岁,求第5位学生的年龄。
2实验代码:

int age(int n)
{
	int c;
	if(n==1)
	c=10;
	else
	c=age(n-1)+2;
	return c;
 }
 main()
 {
 	int n=5,sage;
 	sage=age(n);
 	printf("第%d位学生的年龄为%d\n",n,sage);
  } 

4、实验练习:6.12
1问题的简单描述:设计程序求Acm(2,1)和Acm(3,2)
2实验代码:

Acm(int m,int n)
{
	unsigned a;
	if(m==0)
	  a=n+1;
	 else if(n==0)
	   a=Acm(m-1,1);
	  else if(m>0&&n>0)
	 a=Acm(m-1,Acm(m,n-1));
	     else return a;
}
main()
{
	unsigned int s1,s2;
	s1=Acm(2,1);
	s2=Acm(3,2);
	printf("Acm(2,1)=%d\nAcm(3,2)=%d",s1,s2); 
}


3问题分析:一开始运用递归公式编写递归函数时不知如何下手,认真分析了流程图后按着步骤写出来

三、什么是辗转相除法(摘要介绍,并注明出处 10分)
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。

四、实验小结
这次课主要学习了函数定义和函数调用,一开始函数的嵌套调用和递归调用一脸懵逼,对概念不清楚后来在进行了几个试验后有了一定的了解,通过这节课,也学习了什么是辗转相除法,每个实验几乎都运用了循环语句也让自己更熟悉
五、近期个人学习小结(学习收获与不足,计划如何复习,希望老师在哪部分加强训练和给与什么方面的帮助 10分)
这么长时间的学习不仅学习了书本上的理论知识,还通过实验学习了如何敲代码将程序运行出来,在后面的学习感觉自己力不从心,对于第六章的学习不是很能听得懂,自己也应该多看课本巩固知识。

posted @ 2021-06-06 13:22  AChenglazyz  阅读(94)  评论(0编辑  收藏  举报