文档库 最新最全的文档下载
当前位置:文档库 › 实验4

实验4

实验4
实验4

实验循环结构序程序设计

循环结构是三种基本程序结构之一,是用于解决复杂问题的一类程序结构。在实验六中已经学习了循环结构的基本概念,以及DO循环语句和DO WHILE循环语句的基本功能和使用规则,但这仅是循环结构的基本内容,还需要学习和掌握循环结构的综合应用,以及更复杂的循环结构,用于解决更复杂的问题。

循环结构允许嵌套,嵌套的循环结构称为多重循环,即一个循环结构的循环体中包含另一个循环结构,根据实际需要可使用多层嵌套。FORTRAN90新增了强制性终止循环语句CYCLE 和EXIT,使用这两条语句可在循环体执行过程中提前终止本次循环或者整个循环。这两条语句的使用虽然不符合结构化程序设计思想,但使用得当,可使用程序简洁、短小、高效。

本次实验是学习和掌握循环结构的综合应用的一次实系统验活动。通过本次实验,能够设计和编写比较复杂的循环结构程序。

一.实验目的

1.进一步掌握基本循环结构的使用。

2.掌握强制性终止循环语句EXIT和CYCLE的基本功能和使用规则,以及相互区别。

3.掌握嵌套循环结构概念和应用。

4.掌握顺序结构、选择结构和循环结构相互嵌套和综合应用。

5.掌握设计和编写较复杂程序的基本技能。

二.实验内容1

1.问题描述

公元五世纪末,我国古代数学家张丘建在《算经》中提出了“百钱买百鸡问题”:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问公鸡、母鸡、小鸡各几何?”意思是:公鸡每只5元,母鸡每只3元,小鸡一元三只。100元买100只鸡。公鸡、母鸡、小鸡各买多少只?编写程序实现之。

2.算法设计

求解本题,有两个限定条件:其一是所有的鸡共计100只;其二是所有买鸡的钱共计100元。根据这两个条件可列出下面两个方程式:(设公鸡、母鸡和小鸡数分别为x、y、z) x+y+z=100

5x+3y+z/3=100

这是一个三元一次方程组,但是其限定条件也就是方程式只有两个,这就意味着它是一个多解题。求解该问题,有多种解法,可利用计算机快速计算的特点采用试探法求解该问题。

公鸡、母鸡和小鸡数各用0、1、2、3、…、100去试探是否满足上述方程组,共需试探101×101×101=1030301次。

用三重循环结构设计算法和编写程序,通过分析,设计算法,绘制框图,如图4-1所示。每层循环的循环次数确定,都是101次,所以用“计数型”循环结构实现,程序中使用DO 循环语句。

图4-1 框图

最外层

out

中间层

mid

最内层

in

3.程序编写

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

!班级:???

!姓名:???

!时间:???

!求解百钱买百鸡

PROGRAM problem01

INTEGER :: x,y,z,n=0,sum

REAL money

out: DO x=0,100

mid: DO y=0,100

in: DO z=0,100

sum= x+y+z

money=5*x+3*y+z/3

IF ( sum==100 .and. money==100 ) THEN

n=n+1

WRITE(*,100) n,x,y,z

END IF

END DO in

END DO mid

END DO out

100 FORMAT (1X,‘第’,I2,‘组解:’,‘公鸡=’,I2,‘只’,2x,‘母鸡=’,I2,‘只’,2x,‘小鸡=’,I2,‘只’)

PRINT *,‘共计’,n,‘组解’

END

4.实验要求

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

●掌握“计数型”循环结构、DO循环语句、循环嵌套关系。

●在D盘上创建新工作区:shiyan04和新项目:xm41。

●在项目xm41内创建源程序文件:xm41.f90,同时在文件中编辑输入给定程序4-1。

●在项目xm41内编译、构建、运行、调试程序。

●将输出结果以注释形式编辑输入到源程序文件xm41.f90末尾。

●改写程序,提高通用性(总钱数和总鸡数从键盘输入,方程系数通过PARAMETER语句

定义)。运行输入几组不同数据,获得不同运行结果。

●改写程序,提高运行效率(减少内循环体中块IF语句执行次数)。提示:块IF语句在

x+y+z≤100时执行才有意义。可课后完成。

5.实验步骤

n

11

