实验3 方法和数组

合集下载

实验三 模拟进程调度

实验三   模拟进程调度

实验三模拟进程调度一实验目的理解操作系统进程管理中进行进程调度的过程和编程方法,掌握先来先服务调度算法和最高优先数优先的调度算法,创建进程控制块PCB。

理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况二实验要求编写一个允许多个进程并发执行的进程调度程序。

1)进程调度算法:进程的调度采用最高优先数优先的调度算法和先来先服务调度算法相结合的算法,并且采用动态优先数策略,选择进程占用处理器后该进程仅能使用一个时间片,运行完后优先数减1。

2)每个进程有一个进程控制块(PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等.3)进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为输入进程的时间。

4)进程的运行时间以时间片为单位进行计算。

5)每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

.6)就绪进程获得CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

7)如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。

8)每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止三概要设计进程控制块:描述进程的状态信息,用结构体定义typedef struct process{ char name[10]; //进程名int priority; //优先数Time ReachTime; //到达时间Time NeedTime; //需要运行时间Time UsedTime; //已用时间char state; //进程状态}PCB; //进程控制块图1.进程调度模拟程序模块图算法思想:定义结构体PCB描述进程的进程控制块,定义数组PCB pcb[Max]存放进程。

C语言实验五实验报告——数组

C语言实验五实验报告——数组

C语言实验五实验报告——数组一、实验目的:1.了解数组的概念和基本使用方法;2.掌握一维数组和二维数组的定义、初始化、赋值及基本运算实现;二、实验内容与方法1.理论部分数组是一些具有相同类型的数据元素按一定顺序排列组合而成的集合,在程序设计中它是一个变量列表,由若干相同数据类型的元素组成。

通常用一个名字和一个下标来表示,下标可理解为数组元素在数组中的位置编号。

数组的特点:数组是根据顺序排列的元素的集合;所有的元素必须是相同类型。

数组的定义方法:1. 定义数组,数组元素类型 + 数组名[元素的个数];2. 元素的个数必须是整型常量或变量,定义时必须明确、指定元素的个数;3. 声明一个数组时,除了要指定数组的类型外,还要指定数组的名称;4. 数组定义完后,需要对其中的每个元素进行初始化。

可以在定义数组时赋初值,也可以通过赋值符号,对数组元素逐个进行赋值。

数组的初始化:1. 元素个数之间用逗号分开,最后1个元素后无逗号;2. 支持部分元素初始化;3. 定义和初始化可以一步完成。

二维数组数组可分为一维和多维数组。

一维数组可以看作是包含多个元素的向量,而二维数组可以看做是包含了多个一维数组的矩阵。

二维数组有行号和列号,因此,它同样需要两个下标。

数组元素类型数组名[行数][列数];数组元素类型数组名[ ][ ] = { {元素1, 元素2, ……}, {元素1, 元素2, ……}, ……{元素1, 元素2, ……}}2.实验代码**问题1:**定义一个一维数组a,包含有5个元素,分别为1,2,3,4,5;**问题2:**定义一个一维数组a,接收用户从键盘输入的5个数值,分别打印存储的各个元素。

三、实验结果与分析结果分析:定义了一个5个元素的一维数组a,并初始化了各个元素的值,其元素分别为1,2,3,4,5.循环遍历一遍数组a,并打印数组元素。

程序执行正常。

3.针对问题3:定义一个二维数组a,由4行3列组成,每个元素初始化为0,打印存储的各个元素;程序运行结果如下:四、实验总结:该实验主要是通过对C语言数组的理论知识和基本操作进行练习,加深了对数组的了解和掌握。

实验三 刚体转动惯量的测定

实验三  刚体转动惯量的测定

实验三刚体转动惯量的测定转动惯量是刚体转动中惯性大小的量度。

它与刚体的质量、形状大小和转轴的位置有关。

形状简单的刚体,可以通过数学计算求得其绕定轴的转动惯量;而形状复杂的刚体的转动惯量,则大都采用实验方法测定。

下面介绍一种用刚体转动实验仪测定刚体的转动惯量的方法。

实验目的:1. 理解并掌握根据转动定律测转动惯量的方法;2. 熟悉电子毫秒计的使用。

实验仪器:刚体转动惯量实验仪、通用电脑式毫秒计。

仪器描述:刚体转动惯量实验仪如图一,转动体系由十字型承物台、绕线塔轮、遮光细棒等(含小滑轮)组成。

遮光棒随体系转动,依次通过光电门,每π弧度(半圈)遮光电门一次的光以计数、计时。

塔轮上有五个不同半径(r)的绕线轮。

砝码钩上可以放置不同数量的砝码,以获得不同的外力矩。

图一刚体转动惯量实验仪图二承物台俯视图实验原理:空实验台(仅有承物台)对于中垂轴OO’的转动惯量用J o表示,加上试样(被测物体)后的总转动惯量用J表示,则试样的转动惯量J1:J1= J –J o (1) 由刚体的转动定律可知:T r – M r= J (2) 其中M r为摩擦力矩。

而 T = m(g -r α) (3) 其中 m —— 砝码质量g —— 重力加速度 α —— 角加速度 T —— 张力1. 测量承物台的转动惯量J o未加试件,未加外力(m =0 , T =0)令其转动后,在M r 的作用下,体系将作匀减速转动,α=α1,有-M r1 = J o α1(4) 加外力后,令α =α2m(g –r α2)r –M r1 = J o α2(5)(4)(5)式联立得J o =212212mr mgrααααα---(6)测出α1 , α2,由(6)式即可得J o 。

2. 测量承物台放上试样后的总转动惯量J ,原理与1.相似。

加试样后,有-M r2=J α3 (7) m(g –r α4)r –Mr 2= J α4 (8)∴ J =234434mr mgrααααα---(9)注意:α1 , α3值实为负,因此(6)、(9)式中的分母实为相加。

实验三 高斯消去法和三角分解法1

实验三 高斯消去法和三角分解法1

实验报告实验三 高斯消去法与矩阵的三角分解一、实验目的1、掌握列主元素消去法,并且能够用MATLAB 编写相关程序,实现高斯消去法的求解。

2、能够用矩阵理论理解与研究高斯消去法,通过对矩阵的初等变换实现高斯消去法。

3、学会矩阵的三角分解,并且能够用MATLAB 编写相关程序,实现矩阵的三角分解,解方程组。

二、上机内容⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡2822171310871234567112345611123451111234111112311111121111111764321x x x x x x1、用列主元素高斯消去法求解方程组。

2、用列主元消去法求解方程组(实现PA=LU) 要求输出: (1)计算解X;(2)L,U;(3)正整型数组IP(i),(i=1,···,n) (记录主行信息)。

三、实验原理1、列主元素消去法用高斯消去法求解方程组时,为了减小误差,在消去的过程中要避免用绝对值较小的主元素。

因此在高斯消去法的每一步应该在系数矩阵货消去后的低阶矩阵中选取绝对值较大的元素作为主元素,保持|m ik |<=1,以减小计算过程中的舍入误差对计算解的影响。

此方法为完全主元素消去法。

完全主元素消去法在选主元素时花费一定的计算机时间,因此实际计算中常用列主元消去法。

列主元消去法在每次选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算。

装订 线第k步计算如下:对于k=1,2,…,n-1(1)按列选主元:即确定t使(2)如果t≠k,则交换[A,b]第t行与第k行元素。

(3)消元计算(4)回代求解计算流程图回代求解 b=b/a (当a nn ≠0)b ←(b -∑a x )/adet=a nn *det输出计算解及行列式及detk=1,2,…,n-1输入n ,A,b,εdet=1按列主元|a i(k),k |=max|a ik |C 0=a i(k),k换行 a ik a i(k)j(j=k,…n ) b k b j(k), 消元计算 (i=k+1,…,n ) a ik=a ik -a kk *m ik a ij=a ij -a kj *m ik (j=k+1,…,n )|C 0|<εi k =kdet=a kk det否否是是k<=n-1输出det(A)=0停机停机2. 矩阵的三角分解法 (1)定理设 n n R A ⨯∈ 。

C语言上机实验

C语言上机实验

实验一(第1章实验)实验目的:1.掌握运行C语言程序的全过程。

2.熟悉编译环境。

3.初步熟悉C语言程序的语法规定。

4.了解简单函数的使用方法。

实验内容:1.编程且上机运行:求3个整数的和。

2.编程且上机运行:求2个数的和、差、积和商。

3.编程且上机运行:输入3个数,求最大值。

4.编程且上机运行:输入圆的半径,求圆的面积和周长。

5.在屏幕上输出:“hello world!”实验结果:实验二(第3章实验)1.实验目的:理解C语言的类型系统。

实验内容:写程序测试数据-2在类型char,int,unsigned int,long int,unsigned long int 中存储情况。

实验过程:实验结果:参见各种类型的存储实现描述。

2.实验目的:了解混合类型计算中类型的转换规则。

实验内容:写程序测试多种类型数据一起运算时类型的转换及表达式结果的类型。

注意unsigned int和int数据运算时类型转换的方向。

实验过程:/** 类型转换问题* 试问下面两个表达式等价吗?*/#include <stdio.h>#include <stdlib.h>int main() {unsigned int ui,uj;ui = 1;uj = 2;if (ui < uj)printf("\n%u < %u is true !\n", ui, uj);elseprintf("\n%u < %u is false !\n", ui, uj);if (ui - uj < 0)printf("\n%u - %u <0 is true !\n", ui, uj);elseprintf("\n%u - %u <0 is false !\n", ui, uj);system("pause");return 0;}实验结果:参见类型转换规则。

R语言实验三

R语言实验三

实验三数组的运算、求解方程(组)和函数极值、数值积分【实验类型】验证性【实验学时】2 学时【实验目的】1、掌握向量的四则运算和内积运算、矩阵的行列式和逆等相关运算;2、掌握线性和非线性方程(组)的求解方法,函数极值的求解方法;3、了解 R 中数值积分的求解方法。

【实验内容】1、向量与矩阵的常见运算;2、求解线性和非线性方程(组);3、求函数的极值,计算函数的积分。

【实验方法或步骤】第一部分、课件例题:1.向量的运算x<-c(-1,0,2)y<-c(3,8,2)v<-2*x+y+1vx*yx/yy^xexp(x)sqrt(y)x1<-c(100,200); x2<-1:6; x1+x22.x<-1:5y<-2*1:5x%*%ycrossprod(x,y)x%o%ytcrossprod(x,y)outer(x,y)3.矩阵的运算A<-matrix(1:9,nrow=3,byrow=T);AA+1 #A的每个元素都加上1B<-matrix(1:9,nrow=3); BC<-matrix(c(1,2,2,3,3,4,4,6,8),nrow=3); C D<-2*C+A/B; D #对应元素进行四则运算x<-1:9A+x #矩阵按列与向量相加E<-A%*%B; E #矩阵的乘法y<-1:3A%*%y #矩阵与向量相乘crossprod(A,B) #A的转置乘以Btcrossprod(A,B) #A乘以B的转置4.矩阵的运算A<-matrix(c(1:8,0),nrow=3);At(A) #转置det(A) #求矩阵行列式的值diag(A) #提取对角线上的元素A[lower.tri(A)==T]<-0;A #构造A对应的上三角矩阵qr.A<-qr(A);qr.A #将矩阵A分解成正交阵Q与上三角阵R的乘积,该结果为一列表Q<-qr.Q(qr.A);Q;R<-qr.R(qr.A);R #显示分解后对应的正交阵Q与上三角阵Rdet(Q);det(R);Q%*%R #A=Q*Rqr.X(qr.A) #显示分解前的矩阵5.解线性方程组A<-matrix(c(1:8,0),nrow=3,byrow=TRUE)b<-c(1,1,1)x<-solve(A,b); x #解线性方程组Ax=bB<-solve(A); B #求矩阵A的逆矩阵BA%*%B #结果为单位阵6.非线性方程求根f<-function(x) x^3-x-1 #建立函数uniroot(f,c(1,2)) #输出列表中f.root为近似解处的函数值,iter为迭代次数,estim.prec为精度的估计值uniroot(f,lower=1,upper=2) #与上述结果相同polyroot(c(-1,-1,0,1)) #专门用来求多项式的根,其中c(-1,-1,0,1)表示对应多项式从零次幂项到高次幂项的系数7.求解非线性方程组(1)自编函数: (Newtons.R)Newtons<-function (funs, x, ep=1e-5, it_max=100){index<-0; k<-1while (k<=it_max){ #it_max 表示最大迭代次数x1 <- x; obj <- funs(x);x <- x - solve(obj$J, obj$f); #Newton 法的迭代公式norm <- sqrt((x-x1) %*% (x-x1))if (norm<ep){ index<-1; break #index=1 表示求解成功}; k<-k+1 }obj <- funs(x);list(root=x, it=k, index=index, FunVal= obj$f)} # 输出列表(2)调用求解非线性方程组的自编函数funs<-function(x){ f<-c(x[1]^2+x[2]^2-5, (x[1]+1)*x[2]-(3*x[1]+1)) # 定义函数组J<-matrix(c(2*x[1], 2*x[2], x[2]-3, x[1]+1), nrow=2,byrow=T) # 函数组的 Jacobi 矩阵list(f=f, J=J)} # 返回值为列表 : 函数值 f 和 Jacobi 矩阵 Jsource("F:/wenjian_daima/Newtons.R") # 调用求解非线性方程组的自编函数Newtons(funs, x=c(0,1))8.一元函数极值f<-function(x) x^3-2*x-5 # 定义函数optimize(f,lower=0,upper=2) # 返回值 : 极小值点和目标函数f<-function(x,a) (x-a)^2 # 定义含有参数的函数optimize(f,interval=c(0,1),a=1/3) # 在函数中输入附加参数9.多元函数极值(1)obj <-function (x){ # 定义函数F<-c(10*(x[2]-x[1]^2),1-x[1]) # 视为向量sum (F^2) } # 向量对应分量平方后求和nlm(obj,c(-1.2,1))(2)fn<-function(x){ # 定义目标函数F<-c(10*(x[2]-x[1]^2), 1-x[1])t(F)%*%F } # 向量的内积gr <- function(x){ # 定义梯度函数F<-c(10*(x[2]-x[1]^2), 1-x[1])J<-matrix(c(-20*x[1],10,-1,0),2,2,byrow=T) #Jacobi 矩阵2*t(J)%*%F } # 梯度optim(c(-1.2,1), fn, gr, method="BFGS")最优点 (par) 、最优函数值 (value)10.梯形求积分公式(1)求积分程序: (trape.R)trape<-function(fun, a, b, tol=1e-6){ # 精度为 10 -6N <- 1; h <- b-a ; T <- h/2 * (fun(a) + fun(b)) # 梯形面积 repeat{h <- h/2; x<-a+(2*1:N-1)*h; I <-T/2 + h*sum(fun(x)) if(abs(I-T) < tol) break; N <- 2 * N; T = I }; I}(2)source("F:/wenjian_daima/trape.R") # 调用函数f<-function(x) exp(-x^2)trape(f,-1,1)(3)常用求积分函数f<-function(x)exp(-x^2) # 定义函数integrate(f,0,1)integrate(f,0,10)integrate(f,0,100)integrate(f,0,10000) # 当积分上限很大时,结果出现问题integrate(f,0,Inf) # 积分上限为无穷大ft<-function(t) exp(-(t/(1-t))^2)/(1-t)^2 # 对上述积分的被积函数 e 2 作变量代换 t=x/(1+x) 后的函数integrate(ft,0,1) # 与上述计算结果相同,且精度较高第二部分、教材例题:1.随机抽样(1)等可能的不放回的随机抽样:> sample(x, n) 其中x为要抽取的向量, n为样本容量(2)等可能的有放回的随机抽样:> sample(x, n, replace=TRUE)其中选项replace=TRUE表示有放回的, 此选项省略或replace=FALSE表示抽样是不放回的sample(c("H", "T"), 10, replace=T)sample(1:6, 10, replace=T)(3)不等可能的随机抽样:> sample(x, n, replace=TRUE, prob=y)其中选项prob=y用于指定x中元素出现的概率, 向量y与x等长度sample(c("成功", "失败"), 10, replace=T, prob=c(0.9,0.1))sample(c(1,0), 10, replace=T, prob=c(0.9,0.1))2.排列组合与概率的计算1/prod(52:49)1/choose(52,4)3.概率分布qnorm(0.025) #显著性水平为5%的正态分布的双侧临界值qnorm(0.975)1 - pchisq(3.84, 1) #计算假设检验的p值2*pt(-2.43, df = 13) #容量为14的双边t检验的p值4.limite.central( )的定义limite.central <- function (r=runif, distpar=c(0,1), m=.5,s=1/sqrt(12),n=c(1,3,10,30), N=1000) {for (i in n) {if (length(distpar)==2){x <- matrix(r(i*N, distpar[1],distpar[2]),nc=i)}else {x <- matrix(r(i*N, distpar), nc=i)}x <- (apply(x, 1, sum) - i*m )/(sqrt(i)*s)hist(x,col="light blue",probability=T,main=paste("n=",i), ylim=c(0,max(.4, density(x)$y)))lines(density(x), col="red", lwd=3)curve(dnorm(x), col="blue", lwd=3, lty=3, add=T)if( N>100 ) {rug(sample(x,100))}else {rug(x)}}}5.直方图x=runif(100,min=0,max=1)hist(x)6.二项分布B(10,0.1)op <- par(mfrow=c(2,2))limite.central(rbinom,distpar=c(10,0.1),m=1,s=0.9)par(op)7.泊松分布: pios(1)op <- par(mfrow=c(2,2))limite.central(rpois, distpar=1, m=1, s=1, n=c(3, 10, 30 ,50)) par(op)8.均匀分布:unif(0,1)op <- par(mfrow=c(2,2))limite.central( )par(op)9.指数分布:exp(1)op <- par(mfrow=c(2,2))limite.central(rexp, distpar=1, m=1, s=1)par(op)10.混合正态分布的渐近正态性mixn <- function (n, a=-1, b=1){rnorm(n, sample(c(a,b),n,replace=T))}limite.central(r=mixn, distpar=c(-3,3),m=0, s=sqrt(10), n=c(1,2,3,10)) par(op)11.混合正态分布的渐近正态性op <- par(mfrow=c(2,2))mixn <- function (n, a=-1, b=1){rnorm(n, sample(c(a,b),n,replace=T))}limite.central(r=mixn, distpar=c(-3,3),m=0,s=sqrt(10),n=c(1,2,3,10)) par(op)第三部分、课后习题:3.1a=sample(1:100,5)asum(a)3.2(1)抽到10、J、Q、K、A的事件记为A,概率为P(A)=1(5220)其中在R中计算得:> 1/choose(52,20)[1] 7.936846e-15(2)抽到的是同花顺P(B)=(41)(91) (525)在R中计算得:> (choose(4,1)*choose(9,1))/choose(52,5) [1] 1.385e-053.3#(1)x<-rnorm(1000,mean=100,sd=100)hist(x)#(2)y<-sample(x,500)hist(y)#(3)mean(x)mean(y)var(x)var(y)3.4x<-rnorm(1000,mean=0,sd=1) y=cumsum(x)plot(y,type = "l")plot(y,type = "p")3.5x<-rnorm(100,mean=0,sd=1) qnorm(.025)qnorm(.975)t.test(x)由R结果知:理论值为[-1.96,1.96],实际值为:[-0.07929,0.33001]3.6op <- par(mfrow=c(2,2))limite.central(rbeta, distpar=c(0.5 ,0.5),n=c(30,200,500,1000))par(op)3.7N=seq(-4,4,length=1000)f<-function(x){dnorm(x)/sum(dnorm(x))}n=f(N)result=sample(n,replace=T,size = 1000)standdata=rnorm(1000)op<-par(mfrow=c(1,2)) #1行2列数组按列(mfcol)或行(mfrow)各自绘图hist(result,probability = T)lines(density(result),col="red",lwd=3)hist(standdata,probability = T)lines(density(standdata),col="red",lwd=3) par(op)。

电大在线编程实验报告(3篇)

电大在线编程实验报告(3篇)

第1篇一、实验目的通过本次在线编程实验,旨在提高我的编程能力,加深对编程语言的理解,熟悉编程环境的使用,并培养良好的编程习惯。

同时,通过实际编程练习,解决实际问题,提升我的逻辑思维和问题解决能力。

二、实验内容本次实验选择了电大在线编程平台提供的C语言编程课程,主要包括以下内容:1. C语言基本语法;2. 数据类型、变量和运算符;3. 控制结构(分支和循环);4. 函数的定义和调用;5. 数组、指针和字符串操作;6. 文件操作。

三、实验步骤1. 准备工作:登录电大在线编程平台,选择C语言编程课程,熟悉编程环境和操作界面。

2. 编写代码:根据实验指导书,逐个完成实验任务,编写相应的C语言程序。

3. 调试程序:使用调试工具,检查代码中的错误,修正语法错误和逻辑错误。

4. 运行程序:成功编译并运行程序,观察输出结果,确保程序功能符合预期。

5. 总结与反思:对实验过程中遇到的问题进行总结,分析原因,提出改进措施。

四、实验结果与分析1. C语言基本语法:通过实验,我掌握了C语言的基本语法,包括数据类型、变量、运算符等。

2. 控制结构:实验中,我学会了使用if语句、switch语句进行分支控制,以及for循环、while循环进行循环控制。

3. 函数:通过编写和调用函数,我了解了函数的定义、参数传递和返回值等概念。

4. 数组、指针和字符串操作:实验中,我掌握了数组的定义、初始化、访问和操作方法,了解了指针的概念和用法,以及字符串操作函数。

5. 文件操作:通过实验,我学会了使用文件操作函数,实现文件的读写操作。

五、实验总结通过本次在线编程实验,我收获颇丰。

以下是我对本次实验的总结:1. 编程能力得到提高:通过实际编程练习,我对C语言有了更深入的了解,编程能力得到提升。

2. 问题解决能力增强:在实验过程中,我遇到了各种问题,通过查阅资料、请教同学和老师,我学会了如何分析和解决实际问题。

3. 良好的编程习惯:在实验过程中,我养成了良好的编程习惯,如规范命名、注释代码、代码复用等。

操作系统实验三预防进程死锁的银行家算法

操作系统实验三预防进程死锁的银行家算法

操作系统实验报告实验三预防进程死锁的银行家算法学号:班级:姓名:【实验目的】通过这次实验,加深对进程死锁的理解,进一步掌握进程资源的分配、死锁的检测和安全序列的生成方法。

【实验内容】问题描述:设计程序模拟预防进程死锁的银行家算法的工作过程。

假设有系统中有n个进程P1, …,P n,有m类可分配的资源R1, …,R m,在T0时刻,进程P i分配到的j 类资源为Allocation ij个,它还需要j类资源Need ij个,系统目前剩余j类资源Work j 个,现采用银行家算法进行进程资源分配预防死锁的发生。

程序要求如下:1)判断当前状态是否安全,如果安全,给出安全序列;如果不安全给出理由。

