算法实验报告.docx
- 文档编号:6957883
- 上传时间:2023-01-13
- 格式:DOCX
- 页数:13
- 大小:98.28KB
算法实验报告.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% 成绩 日期
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 实验 报告