n )1(31211+-+???-+-

● 分析问题,理解框图和程序,完成程序填空,得到正确完整程序。 ● 启动软件开发环境Microsoft Developer Studio 。 ● 在D 盘上创建新工作区:shiyan04。

● 在工作区shiyan04内创建新项目:xm41。

● 在项目xm41内创建源程序文件xm41.f90,编辑输入源程序文本4-1。 ● 编译、构建、运行、调试程序。得到输出结果。

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

● 在工作区shiyan04内创建新项目:xm411,在新项目内创建源程序文件xm411.f90,在文件中编辑输入已改写的通用程序。编译、构建、运行、调试程序。输入自定的几组数据,获得输出结果。

三.实验内容2

1.问题描述

计算

其中n 为满足不等式11+22+33+…+n n

>A 的最小项数n。A 从键盘输入,如:10000。编写程序实现之。

2.算法设计

求解本题,先通过“条件型”循环结构求最小项数n ,整型数,然后再通过“计数型”循环计算级数之和。计算级数之和时要注意每项的正负变化。

用实型变量sum 存储级数之和,实型变量term 存储级数通项。 分析问题,自行设计算法和绘制框图。

3.程序编写

通过需求分析,设计和编写含有错误的示例程序如下(请查找并改正程序中错误)。 程序4-2:

!班级:??? !姓名:??? !时间:??? !计算级数之和 PROGRAM main

REAL :: sum=1,term ,sign=1,s=0 INTEGER :: A ,i ,n=0

PRINT*,‘请输入一个较大整数(如:10000): ’ READ *, A DO

s=s+2**n n=n+1

IF (s>A) exit ENDDO

DO i=1,n-1,2 sign=-1*sign term=sign*1.0/i sum=sum-term ENDDO

WRITE(*,*) sum END

4. 实验要求

● 分析问题,设计算法,绘制框图,查找并改正程序错误,得到正确程序。 ● 在工作区shiyan04内创建新项目:xm42。

● 在项目xm42内创建源程序文件:xm42.f90,同时在文件中编辑输入给定程序4-2 ● 在项目xm42内编译、构建、运行、调试程序。

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

● 改写程序,提高程序结构化程度(将特殊DO 循环语句改为用DO WHILE 语句实现)。

5.实验步骤

● 上机实验前,完成程序改错,得到正确程序。 ● 在工作区shiyan02内创建新项目:xm42。

● 在项目x42内创建源程序文件xm42.f90,编辑输入源程序文本4-2。

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

● 在工作区shiyan04内创建新项目:xm421,在新项目内创建源程序文件xm421.f90,在文件中编辑输入已改写程序。编译、构建、运行、调试程序。输入自定的几组数据,获得输出结果。

四.实验内容3

1.问题描述

求解以下问题: 计算∑∞

===

i i i

i S 1

!21

的近似值。给定三个精度要求:1.0E-6、1.0E-7、1.0E-8,当级数

通项小于给定精度时,就认为满足精度要求,得到并输出对应的S 近似值,及项数i 值。三个精度值从键盘输入。

提示:S=T1+T2+ … +T i+ …,其中:通项T i=

1

2!i i

解题要求:

●对问题进行详细分析,设计算法,绘制框图,编写程序。

●在工作区lianxi4内创建新项目:lx4。

●在项目lx4内创建源程序文件:lx4.f90,同时在文件中编辑输入源程序文本。

●在项目lx4内编译、构建、运行、调试程序。

输入数据,得到输出结果,将输入数据和输出结果以注释形式编辑输入到源程序文件末尾五.实验小结

本次实验是深入学习、理解和掌握循环结构程序设计的一次综合实验,实验效果对掌握较复杂的循环结构程序设计方法和技术至关重要。

通过本次实验,学生对循环结构嵌套概念有一个完整和准确理解,掌握循环结构的综合应用和编写含有多重循环结构程序的基本技能,掌握循环结构的强制性终止语句,掌握循环和分支结构的嵌套应用。

通过本次实验,学生对顺序结构、选择结构和循环结构的综合运用应该熟练掌握,能够设计和编写比较复杂的程序。

!班级 0903

!姓名郭志升

!学号 20092312650

PROGRAM main

REAL j,fac,s,t,i,x

READ*,x

fac=1

s=0

t=x

i=1

DO WHILE(t>=x)

t=1/(2**i*fac)

s=s+t

DO j=1,i

Fac=fac*j

END DO

i=i+1

END DO

PRINT*,s,i-1

END

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

操作系统实验四存储管理

师学院计算机系 实验报告 (2014—2015学年第二学期) 课程名称操作系统 实验名称实验四存储管理 专业计算机科学与技术(非师)年级2012级 学号B2012102147 姓名秋指导教师远帆 实验日期2015-05-20

图1 word运行情况 “存使用”列显示了该应用程序的一个实例正在使用的存数量。 5) 启动应用程序的另一个实例并观察它的存需求。 请描述使用第二个实例占用的存与使用第一个实例时的存对比情况: 第二个实例占用存22772K,比第一个实例占用的存大很多 4:未分页合并存。 估算未分页合并存大小的最简单法是使用“任务管理器”。未分页合并存的估计值显示在“任务管理器”的“性能”选项卡的“核心存”部分。 总数(K) :________220___________ 分页数:_____________________ 未分页(K) :_________34__________ 图2核心存