2)对于下一个时刻T1,某个进程P k会提出请求Request(R1, …,R m),判断分配给P k进程请求的资源之后。

3)输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置);4)输出:如果安全输出安全的进程序列,不安全提示信息。

实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int Available[MaxNumber];int Max[MaxNumber][MaxNumber];int Allocation[MaxNumber][MaxNumber];int Need[MaxNumber][MaxNumber];int Request[MaxNumber];int SafeOrder[MaxNumber];2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n,m,(输入或者默认的)Allocation ij,Need ij;➢按照银行家算法判断当前状态安全与否,安全给出安全序列,不安全给出提示;➢如果安全,提示用户输入下一时刻进程P k的资源请求Request(R1, … ,R m);➢如果不安全或者无新请求则退出。

实验要求:1)上机前认真复习银行家算法,熟悉资源分配和安全检查过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。

实验三:跑马灯实验

实验三:跑马灯实验

微控制器综合设计与实训实验名称:实验三跑马灯实验实验三:跑马灯实验1 实训任务(1) 编写程序,实现对LED1~LED8的轮流点亮;(2) 仿真调试,调整延时时间,利用仿真示波器观察延时时间长短;(3) 下载程序,观察跑马灯运行状况。

1.1 实验说明本实验将要实现的是控制实训平台上的8个LED灯实现一个类似跑马灯的效果,LED通过控制IO口的高低电平工作,因此实验的关键在于如何控制STM32的IO口输出。

