太原理工大学算法实验报告

合集下载

太原理工数据实验报告二

太原理工数据实验报告二

实验报告二课程名称:数据结构实验名称:数据结构实验地点:计算机110机房专业班级:计科Z1501 学号:2015001909 学生姓名:刘元瑞指导教师:孟亮2016年12 月23 日2.编写递归算法,计算二叉树中叶子结点的数目。

#include <stdio.h>#include<malloc.h>struct node{char info;struct node *llink, *rlink;};typedef struct node NODE;NODE *create(){ //构造二叉树char x;NODE *p;scanf("%c", &x);printf("%c", x); //打印出已输入的二叉树if(x!='.'){p=(NODE *)malloc(sizeof(NODE));p->info=x;p->llink=create();p->rlink=create();}else p=NULL;return p;}int run(NODE *t){static int count=0;if(t){run(t->llink); //递归遍历左子树,直到叶子处run(t->rlink); //递归遍历右子树,直到叶子处if(t->llink ==NULL && t->rlink == NULL) {count++;}}return count;}main(){ NODE *T;int left_number;printf("请输入一棵树:\n" );T=create();printf("\n");if(!T) printf("This is a empty binary tree.");else{left_number=run(T);printf("\n这棵树共有%d 个子叶. \n", left_number);}printf("\n");}3.编写递归算法,在二叉树中求位于先序序列中第K个位置的结点。

太原理工大学 计算机软件技术基础 顺序栈的入栈与退栈及读栈顶元素 实验报告

太原理工大学  计算机软件技术基础  顺序栈的入栈与退栈及读栈顶元素  实验报告

太原理工大学现代科技学院计算机软件技术基础课程实验报告专业班级学号姓名指导教师实验名称 顺序栈的入栈与退栈及读栈顶元素 同组人 专业班级 学号 姓名 成绩 实验目的与要求:通过对栈的编程练习,加强对栈的特点、顺序存储结构及其基本运算的理解和掌握。

使用C 语言根据相应算法编写一个程序,实现建栈、入栈、退栈及读栈顶元素。

要求仔细阅读下面的内容,编写一个C 程序,上机调试通过,并观察其结果,写出实验报告书。

实验内容:建立一个容量为m 的顺序栈,首先在其中压入5个元素,然后作退栈运算和读栈顶元素。

具体要求: ① 根据顺序栈的入栈、退栈、读栈顶元素算法编写一个C 程序,并上机调试。

② l 编写的C 程序要求建立一个容量不小于5的顺序栈,首先用入栈算法在其中压入5个元素,然后读栈顶元素,接着作退栈运算,并输出退栈结束后的栈顶元素。

③ l 实验完成后,写出实验报告书。

上机程序: #include "stdlib.h" void init_stack(s,m,top) int *s;int m,*top; {s=malloc(m*sizeof(int)); *top=0; } void push(s,m,top,x) int s[],x;int m,*top; {if(*top==m){printf("stack-overflow\n");return;} *top=*top+1; s[*top-1]=x;return;}……………………………………装………………………………………订…………………………………………线………………………………………void pop(s,top,y)int s[],*y;int *top;{if(*top==0){printf("stack-underflow\n");return;} *y=s[*top-1];*top=*top-1;}void rea(s,top,y)int s[],*y;int *top;{if(*top==0) {printf("stack empty \n");return;} *y=s[*top-1];}main(){int x,s[10];int m,*y,*top,i;m=10;init_stack(s,m,top);/*scanf("%d",&x); */push(s,m,top,2);/*scanf("%d",&x); */push(s,m,top,3);push(s,m,top,4);push(s,m,top,5);push(s,m,top,6);/*for(i=0;i<5;i++){ scanf("%d",&x);push(s,m,top,x);} */rea(s,top,y);printf("y=%d",*y); printf("\n");pop(s,top,y);pop(s,top,y);rea(s,top,y);printf("y=%d",*y); printf("\n"); getch();return;}实验结果:。

太原理工大学计算机数值方法实验报告

