第六章 实验报告(函数与宏定义)

C程序设计实验报告

实验项目:函数与宏定义(第6章)

姓名:李宏远      实验地点:一教524      实验时间:5月27日

一、实验目的与要求

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

二、实验内容

1、实验练习:

1问题的简单描述:编写函数,求出从主调函数传来数值的阶乘值,然后传回主调函数并输出。
2实验代码:

#include"stdio.h"
#define N 5
long function(int i)
{
   static int f = 1;
   f = f * i;
   return f;	
} 
void main()
{
	long product;
	int i;
	for(i=1; i<=N; i++)
	{
		product=function(i);
		printf("%d!=%ld\n", i, product);
	}
}

3问题分析:数字不断相乘并输出,计算乘阶。题目中的N被固定为5,若是继续扩展,可以把N设的更大,以及考虑如何使用进位方法记录长数字。

2、实验练习:

1问题的简单描述:编写程序,输入两个整数,调用函数求它们的最大公约数,并输出结果。
2实验代码:

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

3问题分析:设计一个函数,使用辗转相除法求两个数的最大公约数。难点在于辗转相除法输出的数为b,循环结束的判定为“a%b=0”。

3、实验练习:

1问题的简单描述:输入整数n,设计函数,输出高度为n的等边三角形。
2实验代码:

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

3问题分析:难点在于设计循环输出空格和星号的函数。实际上输出的图形好像不等边,可以扩展。

4、实验练习:

1问题的简单描述:设计函数,若A的所有因子之和为B,且B的所有因子之和也为A,那么称A与B为一对亲密数,求500以内的所有亲密数对。
2实验代码:

#include<stdio.h>
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)
	{
	    k=facsum(m);
		n=facsum(k);
		if(n==m&&m<=k)
		printf("%d,%d \n",m,k);
		m++;	
	}	
} 

3问题分析:求因数合,并将因数合结果的因数合与自身比对,若相等,则输出,因为结果不能重复,因此要求m要小于k。

三、什么是辗转相除法:

辗转相除法又称欧几里得算法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。
计算公式:gcd(a,b)=gcd(b,a mod b)。——摘自百度百科

四、实验小结:

收获:经过长时间的练习,出现基础错误的次数明显减少,学会了函数和宏定义,可以实现更多,更复杂的程序运算。
不足:遇到新算法时需要反复研究才能明白其用法,单词的拼写仍不熟练。

五、近期个人学习小结:

无主张复习内容,课堂作业扩展深度普遍较低。无主张复习倾向。

posted @ 2021-06-01 06:21  苦力怕  阅读(70)  评论(0编辑  收藏  举报