当前位置:文档之家› DDS设计报告带程序

DDS设计报告带程序

DDS设计报告带程序
DDS设计报告带程序

电子线路课程设计直接数字频率合成计

摘要

本实验通过使用QuartusⅡ7.1软件,并结合verilog语言的知识设计直接频率合成器,简

212?类型的芯片实现,基准频率为1MHz,称DDS。DDS中的正余弦波形存储器模块用10

利用实验箱上的D/A转换器件将ROM输出的数字信号转换为模拟信号,能够通过示波器观察到正、余弦两路波形。除此之外,本实验还实现了多种波形任意切换,0-200kHz频率任意可调,并在数码管上显示生成的波形频率等附加功能。

关键词

QuartusII,直接数字频率合成计(DDS),Verilog HDL,状态机

Abstract

In this study, by using QuartusⅡ7.1 software, combined with the knowledge of verilog-language, we designed the direct frequency synthesizer, also called DDS. The type of sine

212?. And the reference frequency is 1MHz. and cosine waveform memory module in DDS is 10

Passing through the D/A experimental box, the digital signal conversion device converts the output of the ROM to an analog signal. We can observe two waveform on the screen of oscilloscope. In addition, this experiment also implements an arbitrary waveform switching, a 0-200kHz arbitrary frequency switching, and the resulting waveform frequency displaying.

Key words

QuartusⅡ, Direct frequency synthesizer , Verilog HDL, State machine

目录

一、设计要求 (3)

二、分层设计及其分工 (3)

三、直接数字频率合成计顶层设计 (4)

四、各子模块设计原理及程序 (5)

4.1 分频电路 (5)

4.2 相位累加器和数据锁存器器电路 (6)

4.3 波形存储器ROM的生成 (6)

4.4 三角波及方波输出电路 (7)

4.5 波形的综合输出电路 (8)

4.6 状态机控制电路 (8)

4.7 状态机专用消颤电路 (10)

4.8 LED频率显示电路 (11)

五、程序下载、仿真与调试 (13)

5.1 管脚设定 (13)

5.2 修改Device&Pins Options 及重新编译 (14)

5.3 程序下载及运行结果 (15)

六、实验中遇到的问题及其应对方案 (15)

七、实验总结与感想 (15)

八、参考文献 (16)

一、设计要求

1.1 设计基本部分要求

①利用QuartusII 软件和SmartSOPC 试验箱实现DDS 的设计;

②DDS 中的波形存储器模块用Altera 公司的CycloneIII 系列FPGA 芯片中的ROM 实现,

ROM 结构配置成10212

?类型;

③具体参数要求:频率控制字K 取4位;基准频率

MHz f c 1=,由实验板上的系统时钟分频得到;

④系统具有使能功能;

⑤利用实验箱上的D/A 转换器件将ROM 输出的数字信号转换为模拟信号,能够通过示波器观察到正、余弦两路波形;

⑥通过开关输入DDS 的频率和相位控制字,并能用示波器观察加以验证;

1.2 设计提高部分要求

①通过按键(实验箱上的Si )输入DDS 的频率和相位控制字,以扩大频率控制和相位控制的范围;(注意:按键后有消颤电路)

②在数码管上显示生成的波形频率;

③设计能输出多种波形(三角波、锯齿波、方波等)的多功能波形发生器; ④充分考虑ROM 结构及正弦函数的特点,进行合理的配置,提高计算精度; ⑤基于DDS 的AM 调制器的设计; ⑥自己添加其他功能。

二、分层设计及其分工

2.1 分层设计

为了实现直接数字频率合成计,我们采用了Verilog 语言描述其功能,如图2.1所示,为本实验的层次分析设计结构图。

图2.1 直接数字频率合成计的层次模型

①原始分频电路将系统提供的48MHz晶振频率分为1MHz的基础频率,是所有子模块中clk的基础。

②状态机可以实现复位、波形切换、0-200kHz频率任意可调的功能。

③LED电路通过对频率与相位控制字的相对数量计算,实现了显示频率的功能

2.2 分工情况

整个直接数字频率合成器设计由郑蕤荻和我(徐洁)共同完成,既有明确的分工以提高效率,也有互相帮助,互相指出错误的合作过程,以下为我们两个人明确分工的情况:***:DDS频率发生器顶层设计、状态机控制电路、LED显示电路;

**:三种波形的生成、状态机专用消颤电路、相位累加器及锁存器、分频电路。.

三、直接数字频率合成计顶层设计

DDS为整个直接数字频率合成计的顶层设计,它直接或间接的调用了所有的子程序,实现了将整个底层程序贯穿联接的功能,规定了直接数字频率合成计的输入和输出。输入有:EP3C25F324C8的自带晶振频率48MHz,键入值;输出有:波形数据,LED管的位码和段码,接地信号。verilog语言程序如下:

module

dds(_48MHz,keyin,wavevalue,wavevalue2,Segout,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8,GND, GND2,clk);

input _48MHz;

output clk;

output GND,GND2;

input[3:0]keyin;

output [9:0]wavevalue,wavevalue2;

output[6:0]Segout;

output SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8; //select LED

wire[11:0]address;

wire[1:0]wavemode;

wire[23:0]length;

wire [9:0]wavevalue,wavevalue2;

wire [3:0] keyOUT;

wire _48MHz,clk;

supply0 GND,GND2;

key S0(clk,keyin,keyOUT);

Original_Frequency S1(_48MHz,clk);

control S2(clk,keyOUT,wavemode,length);

counter S3(clk,length,address);

selection S4(clk,address,wavemode,wavevalue);

cos_rom S5(address,clk,wavevalue2);

shumaguan S6(clk,length,Segout,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);

