Fortran90数组编程作业

更新时间:2024-01-22 10:25:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数组--程序设计作业

数组是FORTRAN90最重要的结构数据类型之一。许多实际问题往往设计大量的数据,数组是存储和处理大批量数据的有效工具,有些问题如果不用数组求解将难以解决。

数组是类型相同且有序的一组数据,涉及到这类数据均可考虑使用数组。

本次实验是学习和掌握数组声明、数组元素引用、数组输入输出、数组赋初值的一次系统实验活动。通过本次实验,能够设计和编写比较简单的数组应用程序。

一.实验内容1

1.问题描述

已知10个正整数:10、55、25、70、45、15、25、85、45、35,输入一个待删除整数,在10个整数中查找,若有该整数,则将其删除,输出删除前后这组整数。编写程序实现之。

2.算法设计

已知的10个正整数符合数组定义,用一维整型数组num保存,用数组构造器赋初值。

待删除整数n从键盘输入。

算法基本思想:输入待删除整数,从第1个数组元素num(1)开始,依次用n去比较是否相等,若相等查找成功,将该数组元素删除(在该数组元素位置设置删除标志),直到第10个数组元素检查比较完毕。输出删除前后数组元素。

因10个整数为正数,所以删除标志可用-1表示。 算法:

(1) 输入待删除整数n;

(2) 输出删除前10个整数; (3) 用n依次在数组元素num(1)、num(2)、? 、num(10)中查找,查找成功置删除标志; (4) 输出删除后数据。 (5) 结束

算法第3步可用“计数型”循环结构和DO循环语句实现。

3.程序编写

根据算法,设计和编写不完整示例程序如下(请在下划线空白处填充正确内容): 程序8-1:

? !班级:??? ? !姓名:??? ? !时间:???

-59-

? !数据查询

? PROGRAM problem01

? INTEGER :: num(10)=( ),n ? PRINT*,‘请输入100以内的一个正整数: ’ ? READ*,n

? PRINT*,‘删除前数据: ’

? WRITE(*,100) (num(I), ) ? DO I=1,10

? IF (n==num(I)) num(I)=-1 ? ENDDO ? PRINT*

? PRINT*,‘删除后数据: ’ ? DO I=

? IF ( ) WRITE(*,100) num(I) ? ENDDO ? PRINT*

? 100 FORMAT((I3,2X\\)) ? END

4.实验要求

? 分析问题,理解算法和程序,将程序填写完整。

? 掌握数组声明、数组构造器、隐含DO循环基本概念和使用规则。 ? 将输入数据和输出结果以注释形式编辑输入到源程序文件末尾。

? (下次上机试验)改写程序,提高通用性(正整数个数不定,且从键盘输入,数组元素最大个数max通过PARAMETER语句定义)。运行输入几组不同数据,获得不同运行结果。

5.实验步骤

? 分析问题,理解算法和程序,完成程序填空,得到正确完整程序。 ? 启动软件开发环境Microsoft Developer Studio。

? 编译、构建、运行、调试程序。运行时输入数据45,得到输出结果。 ? 将输入数据和输出结果以注释形式编辑输入到源程序文件末尾。

二.实验内容2

1.问题描述

输入一个班学生(人数≤40)的学号和3门课(英语、数学、物理)成绩,计算每个学生平均成绩、每门课平均成绩和三门课平均成绩,统计高于每门课平均成绩和三门课平均成绩的

-60-

学生人数和占总人数比例,输出统计结果。编写程序实现之。

2.算法设计

问题中涉及一个班级的学生学号、3门课成绩和学生平均成绩,这些数据符合数组定义,用五个数组存储这些数据。定义以下五个数组:

? numbers:字符型数组,存储学生学号。从键盘输入。 ? englishs:整型数组,存储英语成绩。

? maths:整型数组,存储数学成绩。从键盘输入。 ? physics:整型数组,存储物理成绩。从键盘输入。 ? averages:实型数组,存储学生平均成绩。计算获得。