C 简单基本NTFS 30G 良好(系 统) D 简单基本NTFS 90G 良好 E 简单基本NTFS 90G 良好 F 简单基本NTFS 88 G 良好 图3磁盘情况 6:计算分页文件的大小。 要想更改分页文件的位置或大小配置参数,可按以下步骤进行: 1) 右键单击桌面上的“我的电脑”图标并选定“属性”。 2) 在“高级”选项卡上单击“性能选项”按钮。 3) 单击对话框中的“虚拟存”区域中的“更改”按钮。 请记录: 所选驱动器的页面文件大小: 驱动器:______________F_____________________ 可用空间:___________9825_____________________ MB 初始大小(MB) :_____ 2048______________________ 最大值(MB) :________4092_____________________ 所有驱动器页面文件大小的总数: 允的最小值:________16____________________ MB

微机原理实验四实验报告

实验报告

实验四 8251可编程串行口与PC机通信实验一、实验要求 利用实验箱内的8251A芯片,实现与PC机的通信。 二、实验目的 1.掌握8251A芯片结构和编程方法; 2.了解实现串行通信的硬件环境,数据格式和数据交换协议; 3.了解PC机通信的基本要求。 三、实验原理 (一)8251A芯片工作方式配置: 1. 8个数据位; 2.无奇偶校验位; 3.1个停止位; 4.波特率因子设为16; 5. 波特率设为9600。 (二)8251A主要寄存器说明 图4-1 模式字 图4-2 命令字

CO MMAN D I NSTR UCT ION FO RMA T 图4-3 状态字 (三)8251编程 对8251 的编程就是对8251 的寄存器的操作,下面分别给出8251 的几个寄存器的格式。(1)方式控制字 方式控制字用来指定通信方式及其方式下的数据格式,具体各位的定义如图4-4所示。 图4-4 方式控制字说明 (2)命令控制字 命令控制字用于指定8251 进行某种操作(如发送、接收、内部复位和检测同步字符等)或处于某种工作状态,以便接收或发送数据。图4-5 所示的是8251 命令控制字各位的定义。 图4-5命令控制字说明 (3)状态字 CPU 通过状态字来了解8251 当前的工作状态,以决定下一步的操作,8251 的状态字如 图4-6所示。 图4-6 状态字说明 四、实验电路连接: 1.CS8251接228H,CS8279已固定接至238H; 2.扩展通信口18中的232RXD连8251RXD ,232TXD连8251TXD;

3.计算机的两个RS232通信口,一个连至仿真机通信口,一个连至扩展通信口18(所有通信口均为DB9)。注意:RS232通信口必须在设备断电状态下插拔! 图4-7 连线图 五、实验内容及要求 1. 将例程从PDF文档中导入到WMD86软件编辑环境中,调试通过。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 2.剔除例程中冗余部分,实现对例程的精简和优化。将精简内容与相应理由写入实验报告。 3.将自己学号的后三位数字通过RS232端口的Txd管脚输出。使用软件自带的示波器,观察Txd管脚的输出,验证结果的正确性。将结果截图保存,贴入实验报告。 4.通过读状态寄存器的方法,获得发送移位寄存器是否为空的信息,实现学号后三位数字的循环发送。将结果截图保存,贴入实验报告。 5.给每帧数据间添加固定的时间间隔,时间间隔为10000个指令周期。将结果截图保存,

实验4-2-选择结构

实验4-2 选择结构程序设计(二) 1 【实验目的】 (1)学会正确使用运算符和逻辑表达式 (2)熟练掌握if语句的三种结构 【实验要求】 (1)掌握运算符的优先级和结合方向,正确使用运算符和逻辑表达式。 (2)熟练掌握if语句的多分支结构。 (3)熟练掌握if语句关键字else的正确搭配使用。 【实验环境】 (1) Microsoft XP操作系统 (2) Microsoft VC++ 6.0 【实验内容】 1、程序改错 题目描述:阅读下面程序段,编译调试程序,并改正错误语句。#include < stdio.h > int main() { double x,y; scanf(“%lf”,&x);

