算法实验报告.docx
《算法实验报告.docx》由会员分享,可在线阅读,更多相关《算法实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
算法实验报告
常熟理工学院
计算机科学与工程学院
实验报告
2018-2019学年第1学期
实验报告要求
1.在实验课前要认真预习实验内容,熟习实验的原理、方法及算法等。
2.根据实验指导书要求,认真完成实验内容;实验结束后,按照实验报告的要求认真填写相关内容。
3.实验时要带好实验指导书、实验报告本。
4.实验时要严肃认真,不得互相抄袭。
5.实验课的成绩由实验预习、实验过程、实验结果和实验报告四部分构成。
实验名称
实验一
实验目的
求最大公约数和最小公倍数
实验设备
机房
实验日期
2018年9月5日
一、实验预习
二、实验内容(原理、方法、框图)
三、实验过程(步骤、实现代码)
#include
#include
intmain()
{
intm,n,a,b,c,d;
printf("Pleaseentertwointeger:
");
scanf("%d%d",&m,&n);
d=m*n;
if(m{
a=n;
n=m;
m=a;
}
for(b=m%n;b!
=0;b=m%n)
{
m=n;
n=b;
}
c=d/n;
printf("最大公约数为%d\n",n);
printf("最小公倍数为%d\n",c);}
}
#include
#include
intmain()
{
inta,b,num1,num2,temp;
printf("pleaseinputtwonumber:
\n");
scanf("%d%d",&num1,&num2);
if(num1{
temp=num1;
num1=num2;
num2=temp;
}
a=num1;
b=num2;
while(b!
=0)
{/*利用辗除法,直到b为0为止*/
temp=a%b;
a=b;
b=temp;
}
printf("最大公约数:
%d\n",a);
printf("最小公倍数:
%d\n",num1*num2/a);
}
五、心得体会(实验收获)
通过本次实验我再一次了解了求最大公约数和最小公倍数的原理。
了解了辗转相除法的算法机制,收获很大
实验预习20%
实验过程20%
实验结果30%
实验报告30%
成绩
日期
实验名称
实验二
实验目的
实验设备
实验日期
一、实验预习
二、实验内容(原理、方法、框图)
斐波那契数列:
F[n]=F[n-1]+F[n-2](n>=3,F[1]=1,F[2]=1)任意输入一个n,求F[n].分别采用数组和指针来做,并比较时间复杂度和空间复杂度
三、实验过程(步骤、实现代码)
用数组方式实现:
#include
#include
intmain()
{
intn;
do
{
printf("请输入任意一个整数n,用以求F[n]:
");
scanf("%d",&n);
if(n<3||n>46)
printf("您输入的n数值范围有误,请重新输入\n");
}while(n<3||n>46);
//当n值为临界值47时,溢出
fun(n);
return0;
}
voidfun(intn)
{
inti;
inta[n+1];
a[1]=1;
a[2]=1;
for(i=3;i<=n;i++)
{
a[i]=a[i-1]+a[i-2];
}
printf("F[n]数值为:
%d\n",a[n]);
}
用指针方式实现:
#include
#include
intmain()
{
intn;
do
{
printf("请输入任意一个整数n,用以求F[n]:
");
scanf("%d",&n);
if(n<3||n>46)
printf("您输入的n数值范围有误,请重新输入\n");
}while(n<3||n>46);
//当n值为临界值47时,溢出
fun(n);
return0;
}
voidfun(intn)
{
int*F=(int*)malloc((n)*sizeof(int));//Applynmemoryspace.
int*p,*q,*now;
p=F;
q=p+1;
now=q+1;
*p=1;
*q=1;
printf("该数列为:
%d%d",*p,*q);
while(now-F{
*now=*p+*q;
printf("%d",*now);
p++;
q++;
now++;
}
}
四、实验结果(遇到的问题及解决方法)
五、心得体会(实验收获)
实验预习20%
实验过程20%
实验结果30%
实验报告30%
成绩
日期
实验名称
实验三利用动态内存分配对n个整数进行排序,输出结果。
实验目的
实验设备
实验日期
2018年10月31日
三、实验过程(步骤、实现代码)
以数组形式实现
#include
#include
intmain()
{
int*a=NULL;
inti=0,temp=0,j=0;
//动态创建一个具有10个int类型的数组
a=malloc(sizeof(int)*10);
if(a==NULL)
{
fprintf(stderr,"memoryerror!
");
return-1;
}
printf("请输入10个整数元素:
");
//读取10个元素的数值
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++){
for(j=0;j<9-i;j++){
if(a[j]>a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
printf("排序后输出:
");
for(i=0;i<10;i++){
printf("%d",a[i]);
}
//释放动态分内的空间
free(a);
return;
}
以链表形式实现
#include
#include
typedefstructnode
{
intdata;/*data为数据元素*/
structnode*next;
}LNode,*LinkList;
LinkListCreat(void)/*创建链表,结束标志为当输入的数据为0*/
{
LinkListH,p1,p2;
intn=0;
p1=p2=(LinkList)malloc(sizeof(LNode));
printf("输入数据:
");
scanf("%d",&p1->data);
H=NULL;
while(p1->data!
=0)
{
n=n+1;
if(n==1)
H=p1;
else
p2->next=p1;
p2=p1;
p1=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p1->data);
}
p2->next=NULL;
return(H);
}
LinkListSort(LinkListSL)/*递增排序函数:
入口参数:
链表的头指针,此为链表中的排序函数*/
{
LinkListp,q;
inttemp;
for(p=SL;p!
=NULL;p=p->next)
{
for(q=p->next;q!
=NULL;q=q->next)
{
if(p->data>q->data)
{
temp=q->data;
q->data=p->data;
p->data=temp;
}
}
}
returnSL;
}
intmain()
{
LinkListL,S,K;
L=Creat();
printf("初始化的单链表数据序列为:
\n");
for(S=L;S!
=NULL;S=S->next)
printf("%d",S->data);
Sort(L);
printf("\n按递增顺序排序后的序列为:
\n");
for(K=L;K!
=NULL;K=K->next)
printf("%d==>",K->data);
return0;
}
四、实验结果(遇到的问题及解决方法)
以数组形式实现
以链表形式实现
五、心得体会(实验收获)
实验预习20%
实验过程20%
实验结果30%
实验报告30%
成绩
日期