数据结构实验报告[1]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
云南大学
数据结构实验报告
第一次实验
学号:
姓名:
一、实验目的
1、复习变量、数据类型、语句、函数;
2、掌握函数的参数和值;
3、了解递归。
二、实验内容
1、(必做题)采用函数统计学生成绩:输入学生的成绩,计算并输出这些学生的最低分、最高分、平均分。
2、(必做题)采用递归和非递归方法计算k阶裴波那契序列的第n项的值,序列定义如下:f0=0, f1=0, …, fk-2=0, fk-1=1, fn= fn-1+fn-2+…+fn-k(n>=k) 要求:输入k(1<=k<=5)和n(0<=n<=30),输出fn。
3、(选做题)采用递归和非递归方法求解汉诺塔问题,问题描述如下:有三根柱子A、B、C,在柱子A上从下向上有n个从大到小的圆盘,在柱子B和C上没有圆盘,现需将柱子A上的所有圆盘移到柱子C上,可以借助柱子B,要求每次只能移动一个圆盘,每根柱子上的圆盘只能大的在下,小的在上。
要求:输入n,输出移动步骤。
三、算法描述
(采用自然语言描述)
1、①先输入需统计的学生人数。
②根据学生人数输入成绩,计算成绩总和和平均分。
③比较成绩大小,得出最低分和最高分。
④输出计算结果。
2、⑴①写出不同情况下求k阶裴波那契序列的第n项的值的递归函数。
②输入k和n。
③输出计算结果。
四、详细设计
(画出程序流程图)
1、
2、⑴
五、程序代码
(给出必要注释)
1、
#include <stdio.h>
#include <stdlib.h>
#define N 100 /*先预计输入人数在0~100内,如果人数多于100再将100改成更大的数*/
void main()
{int i,x[N],a;
int max,min;
float ave,sum=0.0;
printf("请输入不多于%d的学生人数:",N);
scanf("%d",&a); /*输入学生数*/
for(i=0;i<a;i++)
{printf("请输入第个%d学生成绩(整数):",i+1);
scanf("%d",&x[i]);
sum=sum+x[i];} /*输入分数*/
ave=sum/a; /*计算平均分*/
max=x[0];
min=x[0];
for(i=0;i<a;i++)
{if(x[i]>=max)
{max=x[i];}
if(x[i]<=min)
{min=x[i];} }
printf("平均分是:%f",ave);
printf("最高分是:%d",min);
printf("最低分是:%d",max);/*输出平均分,最低分,最高分*/ return 0;
}
2、
⑴
#include <stdio.h>
#include <stdlib.h>
int k;
int Fibonacci (int n1)
{if(n1<k-1)
return 0;
else if(n1==k-1||n1==k)
return 1;
else if(n1==k+1)
return 2;
else
return (2*Fibonacci(n1-1)-Fibonacci(n1-k-1));
}
int main()
{int n,fn=0;
printf("请输入整数k(大于等于1):");
scanf("%d",&k);
printf("请输入整数n(大于k):");
scanf("%d",&n);
while(k==1)
{printf("f%d=1\n",n);
break;}
while(k>1)
{fn=Fibonacci(n);
printf("f%d=%d",n,fn);
break;}
return 0;
}
六、测试和结果
(给出测试用例以及测试结果)
1、
2、
七、用户手册
(告诉用户如何使用程序)
1、打开并运行程序,根据提示输入学生人数和学生成绩,每次输入后都按enter键。
2、打开并运行程序,根据提示输入k和n,每次输入后都按enter键。