1.2 实验步骤(1) 在实训平台上将IO口与LED(LED1~LED8)连接;(2) 复制工程模板文件夹,新建led.c和led.h文件,并将新建文件加入工程中;(3) 编写led.h文件,声明void LED_Init(void)初始化函数,宏定义LED1~LED8;(4) 编写led.c文件,建立void LED_Init(void)初始化函数,实现对LED灯用到的IO端口的配置,配置为推挽输出,速度为50MHZ;(5) 编写main()函数,实现对LED1~LED8的轮流点亮;(6) 软件仿真,调整延时时间,利用仿真示波器观察延时时间长短;(7) 下载程序,观察跑马灯的运行状况。

2 程序设计2.1 通过数组实现流水灯:2.2 通过宏定义实现流水灯:2.3 通过函数实现流水灯:2.4 通过SYSTICK中断实现流水灯:3硬件原理图设计4 总结通过数组实现流水灯:通过宏定义实现流水灯:通过函数实现流水灯:通过SYSTICK中断实现流水灯:实验心得:本次实验通过四种方法来实现流水灯,分别是通过数组实现流水灯,通过宏定义实现流水灯,通过函数实现流水灯,通过SYSTICK中断实现流水灯。

让我体会到单片机代码的多样性及强大的拓展功能。

