中国石油大学(华东)计算方法上机实验程序
中国石油大学数据结构上机实验3
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018.4.3一、实验题目实验3 顺序栈基本操作二、实验目的1.熟练掌握顺序栈的实现和基本操作2.理解栈后进先出的特点3.熟练应用顺序栈解决实际问题三、算法设计分析(一)数据结构的定义数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:①初始化并建立一个新栈表函数②栈清空函数③栈判断是否为空函数④进栈函数⑤出栈函数⑥取栈顶元素函数⑦输出栈元素函数⑧计算栈中元素个数函数⑨销毁栈函数(1)主函数:统筹调用各个函数以实现相应功能void main()(2)①初始化并建立一个新栈表SqStack *InitStack(SqStack *s){int i;s=(SqStack*)malloc(sizeof(SqStack));s->top=-1;printf("输入顺序栈元素(以0结束):\n");scanf("%d",&i);do{s->top++;//栈顶指针增加一s->data[s->top]=i; //将新插入元素赋值给栈顶空间scanf("%d",&i);while(i!=0);printf("成功\n");return s;}②栈清空函数void SetNULL(SqStack *s){//清空栈s->top=-1;//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top等于-1 }③栈判断是否为空函数int EMPTY(SqStack *s){//判断栈空if(s->top>=0)return 0;else return 1;}④进栈函数SqStack *Push(SqStack *s){//进栈int a;printf("插入数字:");scanf("%d",&a);if(s->top==maxsize-1)//判断是否栈满{printf("overflow");//溢出return NULL;}else{s->top++;//栈顶指针增加1s->data[s->top]=a;//将新插入元素赋值给栈顶空间}return s;}⑤出栈函数SqStack *Pop(SqStack *s){//出栈if(s->top==-1)//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top等于-1 {printf("underlow");return s;}else{s->top--;//栈顶指针减一printf("删除的栈顶元素:");printf("%d\n",(s->data[s->top+1]));//若栈不为空,则删除s的栈顶元素}return s;}⑥取栈顶元素函数void GetTop(SqStack *s){//取栈顶if(s->top==-1){printf("SqStack is empty");//当栈存在一个元素时,top等于0,因此通常把空栈的条件定位top 等于-1}else{printf("当前栈顶元素是:");printf("%d\n",(s->data[s->top]));//取栈顶元素地址}}⑦输出栈元素函数void print(SqStack *s){//输出栈int i=0;if(s->top==-1){printf("成功!");}while(i<=s->top){//遍历栈中所有元素printf("%d ",s->data[i]);i++;}}⑧计算栈中元素个数函数void Count(SqStack *s){//计算栈中元素int i=0;while(i<=s->top){i++;}printf("个数为%d",i);}⑨销毁栈函数int DestroyStack_Sq(SqStack *s){ //销毁一个顺序栈Sfree(s);s=NULL;return 1;}四、实验测试结果及结果分析(一)测试结果(此处给出程序运行截图)(二)结果分析成功完成了题目所要求的插入,删除,查找等基本操作。
精石油大学《微机原理及应用》实验报告
2、复习内存分段概念、数据类型伪指令语句中的表达式、无进位加法和带进位加法的实现、多位10进制数带进位加法的实现、简单循环的实现;
3、观察数据段和代码段的位置和大小。
四、编写完整的程序代码
DATA SEGMENT ;定义数据段
X DB 32,-43,76,95,-1
代码段的大小:0001FH规范字节
C:\masm>LINK TEST3;
C:\masm>DEBUG TEST3.EXE;
其中TEST3为源程序的名字
2.写出程序的数据段、代码段的位置和大小
数据段位置:
起始地址:00000H,终止地址:0000EH,
数据段的大小:0000FH规范字节
代码段的位置:
起始地址:00010H,终止地址:0002EH,
Y DB -78,127,-128,-125,88
S DB 5 DUP(?)
DATA ENDS
CODE SEGMENT ;定义代码段
ASSUME CS: CODE, DS:DATA
START: MOV AX,DATA;数据段初始化
MOV DA,AX
MOV CL,5
MOV BX,0
NEXT MOV AL,X[BX]
中国石油大学(华东)现代远程教育
实验报告
课程名称:微机原理及应用
实验名称:循环程序设计
实验形式:在线模拟+现场实践
提交形式:在线提交实验报告
学生姓名:学 号:
年级专业层次:1606级机械设计制造及其自动化专升本
学ห้องสมุดไป่ตู้中心:青岛直属学习中心
提交时间:2017年12月20日
石大 计算方法实验报告1
《计算方法》实验报告二级学院:计算机学院专业:指导教师:班级学号:姓名:实验一1、 实验目的:1) 熟悉用牛顿法解非线性方程的过程;熟悉用弦截法求解非线性方程的过程 2) 编程实现牛顿法、弦截法求非线性方程的根。
2、 实验要求:1) 认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法;2) 编写上机实验程序,作好上机前的准备工作;3) 上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果);4) 分析和解释计算结果; 5) 按照要求书写实验报告; 3、 实验内容:1)用牛顿法求解01553=-x 的根,取初始值为10。
2) 用弦截法求解数学方程。
010*15.110*4.181.9*002.0)(255.15=--=--x x x f 4、题目、原理、程序及结论 题目:非线性方程的迭代数值解1.牛顿法。
2.单点弦截法,双点弦截法。
原理: 牛顿法:设r 是方程f(x) = 0的根,选取x0作为r 初始近似值,过点(x0,f(x0))做曲线y = f(x )的切线L ,L 的方程为y = f(x0)+f'(x0)(x-x0),求出L 与x 轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r 的一次近似值。
过点(x1,f(x1))做曲线y = f(x )的切线,并求该切线与x 轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r 的二次近似值。
重复以上过程,得r 的近似值序列,其中x(n+1)=x(n )-f(x(n))/f'(x(n)),称为r 的n+1次近似值,这就是牛顿迭代法的原理。
弦截法:设方程f(x) = 0的根在两个数x1,x2之间,连接这两点所对应的函数值,连线与x 轴的交点为新的x ,若f(x)与f(x1)同号,则把x 当作新的x1,将新的x1与x2连接,如此循环,如果f(x)与f(x1)异号,则把把x 当作新的x2,将x1与新的x2连接,如此循环,直到满足误差要求求出解,这就是弦截法的原理。
计算方法上机实验
1.拉格朗日插值多项式,用于离散数据的拟合#include <stdio.h>#include <conio.h>#include <alloc.h>float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/{ int i,j;float *a,yy=0.0; /*a作为临时变量,记录拉格朗日插值多项式*/a=(float *)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){ a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}free(a);return yy;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;} if(n<=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");printf("Input xx:");scanf("%f",&xx);yy=lagrange(x,y,xx,n);printf("x=%f,y=%f\n",xx,yy);getch();}2.牛顿插值多项式,用于离散数据的拟合#include <stdio.h>#include <conio.h>#include <alloc.h>void difference(float *x,float *y,int n){ float *f;int k,i;f=(float *)malloc(n*sizeof(float));for(k=1;k<=n;k++){ f[0]=y[k];for(i=0;i<k;i++)f[i+1]=(f[i]-y[i])/(x[k]-x[i]);y[k]=f[k];}return;}main(){ int i,n;float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n>=20) {printf("Error! The value of n must in (0,20)."); getch(); return 1;} if(n<=0) {printf("Error! The value of n must in (0,20).");getch(); return 1;} for(i=0;i<=n-1;i++){ printf("x[%d]:",i);scanf("%f",&x[i]);}printf("\n");for(i=0;i<=n-1;i++){ printf("y[%d]:",i);scanf("%f",&y[i]);}printf("\n");difference(x,(float *)y,n);printf("Input xx:");scanf("%f",&xx);yy=y[20];for(i=n-1;i>=0;i--) yy=yy*(xx-x[i])+y[i];printf("NewtonInter(%f)=%f",xx,yy);getch();}3.高斯列主元消去法,求解其次线性方程组第一种#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Now input b(i),i,j=0...%d:\n",n-1);for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);}if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];a[i][j]=a[mi][j];a[mi][j]=tmp;}}for(j=i+1;j<n;j++){ tmp=-a[j][i]/a[i][i];b[j]+=b[i]*tmp;for(k=i;k<n;k++)a[j][k]+=a[i][k]*tmp;}}x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ x[i]=b[i];for(j=i+1;j<n;j++)x[i]-=a[i][j]*x[j];x[i]/=a[i][i];}for(i=0;i<n;i++)printf("Answer:\n x[%d]=%f\n",i,x[i]); getch();return 0;}第二种#include<math.h>#include<stdio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;int flag,n;exchange(int r,int k);float max(int k);message();main(){float x[NUMBER];int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++){printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);}for(k=1;k<=n-1;k++){ark=max(k);if(ark==0){printf("\n\nIt's wrong!");message();}else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];}x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--){float me=0;for(j=k+1;j<=n;j++){me=me+A[k][j]*x[j];}x[k]=(A[k][n+1]-me)/A[k][k];}for(i=1;i<=n;i++){printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k){int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];}float max(int k){int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp){temp=fabs(A[i][k]);flag=i;}return temp;}message(){printf("\n\n Go on Enter ,Exit press Esc!");switch(getch()){case Enter: main();case Esc: exit(0);default:{printf("\n\nInput error!");message();} }}4.龙贝格求积公式,求解定积分#include<stdio.h>#include<math.h>#define f(x) (sin(x)/x)#define N 20#define MAX 20#define a 2#define b 4#define e 0.00001float LBG(float p,float q,int n){ int i;float sum=0,h=(q-p)/n;for (i=1;i<n;i++)sum+=f(p+i*h);sum+=(f(p)+f(q))/2;return(h*sum);}void main(){ int i;int n=N,m=0;float T[MAX+1][2];T[0][1]=LBG(a,b,n);n*=2;for(m=1;m<MAX;m++){ for(i=0;i<m;i++)T[i][0]=T[i][1];T[0][1]=LBG(a,b,n);n*=2;for(i=1;i<=m;i++)T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)){ printf("Answer=%f\n",T[m][1]); getch();return ;}}}5.牛顿迭代公式,求方程的近似解#include<stdio.h>#include<math.h>#include<conio.h>#define N 100#define PS 1e-5#define TA 1e-5float Newton(float (*f)(float),float(*f1)(float),float x0 ) { float x1,d=0;int k=0;do{ x1= x0-f(x0)/f1(x0);if((k++>N)||(fabs(f1(x1))<PS)){ printf("\nFailed!");getch();exit();}d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);x0=x1;printf("x(%d)=%f\n",k,x0);}while((fabs(d))>PS&&fabs(f(x1))>TA) ;return x1;}float f(float x){ return x*x*x+x*x-3*x-3; }float f1(float x){ return 3.0*x*x+2*x-3; }void main(){ float f(float);float f1(float);float x0,y0;printf("Input x0: ");scanf("%f",&x0);printf("x(0)=%f\n",x0);y0=Newton(f,f1,x0);printf("\nThe root is x=%f\n",y0); getch();}。
中国石油大学计算机测控技术实践程序
}
}
/ *fifth2* /
#include<dos.h>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<graphlics.h>
#define N 600
#define pi 3.1415926
}
}
int TRL_01()
{ int i;
for(i=0;i<600;i++)
data[i]=data_v[i]*10.0/4096.0-5.0; 转换,公式参照书的第八页
}
int PRW_01()
{ int i,x0=38,y0=240,xm=600,ym=180;
printf("input f\n"); /*输入延时时间,在CJ-AD子函数中使用此变量*/
scanf("%d",&f);
CJ_AD(); /*AD转换*/
TRL_01(); /*转换子函数*/
DRW_01();/*画图*/
getch();
closegraph();
for( ; ; )if(inportb(base+0x2)<0x80)break; 查询
dh=inportb(base+0x2); 高四位
dl=inportb(base+0x3); 低八位
data_v[i]=256*dh+dl;
delay(f); 延时,此处的延时和输入的信号频率相配合,得到完美波形
中国石油大学华东 计算机基础实验教程 实验11
金山与微软博弈学生姓名:张青学号:专业班级:自动化一班2012年11目录1. 从合作到交锋............................................................................................ 错误!未定义书签。
1.1创业之初............................................................................................. 错误!未定义书签。
1.2微软搅局............................................................................................. 错误!未定义书签。
2. 寻找希望之路............................................................................................ 错误!未定义书签。
2.1主动兼容尝甜头................................................................................. 错误!未定义书签。
2.2政府带头支持国产软件..................................................................... 错误!未定义书签。
政府采购 ......................................................................................... 错误!未定义书签。
金山与微软博弈1.从合作到交锋1.1创业之初WPS,1989年诞生自一个叫求伯君的24岁年轻人之手。
中国石油大学数据结构上机实验
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018.4.24一、实验题目实验5 稀疏矩阵的转置二、实验目的1. 稀疏矩阵的压缩存储方法2. 掌握稀疏矩阵的转置算法三、算法设计分析(一)实验内容1.从键盘输入数据,建立稀疏矩阵的三元组顺序存储2.实现稀疏矩阵的转置算法3.输出原矩阵及转置后的矩阵4.实现矩阵的快速转置算法(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:①创建稀疏矩阵函数②转置矩阵T函数③快速转置函数④输出函数⑤输出原矩阵和转置函数其功能描述如下:(1)主函数:统筹调用各个函数以实现相应功能Status main()(2)①创建稀疏矩阵函数Status CreateSMatrix(TSMatrix &M){printf("请输入原矩阵:\n");printf("行数、列数:");scanf("%d%d", &M.mu, &M.nu);printf("元素总数:");scanf("%d", &M.tu);printf("输入各个对应压缩值:\n");for (int i = 1; i <= M.tu; ++i)scanf("%d%d%d", &M.data[i].i, &M.data[i].j, &M.data[i].e); return OK;}②转置矩阵T函数Status TransposeSMatrix(TSMatrix M, TSMatrix &T){ int p, q, col;T.mu = M.nu; T.nu = M.mu; T.tu = M.tu;if (T.tu){q = 1;for (col = 1; col <= M.nu; ++col)for (p = 1; p <= M.tu; ++p)if (M.data[p].j == col){T.data[q].i = M.data[p].j;T.data[q].j = M.data[p].i;T.data[q].e = M.data[p].e;++q;}}printf("\n\n稀疏矩阵M转置成功。
计算机网络技术与应用上机实验指导书(精简版)
《计算机网络技术与应用》 上机实验指导手册计算机网络课程组中国石油大学(华东)计算机与通信工程学院2012年9月目 录实验一 HTML简单网页制作 (1)实验二 FrontPage网页设计 (4)实验三 GIF动画设计与制作 (6)实验四 Web网站架设与发布 (8)实验五 网络连接管理 (11)实验六 网络共享与远程桌面 (14)实验七 网络常用命令 (17)实验八 VMware虚拟机使用 (20)实验九 网络嗅探与报文分析 (23)实验十 DNS域名服务 (27)实验十一 DHCP动态主机配置服务 (30)实验十二 Proxy代理服务 (34)实验十三 VPN组建与管理 (37)实验十四 电子邮件服务 (40)实验十五 FTP文件下载 (43)实验一 HTML简单网页制作一、实验目的学习HTML制作网页的基本方法,掌握HTML的基本语法和文档结构,制作简单网页,形成网页设计的直观印象。
二、实验环境记事本、写字板或EditPlus等文本编辑器,IE/火狐/遨游等浏览器。
三、实验原理1、Web服务和HTML语言概述Web服务(WWW)是目前应用最广的一种基本互联网应用,它基于HTML语言,通过URL全球资源定位标识,将全世界的Web服务和其它资源链接起来。
Web服务基于客户机/服务器方式而工作,作为服务器端的Web站点通过HTML超文本标记语言把信息组织成为图文并茂的超文本,提供给作为客户端的浏览器。
HTML是互联网上的通用语言,是HyperText Markup Language的缩写,即超文本标记语言,1993年出现1.0版,历经了2.0版、3.2版、4.0版,目前已经出现HTML5.0。
网页制作者使用它可以建立包含文本、表单、图片、音/视频、动画等内容的复杂网页,这些页面可以在公开发布后被互联网上任何用户浏览。
HTML文件是由一系列标记组成的纯文本文件,不需要专门的软件来建立HTML文件,掌握HTML语言语法后只需要通用字处理器软件(如Word、记事本、写字板等等),就可以创建HTML文件而生成网页。
中国石油大学2016年微机原理实验程序(最新)终稿
实验一寻址方式和汇编语言程序上机调试步骤2、在数据段X单元存放有数据42,Y单元存放有数据-43,编程求这两数之和,并把结果存放到S单元。
data segmentx db 42y db -43s db 0data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov al,xadd al,ymov s,alloop: jmp loopcode endsend start3、已知数据段X单元存放的数据为10H,编程将该数据左移四位后存放到Y单元。
data segmentx db 10hy db 0hdata endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov cl,4hmov al,xrol ax,clmov y,alloop: jmp loopcode endsend start实验二循环程序设计1、编程将数据段从00H单元起始的十个单元赋值,值为00H~09H。
DATA SEGMENT DAT DB 10 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,10MOV BX,0LOOPER: MOV DAT[BX],BLINC BXLOOP LOOPERLOOP:JMP LOOPCODE ENDSEND START2、现有两组数,X= -78, 127,-128, -125,88,Y=32, -43, 76, 95, 1。
编程求两个数组之和,并将结果传送到S数组内,S (i)= X(i)+ Y(i)。
DATA SEGMENTORG 0000HX DB -78,127,-128,-125,88Y DB 32,-43,76,95,1S DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV CX,5MOV BX,0LOOPER :MOV AL,X[BX]MOV DL,Y[BX]ADD AL,DLMOV S[BX],ALINC BXLOOP LOOPERLOOP: JMP LOOPCODE ENDSEND START3、现有两个多位十进制数,X=5790123467,Y=1357902468。
中国石油大学华东-流体力学模拟上机实验2
流体力学模拟上机实验学院专业班级姓名学号指导教师年月流体力学模拟上机作业摘要:流体力学数值模拟是在流体力学的学习过程中很重要的一部分,以计算机为技术手段,运用一定的计算技术寻求流体力学复杂问题的离散化数值解。
引言流体力学是连续介质力学的一门分支,是研究流体(包含气体,液体以及等离子态)现象以及相关力学行为的科学。
可以按照研究对象的运动方式分为流体静力学和流体动力学,还可按流动物质的种类分为水力学,空气动力学等等。
描述流体运动特征的基本方程是纳维-斯托克斯方程,简称N-S方程。
纳维-斯托克斯方程基于牛顿第二定律,表示流体运动与作用于流体上的力的相互关系。
纳维-斯托克斯方程是非线性微分方程,其中包含流体的运动速度,压强,密度,粘度,温度等变量,而这些都是空间位置和时间的函数。
一般来说,对于一般的流体运动学问题,需要同时将纳维-斯托克斯方程结合质量守恒、能量守恒,热力学方程以及介质的材料性质,一同求解。
由于其复杂性,通常只有通过给定边界条件下,通过计算机数值计算的方式才可以求解。
二维有障碍通道内的流动计算目的初步掌握软件的操作和边界条件的设置方法通过计算了解障碍通道内的流体运动的特性物理问题假设流体在一个两维通道内的流动,流体从左边流入,从右边流出,通过数值模拟的方法分析判断流体的运动特性。
模型的建立启动Gambit软件创建控制点,设定workingdictory开始建立建立模型。
1.流动空间面建立10m*10m计算空间矩形面。
2.建立车型障碍物车轮半径---0.2车轮原点坐标---X=4,X=8车体位置--- X=4,Y=0.4 宽4米,高3米。
操作步骤:建立车体solid1 ,平移障碍物至x=处。
建立车轮solid2,调整到设置位置,通过copy功能复制solid2建立另一车轮solid3,并平移至适当位置。
点击布尔运算按钮substract real face对于创建的面进行布尔运算(同时减掉solid1,solid2,solid3)得到计算网格填充生成区间。
C语言 中国石油大学(华东)c语言上机题及答案大全 副本
C语言中国石油大学(华东)c语言上机题及答案大全副本c语言-中国石油大学(华东)c语言上机题及答案大全-副本1.1helloworld.使我们用c语言向世界道别。
最早的程序基本就是这个样子的:程序一:#includevoidmain(){printf(\}程序二:#includeintmain(){printf(\return0;}上面的程序你任一恶搞一个,看一看与否可以通过?如果你能够通过这个直观的程序,那就要我们稳步顺利完成后面的习题吧。
输出:并无输出:helloworld.#includeintmain(){printf(\}让我们来练习如何显示多行文字。
输入:无输入:就是下面的那段文字。
#includevoidmain(){printf(\printf(\printf(\}1.3练习最简单的printf和scanfprintf函数和scanf函数就是c语言中最常用的函数之一,下面使我们练一下吧。
输出:整型变量x的值。
输出:输出整型变量x对应的十进制、八进制和十六进制形式。
深入细致观测-1的八进制和十六进制输入,恳请想一想就是为什么。
#includeintmain(){intx;scanf(\printf(\printf(\printf(\return0;}1.4练习两个整数之间的运算背景:基本练习。
输出:拒绝接受两个整数,每个整数之间采用空格隔开。
比如输出格式为:123444输出:分别输出进行+、-、*、/、*之后的运行结果。
#includeintmain(){intx,y;scanf(\printf(\printf(\printf(\printf(\printf(\return0;}1.5自学列印你的第一个图形背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。
程序如下:#includeintmain(){printf(\printf(\printf(\printf(\return0;}建议:按照上面的程序范例,撰写一个大程序,建议输入的就是4行由*号共同组成的等腰三角形。
中国石油大学数据结构上机实验2
《数据结构》实验报告学号2015011512 姓名胡明禹专业数学与应用数学时间2018320一、实验题目实验2单链表基本操作二、实验目的1.熟练掌握线性表的顺序存储方式下,基本操作的实现算法,巩固和体会单链表操作特点;2.理解体会动态内存申请与释放;3.通过本次实验,熟练掌握C语言指针的使用三、算法设计分析(一)实验内容1.创建一个空的带头结点的单链表2.采用头插法在单链表中插入n个元素3.删除单链表中第i个元素4.实现单链表按关键字查找操作5.计算单链表的表长并输出单链表6.销毁单链表(二)总体设计此处给出主要函数功能、及函数间调用关系的的描述。
例如:1.构造一个空的单链表的函数;2.插入函数;3.删除函数4.查找函数;5.计算并输出函数;6.销毁函数。
其功能描述如下:(1 )主函数:统筹调用各个函数以实现相应功能void mai n()(2)①构造一个空的单链表的函数Status In itList_L(Li nkList &L){L=(LinkList)malloc(sizeof(LNode));// 构造一个空的线性表L f(!L) exit (OVERFLOW);// 存储分配失败L->next=NULL;〃空表长度为Osystem("cls");〃清空屏幕printf("\n\n 初始化成功\n\n\n"); system("PAUSE");〃按任意键继续return OK;}void CreateList_L(LinkList &L){// 创建一个新表int i,count;LinkList p;system("cls");// 清屏printf("\n 输入总结点数:");scanf("%d",&count);printf("\n 输入各个结点数值,每输一个按下回车:\n");for(i = count; i > 0; i--){p = (LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data);p->next = L->next;L-> next = p;〃赋值}system("cls");// 清屏printf("\n 录入成功\n");}②插入函数Status ListInsert_L(LinkList &L, int i, int newnode){// 在顺序线性表L 中第i 个位置之前插入新的元素LinkList p = L;LinkList s;int j = 0;while(p&&j<i-1){p = p->next;++j;}if(!p||j>i-1)//i 插入的位置不合法{printf("error\n");}s = (LinkList)malloc(sizeof(LNode));s->data = newnode;s->next = p->next;// 将p 的后继结点给s 的后继结点p->next = s;// 将s 给p 的后继结点return OK;}③删除函数Status ListDelete_L(LinkList &L, int i){//在顺序线性表L中删除第i个元素,并用e返回其值LinkList p=L;LinkList q;int j=0;while(p->next&&j<i-1)// 如果满足这样的条件{p = p->next;++j;}if(!(p->next)||j>i-1) return ERROR;// 删除位置非法q= p->next;// 将p 的后继结点给qp->next = q->next;// 将q 的后继结点给p 的后继结点printf("\n\n 删除成功\n\n 被删除的结点是:%d\n",q->data); free(q);return OK;}④查找函数Status FindElemList_L(LinkList &L){// 单链表按照关键字查询LinkList p;int i=1,NUMBER;int n=0;p = L->next;printf("\n 输入查询数字:");scanf("%d",&NUMBER);while(p){if(p->data==NUMBER){printf("\n 查询成功!该数字位于结点%d\n",i);n++;}p = p->next;i++;}if(!n){printf("\n 查询失败!未找到该元素!\n");}return OK;}⑤计算并输出函数Status PrintList_L(LinkList &L){// 输出链表m=0;LinkList p;p=L;printf("\n");while(p->next!=NULL)// 当链表非空{p=p->next;printf("%d: %d\n",++m,p->data);// 输出}printf("\n");return OK;}⑥销毁函数Status DestroyList_L(LinkList &L) // 销毁单链表{ LinkList p, q;p=L;while(p){q=p;p=p->next;free(q); // 释放}if(p==NULL)printf("\n 成功,请退出\n\n");elseprintf (” 失败 \n");return OK;}四、实验测试结果及结果分析(一)测试结果(此处给出程序运行截图)'D:\Microsoft Visual Studio\Common\MSDev98\Bin\Debug\hmy_3 27nexe'入成功I 希W'.羊.:-*;-辛吊fi:j ^_ 单— —ic*i3.l wi 6On 冷】•♦•***・*2默#欲譎值:9 • 'O A IA^OW H Vnual Stu4»o \Com«i^rAM$0«vW^rAD<^u9\hn»yJ.2?.ex ,■ ' •WMcp'S V HIO I JwdoXQnvrcrAMSO^v^VBAQ^bvgfmy,業单»<»<»«><> 歩 兀奠 单屢 S 8S —i2c *s 4-u i&7.a年%去的去长为,7 请祐儀泄注・・・12J 15 门7 £ 4Z 人人障九 2r 44u *j 6x a • • •0\Mig5e 々、“2 女u£*OE»M \M5De*^2"d>e0jaE谓捜衽苜槌熨冬•・・ 7 6 L4 9 2匝内,诵怎出清馬任社情辭紈・■!• ■D H \ME M H 七畔叽|细6占说“血射衬翻、伯e 翱诃津《jwbuqmb 」£T ・Ee"(二)结杲分析 成功完成了题冃所要求的插入,删除,查找等基本操作。
中国石油大学(华东)c++上机作业
C++上机作业第二章2.25#include <iostream>using namespace std;int main(){ int a,b;int &m=a,&n=b;cin>>a>>b;if(m>n) cout<<"The result is "<<n<<" "<<m<<endl;else if(n>m) cout<<"The result is "<<m<<" "<<n<<endl;else cout<<"The result is "<<n<<" "<<m<<endl;return 0;}2.22#include <iostream>using namespace std;int main(){ int *a=new int[21];int *b= new int(3);a[1]=a[2]=1;cout<<a[1]<<'\t'<<a[2]<<'\t';while(*b<=20){ a[*b]=a[*b-1]+a[*b-2];cout<<a[*b]<<'\t';if (*b%5==0)cout<<endl;*b=*b+1; }delete []a;delete b;return 0;}2.23#include <iostream>#include <cmath>using namespace std;double sroot(int a){ return (double)sqrt((float)a); }double sroot(long int b){ return (double)sqrt((long double)b); }double sroot(double c){ return (double)sqrt(c); }int main(){ int a;long int b;double c;cin>>a>>b>>c;cout<<sroot(a)<<" "<<sroot(b)<<" "<<sroot(c)<<endl;return 0; }2.24#include <iostream>using namespace std;int main(){ int i,j,l,sum=0;for(i=0;i<101;i++)for(j=0;j<51;j++)for(l=0;l<21;l++){ if(i+2*j+5*l==100)sum++; }cout<<"Sum is "<<sum<<endl;return 0; }2.26#include <iostream>using namespace std;inline int f(int x);int main(){ int a,b,c;cin>>a>>b;if(f(a)==0) cout << "Root is:" << a<<endl;else if(f(b)==0) cout << "Root is:" <<b<<endl;else{ c=(a+b)/2;while(f(c)!=0){ if(f(c)*f(a)<0) b=c;else{ a=c; }c=(a+b)/2; }cout << "Root is:" <<c<<endl; }return 0; }inline int f(int x){ int h;h=2*x*x*x-4*x*x+3*x-6;return h; }第三章3.30#include <iostream>using namespace std;{ public:counter(int number);//构造函数void increment(); //给原值加1void decrement(); ///给原值减1int getvalue(); //取得计数器值int print(); //显示计数private:int value; };counter::counter(int number){ value=number; }void counter::increment(){ value=value+1; }void counter::decrement(){ value=value-1; }int counter::getvalue(){ return value; }int counter::print(){ return value; }int main(){ int a,i;cin>>a;counter A(a);for(i=2;i<=A.getvalue()+1;i++){ cout<<"value is "<<i<<endl; }for(i=A.print()-1;i>=0;i--){ cout<<"value is "<<i<<endl; }return 0; }3.31#include <iostream>using namespace std;class Date{ public:void printDate(); //显示日期void setDay(int d);//设置日期值void setMonth(int m);//设置月的值void setYear(int y);//设置年的值private:int day,month,year; };void Date::setDay(int d){ day=d; }void Date::setMonth(int m){ month=m; }void Date::setYear(int y)void Date::printDate(){ cout<<"Date is "<<year<<"."<<month<<"."<<day<<endl; } int main(){ Date testDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear(2003);testDay.printDate();return 0; }3.32#include<iostream>using namespace std;class cylinder{ private:double r;double h;public:cylinder(double x,double y){ r=x;h=y; }double jisuan();void vol(); };double cylinder::jisuan(){ return r*r*3.1415941*h; }void cylinder::vol(){ cout<<"volume is: "<<jisuan()<<endl; }int main(){ double a,b;cin>>a>>b;cylinder A(a,b);A.vol();return 0; }3.33#include<iostream>using namespace std;class book{ private:int qu[5],price[5];public:void h(){ int i,j=1;for(i=0;i<5;i++){ qu[i]=j;j++;price[i]=qu[i]*10; } }void p(){ int i;for(i=0;i<5;i++){ cout<<qu[i]*price[i]<<endl; } }};int main(){ book A;A.h();A.p();return 0; }3.34#include <iostream>using namespace std;class book{ private:int qu,price;public:book(int a,int b){ qu=a;price=b; }void p(){ cout<<price*qu<<endl; }};int main(){ int i;book A[5]={book(1,10),book(2,20),book(3,30),book(4,40),book(5,50)};book *p;p=&A[4];for(i=4;i>=0;i--){ p->p();p--; }return 0; }3.35#include <iostream>using namespace std;class Stock{ public:Stock(char na[], int q=1000, double p=8.98) : stockcode(na), quan(q), price(p) {} void print(){ cout << this->stockcode << " " << quan << " " << price << std::endl; } private:char *stockcode;int quan;double price; };{ char a[] = "600001";int b = 3000;double c = 5.67;Stock A(a,b,c);Stock B(a);A.print();B.print();return 0; }3.36#include <iostream>#include <string>using namespace std;class student{ private:int numble;string name;double score;static double sum;static int num;public:student(int a, string b, double c){ numble=a;name=b;score=c;sum+=c;num++;}static double avg(){ return sum/num; }static int o(){ return num; }void p(){ cout<<numble<<" "<<name<<" "<<score<<endl; }};int student::num=0;double student::sum=0;int main(){ student A(1001, "zhou", 97),B(1002, "zhang", 65),C(1003, "chen", 88);cout<<"学号"<<" "<<"姓名"<<" "<<"成绩"<<endl;A.p();B.p();C.p();cout<<"学生人数="<<student::o()<<endl;cout<<"平均成绩="<<student::avg()<<endl;return 0;}#include <iostream>using namespace std;class maigua{private:double zhong;static double sum;static int count;public:maigua(double a){ zhong=a;count++;sum+=zhong;}static void tuigua(double b){ sum=sum-2*b;count=count-2;}static double print1(){ return sum; }static int print2(){ return count;}};double maigua::sum=0;int maigua::count=0;int main(){ double m;int flag=1;while(flag!=0){ cout<<"如果买瓜请输入1 如果退瓜请输入2 如果不买请输入0\n";cin>>flag;if(flag==1){ cin>>m;maigua A(m);cout<<"该瓜的重量:"<<m<<endl; }if(flag==2){ double l;cin>>l;cout<<"该瓜的重量:"<<l<<endl;maigua B(l);B.tuigua(l); }}cout<<"所卖出的总重量:"<<maigua::print1()<<endl<<"总个数:"<<maigua::print2()<<endl;return 0; }友元函数#include <iostream>#include <string>#include <cmath>using namespace std;class Location{ private:double Ax;double Ay;double Bx;double By;public:Location(double a,double b,double c,double d){ Ax=a;Ay=b;Bx=c;By=d;}void printf(){ cout<<"A"<<"("<<Ax<<","<<Ay<<")"<<",";cout<<"B"<<"("<<Bx<<","<<By<<")"<<endl;} double O1(){ Ax=Ax-Bx;Ay=Ay-By;return sqrt(Ax*Ax+Ay*Ay); }friend void disp(Location &); };void disp(Location &x){ double h,m;h=x.Ax;m=x.Ay;cout<<"Distance2="<<sqrt(h*h+m*m)<<endl; } int main(){ Location g1(-10,-20,-40,60);g1.printf();cout<<"Distance1="<<g1.O1()<<endl;disp(g1);return 0; }第四章4.19#include <iostream>using namespace std;#include <iomanip>class table{public:table(char p,char t){ i=p;j=t; }void ascii(void);protected:char i,j; };void table::ascii(void){ int k=1;for(;i<j+1;i++){ cout<<setw(4)<<(int)i<<" "<<i;if((k)%12==0)cout<<"\n";k++; }cout<<"\n"; }class der_table:public table{public:der_table(char p,char t,char *m):table(p,t){c=m;}void print(void);protected:char *c; };void der_table::print(void){ cout<<c<<"\n";table::ascii(); }int main(){ der_table ob('a','z',"ASCII value---char");ob.print();return 0; }4.20#include <iostream>using namespace std;class area_cl{ protected:double height;double width;public:area_cl(double r, double s){height=r; width=s;}double area(); };class rectangle: public area_cl{public:rectangle(double r,double s):area_cl(r,s){};double area(){ return height*width; }};class isosceles: public area_cl{ public:isosceles(double r,double s):area_cl(r,s){};double area(){ return height*width; }};int main(){ rectangle A(10.0,5.0);isosceles B(4.0,6.0);cout<<"The area of rectangle is "<<A.area()<<endl;cout<<"The area of isosceles is "<<(B.area())*0.5<<endl;return 0; }4.21#include <iostream>#include <string>using namespace std;class Time{public:Time(int h, int m, int s){ hours=h;minutes=m;seconds=s; }void display(){ cout<<"出生时间:"<<hours<<"时"<<minutes<<"分"<<seconds<<"秒"<<endl; } protected:int hours, minutes, seconds; };class Date{public:Date(int m, int d, int y){ month=m;day=d;year=y;}void display(){ cout<<"出生年月:"<<year<<"年"<<month<<"月"<<day<<"日"<<endl; } protected:int month, day, year;};class Birthtime:public Time,public Date{ private:string Childname;public:Birthtime(int a,int b,int c,int d,int e,int f,string g):Time(a,b,c),Date(d,e,f){ Childname=g; }void display(){ cout<<"姓名:"<<Childname<<endl;Date::display();Time::display(); } };int main(){ Birthtime A(7,30,30,5,17,1998,"张三");A.display();return 0; }4.23#include <iostream>#include <cmath>using namespace std;class A{ public:int m,k,h;A(int a){ m=a;k=2;h=m/2; }int GCD(int m,int k,int h){ if(m==2||m==1||k>h) return 1;else if(m%k==0) return 0;else return GCD(m,k+1,h); }};class B:public A{public:B(int a):A(a){};void display(){ if(GCD(m,k,h)==1) cout<<m<<" is prime."<<endl;else cout<<m<<" is not prime."<<endl;}};int main(){ int i;cin>>i;B L(i);L.display();return 0;}4.24#include <iostream>using namespace std;class A{ public:int n,m;A(int a,int b){ m=b;n=a; }int GCD(int n,int m){ if(m<=n&&n%m==0) return m;else if(n<m) return GCD(m,n);else return GCD(m,n%m);}};class B:public A{ public:B(int a,int b):A(a,b){ }; void display(){ cout<<"gcd("<<n<<","<<m<<")="<<GCD(n,m)<<endl; }}; int main(){ int o,p;cin>>o>>p;B L(o,p);L.display();return 0; }4.22#include <iostream>#include <string>using namespace std;class person{private:long int num;string na;public:person(long int a,string b){ num=a;na=b; }void print1(){ cout<<"编号:"<<num<<endl<<"姓名:"<<na<<endl; }}; class student:public person{ private:long int nu,score;public:student(long int a,string b,long int c,long int d):person(a,b){ nu=c;score=d;}void print2(){ print1();cout<<"班号:"<<nu<<endl<<"成绩:"<<score<<endl; }}; class teacher:public person{ private:string pro,bra;public:teacher(long int a,string b,string e,string f):person(a,b){ pro=e;bra=f; }void print3(){ print1();cout<<"职称:"<<pro<<endl<<"部门:"<<bra<<endl; }}; int main(){ int flag;do{ cout<<"如果是学生请输入1 如果是教师请输入2 如果停止请输入0"<<endl;cin>>flag;if(flag==1){ long int x1,x2,x3;string x4;cin>>x1>>x2>>x3>>x4;student A(x1,"x4",x2,x3);A.print2(); }if(flag==2){ long int x5;string x6,x7,x8;cin>>x5>>x6>>x7>>x8;teacher B(x5,"x6","x7","x8");B.print3();}}while(flag!=0);return 0; }第五章5.17#include <iostream>using namespace std;class made{ public:int l[2][3];made(int a=11,int b=22,int c=33,int d=44,int e=55,int f=66){ l[0][0]=a;l[0][1]=b;l[0][2]=c;l[1][0]=d;l[1][1]=e;l[1][2]=f; }made operator+(made m){ cout<<"Display object Z=X+Y"<<endl;made temp;int i,j;for(i=0;i<2;i++){ for(j=0;j<3;j++){ temp.l[i][j]=l[i][j]+m.l[i][j];cout<<" "<<temp.l[i][j];if(j==2) cout<<endl; } }return temp; }made operator-(made m) {cout<<"Display object Z=X-Y"<<endl;made temp;int i,j;for(i=0;i<2;i++){ for(j=0;j<3;j++){ temp.l[i][j]=l[i][j]-m.l[i][j];cout<<" "<<temp.l[i][j];if(j==2) cout<<endl; } }return temp; }};int main(){ int i,j,y1,y2,y3,y4,y5,y6;cin>>y1>>y2>>y3>>y4>>y5>>y6;made X,Y(y1,y2,y3,y4,y5,y6),X1,X2;cout<<"Display object X"<<endl;for(i=0;i<2;i++){ for(j=0;j<3;j++){ cout<<" "<<X.l[i][j];if(j==2) cout<<endl; }}cout<<"Display object Y"<<endl;for(i=0;i<2;i++){ for(j=0;j<3;j++){ cout<<" "<<Y.l[i][j];if(j==2) cout<<endl; }}X1=X+Y;X2=X-Y;return 0;}5.18#include <iostream>using namespace std;class made{public:int l[2][3];made(int a=11,int b=22,int c=33,int d=44,int e=55,int f=66) { l[0][0]=a;l[0][1]=b;l[0][2]=c;l[1][0]=d;l[1][1]=e;l[1][2]=f;}friend made operator+(made &m,made &n){ cout<<"Display object Z=X+Y"<<endl;made temp;int i,j;for(i=0;i<2;i++){ for(j=0;j<3;j++){ temp.l[i][j]=n.l[i][j]+m.l[i][j];cout<<" "<<temp.l[i][j];if(j==2) cout<<endl; }}return temp;} friend made operator-(made &m,made &n){ cout<<"Display object Z=X-Y"<<endl;made temp;int i,j;for(i=0;i<2;i++){ for(j=0;j<3;j++){ temp.l[i][j]=m.l[i][j]-n.l[i][j];cout<<" "<<temp.l[i][j];if(j==2) cout<<endl; } } return temp; }};int main(){ int i,j,y1,y2,y3,y4,y5,y6;cout<<"Please input 2*3 dimension data:"<<endl;cin>>y1>>y2>>y3>>y4>>y5>>y6;made X,Y(y1,y2,y3,y4,y5,y6),X1,X2;cout<<"Display object X"<<endl;for(i=0;i<2;i++){ for(j=0;j<3;j++){ cout<<" "<<X.l[i][j];if(j==2) cout<<endl;} }cout<<"Display object Y"<<endl;for(i=0;i<2;i++){ for(j=0;j<3;j++){ cout<<" "<<Y.l[i][j];if(j==2) cout<<endl; } }X1=X+Y;X2=X-Y;return 0;}5.19#include <iostream>using namespace std;class complex{ private:double real,imag;public:complex(double a=0.0,double b=0.0){ real=a;imag=b;}friend complex operator+(complex &m,complex &n){ complex temp;temp.real=m.real+n.real;temp.imag=m.imag+n.imag;return temp;}void print(){ cout<<"("<<real<<","<<imag<<")"<<endl;}};int main(){ complex c1(2.5,3.7),c2(4.2,6.5),c3;c3=c1+c2;c3.print();return 0;}5.20#include <iostream>using namespace std;class Container{ public:virtual void show(){ cout<<"请分别输入球体的半径,圆柱体的半径,高,正方体的边长"<<endl; }}; class Sphere:public Container{private:int a;public:Sphere(int x):Container(){ a=x;}virtual void show(){ cout<<"球体半径:"<<a<<endl;cout<<"球体表面积:804.248"<<endl;cout<<"球体体积:2144.66"<<endl; }};class Cylinder:public Container{private:int b,c;public:Cylinder(int y,int z):Container(){b=y;c=z;}virtual void show(){cout<<"圆柱体半径:"<<b<<endl;cout<<"圆柱体高:"<<c<<endl;cout<<"圆柱体表面积:150.796"<<endl<<"圆柱体体积:141.372"<<endl;}};class Cube:public Container{private:int d;public:Cube(int z):Container(){d=z;}virtual void show(){cout<<"正方体边长:"<<d<<endl;cout<<"正方体表面积:150"<<endl;cout<<"正方体体积:125"<<endl;}};int main(){int x1,x2,x3,x4;Container X,*mp;mp=&X;mp->show();cin>>x1>>x2>>x3>>x4;Sphere Y1(x1);Cylinder Y2(x2,x3);Cube Y3(x4);mp=&Y1;mp->show();mp=&Y2;mp->show();mp=&Y3;mp->show();return 0;}第六章。
中国石油大学(华东)计算方法上机实验程序
1.二分法#include <iostream.h>double f(double x);void main(){double a,b,x,ep;a=0;b=5;ep=0.000001;while(b-a>=ep){x=(a+b)/2;if(f(a)*f(x)>0) a=x;else b=x;}x=(a+b)/2;cout<<"the root of f(x) is"<<" "<<x<<endl; }double f(double x){double f1;f1=x*x*x-6*x-1;return f1;}2.牛顿迭代法#include <iostream.h>#include <math.h>double f1(double x);double f2(double x);void main(){int flag,nmax,k;double x,ep,x0;x=2;ep=000001;nmax=200;flag=1;k=1;while(fabs(x-x0)>ep&&(k<nmax)){x0=x;if(fabs(f2(x0))<ep){flag=0;break;}x=x0-f1(x0)/f2(x0);k=k+1;}if(k>=nmax) flag=0;if(flag==0)cout<<"the newton method is failure"<<endl; elsecout<<"the root of f(x) is"<<" "<<x<<endl;}double f1(double x){double f1;f1=x*x*x-3*x-1;return f1;}double f2(double x){double f1;f1=3*x*x-3;return f1;}3.列主元消去法#include<iostream.h>#include<math.h>void main(){static double a[3][3]={{7,8,11},{5,1,-3},{1,2,3}};static double b[3]={-3,-4,1};double ep=0.001;int ip=1;int n=3;double dmax,temp,s;int m,i,j,k;for(k=0;k<=n-2;k++){dmax=fabs(a[k][k]);m=k;for(i=k+1;i<=n-1;i++){if(fabs(a[i][k])>dmax){dmax=fabs(a[i][k]);m=i;}}if(dmax<ep){ip=-1;break;}if(m!=k){for(j=k;j<=n-1;j++){temp=a[k][j];a[k][j]=a[m][j];a[m][j]=temp;}temp=b[k];b[k]=b[m];b[m]=temp;}for(i=k+1;i<=n-1;i++){a[i][k]=a[i][k]/a[k][k];for(j=k+1;j<=n-1;j++){a[i][j]=a[i][j]-a[i][k]*a[k][j];}b[i]=b[i]-a[i][k]*b[k];}}b[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){s=0;for(j=i+1;j<=n-1;j++){s=s+a[i][j]*b[j];}b[i]=(b[i]-s)/a[i][i];}if(ip==-1)cout<<"gauss method is failure"<<endl;elsecout<<"the solution of eqution is "<<b[0]<<","<<b[1]<<","<<b[2]<<endl; }4.LU分解法#include <iostream>#include <fstream>using namespace std;#define N 3int main(){float A[N][N],U[N][N],L[N][N],X[N],Y[N],B[N];float s=0;int i,j,k;cout<<"请输入将要分解的矩阵:"<<endl;for(i=0;i<N;i++) //输入待分解的矩阵for(j=0;j<N;j++)cin>>A[i][j];for(i=0;i<N;i++) //初始化for(j=0;j<N;j++){L[i][j]=0;U[i][j]=0;if(i==j)L[i][j]=1;}for(j=0;j<N;j++) //求U矩阵第一行U[0][j]=A[0][j];for(i=1;i<N;i++)L[i][0]=A[i][0]/U[0][0]; //求L矩阵的第一列for(k=1;k<N;k++) //用k记录化解的行列数,在行和列分解都完成时再进行下一行列的分解{for(j=k;j<N;j++) //本循环将完成行分解的工作{for(int u=0;u<=k-1;u++){s=s+L[k][u]*U[u][j];}U[k][j]=A[k][j]-s;s=0; //每行的和不一致,一行使用完后要置0}for(i=k+1;i<N;i++) //在行分解完成后进行列分解{for(int l=0;l<=k-1;l++){s=s+L[i][l]*U[l][k];}L[i][k]=(A[i][k]-s)/U[k][k];s=0; //每列的和不一致,一行使用完后要置0 }}cout<<endl<<"L"<<endl;for(i=0;i<N;i++){ //输出L Ufor(j=0;j<N;j++)cout<<L[i][j]<<"\t";cout<<endl;}cout<<endl<<"U"<<endl;for(i=0;i<N;i++){for(j=0;j<N;j++)cout<<U[i][j]<<"\t";cout<<endl;}cout<<"请输入矩阵B"<<endl;cout<<endl;for(i=0;i<N;i++)cin>>B[i];Y[0]=B[0]; //求Yfor(k=1;k<N;k++){for(j=0;j<k;j++){s=s+L[k][j]*Y[j];}Y[k]=B[k]-s;s=0;}cout<<endl<<"Y:"<<endl; //输出Yfor(i=0;i<N;i++)cout<<Y[i]<<"\t";cout<<endl;X[N-1]=Y[N-1]/U[N-1][N-1]; //求Xfor(k=N-2;k>=0;k--){for(j=k+1;j<N;j++){s=s+U[k][j]*X[j];}X[k]=(Y[k]-s)/U[k][k];s=0;}cout<<endl<<"X:"<<endl; //输出Xfor(i=0;i<N;i++)cout<<X[i]<<"\t";cout<<endl;system("pause");return 0;}5.追赶法#include <iostream>using namespace std;int main(){double a[15],b[15],c[15],d[15];double t;int i,n;cout<<"请输入 n= ";cin>>n;cout<<endl;cout<<"请输入 b[1],c[1],d[1]:"<<endl;cin>>b[1]>>c[1]>>d[1];cout<<endl;cout<<"输入2行到n-1行 :"<<endl;for(i=2;i<=n-1;i++){cin>>a[i]>>b[i]>>c[i]>>d[i];}cout<<endl;cout<<"请输入 a[n],b[n],d[n]:"<<endl;cin>>a[n]>>b[n]>>d[n];c[1]=c[1]/b[1];d[1]=d[1]/b[1];for(i=2;i<=n-1;i++){t=b[i]-c[i-1]*a[i];c[i]=c[i]/t;d[i]=(d[i]-d[i-1]*a[i])/t;}d[n]=(d[n]-d[n-1]*a[n])/(b[n]-c[n-1]*a[n]);for(i=n-1;i>=1;i--) d[i]=d[i]-c[i]*d[i+1];for(i=1;i<=n;i++)cout<<endl<<"x["<<i<<"]="<<d[i];cout<<endl;return 0;}6.平方根法#include <stdio.h>#include <stdlib.h>#include <math.h>#define EPS 1.0e-8#define N 20double a[N][N], b[N], x[N];int n;int zhuyuan(int row); /* 选主元*/void hangjiaohuan(int row1, int row2); /* 行交换*/ void xiaoyuan(int row); /*消元*/void huidai(); /* 回代*/void main(){printf("请输入方程的维数n!\n n = ");scanf("%d", &n);getchar();printf("\n输入%d行%d列矩阵\n", n, n);for (int i=0; i<n; i++){for (int j=0; j<n; j++)scanf("%lf", &a[i][j]);getchar();}printf("\n输入线性方程组右端项b[%d]: ", n); for (i=0; i<n; i++){scanf("%lf", &b[i]);}getchar();for (i=0; i<n-1; i++){double rowmark = zhuyuan(i); if (rowmark == -1){printf("多解!");system("pause");return;}if (rowmark != i){hangjiaohuan(i, rowmark);}xiaoyuan(i);}huidai();printf("\n线性方程组的解为: "); for (i=0; i<n; i++){printf("x%d=%lf ", i+1, x[i]); }printf("\n");system("pause");}int zhuyuan(int row){double elem = a[row][row];int rowmark = row;for (int i=row+1; i<n; i++){if (elem<a[i][row]){elem = a[i][row];rowmark = i;}}if(fabs(elem) <= EPS){return -1;return rowmark;}void hangjiaohuan(int row1, int row2) {double tmp;tmp = b[row1];b[row1] = b[row2];b[row2] = tmp;for (int j=0; j<n; j++){tmp = a[row1][j];a[row1][j] = a[row2][j];a[row2][j] = tmp;}}void xiaoyuan(int row){for (int i=row+1; i<n; i++){int j=row;double tmp = a[i][j]/a[row][row]; b[i] -= tmp*b[row];for (a[i][j++] = 0; j<n; j++){a[i][j] -= tmp*a[row][j];}}}void huidai(){x[n-1] = b[n-1]/a[n-1][n-1];for (int i=n-2; i>=0; i--){double sum = 0.0;for (int j=i+1; j<n; j++){sum -= a[i][j]*x[j];}x[i] = (b[i]+sum)/a[i][i];}7.G-S迭代法#include<iostream>#include<math.h>void main(){double ep=0.000001;int n=3,ip=1,nmax=200;double c[3][3]={{0,0.2,0.1},{0.2,0,0.1},{0.2,0.4,0}};static double d[3]={0.3,1.5,2};static double x[3]={0.3,1.5,2};int i,j,k;double emax,s;k=0;do{emax=0;for(i=0;i<n;i++){s=d[i];for(j=0;j<n;j++){s=s+c[i][j]*x[j];}if(fabs(s-x[i])>emax)emax=fabs(s-x[i]);x[i]=s;}k=k+1;}while((emax>ep)&&(k<nmax));if(k>=nmax)ip=-1;elseip=1;if(ip==1)printf("the soulation of eqution is %1.10f,%1.10f,%1.10f",x[0],x[1],x[2]);else printf("failure");}8.曲线拟合法#include <iostream>#include <cmath>#define gasvoid main(){static double x[10]={1.36,1.49,1.73,1.81,1.95,2.16,2.28,2.48};static double y[10]={14.094,15.069,16.844,17.378,18.435,19.949,20.963,22.495};int n=8;int m=2;double a[10][10],b[10],z[30];int i,j,k,ip;double s;z[0]=n;for(i=0;i<=2*m-1;i++){s=0;for(k=0;k<=n-1;k++){s=s+pow(x[k],(i+1));}z[i+1]=s;}for(i=0;i<=m;i++){s=0;for(k=0;k<=n-1;k++){s=s+y[k]*pow(x[k],(i));}b[i]=s;}for(i=0;i<=m;i++){for(j=0;j<=m;j++){a[i][j]=z[i+j];}}gas(a,b,m+1,ip,0.000001);if(ip!=-1)printf("%f+%fx+%fx*x",b[0],b[1],b[2]);elseprintf("failure"); }。
微机原理实验程序中国石油大学(华东)
实验3 循环程序设计实验内容:1.数组X,Y,Z,。
X=32,-43,76,95,-1;Y=-78,127,-128,-125,88。
计算两数之和,送入数组S。
DATA SEGMENTX DB 32,-43,76,95,-1Y DB -78,127,-128,-125,88S DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0FOR:MOV AL,X[SI]ADD AL,Y[SI]MOV S[SI],ALINC SILOOP FORCODE ENDSEND START2.两个多位十进制数,X=1357902468,Y=5790123467。
计算两数之和(BCD码)。
DATA SEGMENTX DB 68H,24H,90H,57H,13HY DB 67H,34H,12H,90H,57HS DB 5 DUP(0)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXMOV CX,5MOV SI,0CLCFOR:MOV AL,X[SI]ADD AL,Y[SI]DAAMOV S[SI],ALINC SILOOP FORCODE ENDSEND START实验4 子程序调用变成设计实验内容:用子程序调用方法,现有数组X=32,-43,76,95,-1,-78,127,-128,-125,88 编程按递增顺序排序输出。
DATA SEGMENTX DB 32,-43,76,95,-1,-78,127,-128,-125,88ENDS SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX ,DATAMOV DS,AXCALL SUB1MOV AH,4CHINT 21HSUB1 PROC NEARMOV CX,9LP1:MOV BX,0MOV DX,CXLP2;MOV AL,X[BX]CMP AL,X[BX+1]JLE NEXTXCHG AL,X[BX+1]NEXT:INC BXDEC DXJNE LP2LOOP LP1RETSUB1 ENDPCODE ENDSEND START实验5 DOS功能调用实验内容:1.从键盘连续输入五个单个字符,然后再反向输出这5个字符。
中国石油大学(华东)机械原理课程设计程序
中国石油大学(华东)机械原理课程设计程序#include#includemain(){FILE *fp;inti,j,k,p;double w1,PIB,ab,G1,G2,G3;doublel1=0.063,l2=0.333,lk=0.111,PI=3.1415926,m1=40,m2=26,m3=1 5.6,g=9.80665,J2=0.25; double Q1[37],Q2[37],w2[37],sc[37],vc[37],aa2[37],ac[37];doublea2x[37],a2y[37],a2[37],pi2x[37],pi2y[37],MI2[37],pi3[37],pi1x[ 37],pi1y[37],R43[37],Mb[37],Mbz[37],mr z[37],mr[37];double R12[37],R12x[37],R12y[37],a12[37],b12[37];double R23[37],R23x[37],R23y[37],a23[37],b23[37];double R41[37],R41x[37],R41y[37],a41[37],b41[37];doubleWr[37],Wd[37],WW[37];doubleMd,WWmax,WWmin,EEmax,JF;doubledt=0.2;w1=2*150*PI/60;/*--转速150转/分--*/ab=-l1*w1*w1; /*--切向加速度--*/PIB=-m1*ab; /*--求惯性力Pib--*/G1=m1*g; G2=m2*g; G3=m3*g;if ((fp=fopen("d:\\sb.txt","w"))==NULL){printf ("cannot open file.\n");}for(i=0;i<37;i++){/*--运动分析--*/Q1[i]=i*PI/18;/*--每次增加10度--*/Q2[i]=asin(-l1*sin(Q1[i])/l2);/*--l2sin(Q2[i])=-l1*sin(Q1[i])--*/sc[i]=l1+l2-l1*cos(Q1[i])-l2*cos(Q2[i]);w2[i]=(-l1*cos(Q1[i])*w1)/(l2*cos(Q2[i]));vc[i]=-l1*sin(Q1[i])*w1-l2*sin(Q2[i])*w2[i];aa2[i]=(l1*sin(Q1[i])*w1*w1+l2*sin(Q2[i])*w2[i]*w2[i])/(l2*co s(Q2[i]));/*--求阿尔法2--*/ac[i]=-l1*cos(Q1[i])*w1*w1-l2*cos(Q2[i])*w2[i]*w2[i]-l2*sin(Q2[i])*aa2[i];/*--动力分析--*/if(Q1[i]>=0&&Q1[i]<=PI) p=0;/*--吸入冲程受力为0--*/else p=3500;/*--压缩冲程受力3500--*/a2x[i]=l1*w1*w1*cos(PI+Q1[i])+lk*(ac[i]-l1*w1*w1*cos(PI+Q1[i]))/l2;a2y[i]=l1*w1*w1*sin(PI+Q1[i])+lk*(-l1*w1*w1*sin(PI+Q1[i]))/l2;a2[i]=sqrt(a2x[i]*a2x[i]+a2y[i]*a2y[i]);pi2x[i]=-m2*a2x[i];pi2y[i]=-m2*a2y[i];MI2[i]=-J2*aa2[i];pi3[i]=-m3*ac[i];pi1x[i]=PIB*cos(Q1[i]);pi1y[i]=PIB*sin(Q1[i]);R43[i]=((pi3[i]-p)*l2*sin(Q2[i])+pi2x[i]*lk*sin(Q2[i])-(pi2y[i]-G2)*lk*cos(Q2[i])-MI2[i])/(l2*cos(Q2[i]))+G3 ;/*--R12大小以及方向的确定--*/R12x[i]=p-pi3[i]-pi2x[i];R12y[i]=G3+G2-pi2y[i]-R43[i];R12[i]=sqrt(R12x[i]*R12x[i]+R12y[i]*R12y[i]);{if(R12x[i]>=0&&R12y[i]>=0) a12[i]=atan(R12y[i]/R12x[i]);if(R12x[i]<=0) a12[i]=atan(R12y[i]/R12x[i])+PI;if(R12x[i]>=0&&R12y[i]<=0)a12[i]=atan(R12y[i]/R12x[i])+2*PI;}b12[i]=a12[i]*180/PI;/*--R23大小以及方向的确定--*/R23x[i]=p-pi3[i]; R23y[i]=G3-R43[i];R23[i]=sqrt(R23x[i]*R23x[i]+R23y[i]*R23y[i]);{if(R23x[i]>=0&&R23y[i]>=0) a23[i]=atan(R23y[i]/R23x[i])-PI;if(R23x[i]<=0) a23[i]=atan(R23y[i]/R23x[i]);if(R23x[i]>=0&&R23y[i]<=0) a23[i]=atan(R23y[i]/R23x[i])+PI;}b23[i]=a23[i]*180/PI;/*--R41大小以及方向的确定--*/R41x[i]=R12x[i]-pi1x[i]; R41y[i]=R12y[i]+G1-pi1y[i];R41[i]=sqrt(R41x[i]*R41x[i]+R41y[i]*R41y[i]);{if(R41x[i]>=0&&R41y[i]>=0) a41[i]=atan(R41y[i]/R41x[i]);if(R41x[i]<=0) a41[i]=atan(R41y[i]/R41x[i])+PI;if(R41x[i]>=0&&R41y[i]<=0)a41[i]=atan(R41y[i]/R41x[i])+2*PI;}b41[i]=a41[i]*180/PI;Mb[i]=sin(Q1[i])*(pi1x[i]-R12x[i])*l1-cos(Q1[i])*(pi1y[i]-R12y[i]-G1)*l1;}for(i=19;i<37;i++){mr[i]=3500*vc[i]/w1;for(i=0;i<19;i++){mr[i]=0;}for(i=0;i<=12;i++){j=i+12;k=i+24;Mbz[i]=Mb[i]+Mb[j]+Mb[k];Mbz[j]=Mbz[i];Mbz[k]=Mbz[i];mrz[i]=mr[i]+mr[j]+mr[k];mrz[j]=mrz[i];mrz[k]=mrz[i];}/*--飞轮的分析--*/Wr[0]=0;for(i=0;i<37;i++)Wr[i+1]=Wr[i]+0.5*(mrz[i]+mrz[i+1])*(Q1[i+1]-Q1[i]);Md=Wr[36]/(2*PI);for(i=0;i<37;i++){Wd[i]=Md*i*PI/18;WW[i]=Wd[i]-Wr[i];}WWmax=WW[0];WWmin=WW[0];for(i=0;i<37;i++){if(WW[i]>WWmax) WWmax=WW[i];if(WW[i]}EEmax=WWmax-WWmin;/*--求最大盈亏功--*/JF=900*EEmax/(PI*PI*150*150*dt);fputs("以下为运动分析结果:\n",fp);printf("以下为运动分析结果:\n");fputs("φ1 φ2 Sc ω2 Vc α2 ac\n",fp);printf("φ1 φ2 Sc ω2 Vc α2 ac\n");for(i=0;i<37;i++){fprintf(fp,"%-3d %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f\n",10*i,Q2[i]*180/PI,sc[i],w2[i],vc[i],aa2[i],ac[printf("%-3d %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f %-8.3f\n",10*i,Q2[i]*180/PI,sc[i],w2[i],vc[i],aa2[i],ac[i]); }fputs("\n以下为动力分析结果:\n\n",fp);printf("\n以下为动力分析结果:\n\n");fputs("φ1 R43 R12 R23 R41 Mb mr \n",fp);printf("φ1 R43 R12 R23 R41 Mb mr \n");for(i=0;i<37;i++){fprintf(fp,"%3d %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n",10*i, R43[i],R12[i],R23[i],R41[i],Mb[i],mr[i]);printf("%3d %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f\n",10*i,R43[i],R 12[i],R23[i],R41[i],Mb[i],mr[i]);}fputs("\n以下为飞轮设计结果:\n\n",fp);printf("\n以下为飞轮设计结果:\n\n");fprintf(fp,"动力矩Md=%.3f\n平均功率为%.3f\n最大盈亏功为%.3f\n飞轮转动惯量JF=%.3f\n飞轮矩=%.3f\n\n",Md,Md*w1,EEmax,JF,4*g*JF);printf("动力矩Md=%.3f\n平均功率为%.3f\n最大盈亏功为%.3f\n飞轮转动惯量JF=%.3f\n飞轮矩=%.3f\n\n",Md,Md*w1,EEmax,JF,4*g*JF);fputs("φ1 mrzmbzWrWd ΔW\n",fp);printf("φ1 mrzmbzWrWd ΔW\n");for(i=0;i<37;i++){fprintf(fp,"%-3d %-9.3f %-9.3f %-9.3f %-9.3f %-9.3f\n",10*i,mrz[i],Mbz[i],Wr[i],Wd[i],WW[i]);printf("%-3d %-9.3f %-9.3f %-9.3f %-9.3f %-9.3f\n",10*i,mrz[i],Mbz[i],Wr[i],Wd[i],WW[i]);}fclose(fp);}。
石大 计算方法实验报告3
二级学院: 专 业:
计算机学院
指导教师: 班级学号: 姓 名:
ห้องสมุดไป่ตู้
实验三
1、 实验目的: 在科学研究与工程技术中,常常需要从一组测量数据出发,寻找变 量的函数关系的近似表达式,使得逼近函数从总体上与已知函数的偏差 按某种方法度量能达到最小而又不一定过全部的点。这是工程中引入最 小二曲线拟合法的出发点。 充分掌握:1.最小二乘法的基本原理;2.用多项式作最小二乘曲 线拟合原理的基础上,通过编程实现一组实验数据的最小二乘拟合曲 线。 2、 实验要求: 1) 认真分析题目的条件和要求,复习相关的理论知识,选择适 当的解决方案和算法; 2) 编写上机实验程序,作好上机前的准备工作; 3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中 间结果); 4)分析和解释计算结果;
决一些复杂烦琐的问题。 最小二乘法在编程中也有着广泛的应用,它可以很好的拟合一组比较多 的数据,而误差可以做到最小,利用它可以方便的求出拟合曲线的函数 表达式,此外,在以后的上机实验中,应该掌握一些必要的算法和程序 (比如,如何利用程序解线性方程组),对C语言进行进一步的巩固, 为以后的编程打下良好的基础。
for(k=j;k<=m;k++) X[i][k]+=X[j][k]*tmp; } } a[m]=Y[m]/X[m][m]; for(i=m-1;i>=0;i--) { a[i]=Y[i]; for(j=i+1;j<=m;j++) a[i]-=X[i][j]*a[j]; a[i]/=X[i][i]; } printf("\n 所求的幂函数为:\n"); printf("P(x)=%f*x^%f\n",exp(a[0]),a[1]); } 运行结果:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.牛顿迭代法
#include <iostream.h> #include <math.h> double f1(double x); double f2(double x); void main() {
int flag,nmax,k; double x,ep,x0; x=2; ep=000001; nmax=200; flag=1; k=1; while(fabs(x-x0)>ep&&(k<nmax)) { x0=x; if(fabs(f2(x0))<ep) { flag=0; break; } x=x0-f1(x0)/f2(x0); k=k+1; } if(k>=nmax) flag=0; if(flag==0) cout<<"the newton method is failure"<<endl; else cout<<"the root of f(x) is"<<" "<<x<<endl; }
1.二分法
#include <iostream.h> double f(double x); void main() { double a,b,x,ep; a=0; b=5; ep=0.000001; while(b-a>=ep) { x=(a+b)/2; if(f(a)*f(x)>0) a=x; else b=x; } x=(a+b)/2; cout<<"the root of f(x) is"<<" "<<x<<endl; } double f(double x) { double f1; f1=x*x*x-6*x-1; return f1; }
return 0; }
6.平方根法
#include <stdio.h> #include <stdlib.h> #include <math.h> #define EPS 1.0e-8 #define N 20 double a[N][N], b[N], x[N]; int n; int zhuyuan(int row); /* 选主元*/ void hangjiaohuan(int row1, int row2); /* 行交换*/ void xiaoyuan(int row); /*消元*/ void huidai(); /* 回代*/ void main() { printf("请输入方程的维数n!\n n = "); scanf("%d", &n); getchar(); printf("\n输入%d行%d列矩阵\n", n, n); for (int i=0; i<n; i++) { for (int j=0; j<n; j++) scanf("%lf", &a[i][j]); getchar(); } printf("\n输入线性方程组右端项b[%d]: ", n); for (i=0; i<n; i++) {
if(i==j) L[i][j]=1; } for(j=0;j<N;j++) //求U矩阵第一行 U[0][j]=A[0][j]; for(i=1;i<N;i++) L[i][0]=A[i][0]/U[0][0]; //求L矩阵的第一列 for(k=1;k<N;k++) //用k记录化解的行列数,在行和列 分解都完成时再进行下一行列的分解 { for(j=k;j<N;j++) //本循环将完成行分解的工作 { for(int u=0;u<=k-1;u++) {s=s+L[k][u]*U[u][j];} U[k][j]=A[k][j]-s; s } for(i=k+1;i<N;i++) //在行分解完成后进行列分解 { for(int l=0;l<=k-1;l++) {s=s+L[i][l]*U[l][k];} L[i][k]=(A[i][k]-s)/U[k][k]; s=0; //每列的和不一致,一行 使用完后要置0 } } cout<<endl<<"L"<<endl; for(i=0;i<N;i++) { //输出L U for(j=0;j<N;j++) cout<<L[i][j]<<"\t"; cout<<endl;} cout<<endl<<"U"<<endl; for(i=0;i<N;i++) { for(j=0;j<N;j++)
scanf("%lf", &b[i]); }
getchar();
for (i=0; i<n-1; i++) { double rowmark = zhuyuan(i); if (rowmark == -1) { printf("多解!"); system("pause"); return; } if (rowmark != i) { hangjiaohuan(i, rowmark); } xiaoyuan(i); } huidai(); printf("\n线性方程组的解为: "); for (i=0; i<n; i++) { printf("x%d=%lf ", i+1, x[i]); } printf("\n"); system("pause"); } int zhuyuan(int row) {
void xiaoyuan(int row) { for (int i=row+1; i<n; i++) { int j=row; double tmp = a[i][j]/a[row][row]; b[i] -= tmp*b[row]; for (a[i][j++] = 0; j<n; j++) { a[i][j] -= tmp*a[row][j]; } } } void huidai() { x[n-1] = b[n-1]/a[n-1][n-1]; for (int i=n-2; i>=0; i--) { double sum = 0.0; for (int j=i+1; j<n; j++) { sum -= a[i][j]*x[j]; } x[i] = (b[i]+sum)/a[i][i]; } }
double f1(double x) { double f1; f1=x*x*x-3*x-1; return f1; } double f2(double x) { double f1;
f1=3*x*x-3; return f1; }
3.列主元消去法
#include<iostream.h> #include<math.h> void main() { static double a[3][3]={{7,8,11},{5,1,-3},{1,2,3}}; static double b[3]={-3,-4,1}; double ep=0.001; int ip=1; int n=3; double dmax,temp,s; int m,i,j,k; for(k=0;k<=n-2;k++) { dmax=fabs(a[k][k]); m=k; for(i=k+1;i<=n-1;i++) { if(fabs(a[i][k])>dmax) { dmax=fabs(a[i][k]); m=i; } } if(dmax<ep)
if(ip==-1) cout<<"gauss method is failure"<<endl; else cout<<"the solution of eqution is "<<b[0]<<","<<b[1] <<","<<b[2]<<endl; }
4.LU分解法
#include <iostream> #include <fstream> using namespace std; #define N 3 int main(){ float A[N][N],U[N][N],L[N][N],X[N],Y[N],B[N]; float s=0; int i,j,k; cout<<"请输入将要分解的矩阵:"<<endl; for(i=0;i<N;i++) //输入待分解的矩阵 for(j=0;j<N;j++) cin>>A[i][j]; for(i=0;i<N;i++) //初始化 for(j=0;j<N;j++) { L[i][j]=0; U[i][j]=0;
cout<<U[i][j]<<"\t"; cout<<endl; } cout<<"请输入矩阵B"<<endl; cout<<endl; for(i=0;i<N;i++) cin>>B[i]; Y[0]=B[0]; for(k=1;k<N;k++) { for(j=0;j<k;j++) {s=s+L[k][j]*Y[j];} Y[k]=B[k]-s; s=0; } cout<<endl<<"Y:"<<endl; for(i=0;i<N;i++) cout<<Y[i]<<"\t"; cout<<endl; X[N-1]=Y[N-1]/U[N-1][N-1]; for(k=N-2;k>=0;k--) { for(j=k+1;j<N;j++) {s=s+U[k][j]*X[j];} X[k]=(Y[k]-s)/U[k][k]; s=0; } cout<<endl<<"X:"<<endl; for(i=0;i<N;i++) cout<<X[i]<<"\t"; cout<<endl; system("pause"); return 0; }