太原理工大学计算机数值方法实验报告
2.比较计算结果,对不同方法进行比较分析;
3.实验完成,提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训。
2、实验内容和原理:
(1)Gauss消元法:基本思想为:对于n阶线性方程组,只要各步主元素不为0,经过n-1步消元,就可以得到一个等价的的系数矩阵为上三角形矩阵的方程组,然后再利用回代过程即可求得原方程的解。时间复杂度约为O(n3)。
return 0;
}
(2)二分法:
#include<stdio.h>
#include<math.h>
#define esp 1e-3 //精度
double f(double x) //原函数
{
return (x*x*x+4*x*x-10);
}
double root(double (*fun)(double),double left,double right,double deviation)//用二分法求方程根
return x0; //满足精度要求时返回Xn+1的值
}
int main()
{
double x0=1.5;//初始近似值
double e=pow(10,-3); //精度
printf("初始近似值为:%lf\n",x0);
printf("近似根为:%lf\n",newton(x0,e));
return 0;
{ //其中形参*fun为指向原函数的指针
double x,y;
while(fabs(right-left)>deviation)//当不满足精度要求继续执行循环体
{

太原理工大学数值计算试验报告

太原理工大学数值计算试验报告

TAIYUAN UNIVEaSIIY OF TECHNOLOGY本科实验报告计算机数值方法课程名称:实验项目:方程求根,线性方程组的直接求解, 线性方程组的迭代求解,代数插值和最小二乘法拟合实验地点:软件楼208 _______________专业班级:学号:学生姓名:___________________________指导教师:李志崔冬华2015年6月5 日实验内容和要求(必填)目的:《数值计算方法》是一门实践性和实用性都很强的课程,学习的目的在于应用已有的理论基础和技术方法,实现对实际计算问题的计算机求解。

本实验配合《计算数值方法》课堂教学,通过上机实践实验环节,巩固课堂和书本上所学的知识、加强实践能力、提高解决实际计算问题的水平、启发创新思想。

其基本目的是:(1)培养理论联系实际的思路,训练综合运用已经学过的理论和实际知识去分析和解决实际问题的能力。

(2)帮助学生全面消化已学的相关课程内容,深刻理解计算数值方法课程的内涵,培养使用电子计算机进行科学计算和解决问题的能力。

(3)进行基本技能训练和巩固。

使学生得到选择算法、编写程序、分析数值结果、写数值试验报告、课堂讨论等环节的综合训练。

要求:(1)应用结构化程序设计编出通用程序,源程序要有详细的注释和说明;(2)比较计算结果,分析数值解误差的原因;(3)实验完成,要求提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训。

实验原理(必填)选择上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度lx*-x n l<0.5x10-5主要仪器设备笔记本计算机实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页)迭代法:#include "stdafx.h"#include"stdio.h"#include〃math.h〃#include〃iostream〃using namespace std;float main()(float a;cin>>a;float t, x;x=a;do(x=sqrt((10-x*x*x)/4);t=a;a=x;}while(fabs(a-t)>0.5*1e-5);printf(〃x=%f〃,a); system(〃pause〃);)割线法:#include "stdafx.h"#include〃stdio.h〃#include〃math.h〃#include〃iostream〃using namespace std;float main()(float c,a=1.0,b=2.0;//cin>>a>>b;while(1)(c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b-(a*a*a+4*a*a));if (fabs(b-c)<0.5*0.000001) break;b=c;)cout<<c;)实验结果和分析实验结果:心得体会(遇到的问题和解决方法)使用不同的方法,可以不同程度的求得方程的解,不同的方法速度不同。

计算数值实验报告(太原理工大学)

计算数值实验报告(太原理工大学)

本科实验报告课程名称:计算数值方法实验地点:综合楼五层506室专业班级:计科1002 学号:2010001414 学生姓名:xxx指导教师:王峥2012 年 6 月20太原理工大学学生实验报告2,)内有零点,反之在(a,(a+b)/2printf("%5d %5f %5f %5f %5f\n",i,a,b,x,fx);i++;if(fx==0) break;if(fx>0) b=x;else if(fx<0) a=x;if((b-a)<l)break; //进行计算并返值}while(1);}六、结果讨论和分析二分法:迭代法:太原理工大学学生实验报告六、结果讨论和分析Gauss消元法:列主元素消元法:LU分解法:追赶法:太原理工大学学生实验报告分析讨论:其实,这两个迭代法是之前迭代法的升级,多了几个迭代式子而已,而且两者相差不大比较简单,所以选择了雅克比迭代法进行求解,但是没有与另一种方法高斯赛德尔迭代法进行实质性的比较。

流程图:实验地点综合楼五层506室指导教师王峥太原理工大学学生实验报告六、结果讨论和分析分析讨论由于该程序将A矩阵和x0的值编写在程序中,所以要想修改成其他矩阵时比较麻烦,所以也有一定的局限性。

幂法是一种求任意矩阵A的按模最大特征值及其对应特征向量的迭代算法。

该方法的最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为适合,但有时收敛速度很慢。

流程图:实验地点综合楼五层506室指导教师王峥太原理工大学学生实验报告for(int i=1;i<=n;i++){M[i][j]=(M[i][j-1]-M[i-1][j-1])/(M[i][0]-M[i-j+1][0]);}}for(int i=1;i<=n;i++){cout<<"其"<<i<<"阶均差为:"<<M[i][i+1]<<endl;}cout<<"请输入x的值:x=";cin>>xx;for(int i=0;i<n;i++){X*=xx-M[i][0];N+=M[i+1][i+2]*X;P=M[0][1]+N;}cout<<"其函数值:y="<<P<<endl; // }}六、结果讨论和分析太原理工大学学生实验报告分析讨论数据拟合的具体作法是:对给定的数据(x i,y i)(i=0,1,…,m),在取定的函数类中,求p(x)属于此函数类,使误差ri =p(xi)- yi(i=0,1,…,m)的平方和最小,即∑r i2=∑(∑p(x i)-y i)2=min从几何意义上讲,就是寻求与给定点(x i ,y i)(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。

太原理工大学数值计算方法实验报告

太原理工大学数值计算方法实验报告

printf("%lf ",x[i]);printf("\n");}int _tmain(int argc, _TCHAR* argv[]){double a[3][4],x[3]={0,0,0},d[3];for(int i=0;i<3;i++)for(int j=0;j<4;j++)scanf("%lf",&a[i][j]);shuchu(x);do{x[0]=(a[0][3]-a[0][1]*x[1]-a[0][2]*x[2])/a[0][0];x[1]=(a[1][3]-a[1][0]*x[0]-a[1][2]*x[2])/a[1][1];x[2]=(a[2][3]-a[2][0]*x[0]-a[2][1]*x[1])/a[2][2];d[0]=abs((a[0][3]-a[0][1]*x[1]-a[0][2]*x[2])/a[0][0]-x[0]);d[1]=abs((a[1][3]-a[1][0]*(a[0][3]-a[0][1]*x[1]-a[0][2]*x[2])/a[0][0]-a[1][2]*x[2]) /a[1][1]-x[1]);d[2]=abs((a[2][3]-a[2][0]*(a[0][3]-a[0][1]*x[1]-a[0][2]*x[2])/a[0][0]-a[2][1]*(a[1] [3]-a[1][0]*(a[0][3]-a[0][1]*x[1]-a[0][2]*x[2])/a[0][0]-a[1][2]*x[2])/a[1][1])/a[2][2]-x[2]);shuchu(x);}while(d[0]>0.5e-5&&d[1]>0.5e-5&&d[2]>0.5e-5);system("pause");return 0;}实验结果与分析1.列主元素消元法2.完全组元素消元法3.LU分解法4.高斯-赛德尔迭代法讨论、心得(可选):了解Gauss消元法、LU分解法、追赶法等线性方程组直接求解的基本方法、基本原理;能够按照工程实际要求,选择适当的算法;通过编写程序,进行算法设计和数值求解,了解雅可比迭代法、高斯-赛德尔迭代法等线性方程组迭代求解的基本方法、基本原理,能够按照工程实际要求,选择适当的算法,通过编写程序,进行算法设计和数值求解。