MCU通过控制IO口的高低电平来直接控制LED的亮灭,所以本实验的关键是如何控制STM32的IO口输出,来达到我们想要的效果。

就比如灯光秀。

2022年国家开放大学《数据结构(本)》形考任务实践活动3

2022年国家开放大学《数据结构(本)》形考任务实践活动3
2022年国家开放大学数据结构(本)形考任务实践活动3
实验
数据结构课程实验报告
学生姓名
学 号
班 级
指导老师
实验名称
栈、队列、递归程序设计
实验成绩
实验报告
实 验 概 述
实验目的:
编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。
实验要求:
(1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。
printf ("(2)栈为%s\n”, (StackEmpty(s)?"空":"非空"));
printf("(3)输入要进栈的数据个数:”);
scanf(飞d”, &n):
printf("依次输入进栈的%d个整数n);
for(i=0; i<n; i++) (
scanf&x);
Push(s, x);
(2)程序中要表达出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作 规那么打印结果栈中的元素。
实验基本原理:
(1)采用顺序栈,即用数组存储栈元素。
(2)设定一个临时队列,用来存放从初始栈中出栈的元素。
(3)取出栈底元素后,将队列中的元素逐一出队并压入初始栈中。
卖 验 内 容
实验设计思路、步骤和方法等:
x=Pop(s);
printf(*%d ", x);
InQueue(sq, x);
)
printf ("(10)栈为%s, ”, (StackEmpty(s)?"空":"非空〃));printf("队列为%s\n”, (QueueEmpty(sq)?"空":"非空〃));printf ("(11)出队/进栈的元素依次为;

实验三 数据选择器及其应用

实验三  数据选择器及其应用

实验三数据选择器及其应用一、实验目的(1)通过实验的方法学习数据选择器的电路结构和特点。

(2)掌握数据选择器的逻辑功能及其基本应用。

二、实验设备(1)数字电路实验箱(2)74LS00、74LS153三、实验原理数据选择器(Multiplexer)又称为多路开关, 是一种重要的组合逻辑部件, 它可以实现从多路数据中选择任何一路数据输出, 选择的控制由专门的端口编码决定, 称为地址码, 数据选择器可以完成很多的逻辑功能, 例如函数发生器、桶形移位器、并串转换器、波形产生器等。

本次实验使用的是双四选一数据选择器。

常见的双四选一数据选择器为TTL双极型数字集成逻辑电路74LS153, 它有两个4选1, 外形为双列直插, 引脚排列如图2.7.1所示, 逻辑符号如图2.7.2所示。

其中D0、D1、D2、D3为数据输入端, A0、A1为数据选择器的控制端(地址码), 同时控制两个选择器的数据输出, 为工作状态控制端(使能端), 74LS153的功能表见表2.7.1。

其中:图2.7.1 图2.7.2输入输出A1A01Q2Q 1X X000001D02D00011D12D10101D22D20111D32D3表 2.7.1(1)设计实验以A.B代表正、副指挥, C.D代表两名操作员, “1”代表通过, “0”代表没有通过。

F代表产生点火信号, “1”代表产生点火信号, “0”代表没有产生点火信号。

只有当A.B 同时为“1”, 且C和D中至少有一个为“1”时, 输出F才为“1”, 及连接在电路中的指示灯亮起, 否则, 指示灯不亮。

据此, 画出真值表如图:A B C D F00000000100010000110010000101001100011101000010010101001011011000110111110111111画出卡诺图:ABCD00 01 11 1000 01 11 100000 0010 0010 0010降维:ABC00 01 11 100 100D0 0010再降维:AB 0 10 100 0C+D因为, 所以可以用74LS00实现C和D的与, 然后将C+D输入数据选择器, 配合地址端的A.B, 即可实现预设功能。

(中央电大)数据结构实验报告3

(中央电大)数据结构实验报告3

中央广播电视大学实验报告(学科:数据结构)姓名班级学号实验日期成绩评定教师签名批改日期实验名称:实验三二叉树3.1 二叉树的顺序存储结构和链式存储结构【问题描述】设一棵完全二叉树用顺序存储方法存储于数组tree中,编写程序:(1)根据数组tree,建立与该二叉树对应的链式存储结构。

(2)对该二叉树采用中序遍历法显示遍历结果。

【基本要求】(1)在主函数中,通过键盘输入建立设定的完全二叉树的顺序存储结构。

(2)设计子函数,其功能为将顺序结构的二叉树转化为链式结构。

(3)设计子函数,其功能为对给定二叉树进行中序遍历,显示遍历结果。

(4)通过实例判断算法和相应程序的正确性。

【实验步骤】(1)运行PC中的Microsoft Visual C++ 6.0程序,(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,程序代码如下:#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<memory.h>#define MaxSize 10typedef struct node{char data。

struct node *left,*right。

}NODE。

void Creab(char *tree,int n,int i,NODE *p)。

void Inorder(NODE *p)。

void main(){NODE *p。

char tree[MaxSize]。

int n=1。

int i=1。

printf("请输入完全二叉数的节点值(连续输入字符,以回车结束输入。

):")。

while((tree[n] = getchar( )) != '\n') n++。

数组和串实验总结(合集3篇)

数组和串实验总结(合集3篇)

【实验目的】(1)掌握数组的声明创建;(2)掌握数组的初始化;(3)掌握数组常用的操作;【实践1内容】打印数组元素该程序应提示用户输入几个整数,将它们存储到数组中,然后以向前和向后的顺序打印出这些整数。

完成程序,使其正常运行。

使用数组使程序足够灵活,无论用户想要多少个整数,它都可以工作。

运行示例如下:你要输入多少个数据? 4 请输入一个整数: 12 请输入一个整数: 8请输入一个整数: -2 请输入一个整数: 39正向顺序: 12 8 -2 39 逆向顺序: 39 -2 8 12数组和串实验总结第2篇行优先存储:掌握自己推导三角矩阵对角矩阵三对角矩阵(带状矩阵)的压缩存储|i-j|>1时,有ai,j = 0(1<=i,j<=n)行优先对于一个n*n的矩阵,最多只有n个非0元素,只需存储n个对角元素信息即可。

直接采用一维数组d[i]存储M(i,i)的值稀疏矩阵三元组 <行,列,值>定义一个新的结构体十字链表定义一个新的结构体杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

二项式定理与杨辉三角形是一对天然的数形趣遇,它把数形结合带进了计算数学。

求二项式展开式系数的问题,实际上是一种组合数的计算问题。

用系数通项公式来计算,称为“式算”;用杨辉三角形来计算,称作“图算”。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。

中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。

杨辉三角示例如下:通过二维数组实现杨辉三角形前N行的求值并打印输出。

排序实验报告的结果总结(3篇)

排序实验报告的结果总结(3篇)

第1篇一、实验背景随着计算机科学和信息技术的发展,排序算法在数据处理的领域中扮演着至关重要的角色。

本实验旨在通过对比几种常见的排序算法,分析它们的性能差异,为实际应用中选择合适的排序算法提供参考。

二、实验目的1. 熟悉几种常见排序算法的基本原理和实现方法。

2. 分析不同排序算法的时间复杂度和空间复杂度。

3. 比较不同排序算法在不同数据规模下的性能差异。

4. 为实际应用提供选择排序算法的依据。

三、实验方法1. 选择实验数据:随机生成一组包含10000个整数的数组,分别用于测试不同排序算法的性能。

2. 实现排序算法:分别实现冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等常见排序算法。

3. 性能测试:分别对每组实验数据进行排序,记录每种排序算法的运行时间。

4. 数据分析:对比不同排序算法的时间复杂度和空间复杂度,分析其性能差异。

四、实验结果1. 冒泡排序冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

在测试数据规模为10000时,冒泡排序的运行时间为234.5秒。

2. 选择排序选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。

在测试数据规模为10000时,选择排序的运行时间为237.1秒。

3. 插入排序插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。

在测试数据规模为10000时,插入排序的运行时间为239.8秒。

4. 快速排序快速排序的平均时间复杂度为O(nlogn),空间复杂度为O(logn)。

在测试数据规模为10000时,快速排序的运行时间为18.5秒。

5. 归并排序归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。

在测试数据规模为10000时,归并排序的运行时间为20.3秒。

6. 堆排序堆排序的时间复杂度为O(nlogn),空间复杂度为O(1)。

在测试数据规模为10000时,堆排序的运行时间为19.7秒。

五、结果分析1. 时间复杂度方面:快速排序、归并排序和堆排序的平均时间复杂度均为O(nlogn),优于冒泡排序、选择排序和插入排序的O(n^2)时间复杂度。

matlab 实验三 matlab程序设计与优化

matlab 实验三 matlab程序设计与优化

matlab 实验三 matlab程序设计与优化Matlab是一种高级的计算机编程语言,广泛应用于科学、工程、金融和其他领域。

在Matlab实验三中,我们将学习Matlab程序设计与优化。

本文将介绍Matlab实验三的内容和要求,并提供一些有用的技巧和建议,帮助读者更好地完成实验。

实验三的主要内容包括:1. Matlab程序设计基础2. Matlab程序优化技巧3. Matlab代码调试方法4. Matlab性能分析工具5. 实例分析与练习题下面我们将逐个介绍这些内容。

1. Matlab程序设计基础在本节中,我们将学习如何使用Matlab编写简单的程序。

以下是一些重要的概念和技巧:1)变量和数据类型:在Matlab中,变量可以存储不同类型的数据,如数字、字符串、逻辑值等。

常见的数据类型包括double、char、logical等。

2)运算符:Matlab支持各种数学运算符,包括加减乘除、幂运算等。

此外,还有逻辑运算符(如and、or)和比较运算符(如==、~=)。

3)控制结构:控制结构可以控制程序执行流程。

常见的控制结构包括if语句、for循环和while循环。

4)函数:函数是一种可重复使用的代码块,可以接受输入参数并返回输出结果。