endmodule

四、各子模块设计原理及程序

4.1 分频电路

分频模块是为了实现EP3C25F324C8的自带晶振频率48MHz,往1MHz的分频,主体思想是使用一个模48计数器直接取其最高位,下面是该电路的verilog程序:

//Original_Frequency.v

module Original_Frequency (_48MHz,_1MHz);

input _48MHz;

output _1MHz;

reg [3:0] CntH,CntL;

wire _1MHz;

always@(posedge _48MHz)

begin

if ((CntH>4)||(CntL>9)||(CntH==4)&&(CntL>=7))

{CntH,CntL}<=8'h00;

else if ((CntH==4)&&(CntL<7))

begin CntH<=CntH; CntL<=CntL+1'b1;end

else if (CntL==9)

begin CntH<=CntH+1'b1; CntL<=4'b0000;end

else

begin CntH<=CntH; CntL<=CntL+1'b1;end

end

assign _1MHz=CntH[2];

endmodule

分频电路的仿真波形图如下:

4.2 相位累加器和数据锁存器器电路

相位累加器是DDS系统设计的核心,它决定着频率的范围和分辨率。本设计中采用的是24位的二进制累加器和寄存器,其中累加器与寄存器在同一个模块中,并取锁存数据的高十位作为查表的地址值。V erilog程序如下:

//counter.v

module counter(clk,fre_word,address);

input clk;

input [23:0]fre_word;

output reg [11:0]address;

reg [23:0] phaseadder;

always@(posedge clk)

begin

phaseadder= phaseadder+fre_word;

address= phaseadder[23:12];

end

endmodule

4.3 波形存储器ROM的生成

在我们的程序中,波形存储器ROM是由VC++程序生成的,以*.mif文件的格式存放在电脑中,并可以被QuartusII调用。程序及其原理简介如下:

#include

#include"math.h"

void main ()

{ int s;

int i;

FILE* fp;

fp=fopen("4096.mif", "w+"); //新建4096.mif文件,只写模式

fprintf (fp,"- - MAX+ plus - generated Memory Initialization File\n");

fprintf (fp,"- - By Di and Jie\n\n\n\n\n"); //作者

fprintf (fp,"WIDTH=10;\n\n"); //定义字宽

fprintf (fp,"DEPTH=4096;\n\n"); //定义内存容量

fprintf (fp,"ADDRESS_RADIX=HEX;\n\n"); //定义地址进制

fprintf (fp,"DATA_RADIX=HEX;\n\n"); //定义内容进制

fprintf (fp,"CONTENT BEGIN\n"); //内存开始

for (i=0;i<4096;i++)

{s=512+511*sin(i*atan(1.0)*8/4096); //512和511是为了最大的利用sinx小数点后面的有效内容,并将其调节为x轴上方的无符号数,4*atan(1.0)为π,再乘以2i除以4096是将sin的一个周期分为4096个值。

fprintf(fp,"% x\t:\t%x;\n",i,s);} //Quartus调用*.mif文件时所需满足的格式fprintf(fp,"END;\n"); // 内存结束

fclose (fp);

}

余弦波文件的生成与正弦波文件的生成是一样的,只是将公式改为

