实验九1Word下载.doc
《实验九1Word下载.doc》由会员分享,可在线阅读,更多相关《实验九1Word下载.doc(7页珍藏版)》请在冰点文库上搜索。
![实验九1Word下载.doc](https://file1.bingdoc.com/fileroot1/2023-4/30/764618a9-ca87-4683-bceb-9b6f189960f1/764618a9-ca87-4683-bceb-9b6f189960f11.gif)
i_min=1,j_min=1;
(3)给max赋初值:
max=matrix(m,n),位置赋初值:
i_max=m,j_max=n;
(4)使用“计数型”二重循环结构求绝对值最小元素min,所在位置i_min和j_min,最大元素max,所在位置i_max和j_max;
(5)输出绝对值最小元素min,所在位置i_min和j_min;
(6)输出绝对值最大元素max,所在位置i_max和j_max;
(7)输出交换前数组数据;
(8)绝对值最小元素与数组第1行第1列元素matrix(1,1)交换;
(9)绝对值最大元素与数组第m行第n列元素matrix(m,b)交换;
(10)输出交换后数组数据。
(11)结束
3.程序编写
设计和编写程序如下(不完整,请在下划线空白处填充正确内容):
!
班级:
?
姓名:
日期:
查询绝对值最小值和最大值
PROGRAMmain
PARAMETER(m=3,n=4)
REAL:
:
matrix(m,n),min,max,temp
INTEGER:
i_min=1,j_min=1,i_max=m,j_max=
matrix=RESHAPE((/25.5,15.2,20.3,35.2,12.0,14.5,38.5,29.5,&
&
30.5,15.3,18.5,17.8/),(/3,4/))
min=ABS(matrix(1,1));
max=
DOi=1,m
DOj=1,N
IF(ABS(matrix(i,j))<
)THEN
min=ABS(matrix(i,j))
i_min=;
j_min=j
ENDIF
IF(>
max)THEN
max=
i_max=i;
j_max=j
ENDDO
PRINT100,'
最小元素'
min,i_min,j_min
最大元素'
max,i_max,j_max
PRINT*,'
交换前矩阵:
'
DOi=1,m
PRINT200,(matrix(i,j),j=)
ENDDO
IF(min/=matrix())THEN
=matrix(1,1);
matrix(1,1)=min;
matrix(i_min,j_min)=temp
ENDIF
IF(max/=matrix())THEN
temp=matrix(m,n);
matrix(m,n)=max;
matrix(i_max,j_max)=
PRINT200,(matrix(i,j),j=1,n)
100FORMAT(1X,'
绝对值'
A,'
F4.1,2X,'
行号:
I2,2X,'
列号:
I2)
200FORMAT(1X,<
n>
(F4.1,2X))
END
4.实验要求
l分析问题,理解算法和程序,将程序填写完整。
l掌握二维数组声明、数组构造器、RESHAPE函数、隐含DO循环基本概念和使用规则。
l在D盘上创建新工作区:
shiyan09和新项目:
xm91。
l在项目xm91内创建源程序文件:
xm91.f90,同时在文件中编辑输入给定程序。
l在项目xm91内编译、构建、运行、调试程序。
l将输出结果以注释形式编辑输入到源程序文件xm91.f90末尾。
l改写程序,提高通用性(行数、列数和数组数据从键盘输入,绝对值最大元素与第1行第1列元素交换,绝对值最小元素与第m行第n列元素交换)。
运行程序,输入一组数组数据,获得运行结果。
5.实验步骤
l分析问题,理解算法和程序,完成程序填空,得到正确完整程序。
l启动软件开发环境MicrosoftDeveloperStudio。
l创建新工作区:
shiyan09。
l在工作区shiyan09内创建新项目:
l在项目xm91内创建源程序文件xm91.f90,编辑输入源程序文本。
l编译、构建、运行、调试程序。
运行程序,得到输出结果。
l输出结果以注释形式编辑输入到源程序文件末尾。
xm911,在新项目内创建源程序文件xm911.f90,编辑输入已改写程序。
编译、构建、运行、调试程序。
输入自定数组数据,获得输出结果。
三.实验内容2
生成“魔幻方阵。
魔幻方阵是指方阵的每一行、每一列、对角线元素之和均相等,其值为n(n2+1)/2,n代表方阵的行数和列数。
一个n阶奇数方阵由1到n2个自然数构成,其组成规律是:
(1)将1放在第1行的中间一列;
(2)由m=1开始依次从左下到右上方向放连续数,如m放在A(i,j),则m+1放在A(i-1,j+1);
(3)如果i-1<
1,则i-1为n;
(4)如果j+1>
n,则j+1为1;
(5)如果A(i-1,j+1)已放数,则将数放在A(i+1,j)中。
以下是五阶魔幻方阵:
真
假
输出:
魔幻方阵A
结束
开始
初始化:
1Þ
i,3=j
m≤n2
i-1Þ
i,j+iÞ
j
A(1,3),2Þ
m
i<
1
nÞ
i
j>
n
A(i,j)==0
mÞ
A(i,j),m=m+1
i+3Þ
i,j-2Þ
i>
i-nÞ
j<
j+nÞ
图9-1程序框图
17241815
23571416
46132022
101219213
11182529
问题中魔幻方阵数据符合数组定义,用一个n行n列二维整型数组A存储魔幻方阵数据。
根据魔幻方阵组成规律,设计算法,绘制框图,如图9-1所示。
时间:
生成魔幻方阵
PARAMETER(n=5)
A=0,i=1,j=3,m
A(i,j)=
m=2
DOWHILE(m<
=)
i=i-1;
j=j+1
IF(i<
1)i=
IF(j>
n)j=
IF()THEN
A(i,j)=m
m=
ELSE
i=;
j=j-2
IF(i>
n)i=
IF(j<
1)=j+n
DOi=
PRINT'
(<
(I3,1X))'
(A(i,j),j=1,n)
4.实验要求
l在工作区shiyan09内创建新项目:
xm92。
l在项目xm92内创建源程序文件:
xm92.f90,同时在文件中编辑输入给定程序。
l在项目xm92内编译、构建、运行、调试程序。
l将输入数据和输出结果以注释形式编辑输入到源程序文件xm92.f90末尾。
l改写程序,提高程序通用性,将方阵阶数n从键盘输入,生成3、5、7阶魔幻方阵。
l分析问题,理解算法和程序,在程序下划线空白处填写正确内容。
l在项目xm92内创建源程序文件xm92.f90,编辑输入源程序文本。
得到5阶魔幻方阵数据。
l将输出结果以注释形式编辑输入到源程序文件末尾。
xm921,在新项目内创建源程序文件xm921.f90,编辑输入已改写程序。
运行程序,分别输入3、5、7,获得输出结果。
四.实验内容3
已知m×
n矩阵,求每行元素之和,将和最大的行与第一行对调,输出对调前后矩阵。
使用动态数组,编写程序实现之。
2.算法设计
n的矩阵符合数组定义,用二维整型数组A保存,m、n和数组A数据从键盘输入。
m行数组元素之和,有m个数,用一维整型数组B保存。
数组A和B使用动态数组。
问题求解算法比较简单。
分析问题,自行设计算法和绘制框图。
设计和编写程序如下(含有若干错误,请查找并改正错误):
数组元素对调
PROGRAMmain
INTEGER,ALLOCATABLE:
A(:
),B(:
)
INTEGERsum,max,m,n,p
PRINT*,'
请输入m×
n矩阵阶数m,n:
READ*,m,n
ALLOCATE(A,B)
按逻辑结构输入m×
n矩阵数据(数据件之间用空格间隔):
DOI=
READ*,(A(I,J),J=1,n)
DOI=1,m
sum=
DOJ=1,n
sum=sum+A(I,J)
B(J)=sum
max=B(m);
p=0
DOI=2,m
IF(B(I)/=max)THEN
max=B(J);
p=J
ENDIF
对调前矩阵:
DOI=1,m
PRINT200,(A,J=1,n)
DOJ=1,n
A(1,J)=A(p,J);
A(p,J)=A(1,J);
A(1,J)=T
和最大的行:
p
对调后矩阵:
PRINT200,(A(I,J),J=1,n)
200FORMAT(1X,<
(I4,1X))
l分析问题,设计算法,绘制框图,查找并改正程序错误,得到正确程序。
xm93。
l在项目xm93内创建源程序文件:
xm93.f90,同时在文件中编辑输入给定程序。
l在项目xm93内编译、构建、运行、调试程序。
l将输入数据和输出结果以注释形式编辑输入到源程序文件xm93.f90末尾。
l改写程序,求每列元素之和,将和最大的列与第一列对调,输出对调前后矩阵。
l上机实验前,查找和改正程序中错误,得到正确程序。
l在项目xm93内创建源程序文件xm93.f90,编辑输入源程序文本。
运行程序,输入矩阵阶数:
3,4,以及下面矩阵数据:
12251520
18302012
10201711
运行结束,得到输出结果。
l将输入输出数据以注释形式编辑输入到源程序文件末尾。
xm931,在新项目内创建源程序文件xm931.f90,编辑输入已改写程序。
输入自定一组数据,获得输出结果。
五.实验小结
本次实验主要涉及二维数组和动态数组的应用,对二维数组的处理多数情况使用二重循环结构,所以二维数组处理与二重循环有密切关系,实验时要重点关注。
在使用中要特别注意数组下标的使用和数组元素的引用。
对于二维数组赋初值,要掌握数组构造器和RESHAPE函数的使用。
要熟练掌握用隐含DO循环实现数组的输入输出。
通过本次实验,学生对一维数组、二维数组、甚至三维数组及其综合应用有深入了解,能够设计和编写较复杂的数组应用程序。
六.课外练习
利用课后业余时间,完成以下练习,以巩固所学知识。
求解以下问题:
已知两组有序整数(个数不定),将两组整数合并为一组有序整数。
合并后的该组整数没有相同整数。
从键盘输入两组整数,输出合并前后整数序列。
输入使用静态数组和动态数组两种方式,编写程序实现之。
提示:
使用三个数组,两个保存合并前两组整数,一个保存合并后整数。
解题要求:
l对问题进行详细分析,设计算法,绘制框图,编写程序。
l在工作区lianxi9内创建新项目:
lx9。
l在项目lx9内创建源程序文件:
lx9.f90,同时在文件中编辑输入源程序文本。
l在项目lx9内编译、构建、运行、调试程序。
l输入数据,得到输出结果,将输入输出数据以注释形式编辑输入到源程序文件末尾。
-69-