Matlab中有很多内置函数,也可以编写自己的函数。

2. Matlab程序优化技巧在本节中,我们将学习如何优化Matlab程序以提高其性能。

以下是一些重要的技巧:1)向量化:向量化是一种将循环操作转换为矩阵操作的技术。

这样可以减少程序执行时间,并且使代码更简洁。

2)预分配数组:在编写Matlab程序时,应尽可能避免动态数组分配。

相反,应该预先分配所需大小的数组。

3)使用内置函数:Matlab中有许多内置函数,它们通常比用户自定义函数更快。

因此,在编写程序时应尽可能使用内置函数。

4)避免不必要的计算:在编写程序时,应尽可能避免不必要的计算。

例如,在循环中进行重复计算或计算已知结果等。

实验3 数组编程

实验3 数组编程

实验三数组编程(设计性实验)一、实验目的1.进一步理解和掌握Java语言中数组的概念;2.掌握数组在方法中的使用,包括把数组传递给方法和从方法中返回数组,并能使用数组进行程序设计。

二、实验教学要求1.性质:必做实验实验类型:设计性2.时间要求:在讲完“数组”之后安排,需要6学时。

2.对学生的要求:编写好程序。

3.对教师的要求:预做本实验。

4.对实验室的要求:在windows环境中装有Java开发工具(如J2SE5.0版),以及IE6.0以上版本。

