函数与宏定义实验报告

实验项目:函数与宏定义

姓名:张乐 实验时间:2021年5月27日

一、实验目的与要求

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

二、实验内容

1、实验6.3.1.2
问题描述:求N的阶乘。
实验代码:
#include"stdio.h"
#define N 5
long function(int i)
{
	static long f=1;
	f=f*i;
	return f;
}
void main()
{
	long product;
	int i;
	for (i=1;i<=N;i++)
	{
		product=function(i);
		printf("%d的阶乘是%d\n",i,product);
		
	}
}

运行图:
image

注意:首先要清楚阶乘定义,所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n,用公式表示就是:1×2×3×4×…×(n-2)×(n-1)×n=n!
2、实验6.3.1.4
问题描述:打印出等边三角形的图案。
实验代码:
#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');
	}
}
void main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d",&n);
	printf("\n");
	trangle(n); 
}

运行图:
image

算法思想: (1)设计以高度 n 为参数的一个函数,函数返回值为空,在函数体中实现等腰三角形的打印;图形的最终打印需要利用二层循环设计实现。
(2)图形共输出 n 行,外循环变量 i 表示 n 行的输出,循环变量的变化范围为 0~(n—1)。
(3)循环变量 j 表示每一行的“*”号输出。
(4) 在主函数中输入 n 作为实参,调用定义函数,打印等腰三角形。
3、实验6.3.3.2
问题描述:编写计算学生年龄的递归函数。
实验代码:
#include<stdio.h>
int age(int n)
{
	int c;
	if(n==1)
	c=10;
	else
	c=age(n-1)+2;
	return c;
}
void main()
{
	int n=5,sage;
	for(n=1;n<=5;n++)
	{
		sage=age(n);
		printf("第%d位学生的年龄为%d\n",n,sage);
	}
}
运行图:

image

算法分析:需要求第5个学生的年龄,age函数就一共被调用几次,最后一次是main函数调用的,其余的是在age函数中调用的。
4、实验6.3.3
问题分析:编写程序,分别从键盘输入数据x和y,计算x的y次幂并输出。
实验代码:
#include"stdio.h"
long getpower(int x,int y)
{
	if(y==1)
	return x;
	else
	y=x*getpower(x,y-1);
}
void main()
{
	int num,power;
	long answer;
	printf("输入一个数:");
	scanf("%d",&num);
	printf("输入幂次方:");
	scanf("%d",&power);
	answer=getpower(num,power);
	printf("%d^%d=%ld\n",num,power,answer); 
	 
}
运行图:

image

算法分析:运用函数的递归,使大于1的数不断自乘,直到y的值等于1时进行回溯.

三、辗转相除法

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。另一种求两数的最大公约数的方法是更相减损法。
-----参考来源:百度百科

四、实验小结

1、在本次的学习中,我发现自己速度好慢。我发现自己总是在一些细节的地方出错,经常忽略了这些地方,在检查时就总找不到错误之处。
2、不能总依靠书上的流程图,要有自己的思考过程。
3、要对一些实验的算法有深刻的理解,遇到不懂的地方要多琢磨。
posted @ 2021-06-03 20:39  梦醒于深夜  阅读(90)  评论(0编辑  收藏  举报