太原理工大学MATLAB实验报告

太原理工大学MATLAB实验报告

实验二矩阵和数组的操作一实验环境MATLAB软件二实验目的1.掌握矩阵和数组的一般操作,包括创建、保存、修改和调用等。

2.学习矩阵和数组的加减运算和乘法。

3.掌握对数组中元素的寻访与赋值,会对数组进行一般的操作。

三实验内容1 创建一个5×5矩阵,提取祝对角线以上的部分2 A=rand(3),B=magic(3),C=rand(3,4),计算A×B×C3 创建一个3×3矩阵,并求其转置,逆矩阵4 用两种方法求Ax=b的解(A为4阶随机矩阵,b为4阶列矩阵)5 创建一个4阶随机矩阵A,计算A³6 求100-999之间能被21整除的数的个数7 设有矩阵A和BA=1 2 3 4 5 B=3 0 16 6 7 8 9 10 17 -6 9 11 12 13 14 15 0 23 -4 16 17 18 19 20 9 7 0 21 22 23 24 25 4 13 11 (1)求它们的乘积C=A×B(2)将矩阵C的右下角3×2子矩阵赋给D8 求解下列方程式(1)x³-2x+5=0(2){3x1+11x2-2x3=8X1+x2-2x3=-4X1-x2+x3=39 求微分方程y’’(t)+2y’(t)+2y=0当y(0)=0、y’(0)=1时的解四实验说明我在MATLAB中完成实验二矩阵和数组的操作,在这个过程中,我使用了diary命令将我在实验过程中的数据记录,操作记录,心得体会全部储存到了指定文档并有了如上记录。

实验三MATLAB绘图一实验环境MATLAB软件二实验目的1.掌握MATLAB的基本绘图命令。

2.掌握运用MATLAB绘制一维、二维、三维图形的方法。

3.绘图加以修饰。

三实验内容1.画出横坐标在(-15,15)上的函数y=cosx的曲线。

2.用图形表示离散函数y=|(n-6)|^-1,并加入网络3.用图形表示连续调制波形y=sin(t)sin(9t)及其包络线4.设x=zsin3z,y=zcos3z,要求在-45~45区间内画出x、y、z三维曲线5.绘制函数z=sin(r)/r的三维曲面,其中r=√x²+y²四实验说明我在MATLAB中完成实验三MATLAB制图,在这个过程中,我使用了diary命令将我在实验过程中的数据记录,操作记录,心得体会全部储存到了指定文档并有了如上记录,还使用了word对图片进行记录。

最新太原理工大学算法实验报告

最新太原理工大学算法实验报告
本科实验报告
课程名称:算法设计与分析
实验项目:算法设计与分析实验
实验地点:致远楼403
专业班级:学号:
学生姓名:
指导教师:
2017年3月28日
实验一分治法合并排序
一、实验目的
1.掌握合并排序的基本思想
2.掌握合并排序的实现方法
3.学会分析算法的时间复杂度
4.学会用分治法解决实际问题
二、实验内容
随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组。
一、实验目的
1.掌握贪心算法的基本思想
2.掌握贪心算法的典型问题求解
3.进一步多机调度的基本思想和算法设计方法
4.学会用贪心法分析和解决实际问题
二、实验内容
设计贪心算法实现作业调度,要求按作业调度顺序输出作业序列。如已知n=8,效益p=(35, 30, 25, 20, 15, 10, 5, 1),时间期限d=(4, 2, 4, 5, 6, 4, 5, 7),求该条件下的最大效益。
cout<<"未排序的数组为:";
for(int j=0;j<10;j++)
cout<<arr[j]<<" ";
cout<<endl;
mergeSort(arr,10);
cout<<"经过排序的数组为:";
for(int i=0;i<9;i++)
cout<<arr[i]<<" ";
cout<<endl;
{
T *aux=new T[r-l+1];

太原理工大学数据结构实验报告2016

太原理工大学数据结构实验报告2016

《数据结构》实验报告专业:软件工程班级:软件姓名:2016年12月太原理工大学学生实验报告}[运行情况]Input a linktable(a string):lopui↙Build link is :lopuiPlease input a char you want to insert after:p↙Please input a char you want to insert:y↙After p insert y,link is:lopyuiPlease input a char you want to delete:p↙after delete p,link is:loyuiOpsite result is :iuyol三.实习题用单链表ha 存储多项式A(x )=a0+a1x1+a2x2+…+a n x n(其中a I为非零系数),用单链表hb 存储多项式B (x )=b0+b1x1+b2x2+…+b m x m(其中b j为非零系数),要求计算C(x )= A(x )+B(x ),结果存到单链表hc中。

试写出程序。

实验程序:#include"stdio.h"#include <malloc.h>#include"stdafx.h"#include<malloc.h>static int n;static int m;static int max;struct Polynomial{float data;struct Polynomial* next;};struct Polynomial* Creat_H(int k){struct Polynomial* L;struct Polynomial* p;p = (struct Polynomial*)malloc(sizeof(struct Polynomial));L = p;float temp;int i;printf("请依次输入系数(中间用空格隔开):\n");for (i = 0; i <= k; i++){scanf_s("%f", &temp);p->data = temp;if (i == k){p->next = NULL;break;}p->next = (struct Polynomial*)malloc(sizeof(struct Polynomial));p = p->next;}return L;}struct Polynomial* Calculate(struct Polynomial* Pa, struct Polynomial* Pb){ struct Polynomial* Pc;struct Polynomial* L;int i;max = n >= m ? n : m;Pc = (struct Polynomial*)malloc(sizeof(struct Polynomial));L = Pc;for (i = 0; i <= max; i++){if (i == max){Pc->next = NULL;break;}Pc->next = (struct Polynomial*)malloc(sizeof(struct Polynomial));Pc = Pc->next;}Pc = L;while (Pa != NULL&&Pb != NULL){Pc->data = Pa->data + Pb->data;Pc = Pc->next;Pa = Pa->next;Pb = Pb->next;}if (Pa == NULL){while (Pb != NULL){Pc->data = Pb->data;Pc = Pc->next;Pb = Pb->next;}}else if (Pb == NULL){while (Pa != NULL){Pc->data = Pa->data;Pc = Pc->next;Pa = Pa->next;}}return L;}int main(){int i;struct Polynomial *Ha, *Hb, *Hc;printf("请输入多项式a的最高次系n:\n");scanf_s("%d", &n);Ha = Creat_H(n);printf("请输入多项式b的最高次系m:\n");scanf_s("%d", &m);Hb = Creat_H(m);Hc = Calculate(Ha, Hb);printf("系数: 次数:\n");for (i = 0; i <= max; i++){printf("%f%-4d\n", Hc->data, i);if (i == max){break;}Hc = Hc->next;}return 0;}太原理工大学学生实验报告太原理工大学学生实验报告temp=(struct VNode*)malloc(sizeof(struct VNode));temp->position=k;temp->next=NULL;p[i].first=temp;p[i].mark=0;flag=temp;scanf("%d",&k);while(k!=-1){temp=(struct VNode*)malloc(sizeof(struct VNode));temp->position=k;temp->next=NULL;flag->next=temp;flag=temp;scanf("%d",&k);}}}i=0;while(p[i].mark==0){DFS(p,(p+i));num++;i=0;while(p[i].mark!=0&&i<n){i++;}}printf("此图的连通分量个数为:%d\n",num);return 0;}return Search(a, k, mid + 1, hight);}}int main(){int *p;int i, n, key, position;printf("输入数据数量:\n");scanf("%d", &n);p = (int*)malloc(n*sizeof(int));printf("请按非递减序列输入你的数据(整型),并用空格隔开:\n");scanf("%d", &p[0]);for (i = 1; i<n; i++){scanf("%d", &p[i]);while (p[i]<p[i - 1]){printf("你输入的数据不合理,请重新输入:\n");scanf("%d", &p[i]);}}printf("请输入你要查找的数据:\n");scanf("%d", &key);position = Search(p, key, 0, n - 1);if (position == 0){printf("没有找到你要查找的数据!\n");}else{printf("你所查找的数据位于原有序表的第%d个位置!\n", position);}return 0;}if (n == 0)return;int x;NODE *p;p = (NODE*)malloc(sizeof(NODE));head->next = p;scanf("%d", &x);p->x = x;read(p, n - 1);}void write(NODE *head, int n){NODE *p;if (n == 0)return;p = head->next;printf("%d ", p->x);write(p, n - 1);}void px(NODE *head, int n){if (n == 0)return;int min;int i, s = 0;NODE *p;NODE *r;NODE *t;p = head->next;r = head->next;t = head;min = p->x;for (i = 0; i<n; i++){if (min>p->x){min = p->x;r = p;s = i;}p = p->next;}for (i = 0; i<s; i++)t = t->next;t->next = r->next;r->next = head->next;head->next = r;px(head->next, n - 1);}void main(){int n;NODE *head;head = (NODE *)malloc(sizeof(NODE));printf("输入数据个数n:\n");scanf("%d", &n);printf("输入%d个数据,并用空格隔开\n", n);read(head, n);printf("输入数据为:\n");write(head, n);printf("\n排序后数据为:\n");px(head, n);write(head, n);}。

C++实验报告模板 -太原理工大学-软件学院

C++实验报告模板 -太原理工大学-软件学院
cin>>a>>b;
area=a*b;
cout<<"面积为"<<area<<endl;
}
else if(x==3)
{
double a;
cout<<"边长:";
cin>>a;
area=a*a;
cout<<"面积为"<<area<<endl;
}
else{
cout<<"输入有误,请重新输入!"<<endl;
七、讨论、心得
通过本次实验,我明确了构造函数和析构函数的应用,也对函数重载有了更深刻的理解,掌握了类的私有成员、公有成员和保护成员的区别,对编写程序的整体思维方法是也有了更清晰的理解。
实验三继承与派生
一、实验目的和要求
(1)掌握类的继承和派生过程;
(2)掌握派生类的定义与使用;
(3)掌握派生类的构造函数与析构函数的应用及调用顺序;
int GetBottom() const { return itsBottom; }
int GetRight() const { return itsRight; }
void SetTop(int top) { itsTop = top; }
void SetLeft (int left) { itsLeft = left; }
};
Circle::Circle(double x0,double y0,double r):Shape(x0,y0)
int itsRight;
};
Rectangle::Rectangle(int top, int left, int bottom, int right)