if(x>=5) y=x^2; else if(0=

操作系统实验4

实验四进程通信(二消息通信) 一、实验目的 熟悉管道通信,了解管道内数据的读取与写入过程; 学会创建管道、使用管道,实现父子进程间的通信; 熟悉各种管道通信时使用的函数; 熟悉共享内存的概念; 学会使用函数创建共享内存段,熟悉操纵共享内存的四个系统调用; 熟悉Linux下进程通信中的消息通信机制; 学会使用系统调用msgget(),msgsnd(),msgrev()及msgctl()编制一定长度的消息的发送和接收程序。 二、实验内容 任务: (1)每个同学登陆两个窗口,先在一个窗口中运行程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),用ipcs命令查看系统中消息队列的情况,然后在另一个窗口中运行程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行,再次用ipcs命令观察系统中消息队列的情况。 (2)使用系统调用msgget(),msgsnd(),msgrev()及msgctl()编制一长度为1K的消息的发送和接收程序。 ①为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,SERVER和CLIENT,进行通信。 ②SERVER端建立一个Key为学号末3位的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER。SERVER 每接收到一个消息后显示一句“(server)received”。 ③CLIENT端使用key为学号末3位的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,即是SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(client)sent”。 ④父进程在SERVER和CLIENT均退出后结束。 三、代码及运行结果分析 (1)每个同学登陆两个窗口,先在一个窗口中运行程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),用ipcs命令查看系统中消息队列的情况,然后在另一个窗口中运行程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行,再次用ipcs命令观察系统中消息队列的情况。

计组-4位乘法器实验报告

实验4位乘法器实验报告 姓名:X XX 学号:X XX 专业:计算机科学与技术课程名称:计算机组成同组学生姓名:无 实验时间:实验地点:指导老师:XXX 一、实验目的和要求 1.熟练掌握乘法器的工作原理和逻辑功能 二、实验内容和原理 实验内容: 根据课本上例3-7的原理,来实现4位移位乘法器的设计。 具体要求:1. 乘数和被乘数都是4位 2. 生成的乘积是8位的 3. 计算中涉及的所有数都是无符号数 4.需要设计重置功能 5.需要分步计算出结果(4位乘数的运算,需要四步算出结果) 实验原理: 1.乘法器原理图

2.本实验的要求: 1.需要设计按钮和相应开关,来增加乘数和被乘数 2.每按一下M13,给一个时钟,数码管的左边两位显示每一步的乘 积 3.4步计算出最终结果后,LED灯亮,按RESET重新开始计算 三、主要仪器设备 1.Spartan-III开发板1套 2.装有ISE的PC机1台 四、操作方法与实验步骤 实验步骤: 1.创建新的工程和新的源文件 2.编写verilog代码(top模块、display模块、乘法运算模块、去抖动模块以及 UCF引脚) 3.进行编译 4.进行Debug 工作,通过编译。

5.. 生成FPGA代码,下载到实验板上并调试,看是否与实现了预期功能 操作方法: TOP: module alu_top(clk, switch, o_seg, o_sel); input wire clk; input wire[4:0] switch; output wire [7:0] o_seg; // 只需七段显示数字,不用小数点 output wire [3:0] o_sel; // 4个数码管的位选 wire[15:0] disp_num; reg [15:0] i_r, i_s; wire [15:0] disp_code; wire o_zf; //zero detector initial begin i_r <= 16'h1122; //0x1122 i_s <= 16'h3344; //0x3344 end alu M1(i_r, i_s, switch[4:2], o_zf, disp_code); display M3(clk, disp_num, o_seg, o_sel); assign disp_num = switch[0]?disp_code:(switch[1] ? i_s : i_r); endmodule

实验二选择结构程序设计 实验报告

C语言程序设计与问题求解实验报告 实验二选择结构程序设计 一、实验目的 1.正确使用关系表达式和逻辑表达式表示条件; 2.掌握选择语句if-else和switch语句的使用方法; 3.掌握分支结构程序设计。 二、实验内容 1. 选择结构编程示例 year是闰年,即year能被4整除但不能被100整除,或year能被400整除。从键盘读入一个年份,然后输出其是否为闰年。具体代码如下: #include int main() { int year; printf("请输入年份:"); scanf("%d",&year); if ((year%4==0 && year%100!=0)||(year%400==0)) { printf("闰年!"); } else { printf("不是闰年!"); } return 0; } 运行结果:

2.分析并修改下面程序错误,使之能够正常运行。 错误代码一:下面的这个程序是当a和b的值相等的情况下输出“a和b相等”,而a与b的值不相等的话无输出。 #include void main() { int a=5,b=6; /* 或int a=5, b=5 ;*/ if (a==b); { printf("a和b相等\n"); } } 错误点: if (a==b)后有了分号“;”表示这条语句已执行完毕,所以无论a、b是否相等都会输出"a和b相等"。 修改后: #include void main() { int a=5,b=6; /* 或int a=5, b=5 ;*/ if (a==b) printf("a和b相等\n"); } 错误的代码二:下面的这个程序是当a和b的值相等的情况下a与b的值同时增加1,而a与b的值不相等的话,二者的值保持不变。 #include void main() { int a=5; /* 或int a=6*/ int b=6; if (a==b) a++; b++;

山东大学操作系统实验报告4进程同步实验

山东大学操作系统实验报告4进程同步实验

计算机科学与技术学院实验报告 实验题目:实验四、进程同步实验学号: 日期:20120409 班级:计基地12 姓名: 实验目的: 加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互斥 操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案。了解 Linux 系统中 IPC 进程同步工具的用法,练习并发协作进程的同步与互斥操作的编程与调试技术。 实验内容: 抽烟者问题。假设一个系统中有三个抽烟者进程,每个抽烟者不断地卷烟并抽烟。抽烟者卷起并抽掉一颗烟需要有三种材料:烟草、纸和胶水。一个抽烟者有烟草,一个有纸,另一个有胶水。系统中还有两个供应者进程,它们无限地供应所有三种材料,但每次仅轮流提供三种材料中的两种。得到缺失的两种材料的抽烟者在卷起并抽掉一颗烟后会发信号通知供应者,让它继续提供另外的两种材料。这一过程重复进行。请用以上介绍的 IPC 同步机制编程,实现该问题要求的功能。 硬件环境: 处理器:Intel? Core?i3-2350M CPU @ 2.30GHz ×4 图形:Intel? Sandybridge Mobile x86/MMX/SSE2 内存:4G 操作系统:32位 磁盘:20.1 GB 软件环境: ubuntu13.04 实验步骤: (1)新建定义了producer和consumer共用的IPC函数原型和变量的ipc.h文件。

(2)新建ipc.c文件,编写producer和consumer 共用的IPC的具体相应函数。 (3)新建Producer文件,首先定义producer 的一些行为,利用系统调用,建立共享内存区域,设定其长度并获取共享内存的首地址。然后设定生产者互斥与同步的信号灯,并为他们设置相应的初值。当有生产者进程在运行而其他生产者请求时,相应的信号灯就会阻止他,当共享内存区域已满时,信号等也会提示生产者不能再往共享内存中放入内容。 (4)新建Consumer文件,定义consumer的一些行为,利用系统调用来创建共享内存区域,并设定他的长度并获取共享内存的首地址。然后设定消费者互斥与同步的信号灯,并为他们设置相应的初值。当有消费进程在运行而其他消费者请求时,相应的信号灯就会阻止它,当共享内存区域已空时,信号等也会提示生产者不能再从共享内存中取出相应的内容。 运行的消费者应该与相应的生产者对应起来,只有这样运行结果才会正确。

实验4选择结构程序设计

实验4 选择结构程序设计 一、实验目的 1.掌握C语言中逻辑量的表示和使用方法。 2.掌握if语句及switch语句的使用。 3.熟悉各种表达式作为if语句及switch语句的条件。 4.了解Turbo C程序的基本调试方法。 二、实验内容 1.验证性实验 (1)分析程序的运行结果。 ①运行下列程序,输入1-7之间的任意数字,观察程序的运行结果。 #include void main() { int week; printf("Input(1-7):"); scanf("%d",&week); switch(week) { case 1:printf("Mon.\n"); break; case 2:printf("Tue.\n"); break; case 3:printf("Wed.\n"); break; case 4:printf("Tur.\n"); break; case 5:printf("Fri.\n"); break; case 6:printf("Sat.\n"); break; case 7:printf("Sun.\n"); break; default:printf("The input is wrong!\n"); } } ②运行5次下列程序,输入的数据分别是1,2,3,4,5,请观察每次的运行结果,并根据结果分析原因。 #include void main() { int n,a=0,b=0,c=0,d=0,k=0; scanf("%d",&n); switch(n) { case 1:b++;break; case 2:c++; case 3:d++;break; case 4:k++; default:a++; } printf("%d,%d,%d,%d",a,b,c,d,n); } (2)输入x的不同值,以下程序将求一给定“y=f(x)”函数的值。

操作系统实验报告4