计算获得英语平均成绩english_av、数学平均成绩math_av、物理平均成绩physic_av和三门课平均成绩average,均为实型。

从键盘输入学生人数n。

统计高于英语平均成绩人n1和比例p1,高于数学平均成绩人n2和比例p2,高于物理平均成绩人n3和比例p3,高于三门课平均成绩人nn和比例pp。

求解算法比较简单,设计算法如下: (1) 输入学生人数n;

(2) 采用“计数型”循环结构输入学生学号和三门课成绩,同时计算学生平均成绩,统

计英语、数学、物理课总成绩;

(3) 计算英语、数学、物理课平均成绩和三门课平均成绩; (4) 采用“计数型”循环结构统计高于平均成绩人数及比例 (5) 输出统计结果 (6) 结束

3.程序编写

根据算法,设计和编写不完整示例程序如下(请在下划线空白处填充正确内容): 程序8-2:

? !班级:??? ? !姓名:??? ? !时间:??? ? !统计人数及比例 ? PROGRAM main ? PARAMETER (max=40)

? CHARACTER*5 :: numbers(max)

? INTEGER,DIMENSION( ) :: englishs,maths,physics

? REAL :: averages(max),english_av,math_av,physic_av,average,sum1=0,sum2=0,sum3=0 ? INTEGER(1) :: n,n1=0,n2=0,n3=0,nn=0 ? REAL :: p1,p2,p3,pp ? PRINT*,‘请输入学生人数: ’

-61-

? READ*,n

? PRINT*,‘请输入’,n,‘名学生的学号、英语成绩、数学成绩和物理成绩。’ ? PRINT*,‘数据之间用空格间隔。学号为长度为5的字符串,用引号括住。’ ? DO I=1,n

? READ*,numbers(I),englishs(I),maths(I),physics(I) ? averages(I)=( )/3.0 ? sum1=sum1+englishs(I) ? sum2=sum2+maths(I) ? sum3= ?

? english_av=sum1/n ? math_av= ? physic_av=sum3/n

? average=(english_av+math_av+physic_av)/ ? DO I=1,n

? IF ( englishs(I)>english_av ) n1=n1+1 ? IF ( ) n2=n2+1 ? IF (physics(I)>physic_av) ? IF (averages(I)>average) nn= ? ENDDO ? p1=REAL(n1)/n ? p2= /n ? p3=REAL(n3)/ ? pp= (nn)/n

? WRITE(*,100) ‘英语’,n1,p1*100 ? WRITE(*,100) ? WRITE(*,100) ‘物理’,n3,p3*100 ? WRITE(*,100) ‘三门课’,nn,pp*

? 100 FORMAT(1X,‘高于’,A,‘平均成绩的学生人数有’,I2,‘人,占总人数比例’,F4.1,‘%’) ? END

4. 实验要求

? 分析问题,理解算法和程序,完成程序填空,得到正确完整程序。 ? 编译、构建、运行、调试程序。

? 将输入数据和输出结果以注释形式编辑输入到源程序文件末尾。

? 改写程序,提高程序通用性(将英语平均成绩、数学平均成绩、物理平均成绩和三门课平均成绩采用数组保存,将高于平均成绩人数采用数组保存,统计高于平均成绩人数可用循环结构实现)。

5.实验步骤

-62-

? 分析问题,理解算法和程序,在程序下划线空白处填写正确内容。 ? 编译、构建、运行、调试程序。

运行程序,输入学生人数:5和5名学生的学号、三门课成绩数据: ‘02201’ 45 70 85 ‘02202’ 75 65 60 ‘02203’ 55 85 50 ‘02204’ 85 60 70 ‘02205’ 60 90 45 运行结束,得到输出结果。

? 将输入数据和输出结果以注释形式编辑输入到源程序文件末尾。

-63-

本文来源:https://www.bwwdw.com/article/b3po.html

Top