太原理工大学软件工程程序设计实验报告

太原理工大学软件工程程序设计实验报告

《程序设计》课程设计姓名:学号:班级:软件工程1334班指导教师:杨永强成绩:2015年6月实验一:谁拿了最多奖学金1.【问题描述】(1)问题描述某校的惯例是在每学期的期末考试之后发放奖学金。

发放的奖学金共有五种,获取的条件各自不同:1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。

例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

2.【设计需求及分析】(1)设计思路先定义了一个Student的结构体,它里面定义了关于学生的各个属性。

比如期末平均成绩,班级评议成绩,班干部等等。

然后设计了一个判断函数,判断他得到奖学金的多少。

接下来就是主函数了,在主函数里,有着输出输入变量,和赋值函数,最重要的是比较函数,比较出哪一位学生的奖学金多及所有金额的总计。

最后输出。

下面是关键步骤:(2)输出输入格式输入数据格式格式:输入的第一行是一个整数N(1 <= N <= 100),表示学生的总数。

接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。

姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。

太原理工大学算法与分析实验报告

太原理工大学算法与分析实验报告
本科实验报告
课程名称:算法设计与分析
实验项目:分治法,贪心法,动态规划法,回溯法
2016年6月6日
实验1分治法合并排序
一、实验目的
1.掌握合并排序的基本思想
2.掌握合并排序的实现方法
3.学会分析算法的时间复杂度
4.学会用分治法解决实际问题
二、实验内容
随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组。
for(r=0;r<=n;r++)
{
if(c[j][r]!=MAX)
{
if((c[j][r]+cost[r])<min) //找到最小的r
{
min=c[j][r]+cost[r];
temp=r;
}
}
}
cost[j]=c[j][temp]+cost[temp];
d[j]=temp;
}
path[1]=1;
实验3动态规划法求多段图问题
一、实验目的
1.掌握动态规划算法的基本思想
2.掌握多段图的动态规划算法
3.选择邻接表或邻接矩阵方式来存储图
4.分析算法求解的复杂度
二、实验内容
设G=(V,E)是一个带权有向图,其顶点的集合V被划分成k>2个不相交的子集Vi,1<i<=k,其中V1和Vk分别只有一个顶点s(源)和一个顶点t(汇)。图中所有边的始点和终点都在相邻的两个子集Vi和Vi+1中。求一条s到t的最短路线。参考课本P124图7-1中的多段图,试选择使用向前递推算法或向后递推算法求解多段图问题。
using namespace std;
int c[n][n];