{s=512+511*sin(i*atan(1.0)*8/4096+2*atan(1.0));当然,这样做只是为了简便编程者的操作,我们也可以将address的值加上4096/4之后进行寻址,便可以减少内存的使用。

4.4 三角波及方波输出电路

由于方波只有高、低电平两种状态,因此只需要在一个周期时间的中间位置翻转电平就可以形成方波。程序及其原理简介如下:

//fangbo.v

module fangbo(clk,enable,address,qsquare);

input clk;

input enable;

input [11:0]address;

output reg [9:0] qsquare;

always@(posedge clk)

if (!enable) qsquare=10'b00_0000_0000;

else begin

if (address<=12'b0111_1111_1111)

qsquare[9:0]=10'b11_1111_1111; //利用address在中间位置实现翻转else qsquare [9:0]=10'b00_0000_0000;

end

endmodule

三角波则是先判断出address的中间状态,然后将address或address的非赋给相应的输出,即可得到我们所需的三角波。其verilog语言及原理简介如下:

//sanjiao.v

module sanjiao (clk,enable,address,qtriangle);

input clk,enable;

input [11:0]address;

output [9:0] qtriangle;

reg [9:0] qtriangle;

always@(posedge clk)

if (! enable) qtriangle=10'b00_0000_0000;

else begin

if (address<=12'b0111_1111_1111)

qtriangle[9:0]= address[10:1];

else qtriangle[9:0]=~address [10:1]; //address的非与address一个递减一个递增,正好形成了三角波的一个周期。

end

endmodule

4.5 波形的综合输出电路

有了三种波形,就要在特定时刻进行选择,在每一个时刻只能有一种波输出,在示波器上显示,所以用case语句写了一个选择性输出,程序如下:

//selection.v

module selection (clk,address,wavemode,wavevalue);

input clk;

input [1:0]wavemode;

input [11:0]address;

output [9:0]wavevalue;

reg [9:0] wavevalue;

wire [9:0]wavevalue1,wavevalue2,wavevalue3;

wire [9:0]q;

supply1 Vdd;

fangbo U0(clk,Vdd,address,wavevalue2);

sanjiao U1(clk,Vdd,address,wavevalue3);

sin_rom U2(address,clk,q);

assign wavevalue1=q;

always@(posedge clk)

case (wavemode)

2'b01: wavevalue= wavevalue1;

2'b10: wavevalue= wavevalue2;

2'b11: wavevalue= wavevalue3;

endcase

endmodule

4.6 状态机控制电路

状态机控制电路主要包括按键模块和工作模块两个部分,由于按键的有限性,状态机的利用大大的提高开关的利用率,使得我们0-200kHz频率任意切换的功能得以实现。其verilog 程序如下,思路清晰,使用简便,将在实验结果中具体介绍,也是本实验的亮点所在。

//control.v

module control(clk,keyin,wavemode,length);

input[3:0]keyin;

input clk;

output reg [1:0]wavemode;

output reg[23:0]length;

reg [23:0] fredata;

reg[3:0]key;

integer single_state= 1,single_frc= 1;

always@(posedge clk)

begin

key=keyin;

case(key)

4'b0001:begin wavemode= 2'b01;length= 24'd17;end //key1-reset

4'b0010:begin case (single_state) //key2-wavemode

1: wavemode= 2'b01; //sin

2: wavemode= 2'b10; //fangbo

3: wavemode= 2'b11; //sanjiao

default:begin wavemode= 2'b01; single_state= 0; end

endcase

single_state= single_state+1;

end

4'b0100:begin case(single_frc) //key3-frequency dangwei

1: length= 24'd17; //1Hz~100Hz

2: length= 24'd1678; //100Hz~500Hz

3: length= 24'd8389; //500Hz~1kHz

4: length= 24'd16777; //1kHz~5kHz

5: length= 42'd83886; //5kHz~10kHz

6: length= 24'd167772; //10kHz~50kHz

7: length= 24'd838861; //50kHz~200kHz

default: begin length= 24'd671088;single_frc= 0;end

endcase

single_frc= single_frc+1;

end

4'b1000:begin case(single_frc) //key4-frequency bujin

1: length= length+24'd16777; //1kHz

2: length= length+24'd17; //1Hz

3: length= length+24'd168; //10Hz

4: length= length+24'd839; //50Hz

5: length= length+24'd1678; //100Hz

6: length= length+24'd8389; //500Hz

7: length= length+24'd16777; //1kHz

8: length= length+24'd83886; //5kHz

default: length= length+24'd0; //0

endcase

end

endcase

end

endmodule

4.7 状态机专用消颤电路

消颤电路时经常用到的一种电路,普通消颤电路以D触发器锁存并在时钟上升沿赋值为基础,原理简便,但并不适用于状态机电路。状态机电路会在每一个时钟上升沿检测开关的0、1状态,如果高电平时间长(大于1us),将会导致其测试出无数个高电平而使得输出只能是循环的任意状态,或累加的最高状态。

状态机专用消颤电路,既继承了普通消颤电路忽略开关的颤的的功能,又使得开关按下后每0.5s才产生一个1us的微小脉冲,相当于状态机切换一个状态,使得状态机的功能得以全部实现。以下为状态机专用消颤电路的verilog程序及原理简介:

//key.v

module key(clk,keyIN,keyOUT);

input clk;

input[3:0]keyIN;

output[3:0]keyOUT;

reg [3:0] keyOUT;

reg[19:0] scan;

wire [3:0]keyIN;

always@(posedge clk)

if(scan==20'h7A120) //每50000个系统脉冲(合为0.5s)的持续1可输出一个1us的脉冲begin keyOUT<=keyIN; scan<=scan+1; end

else if(scan==20'h7A121)

begin keyOUT<=0; scan<=0; end

else

begin

if((keyIN[0]==1)||(keyIN[1]==1)||(keyIN[2]==1)||(keyIN[3]==1))

scan<=scan+1'b1;

else begin keyOUT<=0; scan<=0; end

end

endmodule

由于仿真时不可能在1MHz的系统时钟下输出一个0.5s量级的才出现的脉冲波,所以仿真时,将50000个脉冲改为100个(即0.1ms),将栅格设为0.01ms,仿真波形如下:

4.8 LED频率显示电路

LED电路利用频率字就分辨率,对每一个频率的个、十、百、千、万及以上共八位进行了计算,并将计算结果通过译码管显示电路输出到七段译码管上。Verilog程序及原理简介如下:

module shumaguan(clk,length,Segout,SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8);//changed

input clk;

output[6:0]Segout; // 7-segment code output,segout[6...0]-gfedcba

output SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8; //select LED

input [24:0] length;

reg [24:0] temp= 24'd596046;

reg [45:0] AA;

reg [23:0] fre;

reg [3:0] A1,A2,A3,A4,A5,A6,A7,A8;

reg SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8;

reg [6:0]Segout;

reg [2:0]Count; //internal 3-bit counter

reg [3:0]Seg_in;

always@(posedge clk)

begin

AA= length*temp;

fre= AA/24'd1000000;

A1=(fre/28'd1*******); //百万

A2=(fre/24'd1000000)%4'd10; //十万

A3=(fre/24'd100000)%4'd10; //万位

A4=(fre/24'd10000)%4'd10; //千位

A5=(fre/24'd1000)%4'd10; //百位

A6=(fre/24'd100)%4'd10; //十位

A7=(fre/24'd10)%4'd10; //个位

A8= fre%4'd10;

end

always@(posedge clk) //clk=1kHz

case(Count)

3'b000:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b01111111; //LED0 display Seg_in=A1[3:0];

Count=Count+1; //Count=1

end

3'b001:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b10111111; //LED1 display Seg_in=A2[3:0];

Count=Count+1; //Count=2

end

3'b010:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b11011111; //LED2 display

Seg_in=A3[3:0];

Count=Count+1; //Count=3

end

3'b011: begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b11101111; //LED3 display Seg_in=A4[3:0];

Count=Count+1; //Count=4

end

3'b100:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b11110111; //LED4 display Seg_in=A5[3:0];

Count=Count+1; //Count=5

end

3'b101:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b11111011; //LED5 display Seg_in=A6[3:0];

Count=Count+1; //Count=6

end

3'b110:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b11111101; //LED6 display Seg_in=A7[3:0];

Count=Count+1; //Count=7

end

3'b111:begin {SG1,SG2,SG3,SG4,SG5,SG6,SG7,SG8}=8'b11111110; //LED7 display Seg_in=A8[3:0];

Count=Count+1; //Count=0

end

endcase

// BCD Code=>7 Segment Code(a~g)

always@(Seg_in)

case(Seg_in)

//gfedcba

4'd0:Segout=7'b1000000;

4'd1:Segout=7'b1111001;

4'd2:Segout=7'b0100100;

4'd3:Segout=7'b0110000;

4'd4:Segout=7'b0011001;

4'd5:Segout=7'b0010010;

4'd6:Segout=7'b0000010;

4'd7:Segout=7'b1111000;

4'd8:Segout=7'b0000000;

4'd9:Segout=7'b0010000;

default: Segout= 7'b0100011;

endcase

endmodule

五、程序下载、仿真与调试

编译好的程序经过管脚设定后即可下载到FPGA 芯片进行调试。

5.1 管脚设定

具体的管脚设定如下:

5.2 修改Device&Pins Options 及重新

编译管脚分配保存好后,选择Assignments 选项中的Device,点击“Device and Pin Option…”,选择“Unused Pins”页中“Reserve all unused pins:”选项中的“As input tri-stated”选项,将未用引脚设为三态输入,并对整个电路进行重新编译。

5.3 程序下载及运行结果

编译点击工具栏上的(Programmer)按钮,选择要下载的文件,点击“Start”即可下载程序。下载完毕即可在模拟试验箱上观察结果并进行调试。

程序在多次试验后终于成功,按键总结如图5-3-1所示,所有按键功能均可实现。

图5-3-1 按键设置表格

六、实验中遇到的问题及其应对方案

问题①:按键操作不正常,切换不到想要的状态。

问题分析:状态机电路会在每一个时钟上升沿检测开关的0、1状态,如果高电平时间长(大于1us),将会导致其测试出无数个高电平而使得输出只能是循环的任意状态,或累加的最高状态。

解决方案:添加一个状态机专用的消颤电路

问题②:做完消颤电路接上去之后,整个按键都没有用,而单独仿真又是完全正确的。

问题分析:一定是调用时候的联接出了问题。

解决方案:在主程序中加入一个wire型变量的keyOUT,否则调用时变量数据不能线性传送。

七、实验总结与感想

直接数字频率合成器的波形生成还是一个比较基础的设计过程,我主要学到了ROM的调用,和生成*.mif文件,使用address寻址并从ROM中输出需要的内容。这个实验,我们研究的重点在于用状态机控制各种想要的输出,虽然研究的过程中遇到了各种问题,但是我们都一一解决了,其中我做的状态机专用消颤部分,就是先画出想要得到的波形,然后用人类的思维开始分析如何得出这样的波形,再转换为机器语言,这个过程虽然是比较困难的,但是也让我感受到了成功的喜悦。在我看来,实验可以学到的内容,是远大于单纯的理论学习的,是一种将知识综合利用,总结提升的最好方式。

八、参考文献

[1]《Veriloge HDL 数字系统设计与验证》——乔庐峰.电子工业出版社

[2]《EDA设计实验指导书》——南京理工大学电子技术中心

[3]《Veriloge 编程艺术》——魏家明.电子工业出版社

程序设计基础实验报告

《程序设计基础》 实验报告 专业班级: 姓名: 学号:

实验一 面向过程的简单程序设计 1.实验目的要求 (1) 使用C++语言编写简单的计算机程序,掌握C++程序从编辑、编译到运行的全过程, 初步了解C++程序的特点。 (2) 掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运 算符和表达式的使用。 (3) 掌握赋值语句的使用。 (4) 掌握数据的输入输出方法。 2.实验内容 (1)设计简单程序,分别计算下列表达式,式中变量由键盘输入,输出表达式的值。 <1> d c b a x -++ <2> 11 11+++x x <3> sinX+cosX+tan -1 X <4> e x+y +e x-y <5> log 10(1+21x +) <6> 22b a -+??b a - (其中??a 表示取不大于a 的最大整数)。 <1> #include using namespace std; int main() { float x,a,b,c,d,e; cin>>x>>a>>b>>c>>d; e=x+(a+b)/(c-d); cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=sqrt(1+1/(x+1/(x+1)));

cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=sin(x)+cos(x)+1/tan(x); cout< #include #include using namespace std; int main() { double x,y,z; cin>>x>>y; z=exp(x+y)+exp(x-y); cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=log(1+sqrt(1+x*x)); cout< #include #include using namespace std; int main()

程序设计实验报告

学生实验报告 院系:测绘学院 专业班级:测绘13级3班 学号:2013305517 学生姓名:王泽 指导教师:郭辉老师 2016年05月20日

安徽理工大学实验报告 实验课程名称:数据结构与软件开发上机实验 开课院系及实验室:测绘学院红楼二楼机房 实验1 编程基本知识练习 实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义、VB 语言中子过程与函数的定义以及文本文件的读写等知识。 实验内容: 1)变量的定义动态数组的定义与应用; 2)矩阵的加、减、乘运算(定义Sub()子过程或Function()来实现); 3)数据文件的建立、数据的读取与写入。 实验步骤: 1.编辑界面 1.1 打开VB 编程工具,进入编程主界面。

1.2 在窗体上新建“读入数据”和“输出数据”两个按钮。 1.3 双击“窗体”进入代码输入界面,进行代码编辑。 2.用VB 编写的源代码 2.1 矩阵基本运算源码详见附录一。 (1)两矩阵相加 (2)两矩阵相减 (3)矩阵转置 (4)两矩阵相乘 (5)矩阵求逆 2.2 文本文件(本实验中data.txt)的读取源代码 (1)建立文本文件并输入数据 在桌面上新建一“data.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\data.txt”)。输入以下内容: 6,7,4,0.005 A,35.418 B,45.712 C,25.270

D,24.678 在桌面上新建一“result.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\result.txt”)。(2)从文本文件中读数据 Dim linedata as string, m_GaochaN as integer,m_Pnumber as integer,m_knPnumber as integer,M as Double,k1 as integer 'linedata 为存储文本文件一行信息的字符串变量 Dim a() as String,H() as Double 'a()为存储点名,H()存储高程 Open“C:\Users\ WH\Desktop\练习\data.txt”For Input As #1 Line Input #1, linedata k = Split(linedata, ",") m_GaochaN = Val(k(0)) m_Pnumber = Val(k(1)) m_knPnumber = Val(k(2)) M = CDbl(k(3)) For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ",") a(k1)= k(0) GetstationNumber (a) H(k1) = CDbl(k(1)) Next Close #1 (3)将读入点名存储到点名数组中,且返回该点名所对应编号 Function GetstationNumber(name As String) Dim i As Integer For i = 1 To m_Pnumber If P_Name(i) <> "" Then '将待查点名与已经存入点名数组的点比较 If P_Name(i) = name Then GetstationNumber = i Exit For End If Else '待查点是新的点名,将新点名放到P_Name 数组中 P_Name(i) = name GetstationNumber = i Exit For End If Next i End Function (4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中) Open“C:\Users\ WH\Desktop\ 练习\result.txt” For Output As #1 outstring = outstring + str(m_GaochaN) +","

大学程序设计基础实验报告 (2)

**大学程序设计基础实验报告 实验名称:实验三分支结构 实验目的: 1、掌握IF-ELSE语句使用。 2、掌握ELSE-IF语句使用。 3、熟悉SWITCH语句使用。 实验内容: 在本地电脑中新建一个文件夹,用于存放C程序,文件夹的名字要求是“学号姓名-实验序号”,如E:\ 1920115555张三-03。启动C-Free,完成如下各题。 1、编程题:输入参数a,b,c,求一元二次方程ax2+bx+c=0的根(①a、b、c都为0,②a 和b为0,c不为0,③a为0,b不为0,c任意,④a不为0,且a、b、c满足b2-4ac ≥0,⑤a不为0,且a、b、c满足b2-4ac<0)。 2、编程题:输入职工的月薪salary,计算并输出应缴纳的个人所得税tax。tax=rate * (salary –850),rate的计算方式如下: 当salary <= 850,则rate = 0; 当850 < salary <= 1350,则rate = 5%; 当1350 < salary <= 2850,则rate = 10%; 当2850 < salary <= 5850,则rate = 15%; 当salary > 5850,则rate = 20%;。 3、编程题:根据输入的3个边长a、b、c,判断它们是否能构成三角形,若能构成三 角形,则进一步判断此三角形是哪种类型的三角形(等边三角形、等腰三角形、直角三角形和一般三角形。等腰直角算作等腰)。 4、编程题:输入一个形式如“操作数运算符操作数”的表达式,对2个整数进行乘、 除或求余运算。【请分别用if语句和switch语句实现此题功能】 上交作业的方法: 1.将程序代码及注释和运行程序的窗口复制到实验结果下方对应的题号上,并把这 次实验上机操作中遇到的问题及解决方法、心得等填好完成实验报告。 2.保存以上所有按要求已调试通过,并形成.c(或.cpp)和.exe文件到以自己的“学 号姓名-03”命名的文件夹中,并将以自己的“学号姓名”命名的文件夹压缩后上 交到ftp://10.172.250.252:1161中的“作业上传”文件夹下的“报告上交02”文件 夹下的子文件夹“源文件压缩上交”中,同时把以“学号姓名-03”命名的word 文档上交到“报告上交03”文件夹下的另一子文件夹“word文件上交”中。 特别提醒:每次上传的文件名一定要是“学号姓名-实验序号. doc”(如1720115555张

程序设计基础实践报告

福建师范大学闽南科技学 院 程序设计基础实践报告 题目职工工资信息管理系统 学生姓名陈显泽 学院信息科学及工程学院 专业班级土木工程1班 完成时间 2017.4.20 指导教师褚若波

目录 一、课程设计目的和要求................................... 二、课程设计基本内容.................................... 三、程序功能简介........................................ 四、主体内容............................................ 4.1 设计分析...................................... 4.2 程序结构...................................... 4.3 模块的功能及程序说明.......................... 4.4 相关模块源程序................................ 4.5 操作方法(流程)................................ 4.6 试验结果(包括输入数据和输出结果)............. 4.7 设计体会...................................... 4.8 参考文献...................................... 五、用户使用说明........................................ 六、对本设计过程及方法、手段的改进建议..................

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

C语言程序设计基础实验报告6【VIP专享】

实验6 数组 一、实验目的 1、掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2、掌握字符数组和字符串函数的使用; 3、掌握与数组有关的算法(特别是排序算法)。 二、实验内容和步骤 编程序并上机调试运行。 1、以下给定程序MODI1.C的功能是: 求一维数组a中所有元素的平均值, 结果保留两位小数。例如,当一维数组a中的元素为:10, 4, 2, 7, 3, 12, 5, 34, 5, 9时,程序的输出应为:The aver is: 9.10 程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。 注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构! #include #include void main() { int a[10]={10,4,2,7,3,12,5,34,5,9}, i; /************found************/ /************found************/ s = a[0]; for ( i=1; i<10; i++) s += a[i]; aver = s / i; printf("The aver is: %.2f\n", aver); } 2、以下给定程序MODI1.C的功能是:求二维数组a中的最小值。 例如,当二维数组a中的元素为: 4 2 34 7 3 12 5 6 5 程序的输出应为:The min is: 2 。 程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。 注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构! #include #include void main() { int a[3][3]={4,2,34,7,3,12,5,6,5}, i, j, min; clrscr();

最新大学生c语言程序设计实训报告总结

大学生c语言程序设计实训报告总结 C语言是在国内外广泛使用的一种计算机语言。其语言功能丰富、表达能力强、使用灵活方便,,小编整理了大学生c语言程序设计实训报告总结,希望能帮助到您。 大学生c语言程序设计实训报告总结一 C语言是在国内外广泛使用的一种计算机语言。其语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。其功能强大,不仅用在计算机上广泛用在电子,机械等方面上,而且,所有的windows,Unix,Linux,Mac,os/2,无一例外,哪一个不是C语言写的?很多新型的语言如,C++,Java,C#,J#,perl...都是衍生自C语言。掌握了C语言,可以说你就掌握了很多门语言。 学习C程序这门课一年了,这是我们学的第一门专业课,在大学里C语言不但是计算机专业的必修课程而且也是非计算机专业学习计算机基础的一门必修课程。所以作为我这个计算机专业的学生来说当然十分重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个年的学习,使我由初步掌握简单的应试知识到完成高难度的深入编程,如我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。 在学习一年C语言的过程中我也在慢慢探索怎样才能学好C语言,

并总结了一点经验: 要了解C语言就要从语法规为基础来学习起,首先要是要了解它的结构,比如变量,首先要了解变量的定义方式(格式),其意义是什么(定义变量有什么用);其次就是要我要怎么去运用它(我要用什么型式去应用它)。在C语言的命令行中所有的语句都是有它自己的一定格式和形式出现在我们面前,所以我们在学习某种语句或命令时你首先要了解的就是它的规则是什么、有什么用、怎么实现等。这些都是语法基础也是C语言的基础如果把它们都了解很好了,那么你编起程序来就很得心应手了。比如说IFELSE和SWITCHCASE这两种条件语句都是用来判断执行功能的,那我要什么时侯用IF什么时侯用SWITCH 呢?如果你很好地了解它们的结构和作用的话那么就知道:若它的条件分支是多个而且条件的值是整数或是一个字符值时就会选SWITCH 而不会选IF。因为如果条件分支太多时要用IF语句,这样一定会出现IF的嵌套,如果IF的嵌套越多时程序的开销就会随着增大,这样对整个程序的运行效率就大在降底。而SWITCH就不同,它只要比较一次就可以找出条件的结果比起嵌套IF它的效率就大大的提高了很多。不过SWITCH也有它的约束条件,就是它的条件值一定要是一个整型数或是一个字符值,所以碰到它不能解决的问题时我们也会通常使用IF语句,毕竟IF语句它使用起来也比较方便用的范围也比较广。所以说了解语法规则是很重要的,如果没有一个良好的语法基础是很难编出一个好的程序!学习好基础后我们就可以开始来编程了。 大学生c语言程序设计实训报告总结二

北京理工大学汇编语言实验报告实验五 子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句; 过程名 PROC [near/far] 过程体 RET 过程名 ENDP 2.子程序结构形式 一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回 在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。 一般利用堆栈实现现场保护和恢复的格式: 过程名PROC [NEAR/FAR]

实验二M精编B程序设计含实验报告

实验二M精编B程序设 计含实验报告 The following text is amended on 12 November 2020.

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器 (Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因c b a 、、的不同取值而定),这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 21 21 421 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. y

C语言程序设计基础实验报告3【VIP专享】

实验3 逻辑结构程序设计一、实验目的 1、了解C 语言表示逻辑量的方法(以0代表“假”,以非0代表“真” )。 2、学会正确使用逻辑运算符和逻辑表达式。 3、熟练掌握if 语句和switch 语句。 4、结合程序掌握一些简单的算法。 5、学习调试程序。 二、实验内容和步骤 本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。 1、改错题。给定程序MODI1.C 的功能是:对于如下函数: 用scanf 函数输入x 的值,求y 值。/* MODI1.C */#include void main() { int x, y; /***********found***********/ scanf ("%d", &x);if ( x < 1 )y = x; /***********found***********/else if ( 1 <=x&& x < 10 ) y = 2*x -1 ; else y = 3*x -11; printf("y = %d\n", y ); } 程序中有两处错误,错误都在提示行: /***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。注意:不要随意改动程序,不得增行或删行,也不得更改程序的结构! 修改程序后,运行程序,输入x 的值(分别为x<1、1≤x<10、x ≥10三种情况,如0.5、8、15),检查输 出的y 值是否正确。 ?? ? ??≥-<≤-<=)10(113) 101(12)1(x x x x x x y

2、从键盘输入某学生的考试成绩,要求输出成绩等级A 、B 、C 、D 、E 。学生的成绩可分成5个等级,90- 100分为A 级,80-89分为B 级,70-79分为C 级,60-69分为D 级,0-59分为E 级。要求在输入负数时, 给出错误提示。 ① 事先编好程序,要求分别用if 语句和switch 语句实现。运行程序,并检查结果是否正确。 ② 再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。修改程序,使之 能正确处理任何数据。当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。 3、给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位 数字,例如:原数据为321,应输出123。(BX4.6) 分别用1位正整数、2位正整数、3位正整数、4位正整数、5位正整数作为测试数据进行测试。 除此之外,程序还应当对不合法的输入作必要的处理。例如:当输入负数时或输入的数超过5位(如123 456)数时。4、输入3 个整数,要求按由小到大的顺序输出。

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

C程序设计上实验报告(完整版)

C语言程序设计上机实验报告 学院:机械工程学院 班级:机自161213 姓名:刘昊 学号:20162181310 实验时间:2017年3月6号 任课老师:张锐

C语言程序设计上机实验报告 实验一 一、实验名称: C程序的运行环境和运行C程序的方法 二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C 程序 三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。 四、源程序代码: 代码1: 运行结果1:

程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。 代码2: 运行结果2:

程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3: 运行结果3:

程序分析3: 使用if语句进行判断。 五.实验总结 C语言程序设计上机实验报告 实验二 一、实验名称:顺序结构程序设计 二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法, 熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。 三、实验内容: (1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。 (3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。 (4). 编写程序,实现单字符getchar和putchar输入输出。 (5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。 四、源程序代码 代码1: 运行结果1: 程序分析1:

C++程序设计实验报告5

《程序设计基础》 实验报告 学号:2016211990 姓名:王贯东 班级:16-计算机科学与技术-1班

学院:计算机与信息学院 实验五指针 1.实验目的要求 (1)掌握指针的概念,学会定义和使用指针变量。 (2)学会使用数组指针和指向数组的指针变量。 (3)学会使用字符串指针和指向字符串的指针变量。 (4)了解指向指针的指针的概念以及其使用方法。 (5)掌握指针、引用、数组做函数参数的传递机制。 (6)*学会使用指向函数的指针变量。 2.实验设备 Visual C++ 6.0 3.实验内容 (1)阅读下面程序,写出其运行结果。

<1> #include sub ( int x , int y , int *z ) { *z = y – x ; } void main( ) { int a,b,c; sub( 10 , 5 , &a ) ; sub( 7, a, &b ) ; sub( a, b, &c ) ; cout << a <<‘,’<< b <<‘,’<< c << endl ; } 解:输出-5,-12,-7 <2> #include #include void main()

{ int stre ( char[ ] ) ; char str [ 10 ] , *p = str ; gets ( p ) ; cout << stre ( p ) << endl ; } int stre ( char str[ ] ) { int num = 0 ; while( * ( str + num ) != ’\0’ ) num ++ ; return ( num ) ; } 解:题目库函数少了 。该正后,输入1234,输出4 (2)编写程序实现下列问题的求解。 (1)输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大的顺序输出。 #include using namespace std; int turn (int *p1,int *p2)

周信东主编版C语言程序设计基础实验一实验报告

周信东主编版C语言程序设计基础实验一实验报告 The latest revision on November 22, 2020

实验1 C程序的运行环境和最简单的C程序设计 学号:姓名:莫新锋实验日期: 一、实验目的和要求 (1)熟悉C语言程序开发环境(Visual C++),了解开发环境中的编辑、编译、链接和运行命令。 (2)掌握在C语言开发环境中如何编辑、编译、链接和运行一个标准C语言程序。(3)掌握简单C语言程序的查错方法,理解编译错误信息的含义。 (4)掌握C语言数据类型的概念,熟悉如何定义一个整型、字符型、实型变量,以及如何对它们进行赋值。 (5)了解下列命令及函数:#include <>、main、printf、scanf。 (6)通过运行简单的程序,熟悉C语言的基本格式规范,并初步了解它的结构特点。 二、实验内容 实验指导书中的实验一的“基础部分”题目。 三、实验步骤及结果 (一)VC 实验平台的使用 1.简要描述在VC环境下开发一个C程序的主要步骤,并粘贴主要操作窗口的截图。【请填空。截图的操作方法:先点击欲截取的窗口使之置于屏幕最前方,并作适当的缩放,再按快捷键+将窗口截取到内存中,然后打开word将光标移到欲插入图片的位置上进行粘贴即可。也可对图片进行适当剪切,裁剪掉多余部分。注意:截图上必须有你自己的学号或姓名等信息,否则视为抄袭。】 主要步骤: 1: 创建一个工作文件夹。 2:启动 Visual C++。 3:新建一个 C 语言源程序。 4:编辑源程序 5:保存源程序 2.编译、链接、运行程序 (1)输入源程序后,如何编译该程序 【请填空】 输入好后在编译器中有一个编译按钮按一下就能编译 (2)如何链接程序生成可执行文件 【请填空】 得到后缀为obj的目标程序后选择build菜单下的build选项,表示要求连接并建立一个可执行文件 (3)如何运行程序查看结果 【请填空】

高级程序设计实验报告

高级程序设计 实验报告 班级 学号: 姓名: 实验名称: 指导老师: 日期:

实验十一文件和流I/O 一、实验题目:文件和流I/O 二、实验内容: 1.掌握磁盘的基本操作 2.掌握目录的基本操作 3.文件的基本操作 4.文本文件的读取和写入 5.字符串的读取和写入 6.二进制文件的读取和写入I 7. 二进制文件的读取和写入2 三、主要程序代码: 1. using System; using System.IO; using System.Collections.Generic; using System.Text; namespace实验1 { class Test { public static void Main() { DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { Console.WriteLine("Drive {0}", https://www.doczj.com/doc/f32198339.html,); Console.WriteLine(" File type: {0}", d.DriveType); if (d.IsReady == true) { Console.WriteLine(" Volume label: {0}", d.VolumeLabel); Console.WriteLine(" File system: {0}", d.DriveFormat); Console.WriteLine(" Available space to current user:{0, 15} bytes",d.AvailableFreeSpace); Console.WriteLine("Total available space: {0, 15} bytes",d.TotalFreeSpace); Console.WriteLine( " Total size of drive: {0, 15} bytes ", d.TotalSize); } } Console.ReadKey();

实验5 子程序设计

实验五子程序结构设计 一、实验目的 1、加深对子程序的理解,掌握子程序的结构。 2、掌握子程序的设计、编写及调试方法。 二、实验内容 1、已知在内存数据段中GRADE开始单元连续存放着10个学生的成绩,试 采用子程序结构编程实现以下功能: (1)找到最高成绩,将其偏移地址存放在内存单元MAX中。 (2)统计不及格的人数,存放在内存单元COUNT中。 (3)计算平均成绩(只取整数部分)。 (4)在屏幕上显示平均成绩。 要求:将以上功能分别写成子程序,数据区定义如下 DSEG SEGMENT GRADE DB 76,68,54,80,45,92,63,58,94,85 MAX DW ? COUNT DB ? DSEG ENDS 答:源程序: DATAS SEGMENT GRADE DB 76,68,54,80,45,92,63,58,94,85 MAX DW? COUNT DB? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX MOV AX,datas MOV DS,AX CALL MAXGRADE CALL BUJIGE

CALL AVGRADE RET MAIN ENDP MAXGRADE PROC FAR push ax push cx push si mov cx,10 mov ax,0 mov si,ax start_loop: mov ax,word ptr grade[si] cmp ax,word ptr grade[si+1] jge big mov ax,word ptr grade[si+1] big: inc si loop start_loop mov max,ax pop si pop cx pop ax ret MAXGRADE ENDP BUJIGE PROC FAR PUSH SI PUSH CX PUSH AX MOV AX,0 MOV COUNT,0 MOV CX,10 LOOP_START2: MOV AX,WORD PTR GRADE[SI] CMP AX,60 JG SMALL2 INC COUNT SMALL2: INC SI LOOP LOOP_START2 POP AX POP CX POP SI

c程序设计实验报告参考答案

实验要求: 对大纲中列出的四个实验要求: 1.以面向对象的程序设计思想编程。 2.熟悉面向对象程序设计语言VC++编程环境。 3.在计算机上快速完成程序编写、调试、运行。 分别写出实验报告(三页以上),要求详尽描述根据实验内容要求,自己设计的上机编程源程序和结果,包括关键性截图。完成实验报告和上交源程序。 备注: 1.《计算机应用技术》(专)、《计算机应用基础》(专)、高级语言程序设计(一)(专)要求学生进行上机操作,保留上机操作原程序,每门课程每个学生形成一个文件夹,文件夹以学生准考证号+姓名命名,最后试点院校汇总,刻录光盘上交主考院校; 2.《口语》(专)、《口译与听力》(本)要求考生进行现场练习,由试点院校教师录制相关材料,每门课程每个学生形成一个文件夹,文件夹以学生准考证号+姓名命名,最后试点院校汇总,刻录光盘上交主考院校; 3. 论文,作业,实验报告,案例分析,前沿思考,学习报告等均要求A4 打印、复印; 4.试点院校按百分制录入成绩,录入后打印学生成绩单; 5.按照系统成绩单的顺序将上报的学习过程评价成绩材料排序并打捆; 6.实践课程考核评估记录表》也需按照成绩单顺序排序,单独上报; 7.有平时作业或测试试卷等可放入本人上报的材料中一并打捆上交。 交实验报告时间: 10月8日假期后第一天上课,务必把按照要求书写完成,并装订好的实验报告交给我,一定!一定!切记不要耽误! 实验一:简单类与对象 一、实验目的 1、熟悉VC++的编程环境,掌握VC++ 6.0的调试方法。 2、掌握简单的类与对象的定义。 二、实验内容 用类定义,输入半径和高,输出圆柱体的底面积和体积。 三、实验要求

程序设计综合实践报告

程序设计综合实践报告 数学与系统科学学院 2015年11月6日

目录 1. 概述 (1) 2. 相关技术 (1) 2.1 数据链表 (1) 2.2 双缓冲 (1) 3. 总体设计与详细设计 (2) 3.1 系统模块划分 (2) 3.2 主要功能模块 (2) 4. 编码实现 (12) 5. 实训中遇到的主要问题及解决方法 (20) 6. 实训体会 (20)

1. 概述 项目:飞机大战 主要功能:本款基于MFC平台所制作的游戏,具有极大的休闲娱乐功能。玩家通过操纵我机,通过发射子弹机会敌机来积分,分数越高说明了玩家坚持的越长。游戏开始界面向玩家进行了游戏按键的功能说明,游戏中设置暂停按键,可以方便玩家继续游戏。游戏还自带无敌模式,以及我机大招,极大地提高了游戏的可玩性。 2. 相关技术 本程序主要运用了链表和双缓冲的技术。链表的应用方便了对数据成员的访问和处理,简化了代码,支持插入和移除表中任意位置上的节点;双缓冲主要用于图像的处理,在内存中重新绘图后复制到前台,同时禁止背景刷新,避免因图像刷新过于频繁导致画面出现闪烁现象。 2.1 数据链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。使用链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。由于常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换,因此链表最大的优点是允许插入和移除表上任意位置上的节点。 在程序运行过程中,根据游戏对象的种类划分不同的链表,每个链表单一的存储一类数据,在进行处理、绘图时,通过对链表的遍历,实现对数据的访问,再根据所要实现的功能,对不同的对象做出不同的处理,对数据成员的插入和移除也变得轻松了许多。 2.2 双缓冲 在图形图象处理编程过程中,双缓冲是一种基本的技术。窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新会引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。

相关主题
文本预览
相关文档 最新文档