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

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

实验报告(四)

姓名:王曼霖 实验时间:2021.5.27 实验地点:一教524教室


实验目的:

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

实验6_5 求两个整数的最大公约数

#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("请输入两个整数\n",x,y);
	scanf("%d%d",&x,&y);
	fac=gcd(x,y);
	printf("The great common discover is %d",fac);
}

运行图

小结:

1、int型变量占两个字节的存储空间,但求的值太大时就存放不下,所以要用长整型整数来存放,long型变量占4个字节的存储空间。
2、在循环体中,每调用一次求阶乘函数就能求出指定值的阶乘值。
3、定义符号常量一方面可以增强程序的可读性,另一方面可以根据需要修改符号常量的值来求不同数的阶乘值,使程序具有通用性。
4、求阶乘函数的类型是长整型,它是有返回值的,不能写成调用语句,而应把函数当作表达式,把它放在表达式能出现的任何地方。
5、局部静态变量有全局的寿命和局部的可见性,退出funcation()函数后,它是不可见的,进入function()函数后,他又可见。这说明该局部静态变量没有被释放。


实验6_7 求500以内的亲密数对

若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则A与B为一对亲密数。

#include<stdio.h>
int facsum(int m)
{
	int sum=1,f;
    for(f=2;f<=m/2;f++)
	{
		if(m%f==0)
		{
			sum=sum+f;
		}
	}
	return sum;
}
main()
{
	int m=3,n,k;
	for(m=3;m<=500;m++)
	{
		n=facsum(m);
		k=facsum(n);
		if(m==k&&m<=n)
		{
	       printf("%d,%d\n",m,n);	
		}
	}
}

运行图

小结:

1、在facsum(m)模块中,求出m所有的因子,并将它们的和作为返回值。

2、在主函数中,for循环m=3开始调用facsum(m),再计算m是否有亲密数对。


实验6_6

问题描述:

输入n,输出高度为n的正三角形。

#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。\n");
	scanf("%d",&n);
	printf("\n");
	trangle(n);
}

运行图

小结:

1、首先注意头文件的使用,使用数学公式时,头文件应使用<math.h>。
2、首先三角形的行数是输入值,进行差错控制,输入值要为正整数。然后便是三角形内部,空格最大值应是输入值减一,然后下一行递减。
3、两个for循环中的j并不是同一个值,j为局部变量,只在某一个for循环中有效,所以内部循环中的第二个for循环,是将j从空格之后开始编译(如n=5的话,第一行会有四个空格,从第五个位置开始j=0开始生效,继续输入一个*号)。


辗转相除法

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。
假如需要求 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。

实验小结

1、C语言程序实验需要熟悉编码规则,具有一定的逻辑能力。熟悉关键词以及命名规则

2、实验涉及到数学公式是要注意头文件的使用,项目需要外源文件是命名时使用.h属性的文件拓展名保存。

3、当自己想不出问题的代码时,可以参照书本上提示的流程图。


个人学习小结

1、计划从头开始熟记关键词及变量、标识符的命名规则;掌握书本上已有的各项定义,利用课余时间熟悉代码,并提升自己的代码速度。

2、将之前做过的实验进行复习总结,再重新打一遍,重新构建逻辑框架。

3、希望老师可以给出我们复习重点,怎样有效的进行复习。重点加强代码部分的练习以及课本重点部分的复习,如宏定义部分以及数组、递归的使用。

posted @ 2021-06-07 00:04  余下的林  阅读(179)  评论(1编辑  收藏  举报