太原理工大学软件工程程序设计实验报告

太原理工大学软件工程程序设计实验报告

《程序设计》课程设计姓名:学号:班级:软件工程1334 班指导教师:杨永强成绩:2015年6月实验一:谁拿了最多奖学金1.【问题描述】(1)问题描述某校的惯例是在每学期的期末考试之后发放奖学金。

发放的奖学金共有五种,获取的条件各自不同:1)院士奖学金,每人8000 元,期末平均成绩高于80 分( >80 ),并且在本学期内发表1 篇或 1 篇以上论文的学生均可获得;2)五四奖学金,每人4000 元,期末平均成绩高于85 分( >85 ),并且班级评议成绩高于 80 分( >80 )的学生均可获得;3)成绩优秀奖,每人2000 元,期末平均成绩高于90 分( >90)的学生均可获得;4)西部奖学金,每人1000 元,期末平均成绩高于85 分( >85 )的西部省份学生均可获得;5)班级贡献奖,每人 850 元,班级评议成绩高于 80 分( >80 )的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。

例如姚林的期末平均成绩是87 分,班级评议成绩82 分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850 元。

2.【设计需求及分析】(1)设计思路先定义了一个 Student 的结构体,它里面定义了关于学生的各个属性。

比如期末平均成绩,班级评议成绩,班干部等等。