二、实验原理创建Java数组需要下面三个步骤:①声明数组声明数组的语法格式有如下两种:数组元素类型数组名[ ];数组元素类型[ ] 数组名;如int a[ ];int[ ] a;②创建数组空间声明数组仅仅指定了数组的名字和数组元素的类型,要想真正使用数组还需要为它分配内存空间,即创建数组空间。

在创建数组空间时,必须指明数组的长度,以确定空间的精确大小。

语法格式为:数组名=new 数组元素类型[数组元素的个数];如:int a[ ];a=new int[10];以上两步可组合在一起,用一条语句完成:int a[ ]=new int[10];用new运算符为数组分配内存空间的同时,数组的每个元素都会被自动赋予一个默认值。

整型为0,浮点型为0.0,字符型为'\0',布尔型为false,引用型为null。

③初始化数组元素如果是基本数据类型,那么这个步骤可以自行省略。

也可以在创建数组空间的时候,同时将初始值给出。

如:int a[ ]={1,2,3,4}; //int[] a=new int[]{1,2,3,4}在Java语言中,一个数组就是一个对象。

每个数组都有一个属性length,用来指明数组的长度。

数组元素的类型可以是基本数据类型,也可以是类类型,因此可以使用数组来包含一系列的对象。

student ——类名student s[ ]=new student[50];创建元素需使用如下形式的代码段:for(int i=0;i<s.length;++i){s[i]=new student( );}三、实验实例1.数据排序。

使用函数输出指定范围内的fibonacci数c语言实验报告

