飞道的博客

南京邮电大学C语言实验报告3v2(仅供参考)

507人阅读  评论(0)

实验三 函数实验

一、 实验目的和要求
(1)掌握正确的函数定义与调用,需要时会正确使用函数声明。会正确设置形式参数,理解参数传递及程序的执行流程。
(2)理解各种不同存储类别变量的生命期与作用域
(3)进一步熟悉调试器的使用,会利用调试器进行查错改错,会跟踪程序运行的每一步,观察变量的变化情况。

二、实验环境(实验设备)
硬件: 微型计算机
软件: Windows 操作系统、Microsoft Visual Studio 2010
实验题目(1)【见实验教材实验四的题目2】:编程序exp4_2.c,巧用函数调用,打印不同行数和字符构成的等腰三角形。具体要求:定义一个函数原型void DrawTriangle (int n,char c); ,实现功能为打印一个n行的由字符c组成的等腰三角形。主程序调用该函数,实现打印5行“ '* ’ ”、10行
“ '# ’ ”的等腰三角形。
实验解答:
① 源程序exp4_2.c的代码是:

#include<stdio.h>
void DrawTriangle(int n,char c);
int main()
{
   
	DrawTriangle(5,'*');
	printf("\n");
	DrawTriangle(10,'#');
    return 0;
}
void DrawTriangle(int n,char c)
{
   
	int i,j;
	for(i=1;i<=n;i++)
	{
   
		printf("                                             ");
		for(j=1;j<=n-i;j++)
			printf(" ");
		for(j=1;j<=2*i-1;j++)
			printf("%c",c);
		printf("\n");
	}
	return;
}

②主函数中只保留打印’*’组成三角形的一条调用语句,然后改变控制行数的第一个实参,测试当该值为多大时,你的屏幕无法正常显示该等腰三角形,试分析原因。(提示:模拟DOS界面可以查看属性,观赛屏幕缓冲区的大小和窗口大小,再进行测试分析)。如果希望刚才的实参提供后仍然能正常显示,可以有什么办法?

当值为81时,我的屏幕无法正常显示该等腰三角形。因为我的屏幕缓冲区的宽度为160和窗口宽度为158。
当我把屏幕缓冲区的宽度调整为162(或更大)后,刚才的实参提供后仍然能正常显示。

实验题目(2)【见实验教材实验四的题目5】:编程序exp4_5.c,验证歌德巴赫猜想:2000以内的正偶数(不包括2)都能够分解为两个质数之和。(算法提示:将整数分解为两个整数,然后判断它们是否均为质数。若是,则满足题意并输出;否则重新进行分解和判断。其中,判断一个整数是否为质数采用函数实现。每个偶数只要得到一种分解就停止,不必要求出该偶数的所有质数和组合)。
实验解答: 源程序exp4_5.c的代码是:

#include<stdio.h>
#include<math.h>
int judgeprime(int n);
int main()
{
   
	int x,n;
	for(x=4;x<=2000;x+=2)
		for(n=2;n<x;n++)
			if(judgeprime(n))
				if(judgeprime(x-n))
					{
   
						printf("%d=%d+%d\n",x,n,x-n);
						break;
				    }
	printf("\n");
	return 0;
}
int judgeprime(int n)
{
   
	int i,k;
	int judge=1;
	if(n==1)
		judge=0;
	k=(int)sqrt(n);
	for(i=2;judge&i<=k;i++)
		if(n%i==0)
			judge=0;
	return judge;
}

实验题目(3)【见实验教材实验四的题目7】:编程序exp4_7.c,用递归方法实现求解两个整数的最大公约数,并与迭代方法作比较。
实验解答:
①程序exp4_7.c代码如下:

#include<stdio.h>
int GCD(int m,int n);
int main()
{
   
	int b,x,y;
	printf("请输入两个正整数:");
	scanf("%d,%d",&x,&y);
	b=GCD(x,y);
	printf("最大公约数为%d\n",b);
	return 0;
}
int GCD(int m,int n)
{
   
	if(!(m%n))
		return n;
	else
		return(GCD(n,m%n));
}

多次运行程序,输入不同的数据,请填写下表
你输入的数据 你程序的输出结果
36,48 12
150,63 3
32,24 8
1888,2608 16

实验题目(4)【见实验教材实验四的题目8】:用调试器观察程序exp4_8.c的运行过程,并记录各种变量在每一步执行时的变化情况,在表格中填写每一个跟踪步每个变量对应的值。程序代码如下。

#include <stdio.h>
int a = 1;
int f(int a)
{
   
   auto int b = 2;
   static int c = 3;
   a = a+1;
   b = b+1;
   c = c+1;
   return (a+b+c);     
}

int main()
{
   
   int i;
   for (i=0;i<3;i++)
  {
   	
      a = a+2;
      printf("%d \n",f(a));
  }
   return 0;
}

提示:首先选择“调试”菜单,再选择“窗口”子菜单,再选择打开“监视1”窗口,在其中输入&a、&b、&c、&i进行观察,点开这些地址符前面的+号,就可以看到对应变量的值,注意观察地址值的变化以区分目前空间是哪个变量在作用域,尤其同名变量。下表中在某位置该变量不可见则不填内容。

四、实验小结(包括问题和解决方法、心得体会、意见与建议、实验出错信息及解决方案等)
(一)实验中遇到的主要问题及解决方法

1:对函数中实参与形参应用不清楚,加强概念理解后成功写成程序代码。
2:不太会调整屏幕缓冲区的大小和窗口大小,询问同学后,经自己尝试,解决了问题。

(二)实验心得

使用函数,首先要熟悉函数定义与调用的概念,然后根据题目要求,编写程序代码。注意多尝试,多发现,多调整。

(三)意见与建议(没有可省略)

五、支撑毕业要求指标点
1.2-H掌握计算机软硬件相关工程基础知识,能将其用于分析计算机及应用领域的相关工程问题。
3.1-M掌握设计/开发复杂工程问题解决方案所需要的专业知识和开发工具。


转载:https://blog.csdn.net/qq_46392282/article/details/109364930
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场