然后设计了一个判断函数,判断他得到奖学金的多少。

接下来就是主函数了,在主函数里,有着输出输入变量,和赋值函数,最重要的是比较函数,比较出哪一位学生的奖学金多及所有金额的总计。

最后输出。

下面是关键步骤:(2)输出输入格式输入数据格式格式:输入的第一行是一个整数N (1 <= N <= 100),表示学生的总数。

接下来的N 行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。

太原理工大学实验报告

太原理工大学实验报告

太原理工大学实验报告太原理工大学实验报告太原理工大学,作为一所重点高校,一直以来致力于培养高素质的工科人才。

实验教学是培养学生创新能力和实践能力的重要环节之一。

本文将以太原理工大学实验报告为主题,探讨实验报告在学生学习中的重要性以及实验报告的写作要点。

实验报告是实验课程的重要组成部分,通过实验报告的撰写,学生能够对实验过程进行总结和归纳,进一步加深对实验原理和方法的理解。

同时,实验报告也是学生表达自己观点和思考的重要途径,培养学生的科学思维和逻辑思维能力。

那么,如何写好一份实验报告呢?首先,实验报告应该包括实验目的、实验原理、实验步骤、实验结果和实验结论等内容。

在实验目的部分,要明确实验的目标和意义,指导读者对实验有一个整体的了解。

实验原理部分要简明扼要地介绍实验所涉及的理论知识,让读者对实验原理有一个初步的认识。

实验步骤部分要详细描述实验的步骤和操作过程,以便读者能够复现实验。

实验结果部分要准确地记录实验数据和观察结果,可以采用表格、图表等形式进行展示。

实验结论部分要对实验结果进行分析和总结,得出科学的结论,并提出对实验的改进意见。

另外,实验报告的写作还需要注意一些细节。

首先,语言要准确、简洁,避免使用口语化的表达方式。

其次,要注意实验数据的精确性和可靠性,避免出现错误的数据和结论。

此外,实验报告还要注意排版和格式的规范性,包括页眉、页脚、标题、字体、行间距等。

最后,还要注意实验报告的内容和结构的合理性,避免出现冗长和重复的内容。

实验报告的写作不仅是一种技巧,更是一种思维方式的培养。

通过实验报告的写作,学生可以培养自己的科学思维和逻辑思维能力,提高自己的实践动手能力和创新能力。

同时,实验报告的写作也是对学生实验过程的一个回顾和总结,有助于加深对实验原理和方法的理解。

太原理工大学一直注重实验教学的质量和效果。

学校为学生提供了先进的实验设备和优质的实验环境,为学生的实验学习提供了良好的条件。

同时,学校也鼓励学生积极参与科研实践和创新活动,提供了一系列的科研实验项目和竞赛机会。

太原理工算法实验报告

太原理工算法实验报告

本科实验报告课程名称:《算法设计与分析》实验地点:行知B222专业班级:软件1321 学号:2013005351 学生姓名:乔冠宇指导教师:李建林2015年4月20日实验一分治法合并排序一、实验目的1.掌握合并排序的基本思想2.掌握合并排序的实现方法3.学会分析算法的时间复杂度4.学会用分治法解决实际问题二、实验内容随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组。

三、实验环境程序设计语言:c++编程工具:microsoft visual studio 2010四、算法描述和程序代码#include <iostream.h>struct {int r[50];int length;}SqList, L;void MSort(int SR[], int TR1[], int s, int t);void Merge(int sR[], int TR[], int i, int m ,int n);int LQ1(int a, int b);void main(){cout<<"请输入待排序的数目:";cin>>L.length;cout<<"请输入待排序的数:";for(int c = 0; c < L.length; c++)cin>>L.r[c];MSort(L.r,L.r,0,L.length-1);cout<<"排序后的数为:";for(int i3 = 0; i3 < L.length; i3++)cout<<L.r[i3]<<" ";cout<<endl;}void MSort(int SR[], int TR1[], int s, int t){int m;int TR2[100];if(s == t)TR1[s] = SR[s];else {m = (s + t)/2;MSort(SR, TR2, s, m);MSort(SR, TR2, m+1, t);Merge(TR2, TR1, s, m, t);}}void Merge(int SR[], int TR[], int i, int m ,int n) {int j,k;for(j = m + 1, k = i; i <= m && j <= n; ++k){if(SR[i] <= SR[j])TR[k] = SR[i++];elseTR[k] = SR[j++];}if(i <= m){int k1 = k;for(int i1 = i; i1 <= m; i1++){TR[k1] = SR[i1];k1++;}}if(j <= n){int k2 = k;for (int j2 = j; j2 <= n; j2++){TR[k2] = SR[j2];k2++;}}}五、实验结果截图六、实验总结归并排序算法是用分治法实现对规模为n的记录的序列进行排序。