《操作系统》实验报告 实验序号: 4 实验项目名称:进程控制

Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜ 修改后: #include #include int main(VOID) { STARTUPINFO si; PROCESS_INFORMA TION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, "c:\\WINDOWS\\system32\\mspaint.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) { fprintf(stderr,"Creat Process Failed"); return -1; } WaitForSingleObject(pi.hProcess,INFINITE); printf("child Complete"); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } 在“命令提示符”窗口运行CL命令产生可执行程序4-1.exe:C:\ >CL 4-1.cpp

实验任务:写出程序的运行结果。 4.正在运行的进程 (2)、编程二下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的API函数GetProcessVersion()与GetVersionEx()的共同作用。确定运行进程的操作系统版本号。阅读该程序并完成实验任务。 #include #include

实验报告四综述

成都信息工程大学遥感图像处理上机报告

1. 实验项目名称 遥感图像光谱增强处理 2. 实验目的 主成分分析:为了去除波段之间多余信息、将多波段的图像信息压缩到比原波段更有效的少数几个转换波段。 主成分逆变换:将主成分变换的图像重新恢复到RGB 彩色空间。缨帽变换:根据多光谱遥感中土壤、植被等信息在多维光谱空间中信息分布结构对图像 做的经验性线性正交变换。图像融合:将多源信道所采集到的关于同一目标的图像数据经过图像处理和计算机技术 等,最大限度的提取各自信道中的有利信息,最后综合成高质量的图像,以提高图像信息的利用率、改善计算机解译精度和可靠性、提升原始图像的空间分辨率和光谱分辨率,利于监测。 3. 实验原理 主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的p 个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统。 缨帽变换又称KT 变换。是一种经验性的多波段图像的线性变换,是Kauth 和Thomas(1976) 在研究MSS 图像反映农作物和植被的生长过程时提出的。在研究过程中他们发现MSS 四个波段组成的四维空间中,植被的光谱数据点呈规律性分布,像缨帽状,因此将这种变换命名为缨帽变换。 图像融合就是通过一种特定算法将两幅或多幅图像合成为一幅新图像。该技术有基本的体系,主要包括的内容有:图像预处理,图像融合算法,图像融合评价,融合结果。图像融合系统的层次划分为:像素层融合、特征层融合、决策层融合,目前绝大多数融合算法研究都集中在这一层次上。 4. 数据来源

python实验3选择结构程序设计

实验3 选择结构程序设计(续) 【实验目的】 1.掌握分支条件语句的使用。 2.掌握分支嵌套语句的使用。 【实验内容】 1.通过Input()函数任意输入三条边长,经过简单的计算后,判断三条边长能否构成三角 形,并确定是类型的三角形,如(等边,等腰,一般三角形)。 a=input("Please input the length of a:") b=input("Please input the length of b:") c=input("Please input the length of c:") if a+b>c and a+c>b and b+c>a: if a==b==c: print "This is an equilateral triangle." if a==b or a==c or b==c: print "This is an isosceles triangle." if a!=b!=c: print "This is a scalene triangle." else: print "These lengths can not form a triangle." 2.密码登录程序。要求:建立一个登录窗口,要求输入帐号和密码。设定用户名 为”zhangshan”,密码为“Python123”;若用户名正确,密码正确,则显示“Zhangshan 先生,欢迎你!”;如果用户名错误,则显示“用户名错误,请重新输入!”;若密码不正确,显示“对不起,密码错误,无法登录!”。 x=raw_input("User:") y=raw_input("Password:") if x=="zhangshan" and y=="Python123": print "Welcome,!" if x=="zhangshan" and y!="Python123": print "Wrong right to log-in." while x!="zhangshan" and y=="Python123": x=raw_input("Wrong user's enter again:") if x=="zhangshan": print "Zhangshan先生,欢迎你!"

操作系统实验四

青岛理工大学课程实验报告

算法描述及实验步骤 功能:共享存储区的附接。从逻辑上将一个共享存储区附接到进程的虚拟地址空间上。用于建立调用进程与由标识符shmid指定的共享内存对象之间的连接。 系统调用格式:virtaddr=shmat(shmid,addr,flag) 该函数使用头文件如下: #include #include #include (8)shmdt( ) 功能:用于断开调用进程与共享内存对象之间的连接,成功时返回0,失败返回-1。 系统调用格式: int shmdt(shmaddr) char *shmaddr;/*采用shmat函数的返回值*/ (9)shmctl( ) 功能:共享存储区的控制,对其状态信息进行读取和修改。用于对已创建的共享内存对象进行查询、设置、删除等操作。 系统调用格式:shmctl(shmid,cmd,buf) 该函数使用头文件如下: #include #include #include 2、步骤: (1)定义进程变量(2)定义两个字符数组 (3)创建管道(4)如果进程创建不成功,则空循环(5)如果子进程创建成功,pid为进程号(6)锁定管道 (7)给Outpipe赋值(8)向管道写入数据 (9)等待读进程读出数据(10)解除管道的锁定 (11)结束进程等待子进程结束(12)从管道中读出数据 (13)显示读出的数据(14)父进程结束 创建jincheng.c 插入文字