使用函数输出指定范围内的fibonacci数c语言实验报告

使用函数输出指定范围内的fibonacci数c语言实验报告以下是一个使用函数输出指定范围内Fibonacci数的C语言实验报告:一、实验目的1. 掌握函数的使用方法;2. 掌握循环语句的使用方法;3. 掌握数组的使用方法。

二、实验内容1. 定义一个函数,用于计算Fibonacci数列的第n项;2. 定义一个函数,用于输出指定范围内的Fibonacci数列。

三、实验步骤1. 定义函数,计算Fibonacci数列的第n项。

可以使用递归或迭代的方式实现,这里采用迭代的方式实现。

```cint fibonacci(int n) {if (n <= 1) {return n;} else {return fibonacci(n-1) + fibonacci(n-2);}}```2. 定义函数,输出指定范围内的Fibonacci数列。

可以使用循环语句实现。

```cvoid print_fibonacci(int start, int end) {int i;for (i = start; i <= end; i++) {printf("%d ", fibonacci(i));}printf("\n");}3. 在主函数中调用print_fibonacci函数,输出指定范围内的Fibonacci数列。

```cint main() {int start, end;printf("请输入Fibonacci数列的起始项和结束项(用空格分隔):"); scanf("%d %d", &start, &end);printf("Fibonacci数列%d到%d为:", start, end);print_fibonacci(start, end);return 0;}```四、实验结果与分析在本次实验中,我们使用函数实现了计算Fibonacci数列和输出指定范围内的Fibonacci数列的功能。

数据结构实验三——二叉树基本操作及运算实验报告

数据结构实验三——二叉树基本操作及运算实验报告

《数据结构与数据库》实验报告实验题目二叉树的基本操作及运算一、需要分析问题描述:实现二叉树(包括二叉排序树)的建立,并实现先序、中序、后序和按层次遍历,计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目,以及二叉树常用运算。

问题分析:二叉树树型结构是一类重要的非线性数据结构,对它的熟练掌握是学习数据结构的基本要求。

由于二叉树的定义本身就是一种递归定义,所以二叉树的一些基本操作也可采用递归调用的方法。

处理本问题,我觉得应该:1、建立二叉树;2、通过递归方法来遍历(先序、中序和后序)二叉树;3、通过队列应用来实现对二叉树的层次遍历;4、借用递归方法对二叉树进行一些基本操作,如:求叶子数、树的深度宽度等;5、运用广义表对二叉树进行广义表形式的打印。

算法规定:输入形式:为了方便操作,规定二叉树的元素类型都为字符型,允许各种字符类型的输入,没有元素的结点以空格输入表示,并且本实验是以先序顺序输入的。

输出形式:通过先序、中序和后序遍历的方法对树的各字符型元素进行遍历打印,再以广义表形式进行打印。

对二叉树的一些运算结果以整型输出。

程序功能:实现对二叉树的先序、中序和后序遍历,层次遍历。

计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目。

对二叉树的某个元素进行查找,对二叉树的某个结点进行删除。

测试数据:输入一:ABC□□DE□G□□F□□□(以□表示空格),查找5,删除E预测结果:先序遍历ABCDEGF中序遍历CBEGDFA后序遍历CGEFDBA层次遍历ABCDEFG广义表打印A(B(C,D(E(,G),F)))叶子数3 深度5 宽度2 非空子孙数6 度为2的数目2 度为1的数目2查找5,成功,查找的元素为E删除E后,以广义表形式打印A(B(C,D(,F)))输入二:ABD□□EH□□□CF□G□□□(以□表示空格),查找10,删除B预测结果:先序遍历ABDEHCFG中序遍历DBHEAGFC后序遍历DHEBGFCA层次遍历ABCDEFHG广义表打印A(B(D,E(H)),C(F(,G)))叶子数3 深度4 宽度3 非空子孙数7 度为2的数目2 度为1的数目3查找10,失败。

数组及其应用实验报告(3篇)

数组及其应用实验报告(3篇)

第1篇一、实验目的1. 熟练掌握数组的定义、初始化、赋值和输入输出方法。

2. 掌握一维数组和二维数组的操作方法。

3. 学会使用数组进行数据存储和排序。

4. 理解数组在实际编程中的应用场景。

二、实验环境硬件:个人电脑软件:Windows操作系统、C语言编译器三、实验内容1. 一维数组的定义、初始化和赋值2. 一维数组的输入输出3. 一维数组的查找与排序4. 二维数组的定义、初始化和赋值5. 二维数组的输入输出6. 二维数组的遍历7. 数组在实际编程中的应用案例四、实验步骤1. 一维数组的定义、初始化和赋值```cinclude <stdio.h>int main() {int array[5]; // 定义一个包含5个整数的数组array[0] = 1; // 赋值操作array[1] = 2;array[2] = 3;array[3] = 4;array[4] = 5;return 0;}```2. 一维数组的输入输出```cinclude <stdio.h>int main() {int array[5];printf("请输入5个整数:\n"); for (int i = 0; i < 5; i++) { scanf("%d", &array[i]);}printf("输入的数组元素为:\n"); for (int i = 0; i < 5; i++) { printf("%d ", array[i]);}return 0;}```3. 一维数组的查找与排序```cinclude <stdio.h>void selectionSort(int array[], int length) {for (int i = 0; i < length - 1; i++) {int minIndex = i;for (int j = i + 1; j < length; j++) {if (array[j] < array[minIndex]) {minIndex = j;}}int temp = array[minIndex];array[minIndex] = array[i];array[i] = temp;}}int main() {int array[5] = {3, 1, 4, 1, 5};int length = sizeof(array) / sizeof(array[0]); selectionSort(array, length);printf("排序后的数组为:\n");for (int i = 0; i < length; i++) {printf("%d ", array[i]);}return 0;}```4. 二维数组的定义、初始化和赋值```cinclude <stdio.h>int main() {int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; return 0;}```5. 二维数组的输入输出```cinclude <stdio.h>int main() {int array[3][4];printf("请输入一个3x4的二维数组:\n");for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {scanf("%d", &array[i][j]);}}printf("输入的二维数组为:\n");for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", array[i][j]);}printf("\n");}return 0;}```6. 二维数组的遍历```cinclude <stdio.h>int main() {int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", array[i][j]);}printf("\n");}return 0;}```7. 数组在实际编程中的应用案例(1)计算矩阵的转置```cinclude <stdio.h>void transposeMatrix(int matrix[][3], int rows, int cols, int transposed[][3]) {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {transposed[j][i] = matrix[i][j];}}}int main() {int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int rows = 3, cols = 3, transposed[3][3];transposeMatrix(matrix, rows, cols, transposed);printf("矩阵的转置为:\n");for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {printf("%d ", transposed[i][j]);}printf("\n");}return 0;}```(2)计算数组中最大值和最小值```cinclude <stdio.h>void findMaxMin(int array[], int length, int max, int min) { max = array[0];min = array[0];for (int i = 1; i < length; i++) {if (array[i] > max) {max = array[i];}if (array[i] < min) {min = array[i];}}}int main() {int array[] = {1, 3, 5, 7, 9};int length = sizeof(array) / sizeof(array[0]);int max, min;findMaxMin(array, length, &max, &min);printf("数组中的最大值为:%d,最小值为:%d\n", max, min);return 0;}```五、实验结果及分析本次实验通过一系列的实例,使我们对数组及其应用有了更深入的了解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(4)掌握String类中split方法、charAt方法以及length方法的使用。
(5)掌握Double、Integer等数据包装类的parseDouble、parseInt等方法。
(6)掌握数组的length属性的应用
实验内容:(要求把源程序和运行结果图都粘贴到实验报告中)
(1)分别用一维数组(例子数组如下{ 7, 4, 3, 9, 0, 6 })实现冒泡排序、选择排序和插入排序中的两种排序算法,程序中要求加注释。
publicclassLX3_5 {
/**
*@paramargs
*/
publicstaticvoidmain(String[] args) {
String[] a ="23,21.3,33;34,2,1.9,2.1;3,3,1,3,4,4.9".split(";");
String[][] b =newString[3][];
int[] counts =newint[26];
for(inti = 0; i < Count.length; i++) {
counts[Count[i] -'a']++;//count字符减字符存到相应的位置
}
SystemOut(counts);
山西大学计算机与信息技术学院
实验报告
姓名
学号
专业班级
软件
课程名称
Java实验
实验日期
2014.12.29
成绩
指导教师
杨陟卓
批改日期
实验名称
实验3方法和数组
实验目的:
(1)掌握一维数组和二维数组的定义、初始化方法。
(2)了解和初步应用ng.Math类的random()方法处理实际问题。
(3)了解增强for循环,并使用增强for循环顺序访问数组元素。
System.oΒιβλιοθήκη t.println("Array c");
shuChu(c);
System.out.println("Array d");
shuChu(d);
System.out.println("Array c+d");
Add(c,d);
System.out.println("Array c*d");
for(inti=1;i<list.length;i++){
doublecurrentElement=list[i];//找见现在排序的元素
intk;
for(k=i-1;k>=0&&list[k]>currentElement;k--){
list[k+1]=list[k];//移动出插入位置
}
list[k+1]=currentElement;//放入插入数据
程序代码:
1.选择排序
importjava.util.*;
publicclassLX3_1 {
publicstaticvoidmain(String[] args) {
double[]text={ 7, 4, 3, 9, 0, 6};
SelectionSort(text);
}
publicstaticvoidSelectionSort(double[] list){
Cheng(c,d);
//TODOAuto-generated method stub
}
publicstaticvoidshuChu(int[][] shuChu) {
for(inti = 0; i < 3; i++) {
for(intj = 0; j < 3; j++) {
System.out.printf("%4d",shuChu[i][j]);
}
System.out.println("排序结果是:");
for(inti=0;i<list.length;i++){
System.out.print(" "+list[i]);//输出已排序数组
}
}
}
运行结果贴图:
3冒泡排序
importjava.util.*;
publicclassLX3_3 {
}
}
}

运行结果贴图:
(2)编写程序实现两个矩阵的相加、相乘。
要求程序运行结果形如如下显示:
Array c
1 2 3
4 5 6
7 8 9
Array d
2 2 2
1 1 1
3 3 3
Array c+d
3 4 5
5 6 7
10 11 12
Array c*d
13 13 13
31 31 31
49 49 49
publicclassLX3_2 {
publicstaticvoidmain(String[] args) {
double[]text={ 7, 4, 3, 9, 0, 6};
insertionSort(text);
}
publicstaticvoidinsertionSort(double[] list){
Arrays.sort(te);//多种方法重载
for(inti = 0; i < te.length; i++) {
System.out.println(te[i]);
}
}
}
运行结果贴图:
3.折半查找:
importjava.util.*;
publicclassLX3_8 {
publicstaticvoidmain(String[] args) {
list[i]=currentMin;
}//交换位置
}
System.out.println("排序结果是:");
for(inti=0;i<list.length;i++){
System.out.print(" "+list[i]);//输出已排序数组
}
}
}
运行结果贴图:
2.插入排序
importjava.util.*;
for(intj = 0; j < b[i].length; j++) {
c[i][j] = Double.parseDouble(b[i][j]);
System.out.printf("%-8.1f",c[i][j]);
}
System.out.println();
}
//TODOAuto-generated method stub
}
}
运行结果贴图:
(4)查看帮助、编写例子
利用System类中的arraycopy()方法复制数组。
分别用Arrays类中的sort方法和binarySearch方法实现数组的排序和折半查找。
程序代码:
1.复制数组:
publicclassLX3_6 {
publicstaticvoidmain(String[] args) {
for(inti=0;i<list.length-1;i++){//第一层循环,控制拍第x数
doublecurrentMin=list[i];//currentMin存储现有的最小值
intcurrentMinIndex=i;//最小值的位置
for(intj=i+1;j<list.length;j++){
double[] te = { 1, 9, 21, 31, 44, 56, 78, 99 };
System.out.println("请输入要查找的数");
Scannerinput=newScanner(System.in);
inti = input.nextInt();
System.out.println(Arrays.binarySearch(te, i));
程序代码:
publicclassLX3_4 {
/**
*@paramargs
*/
publicstaticvoidmain(String[] args) {
int[][] c = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] d = { { 2, 2, 2 }, { 1, 1, 1 }, { 3, 3, 3 } };
for(inti = 0; i < a.length; i++) {
b[i] = a[i].split(",");//第i行的值,且split仅能放入Stringl类型
}
double[][] c =newdouble[3][8];//第二个必须有范围,否则无法运行
for(inti = 0; i < 3; i++) {
Answer[i][j] = add1[i][j] + add2[i][j];
}
}
shuChu(Answer);
}
publicstaticvoidCheng(int[][] cheng1,int[][] cheng2) {
int[][] Answer =newint[3][3];
for(inti = 0; i < 3; i++) {
}
}
运行结果贴图:
相关文档
最新文档