太原理工大学数值计算方法实验报告

太原理工大学数值计算方法实验报告

太原理工大学数值计算方法实验报告本科实验报告课程名称:计算机数值方法实验项目:方程求根、线性方程组的直接解法、线性方程组的迭代解法、代数插值和最小二乘拟合多项式实验地点:行勉楼专业班级: ******** 学号: *********学生姓名: ******** 指导教师:李誌,崔冬华2016年 4 月 8 日学生姓名实验成绩实验名称实验一方程求根实验内容和要求熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。

选择上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-x n|<0.5×10-5(1)了解非线性方程求根的常见方法,如二分法、牛顿法、割线法。

(2)加深对方程求根方法的认识,掌握算法。

(3)会进行误差分析,并能对不同方法进行比较。

实验原理1.二分法:如果要求已知函数 f(x) = 0 的根 (x 的解),那先要找出一个区间 [a, b],使得f(a)与f(b)异号。

根据介值定理,这个区间内一定包含着方程式的根。

求该区间的中点m=(a+b)/2,并找出 f(m) 的值。

若 f(m) 与 f(a) 正负号相同,则取 [m, b] 为新的区间, 否则取 [a, m]。

重复第3步和第4步,直到得到理想的精确度为止。

2. 割线法是利用牛顿迭代法的思想,在根的某个领域内,函数有直至二阶的连续导数,并且不等于0,则在领域内选取初值x0,x1,迭代均收敛。

(1)在区间[m ,n]内输入初值x0,x1.(2)计算x2。

x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0))(3) x0=x1,x1=x2(4)判断是否达到精度,若是输出x1,若否执行(2)主要仪器设备HP计算机实验记录1.二分法// 方程求根(二分法).cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include"iostream"using namespace std;class Text{public:float x, y, a, b, c, n = 0;void Getab(){cout << "请输入计算区间:(以空格隔开)" << endl;cin >> a >> b;}float GetY(float x){y = x*x*x + 4 * x*x - 10;return y;}float Calculate(float a,float b){c = (a + b) / 2;n++;if (GetY(c) == 0 || ((b - a) / 2) < 0.000005){cout << c <<"为方程的解"<< endl;return 0;}if (GetY(a)*GetY(c) < 0){return Calculate(a,c);}if (GetY(c)*GetY(b)< 0){return Calculate(c,b);}}};int main(){cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl;float a, b;Text text;text.Getab();a = text.a;b = text.b;text.Calculate(a, b);return 0;}2.割线法:// 方程求根(割线法).cpp : 定义控制台应用程序的入口点。

太原理工微机原理本科实验报告

太原理工微机原理本科实验报告

本科实验报告课程名称:微型计算机原理及应用实验项目:多位十进制数相加实验地点:博学馆四层微机实验室专业班级:学号:学生姓名:指导教师:年月日多位十进制数相加一、实验目的:学习数据传送和算数运算指令的用法。

二、实验内容:将两个多位十进制数28056,47193相加,并显示加数,被加数,和。

要求两个加数均以ASCⅡ码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。