调 试 过 程 及 实 验 结 果 运行: 运行后: 总 结 (对实验结果进行分析,问题回答,实验心得体会及改进意见) 虽然对pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、 shmdt()、shmctl()的功能和实现过程有所了解,但是运用还是不熟练,过去没 见过,所以运行了一个简单的程序。 利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信,加深了对 其了解。 (1)管道通信机制,同步的实现过程:当写进程把一定数量的数据写入pipe, 便去睡眠等待,直到读进程取走数据后,再把它唤醒。当读进程读一空pipe 时,也应睡眠等待,直到写进程将数据写入管道后,才将之唤醒,从而实现进 程的同步。 管道通信的特点:A管道是半双工的,数据只能向一个方向流动;需要双方通 信时,需要建立起两个管道;B. 只能用于父子进程或者兄弟进程之间(具有亲 缘关系的进程);C.单独构成一种独立的文件系统:管道对于管道两端的进程而

计算机操作系统实验四

实验三进程与线程 问题: 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位,具有动态性、并发性、独立性、异步性和交互性。然而程序是静态的,并且进程与程序的组成不同,进程=程序+数据+PCB,进程的存在是暂时的,程序的存在是永久的;一个程序可以对应多个进程,一个进程可以包含多个程序。当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,与同一个进程中的其他线程共享程序空间。 本次实验主要的目的是: (1)理解进程的独立空间; (2)加深对进程概念的理解,明确进程和程序的区别; (3)进一步认识并发执行的实质; (4)了解红帽子(Linux)系统中进程通信的基本原理。 (5)理解线程的相关概念。 要求: 1、请查阅资料,掌握进程的概念,同时掌握进程创建和构造的相关知识和线程创建和 构造的相关知识,了解C语言程序编写的相关知识; (1)进程: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内

存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。 (2)进程的创建和构造: 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。新的进程通过克隆旧的程序(当前进程)而建立。fork() 和clone()(对于线程)系统调用可用来建立新的进程。 (3)线程的创建和构造: 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一个进程中可以包含多个线程。 2、理解进程的独立空间的实验内容及步骤

C上机实验报告 实验四

精品文档 实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

实验四 答案 选择结构程序设计

实验四选择结构程序设计答案 实验时间:年月日 【实验步骤】 一、程序调试练习 1、写出下列程序的运行结果: (1)ex4_1.c #include void main() { char ch; printf("input a character:"); ch=getchar(); if(ch>='A' && ch<='Z') ch=ch+32; printf("%c\n",ch); } 具体要求: ①从键盘上输入a,分析程序运行的结果。 ②从键盘上输入A,分析程序运行的结果。 ③从键盘上输入5,分析程序运行的结果。 程序运行结果: ①a ②a ③5 (2)ex4_2.c #include void main() { int x,y,z; printf("input x,y,z"); scanf("%d,%d,%d",&x,&y,&z); if(x

②从键盘上给x、y、z分别输入3,5,2,分析程序运行的结果。 ③从键盘上给x、y、z分别输入-5,-3,2,分析程序运行的结果。 程序运行结果: ①z=2 ②z=3 ③z=0 (3)ex4_3.c #include main() { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d\n",a,b); } 程序运行结果: a=2,b=1 (4)ex4_4.c #include void main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; case 3: a++; b++; } printf("a=%d,b=%d\n",a,b); } 具体要求:

操作系统实验4

操作系统 实验报告 学号: 姓名: 提交日期: 成绩: 内蒙古大学计算机学院

实验四进程管理 一、实验目的 1. 加深对进程概念的理解,明确进程和程序的区别; 2. 进一步认识并发执行的实质; 3. 分析进程争用资源的现象,学习解决进程互斥的方法; 二、实验内容 1. 进程的创建; 2. 进程的控制; 3. 进程并发执行结果分析; 三、主要实验步骤 1. 编制一段程序,使用系统调用fork()创建两个子进程,在此程序运行时,系 统中就有一个父进程和两个子进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,子进程分别显示字符b和子符c。试观察、记录并分析屏幕上进程调度的情况。若在程序中使用系统调用nice()来改变各进程的优先级,会出现什么现象? (1)使用vi创建forktest.c源文件 (2)编写程序