三、实验程序流程图:四、实验程序列表:SHOW MACRO BMOV DL, BMOV AH, 02HINT 21HENDMDATA SEGMENTDATA1 DB 33H,39H,31H,37H,34HDATA2 DB 36H,35H,30H,38H,32HDATA3 DB'-',0DH,0AH,'$'DATA ENDSSTACK SEGMENT STACKSTA DB 20 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX, TOPMOV SP,AXMOV SI,OFFSET DATA2MOV BX,05SHOW 20HCALL DISPLSHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1MOV BX,05SHOW 2BhCALL DISPLSHOW 0DHSHOW 0AHMOV CL,7S1: SHOW 2DHLOOP S1SHOW 0DHSHOW 0AHMOV SI,OFFSET DATA1MOV DI,OFFSET DATA2 CALL ADDAMOV SI,OFFSET DATA1MOV BX,05SHOW 20HCALL DISPLMOV AX,4C00HINT 21HDISPL PROC NEARDS1: SHOW [SI+BX-1]DEC BXJNZ DS1RETDISPL ENDPADDA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05ADI: SUB BYTE PTR [SI+BX-1],30H SUB BYTE PTR [DI+BX-1],30HDEC BXJNZ ADIMOV SI,DXMOV DI,BPMOV CX,05CLCAD2: MOV AL,[SI]MOV BL,[DI]ADC AL,BLAAAMOV [SI],ALINC SIINC DILOOP AD2MOV SI,DXMOV DI,BpMOV BX,05AD3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HDEC BXJNZ AD3RETADDA ENDPCODE ENDSEND START五、实验结果六、实验心得:通过这次实验我学会了数据传送和算数运算指令的用法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告
课程名称:算法设计与分析
实验项目:算法设计与分析实验
实验地点:致远楼403 专业班级:学号:
学生姓名:
指导教师:
2017年 3 月 28日
if(l>=r)
return;
int mid=(l+r)/2;
__mergeSort(arr,l,mid);
__mergeSort(arr,mid+1,r);
if(arr[mid]>arr[mid+1])
__merge(arr,l,mid,r);
}
template<typename T>
void __merge(T arr[],int l,int mid,int r) {
T *aux=new T[r-l+1];
for(int i=l;i<=r;i++)
aux[i-l]=arr[i];
int i=l,j=mid+1;
for(int k=l;k<=r;k++)
{
if(i>mid)
{
arr[k]=aux[j-l];
j++;
}
else if(j>r)
{
arr[k]=aux[i-l];
i++;
}
else if(aux[i-l]<aux[j-l])
{
arr[k]=aux[i-l];
i++;
}
else{
arr[k]=aux[j-l];
j++;
}
}
delete[] aux;
}
int _tmain(int argc, _TCHAR* argv[])
{
int n=10;
int *arr=SortTestHelper::generateRandomArray(n,0,n);
cout<<"未排序的数组为:";
for(int j=0;j<10;j++)
cout<<arr[j]<<" ";
cout<<endl;
mergeSort(arr,10);
cout<<"经过排序的数组为:";
for(int i=0;i<9;i++)
cout<<arr[i]<<" ";
cout<<endl;
六、实验总结
一定要先找到递归函数式后,设计递归程序
实验二贪心法多机调度
一、实验目的
1. 掌握贪心算法的基本思想
2.掌握贪心算法的典型问题求解
3.进一步多机调度的基本思想和算法设计方法
4.学会用贪心法分析和解决实际问题
二、实验内容
设计贪心算法实现作业调度,要求按作业调度顺序输出作业序列。

如已知n=8,效益p=(35, 30, 25, 20, 15, 10, 5, 1),时间期限d=(4, 2, 4, 5, 6, 4, 5, 7),求该条件下的最大效益。

三、实验环境
程序设计语言:c++
握动态规划算法的基本思想
2.掌握多段图的动态规划算法
3.选择邻接表或邻接矩阵方式来存储图
4.分析算法求解的复杂度。

一、实验内容
设G=(V,E)是一个带权有向图,其顶点的集合V被划分成k>2个不相交的子集Vi,1<i<=k,其中V1和Vk分别只有一个顶点s(源)和一个顶点t(汇)。

图中所有边的始点和终点都在相邻的两个子集Vi和Vi+1中。

求一条s到t的最短路线。

参考讲义p136图5-24中的多段图,试选择使用向前递推算法或向后递推算法求解多段图问题。

二、实验环境
程序设计语言:c++
编程工具:microsoft visual studio 2013
三、算法描述和程序代码
#include ""
#include<iostream>
using namespace std;
#define INFTY 1000
struct T{
int adjVex;
int w;
struct T *nextArc;
};
class Graph{
private:
T **a;
int *p;
int n;
public:
Graph(int n){ this->n = n; p = new int[n]; a = new T*[n]; for (int i = 0; i < n; i++)a[i] = new T; }
void GetT(int **m);
int fp(int k);
void print(int k);
};
void Graph::print(int k){
int c = fp(k);
cout << "最短路径权值:" << c << endl;
cout << "最短路径:" << endl;
for (int i = 0; i < k - 1; i++)
cout << p[i] << "-->" << p[i + 1] << endl;
}
int Graph::fp(int k){
int c, *cost = new int[n]; int q, *d = new int[n];
cost[n - 1] = 0;
d[n - 1] = -1;
for (int j = n - 2; j >= 0; j--){
int min = INFTY;
for (T *r = a[j]->nextArc; r;r=r->nextArc){
int v = r->adjVex;
if (r->w + cost[v] < min){
min = r->w + cost[v];
q = v;
}
}
cost[j] = min;
d[j] = q;
}
p[0] = 0; p[k - 1] = n - 1; c = cost[0];
for (int j = 1; j <= k - 2; j++)
p[j] = d[p[j - 1]];
delete[]cost;
delete[]d;
return c;
}
void Graph::GetT(int **m){
T *x,*p,*q;
for (int i = 0; i < n; i++){
p = q = a[i];
for (int j = 0; j < n; j++){
if (m[i][j] != 0){
x = new T;
x->adjVex = j;
x->w = m[i][j];
p->nextArc = x;
p = p->nextArc;
}
}
p->nextArc = NULL;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int **m;
Graph q(12);
m =new int* [12];
for (int i = 0; i <12; i++)
m[i] = new int[12];
cout << "图的各点见的权值为:" << endl;
for (int i = 0; i < 12;i++)
for (int j = 0; j < 12; j++)
cin >> m[i][j];
(m);
int k;
cout << "到第几个结点的最短路径:";
cin >> k;
(k);
for (int i = 0; i < 12; i++)
delete[] m[i];
delete m;
return 0;
}
四、实验结果截图
五、实验总结
动态规划法应用于子问题重叠的情况,与分治法类似。

实验四回溯法求n皇后问题一、实验目的
掌握回溯算法的基本思想
通过n皇后问题求解熟悉回溯法
使用蒙特卡洛方法分析算法的复杂度
六、实验总结
回溯法是比贪心算法与动态规划法更一般的方法。

相关文档
最新文档