(3)保存程序并退出

(4)使用gcc编译源文件生成可执行文件forktest (5)执行文件,输入./forktest回车 (6)结果分析

2. 编制一段程序要求父进程创建子进程,在子进程中分别用exec函数与system 函数执行“dir -a”。并分析其区别。 3. 分析以下程序框架,修改并上机运行后回答下列问题。 #include #include #include V oid main() {① pid=fork(); ② if(pid==0){ ........ sleep(3); .......... printf("ddd\n"); exit(0); } else { ............ sleep(7); ........... printf("aaa\n"); wait(0); printf("bbb\n"); } printf("ccc\n"); }

西北工业大学-操作系统实验报告-实验四

实验四进程与线程 一、实验目的 (1)理解进程的独立空间; (2)理解线程的相关概念。 二、实验内容与要求 1、查阅资料,掌握进程创建和构造的相关知识和线程创建和构造的相关知识,了解C 语言程序编写的相关知识; 2、理解进程的独立空间的实验内容及步骤 (1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,并输出每次操作后的结果; (2)使用系统调用 fork()创建子进程,观察该变量的变化; (3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变化。 3、理解线程的实验步骤 (1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()中和新线程shared进行循环加/减操作,观察该变量的变化; (3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变化。 4、对整个实验过程进行分析总结,给出详细步骤; (1) 观察上述进程执行结果,并分析原因;

(2) 提交源程序清单,并附加流程图与注释。 三、实验过程 1、进程的与线程的创建和构造 (1).进程的创建和构造 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。 新的进程通过克隆旧的程序(当前进程)而建立。fork() 和 clone()(对于线程)系统调用可用来建立新的进程。 (2)线程的创建和构造 线程也称做轻量级进程。就像进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与独立的进程相比,进程中的线程之间的独立程度要小。它们共享内存、文件句柄和其他每个进程应有的状态。 线程的出现也并不是为了取代进程,而是对进程的功能作了扩展。进程可以支持多个线程,它们看似同时执行,但相互之间并不同步。一个进程中的多个线程共享相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。尽管这让线程之间共享信息变得更容易,但你必须小心,确保它们不会妨碍同一进程里的其他线程。 线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序的流控制,但与进程不同的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要比进程小得多,正因如此,线程也被称为轻型进程(light-weight process)。一个进程中可以包含多个线程。 2、理解进程的独立空间 流程图如下所示:

操作系统实验四存储管理

宁德师范学院计算机系 实验报告 (2014—2015学年第二学期) 课程名称操作系统 实验名称实验四存储管理 专业计算机科学与技术(非师)年级2012级 学号B2012102147 姓名王秋指导教师王远帆 实验日期2015-05-20

2) 右键单击任务栏以启动“任务管理器”。 3) 在“Windows任务管理器”对话框中选定“进程”选项卡。 4) 向下滚动在系统上运行的进程列表,查找想要监视的应用程序。 请在表4-3中记录: 表4-3 实验记录 映像名称PID CPU CPU时间内存使用 WINWORD.EXE 5160 00 0:00:10 22772k 图1 word运行情况 “内存使用”列显示了该应用程序的一个实例正在使用的内存数量。 5) 启动应用程序的另一个实例并观察它的内存需求。 请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况: 第二个实例占用内存22772K,比第一个实例占用的内存大很多 4:未分页合并内存。 估算未分页合并内存大小的最简单方法是使用“任务管理器”。未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。 总数(K) :________220___________ 分页数:__________167___________ 未分页(K) :_________34__________

图2核心内存 还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。操作步骤如下: 1) 单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。 2) 在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。 返回Windows “任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。 仍以刚才打开观察的应用程序(例如Word) 为例,请在表4-4中记录: 表4-4 实验记录 映像名称PID 内存使用页面缓冲池非页面缓冲池 WINWORD.EXE 2964 37488 951 42 从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。拥有的物理内存越多,未分页合并内存就越多。但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。 5:提高分页性能。 在Windows 2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys) 。用户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。 虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最佳位置。要想从分页获得最佳性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。 1) 在“开始”菜单中单击“设置”–“控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。 2) 在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。 如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。这是因为:Windows 2000最多可以支持在多个驱动器上分布的16个独立的分页文件。为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。 请在表4-5中记录: 表4-5 实验记录

相关文档
相关文档 最新文档