首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • C程序设计设计性实验报告

    时间:2021-03-14 00:12:31 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:程序设计 实验 报告

    C程序设计设计性实验报告 本文关键词:程序设计,实验,报告,设计

    C程序设计设计性实验报告 本文简介:C++程序设计设计性实验C++程序设计设计性实验报告实验项目名称:高级计算器设计与开发专业班级:数学061;姓名:冯凯;学号200612010115实验起止日期:起于2008年11月1日止于2008年12月10日实验目的:1.学会用C++语言和利用数据结构中的堆栈实现表达式的解析与计算。2.学会使用

    C程序设计设计性实验报告 本文内容:

    C++程序设计设计性实验

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

    实验项目名称:高级计算器设计与开发

    专业班级:

    数学061

    ;姓名:

    ;学号

    200612010115

    实验起止日期:起于

    2008

    11

    月1日止于

    2008

    12

    月10日

    实验目的:

    1.学会用C++语言和利用数据结构中的堆栈实现表达式的解析与计算。

    2.学会使用动态链接库技术进行编程;学会编辑、编译、运行MFC应用程序的基本

    过程,并开发一个可以进行表达式运算的高级计算器。

    实验要求:

    1.

    能处理双精度型数值的加、减、乘、除的表达式计算。

    2.编程中使用了动态连接库技术。

    开发环境要求:

    软件环境:windows98/windowsXP/windows2000,Visual

    C++

    硬件环境:计算机(Pen4CPU,256MRAM,60G以上硬盘,输入输出设备)

    技术文档要求:

    按照软件工程技术文档编写要求进行。要求流程图绘制规范,模块功能描述清晰,数据字典齐全。

    实验内容:

    1

    C++语言的顺序结构,分支结构,循环结构,函数,结构体,指针。

    2

    数据结构中的堆栈存贮结构及其操作的实现。

    实验具体方案:

    按照系统设计要求,用Visual

    C++设计和开发一个MFC应用程序---高级计算器,提交由需求分析;系统设计说明(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图);系统技术文档

    (包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论、运行情况记录),系统使用说明书,源程序代码为附录构成的实验报告。

    需求分析:

    普通的功能简单的仅能进行四则运算的计算工具已经不能满足需要,需要一种能进行多种计算工具。而windows自带的计算器不能处理表达式这是一个缺陷,为此开发一个能处理表达式运算的高级计算器是十分必要的,这为计算提高了更大的方便,可以大幅度提高计算效率。

    系统设计说明:(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图)

    主菜单主要包含:

    操作说明、相关主题、退出。

    整个程序的模块组成:

    (1)

    Windows基于对话框的资源文件模块。

    (2)

    动态链接库模块,主要提供了表达式的解析与计算。

    (3)

    其他功能模块如开平方,取平方,进制转换等。

    数据字典

    m_edit1

    //编辑框变量,用于显示输入输出

    CString

    str1,str2,str3

    //中间临时字符串变量

    char

    s[70],s2[70],buffer[20];

    //用于CString字符串的转换以及将double型数据转

    换为CString型字符串。

    stack

    //结构体类型

    ElemTypestack;

    //存栈元素

    Int

    top

    //存栈顶元素的下标位置

    int

    MaxSiz//存stack数组长度。

    void

    Initiatestack(Stack

    #endif

    double

    x,y,z;

    ///////判断优先级的函数

    extern

    int

    Precedence(char

    op);

    ///////将中缀表达式转换为后缀表达式,中缀在str1中,后缀在str2中

    extern

    int

    change(char*

    str1,char*str2);

    ///////计算后缀表达式的值///////////////////////

    extern

    double

    compute(charstr);

    ///////////////////////////进制转换函数//////////////////////////////

    extern

    double

    tranfrom(double

    num,int

    r);

    //

    CAboutDlg

    dialog

    used

    for

    App

    About

    class

    CAboutDlg

    :

    public

    CDialog

    {

    public:

    CAboutDlg();

    //

    Dialog

    Data

    //{{AFX_DATA(CAboutDlg)

    enum

    {

    IDD

    =

    IDD_ABOUTBOX

    };

    //}}AFX_DATA

    //

    ClassWizard

    generated

    virtual

    function

    overrides

    //{{AFX_VIRTUAL(CAboutDlg)

    protected:

    virtual

    void

    DoDataExchange(CDataExchange*

    pDX);

    //

    DDX/DDV

    support

    //}}AFX_VIRTUAL

    //

    Implementation

    protected:

    //{{AFX_MSG(CAboutDlg)

    //}}AFX_MSG

    DECLARE_MESSAGE_MAP()

    };

    CAboutDlg::CAboutDlg()

    :

    CDialog(CAboutDlg::IDD)

    {

    //{{AFX_DATA_INIT(CAboutDlg)

    //}}AFX_DATA_INIT

    }

    void

    CAboutDlg::DoDataExchange(CDataExchange*

    pDX)

    {

    CDialog::DoDataExchange(pDX);

    //{{AFX_DATA_MAP(CAboutDlg)

    //}}AFX_DATA_MAP

    }

    BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

    //{{AFX_MSG_MAP(CAboutDlg)

    //

    No

    message

    handlers

    //}}AFX_MSG_MAP

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    //

    CCalcDlg

    dialog

    CCalcDlg::CCalcDlg(CWnd*

    pParent

    /*=NULL*/)

    :

    CDialog(CCalcDlg::IDD,pParent)

    {

    //{{AFX_DATA_INIT(CCalcDlg)

    m_edit1

    =

    _T(““);

    //}}AFX_DATA_INIT

    //

    Note

    that

    LoadIcon

    does

    not

    require

    a

    subsequent

    DestroyIcon

    in

    Win32

    m_hIcon

    =

    AfxGetApp()->LoadIcon(IDR_MAINFRAME);

    }

    void

    CCalcDlg::DoDataExchange(CDataExchange*

    pDX)

    {

    CDialog::DoDataExchange(pDX);

    //{{AFX_DATA_MAP(CCalcDlg)

    DDX_Text(pDX,IDC_EDIT1,m_edit1);

    //}}AFX_DATA_MAP

    }

    BEGIN_MESSAGE_MAP(CCalcDlg,CDialog)

    //{{AFX_MSG_MAP(CCalcDlg)

    ON_WM_SYSCOMMAND()

    ON_WM_PAINT()

    ON_WM_QUERYDRAGICON()

    ON_BN_CLICKED(IDC_1,OnNO1)

    ON_BN_CLICKED(IDC_2,OnNO2)

    ON_BN_CLICKED(IDC_3,OnNO3)

    ON_BN_CLICKED(IDC_4,OnNO4)

    ON_BN_CLICKED(IDC_5,OnNO5)

    ON_BN_CLICKED(IDC_6,OnNO6)

    ON_BN_CLICKED(IDC_7,OnNO7)

    ON_BN_CLICKED(IDC_8,OnNO8)

    ON_BN_CLICKED(IDC_0,OnN0)

    ON_BN_CLICKED(IDC_9,OnNO9)

    ON_BN_CLICKED(IDC_DIAN,OnDOT)

    ON_BN_CLICKED(IDC_ADD,OnADD)

    ON_BN_CLICKED(IDC_DENG,OnDENG)

    ON_BN_CLICKED(IDC_clear,Onclear)

    ON_BN_CLICKED(IDC_SUB,OnSub)

    ON_BN_CLICKED(IDC_CHENG,OnCheng)

    ON_BN_CLICKED(IDC_CHU,OnChu)

    ON_BN_CLICKED(IDC_sqrt,Onsqrt)

    ON_BN_CLICKED(IDC_powe,Onpowe)

    ON_BN_CLICKED(IDC_DUISHU,OnDuishu)

    ON_BN_CLICKED(IDC_BUTTON1,Ondelete)

    ON_BN_CLICKED(IDC_BUTTON3,Onyoukuohao)

    ON_BN_CLICKED(IDC_BUTTON4,Onzuokuohao)

    ON_EN_CHANGE(IDC_EDIT1,OnChangeEdit1)

    ON_BN_CLICKED(IDC_BUTTON2,OnER_jin_zhi)

    ON_BN_CLICKED(IDC_BUTTON5,Onba_jin_zhi)

    ON_BN_CLICKED(IDC_BUTTON6,Onshi_liu_jin_zhi)

    ON_BN_CLICKED(IDC_BUTTON7,OnCOS)

    ON_BN_CLICKED(IDC_BUTTON8,Onsin)

    ON_BN_CLICKED(IDC_BUTTON9,OnOP)

    ON_BN_CLICKED(IDC_BUTTON10,OnZhuti)

    ON_BN_CLICKED(IDC_BUTTON11,Onexit)

    //}}AFX_MSG_MAP

    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////

    //

    CCalcDlg

    message

    handlers

    BOOL

    CCalcDlg::OnInitDialog()

    {

    CDialog::OnInitDialog();

    //

    Add

    “About.“menu

    item

    to

    system

    menu.

    //

    IDM_ABOUTBOX

    must

    be

    in

    the

    system

    command

    range.

    ASSERT((IDM_ABOUTBOX

    ASSERT(IDM_ABOUTBOX

    AppendMenu(MF_SEPARATOR);

    pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

    }

    }

    //

    Set

    the

    icon

    for

    this

    dialog.

    The

    framework

    does

    this

    automatically

    //

    when

    the

    application

    s

    main

    window

    is

    not

    a

    dialog

    SetIcon(m_hIcon,TRUE);//

    Set

    big

    icon

    SetIcon(m_hIcon,FALSE);//

    Set

    small

    icon

    //

    TODO:

    Add

    extra

    initialization

    here

    return

    TRUE;

    //

    return

    TRUE

    unless

    you

    set

    the

    focus

    to

    a

    control

    }

    void

    CCalcDlg::OnSysCommand(UINT

    nID,LPARAM

    lParam)

    {

    if

    ((nID

    dlgAbout.DoModal();

    }

    else

    {

    CDialog::OnSysCommand(nID,lParam);

    }

    }

    //

    If

    you

    add

    a

    minimize

    button

    to

    your

    dialog,you

    will

    need

    the

    code

    below

    //

    to

    draw

    the

    icon.

    For

    MFC

    applications

    using

    the

    document/view

    model,//

    this

    is

    automatically

    done

    for

    you

    by

    the

    framework.

    void

    CCalcDlg::OnPaint()

    {

    if

    (IsIconic())

    {

    CPaintDC

    dc(this);

    //

    device

    context

    for

    painting

    SendMessage(WM_ICONERASEBKGND,(WPARAM)

    dc.GetSafeHdc(),0);

    //

    Center

    icon

    in

    client

    rectangle

    int

    cxIcon

    =

    GetSystemMetrics(SM_CXICON);

    int

    cyIcon

    =

    GetSystemMetrics(SM_CYICON);

    CRect

    rect;

    GetClientRect(

    int

    x

    =

    (rect.Width()

    -

    cxIcon

    +

    1)

    /

    2;

    int

    y

    =

    (rect.Height()

    -

    cyIcon

    +

    1)

    /

    2;

    //

    Draw

    the

    icon

    dc.DrawIcon(x,y,m_hIcon);

    }

    else

    {

    CDialog::OnPaint();

    }

    }

    //

    The

    system

    calls

    this

    to

    obtain

    the

    cursor

    to

    display

    while

    the

    user

    drags

    //

    the

    minimized

    window.

    HCURSOR

    CCalcDlg::OnQueryDragIcon()

    {

    return

    (HCURSOR)

    m_hIcon;

    }

    void

    CCalcDlg::OnNO1()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“1“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO2()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“2“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO3()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“3“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO4()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“4“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO5()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“5“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO6()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“6“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO7()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“7“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO8()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“8“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnN0()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“0“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnNO9()

    {

    m_edit1+=“9“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnDOT()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“.“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnADD()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“+“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnDENG()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    char

    s[70],s2[70],buffer1[20];double

    r;CString

    str1,str2,str3;int

    i=0;

    str1=m_edit1;

    strncpy(s,(LPCTSTR)str1,sizeof(s));

    s[sizeof(s)-1]=

    /0

    ;

    if(str1.Left(1)==“+“||s[0]==

    -

    ||s[0]==

    ||s[0]==

    /

    ||s[0]==

    .

    )

    {str2.Format(“/n抱

    歉!/n不

    式!

    /n请

    入“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    for(i=0;s[i]!=

    /0

    ;i++)

    {

    if((s[i]==

    +

    ||s[i]==

    -

    ||s[i]==

    ||s[i]==

    /

    )

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    }

    change(s,s2);

    if(change(s,s2)==0)

    {

    str2.Format(“/n输

    !

    /n请

    入“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;}

    r=compute(s2);

    if(r==sqrt(2))

    {

    str2.Format(“/n输

    !

    /n请

    入“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;}

    _gcvt(r,8,buffer1);

    for(i=1;buffer1[i]!=

    /0

    ;i++)

    {

    if(buffer1[i]==

    .

    }

    m_edit1=(CString)buffer1;

    label:

    UpdateData(false);

    }

    void

    CCalcDlg::Onclear()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1=_T(““);

    UpdateData(false);

    }

    void

    CCalcDlg::OnSub()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“-“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnCheng()

    {

    m_edit1+=“*“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnChu()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“/“;

    UpdateData(false);

    }

    void

    CCalcDlg::Onsqrt()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    chars1,buffer1[20];CString

    str1,str2,str3;int

    i;

    str1=m_edit1;

    str2=str1;

    str3=str1;

    if(str2.Right(1)==“B“||str2.Right(1)==“o“||str2.Right(1)==“H“||str3.Left(1)==“B“||str3.Left(1)==“o“||str3.Left(1)==“H“)

    {

    {

    str2.Format(“/n!

    /n请

    入“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;}

    }

    OnDENG();

    //调用等号子过程

    x=strtod(m_edit1,if(x<0)

    {

    str2.Format(“/n负

    “);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    y=sqrt(x);

    _gcvt(y,16,buffer1);

    for(i=0;buffer1[i]!=

    /0

    ;i++)

    {

    if(buffer1[i]==

    .

    }

    m_edit1=(CString)buffer1;

    label:UpdateData(false);

    }

    void

    CCalcDlg::Onpowe()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    chars,buffer1[20];CString

    str1,str2,str3;int

    i=0;

    str1=m_edit1;

    str2=str1;

    str3=str1;

    if(str2.Right(1)==“B“||str2.Right(1)==“o“||str2.Right(1)==“H“||str3.Left(1)==“B“||str3.Left(1)==“o“||str3.Left(1)==“H“)

    {

    {

    str2.Format(“/n!

    /n请

    入“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;}

    }

    OnDENG();

    //调用等号子过程

    x=strtod(m_edit1,y=pow(x,2);

    _gcvt(y,16,buffer1);

    for(i=0;buffer1[i]!=

    /0

    ;i++)

    {

    if(buffer1[i]==

    .

    }

    m_edit1=(CString)buffer1;

    label:UpdateData(false);

    }

    void

    CCalcDlg::OnDuishu()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    chars1,buffer1[20];CString

    str1,str2,str3;int

    i=0;

    str1=m_edit1;

    str2=str1;

    str3=str1;

    if(str2.Right(1)==“B“||str2.Right(1)==“o“||str2.Right(1)==“H“||str3.Left(1)==“B“||str3.Left(1)==“o“||str3.Left(1)==“H“)

    {

    {

    str2.Format(“/n!

    /n请

    入“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    str2=_T(““);

    goto

    label;}

    }

    OnDENG();

    //调用等号子过程

    x=strtod(m_edit1,if(x<0)

    {

    str2.Format(“/n负

    “);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    y=log10(x);

    _gcvt(y,6,buffer1);

    for(i=0;buffer1[i]!=

    /0

    ;i++)

    {

    if(buffer1[i]==

    .

    }

    m_edit1=(CString)buffer1;

    label:UpdateData(false);

    }

    void

    CCalcDlg::Ondelete()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    CString

    str1,str2,str3;

    str1=m_edit1;

    str1=str1.Left(str1.GetLength()-1);

    m_edit1=str1;

    UpdateData(false);

    }

    void

    CCalcDlg::Onyoukuohao()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“)“;

    UpdateData(false);

    }

    void

    CCalcDlg::Onzuokuohao()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    m_edit1+=“(“;

    UpdateData(false);

    }

    void

    CCalcDlg::OnChangeEdit1()

    {

    //

    TODO:

    If

    this

    is

    a

    RICHEDIT

    control,the

    control

    will

    not

    //

    send

    this

    notification

    unless

    you

    override

    the

    CDialog::OnInitDialog()

    //

    function

    and

    call

    CRichEditCtrl().SetEventMask()

    //

    with

    the

    ENM_CHANGE

    flag

    ORed

    into

    the

    mask.

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    }

    void

    CCalcDlg::OnER_jin_zhi()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    double

    x1,x2,*p;int

    i=0,j=0,k=0;CString

    str1,str2,str3;

    chars1,buffer1[35];

    str1=m_edit1;

    str2=str1;

    str3=str1;

    if(str2.Right(1)==“B“||str2.Right(1)==“o“||str2.Right(1)==“H“||str3.Left(1)==“B“||str3.Left(1)==“o“||str3.Left(1)==“H“)

    {

    {

    str2.Format(“/n!

    “);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;}

    }

    char

    s[100];

    strncpy(s,(LPCTSTR)str1,sizeof(s));

    s[str1.GetLength()-1]=

    /0

    ;

    for(i=0;s[i]!=

    /0

    ;i++)

    {

    if(s[i]==

    .

    )

    {

    str2.Format(“抱歉不能处理带小数点的数!/n

    请输入一个整数试试“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    else

    if(s[i]==

    ||s[i]==

    /

    )

    {str2.Format(“抱歉不能处理这类表达式!/n

    请输入一个不带任何符号的整数试试“);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    }

    for(i=0;s[i]!=

    /0

    ;i++)

    {

    if((s[i]==

    +

    ||s[i]==

    -

    ||s[i]==

    ||s[i]==

    /

    )

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;

    }

    }

    m_edit1=_T(““);

    x1=strtod(str1,if(x1<0)

    x2=-x1;

    else

    x2=x1;

    p=tranfrom(x2,2);

    for(i=0;p[i]!=

    #

    ;i++)

    {_gcvt(p[i],32,buffer1);

    for(j=0;j<35;j++)

    if(buffer1[j]==

    .

    )

    {

    buffer1[j]=buffer1[j+1];

    m_edit1+=(CString)buffer1;

    }

    }

    if(x1<0)

    m_edit1=“-“+m_edit1;

    m_edit1+=“B“;

    label

    :UpdateData(false);

    }

    void

    CCalcDlg::Onba_jin_zhi()

    {

    //

    TODO:

    Add

    your

    control

    notification

    handler

    code

    here

    double

    x1,x2,*p;int

    i=0,j=0;CString

    str1,str2,str3;

    chars1,buffer1[35];

    str1=m_edit1;

    str2=str1;

    str3=str1;

    if(str2.Right(1)==“B“||str2.Right(1)==“o“||str2.Right(1)==“H“||str3.Left(1)==“B“||str3.Left(1)==“o“||str3.Left(1)==“H“)

    {

    {

    str2.Format(“/n!

    “);

    MessageBox(str2,“冯凯温馨提示“);

    m_edit1=_T(““);

    goto

    label;}

    }

    char

    s[35];

    strncpy(s,(LPCTSTR)str1,sizeof(s));

    s[sizeof(s)-1]=

    /0

    ;

    for(i=0;s[i]!=

    /0

    ;i++)

    {

    if(s[i]==

    .

    )

    {

    str2.Format(“抱歉不能处理带小数点的数!/n

    请输入一个整数试试“);

    MessageBox(str2,“冯凯温馨

    篇2:C语言程序设计实验报告(6)

    C语言程序设计实验报告(6) 本文关键词:实验,语言程序设计,报告

    C语言程序设计实验报告(6) 本文简介:贵阳学院机电系实验报告课程名称:指导教师:年级:专业:学生姓名:学号:20——20学年第学期填写要求一、对于演示性实验,要写出心得体会(字数不少于800字)。二、对于验证性实验(操作型,不属于程序设计型),要收集数据,对数据进行处理,并绘制曲线和写出实验总结(不少于50字)。三、对于设计性实验,(操

    C语言程序设计实验报告(6) 本文内容:

    贵阳学院

    机电系实验报告

    课程名称:

    指导教师:

    级:

    业:

    学生姓名:

    号:

    20

    ——20

    学年第

    学期

    一、对于演示性实验,要写出心得体会(字数不少于800字)。

    二、对于验证性实验(操作型,不属于程序设计型),要收集数据,对数据进行处理,并绘制曲线和写出实验总结(不少于50字)。

    三、对于设计性实验,(操作型,不属于程序设计型),要给设计思路,完成“二”中的任务,分析设计的规范性和合理性。

    四、对于程序设计型实验,要写出源程序,运行结果和实验总结(不少于50字)。

    实验一(预备实验)

    一、

    实验项目名称:

    C语言的运行环境和运行C程序的方法

    二、

    实验时间:

    三、

    实验地点:

    四、

    实验目的:

    1.

    了解所用的计算机系统的基本操作方法,学会独立使用该系统。

    2.

    了解在该系统上如何编辑、编译、连接和运行一个C程序。

    3.

    通过运行简单的C程序,初步了解C源程序的特点。

    五、

    主要的实验所需仪器、设备:PC机。

    六、

    实验内容与步骤:

    1.

    检查所用的计算机系统是否已安装了C编译系统并确定它所在的子目录。

    2.

    进入所用的集成环境。

    3.

    熟悉集成环境的界面和有关菜单的使用方法。

    4.

    输入并运行一个简单的、正确的程序。

    i.

    输入下面的程序

    #include

    void

    main(

    )

    {

    printf(“This

    is

    a

    program./n”);

    }

    ii.

    编译源程序,观察编译信息,如出现错误,找出原因,继续编译,如无错,进行连接。

    iii.

    如连接无误,运行程序,分析运行结果。

    5.

    输入并编辑一个有错误的C程序。

    i.

    输入以下程序

    #include

    void

    main(

    )

    {

    int

    a,b,sum;

    a=123;

    b=456;

    sum=a+b

    print(“sum

    si

    %d/n”,sum);

    }

    ii.

    编译程序,错误信息有:

    iii.

    编译成功,连接程序,错误信息有:

    iv.

    连接成功,使程序运行,运行结果:

    v.

    分析结果正误:

    vi.

    将调试好的程序保存在自己的用户目录中,文件名自定。

    vii.

    关闭文件,再将文件读入,检查窗口中的内容是否是刚才存盘的程序。

    viii.

    关闭所有的集成环境,用Windows中的“我的电脑”找到刚才使用的用户子目录,浏览其中文件,看有无刚才保存的后缀为.c和.exe的文件。

    6.

    上机运行本章例题1.3。

    七、

    本次上机实验的心得。

    八、

    理论支撑:《C语言程序设计》第一章

    本次实验成绩

    篇3:打字游戏程序设计报告

    打字游戏程序设计报告 本文关键词:程序设计,打字,报告,游戏

    打字游戏程序设计报告 本文简介:第二章打字游戏程序设计内容要求和设计思想2.1设计内容要求要求设计的程序需包括:在游戏开始后,按回车键进入打字游戏;按ESC键返回主界面;按空格暂停;按大写字母E程序结束。26个字母中的任意一字母从屏幕落下,在下落的过程中键入落下的字母,如果正确,字母消失,分数增加;如果不正确,字母继续下落。接着继

    打字游戏程序设计报告 本文内容:

    第二章

    打字游戏程序设计内容要求和设计思想

    2.1

    设计内容要求

    要求设计的程序需包括:在游戏开始后,按回车键进入打字游戏;按ESC键返回主界面;按空格暂停;按大写字母E程序结束。26个字母中的任意一字母从屏幕落下,在下落的过程中键入落下的字母,如果正确,字母消失,分数增加;如果不正确,字母继续下落。接着继续下落其他字母,如果不正确的字母数大于10个,则游戏结束并返回到成绩界面。进入成绩界面后显示所得游戏分数,

    暂停大概2秒后返回到主菜单。

    2.2

    整体设计思想

    程序首先通过宏的定义以及调用宏来画出游戏边框,再通过定义一个函数并调用MOV

    AH,09

    INT

    21H

    来显示字符串,DS:DX定义字符串位置。游戏主程序调用BIOS

    INT

    10

    的9号功能实现对目标文本的颜色和定位。游戏主程序可以用MOV

    AH,00

    INT

    16H从键盘读取输入的字符再调用MOV

    AH,01

    INT

    21H

    让键盘输入显示在屏幕中

    AL=输入的字符,用CMP指令对输入的文本和目标文本进行比较,再利用选择语句在打错字符后对wrong的基数加1,在打对字符后对right的基数加1,并调用清屏函数clear将该字符消除。对于要求柱形图实时显示正确和错误的数目,可以通过利用“*”在竖向上叠加来实现,字符串结束后直接退到dos环境。

    2.3

    整体设计方案流程图

    开始

    欢迎界面

    结束

    速度选择

    1,2,3

    游戏运行

    游戏结束

    ESC

    E

    ENTER

    输入字母并进行相关操作后返回

    显示成绩

    图2.1

    第三章

    软件设计

    3.1

    程序流程详细说明

    首先运行程序,进入主界面,通过键盘输入字符,先判断是否是“E”,是则直接退出,如果不是“E”,则进入下一步判断是否为数字1,是就按速度1

    下落字母,否就进入下一步判断,是否为数字2,是就按速度2下落字母,否就进入下一步判断,是否为数字3,是就按速度3下落字母,否就返回重新输入。

    字母随机下落的过程中,检查键盘是否输入ESC,是就返回到主界面,否就继续下落,接着判断玩家输入的字母跟下落的字母是否一样,是就清除该字母,并使RIGHT的基数加1,否就使WRONG的基数加1,接着判断WRONG是否大于10,否就又重新随机下落一字母,是游戏就结束并显示最终成绩,接着就返回到主界面等待新的指令。

    3.2程序流程图

    开始

    主界面

    键盘输入

    是否E

    是否1

    速度1

    是否2

    速度2

    是否3

    字母随机落下

    检查键盘

    是否ESC

    速度3

    输入字符正确

    结束

    下落字母消失

    WRONG+1

    WRONG>10

    显示最终成绩

    RIGHT+1

    图3.1

    3.3

    重点子程序分析

    3.3.1

    随机产生字母

    先初始定义一个由61个无序字母组成的字母列STRD,此字母列包含从A-Z

    26个字母,将STRD的偏移地址存在DI中,又将字母列的备份存在SI中,定义一个计数寄存器CX,首先置CX为0,程序每产生一个随机字母后CX自动加1,并且比较每次循环时CX是否已经大于61,如果大于61则对屏幕初始化置0,如果大于则继续随机下落字母。

    3.3.2

    字母的下落

    字母的下落是整个程序的核心部分,实现该功能的原理是让字母在规定的时间间隔内多次显示,字母每次下移1位,同时上一位自动以空格代替,这样在视觉上就起到了字母自动下落的效果,下落的速度由我们自己决定,本程序中设置了三种速度。

    3.4

    程序中使用的部分重要指令

    3.4.1通用数据转送指令MOV

    它表示把操作数(SRC),转送给目的操作数(DIST),源操作数不变,目的操作数被源操作数所替代。转送指令每次可以转送一个字节或一个字,可以实现CPU的内部寄存器之间的数据转送、寄存器和内存之间的数据转送,还可以将立即数送给CPU内部的寄存器。本设计中大量的用到了MOV指令,如MOV

    AH,0AH

    MOV

    AL,OP3

    MOV

    CX,01H

    MOV

    BH,00H

    等等,以实现起数据的传送。

    3.4.2

    无条件转移指令JMP、CALL、RET

    (1)当程序中出现JMP指令时,无条件的跳至JMP后所跟的变量处。其主要有段内短转移、段内直接转移、段间直接转移、段内间接转移、段间间接转移、段内间接转移等操作。

    (2)CALL指令为调用子程序,其功能为保护程序断点后,转到子程序处执行。主要包括段内调用和段间调用。

    (3)RET返回指令,通常与CALL指令连用,从子程序返回主程序,通常放在子程序之后。也包括段内返回和段间返回。

    3.4.3

    条件转移指令

    条件转移指令是根据执行该指令时CPU标志的状态而决定是否发生控制转移的指令。如果满足条件则程序转移到指定的目标地址;如果不满足则继续执行该条件下的下一条指令。一般与比较指令CMP连用。在本程序设计中主要用到“JE(相等转移)”、“JA(大于转移)”、“JNE(不相等转移)”等。

    3.4.4

    堆栈操作指令PUSH、POP

    PUSH进栈指令的功能是将操作数推入堆栈。它的源操作数可以是16为通用寄存器、段寄存器或存储器中的数据字,打不能是立即数。堆栈是以“先进后出”的方式工作的一个存储区,栈区的段址由SS寄存器的内容确定。堆栈的最大容量可为64K,即一个段的最大容量。堆栈指针SP始终指向栈顶,其值可以从FFFEH(偶地址)开始,向低地址方向发展,最小为0。每次执行PUSH操作时,先修改SP的值,使SP?SP

    -

    2后,然后把操作数压入堆栈种SP指示的位置上,低位字节放在较低地址单元,高位字节放在交高地址单元中。

    POP出栈指令的功能是把当前的SP所指向的堆栈顶部的一个字送到指定的目的操作数中。它的目的操作数可以是16位通用寄存器,段寄存器或存储单元,但CS不能做目的操作数。每执行一次出栈操作,SP?SP+2,即SP向高地址方向移动,指向新的栈顶。

    3.4.5

    算数运算指令ADD、SUB、DIV、INC

    ADD加法指令,它的功能是将源操作数相加,结果送到目的操作数中,即

    目的?源+目的。

    SUB减法指令,它的功能是将目的操作数减去源操作数,结果送回目的操作数,即目的?目的

    源。

    DIV无符号数除法指令,它的功能是对两个无符号二进制数进行除法操作。

    INC增量指令,它的功能是对目的操作数加1,结果送回目的操作数,即目的?目的+1。

    ADD,SUB这两条指令的原操作数可以是寄存器、存储器或立即数,目的操作数只能是用寄存器和存储单元。使用时需注意源和目的操作数不能同时为存储器,而且他们的类型必须一致,即都是字节或字。

    DIV指令的原操作数可以是字节或字,如果源操作数为字节,16位被除数必须放在AX中,8位除数为原操作数,他可以是寄存器或存储单元,相除之后,8位商在AL中,余数在AH中。要是操作数为字,32位被除数在DX,AX中,其中DX为高位字,16位除数作源操作数,他可以是寄存器或存储单元。相除之后,AX中存16位商,DX存16位余数。要是被除数只有16位,除数也是16位,则必须将16位被除数送到AX中,再将DX寄存器清0,然后相除。

    INC指令的目的操作数可以在通用寄存器或内存种,这条指令主要用在循环程序中,对地址指针和循环计数器等进行修改。指令执行后影响AF、OF、PF、SF和ZF,但进位标志CF不受影响。

    3.5

    源程序及其说明

    DIS

    MACRO

    STRING,X

    MOV

    AL,3

    MOV

    AH,0

    INT

    10H

    MOV

    BP,SEG

    STRING

    MOV

    ES,BP

    MOV

    BP,OFFSET

    STRING

    MOV

    CX,15

    MOV

    DH,X

    MOV

    DL,29

    MOV

    BL,74H

    MOV

    AL,1

    MOV

    AH,13H

    INT

    10H

    ENDM

    DIS4

    MACRO

    STRING,X,Y

    ;在指定位置以红底蓝字显示字符串

    dis2

    MOV

    AL,3

    MOV

    AH,0

    INT

    10H

    MOV

    BP,SEG

    STRING

    MOV

    ES,BP

    MOV

    BP,OFFSET

    STRING

    MOV

    CX,Y

    ;显示字符串的长度

    MOV

    DH,X

    ;行位置

    MOV

    DL,29

    ;列位置

    MOV

    BL,74H

    ;显示字符串的属性74h

    MOV

    AL,1

    MOV

    AH,13H

    INT

    10H

    DIS3

    DIS5

    ENDM

    DIS1

    MACRO

    STRING1,Y,M

    ;在指定位置处显示字符串

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,0

    MOV

    DH,Y

    ;行标

    MOV

    DL,M

    ;列标

    INT

    10H

    MOV

    AH,09H

    ;显示str1

    MOV

    DX,SEG

    STRING1

    MOV

    DS,DX

    MOV

    DX,OFFSET

    STRING1

    INT

    21H

    ENDM

    DIS2

    MACRO

    ;宏进栈

    PUSH

    AX

    PUSH

    BX

    PUSH

    CX

    PUSH

    DX

    ENDM

    DIS3

    MACRO

    ;宏出栈

    POP

    DX

    POP

    CX

    POP

    BX

    POP

    AX

    ENDM

    DIS5

    MACRO

    S1,S2

    DIS2

    MOV

    AH,6D

    MOV

    AL,0

    MOV

    AL,25D

    MOV

    BH,10100100B

    ;01111111b

    MOV

    CH,0

    MOV

    CL,0

    MOV

    DH,0

    MOV

    DL,80

    INT

    10H

    DIS3

    ENDM

    DIS6

    MACRO

    Z1,Z2,Z3,Z4

    ;画横向边框的宏

    LOCAL

    C5

    DIS2

    MOV

    CX,Z1

    ;循环次数

    MOV

    DL,Z2

    ;列

    C5:

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,Z3

    ;页号

    MOV

    DH,Z4

    ;行

    INT

    10H

    PUSH

    DX

    MOV

    DL,2AH

    INT

    21H

    POP

    DX

    INC

    DL

    LOOP

    C5

    DIS3

    ENDM

    DIS7

    MACRO

    Q1,Q2,Q3,Q4

    ;画竖边框的宏

    LOCAL

    F1

    DIS2

    MOV

    CX,Q4

    MOV

    DH,Q1

    F1:

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,Q2

    MOV

    DL,Q3

    INT

    10H

    MOV

    DL,2AH

    INT

    21H

    INC

    DH

    LOOP

    F1

    DIS3

    ENDM

    DATAS

    SEGMENT

    STR1

    DB

    Welcome

    to

    play

    chars,0AH,0DH,$

    STR2

    DB

    Made

    by

    Zhou

    Liangfeng,0AH,0DH,$

    STR3

    DB

    2010/1/8,0AH,0DH,$

    STR4

    DB

    Please

    choose

    speeding,0AH,0DH,$

    STR5

    DB

    Please

    press

    Enter

    to

    cintinue.,0AH,0DH,$

    STR7

    DB

    speed

    1,0AH,0DH,$

    STR8

    DB

    speed

    2,0AH,0DH,$

    STR9

    DB

    speed

    3,0AH,0DH,$

    STR0

    DB

    Select

    the

    number

    among

    1-3,0AH,0DH,$

    STRA

    DB,0AH,0DH,$

    STRB

    DB

    score:,i,0AH,0DH,$

    STRC

    DB

    You

    choose:,0AH,0DH,$

    STRD

    DB

    hqfuvodepfdjygnhtrwgaerjrklubgsnyrsbntrsbngtrdjykuahtrgregfytjgfjytjktru,$

    STRE

    DB

    RIGHT:,$

    ST1

    DB

    RIGHT:

    Pause,0AH,0DH,$

    ST2

    DB

    E

    :

    Quit,0AH,0DH,$

    ST8

    DB

    Esc:

    Back,0AH,0DH,$

    ST3

    DB

    Function

    Meun,0AH,0DH,$

    ST4

    DB

    please

    input.,0AH,0DH,$

    ST5

    DB

    SPACE:

    Continue,0AH,0DH,$

    ST6

    DB

    Quitting.,0AH,0DH,$

    ST7

    DB

    Press

    any

    key

    to

    continue,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,0DH,$

    LENTH

    EQU

    $-STRD

    ;STRD的长度

    R

    DB

    1

    M

    DB

    0

    N

    DB

    ?

    A

    DB

    0

    ;速度1选择标志

    B

    DB

    0

    ;速度2选择标志

    V

    DB

    0

    ;速度3选择标志

    DATAS

    ENDS

    STACK1

    SEGMENT

    DB

    100

    DUP

    (?)

    STACK1

    ENDS

    CODES

    SEGMENT

    MAIN

    PROC

    FAR

    ASSUME

    CS:CODES,DS:DATAS,SS:STACK1

    START:

    MOV

    AX,DATAS

    MOV

    DS,AX

    CALL

    CLEAR

    ;调用清屏函数,清除dos界面

    CALL

    DISPLAY1

    ;显示主欢迎界面

    AG:

    MOV

    A,0

    ;只相应的速度标志为0

    MOV

    B,0

    MOV

    V,0

    TH2:

    MOV

    AH,7

    ;无回显输入字符

    INT

    21H

    CMP

    AL,0DH

    ;如果是回车,则继续

    JNE

    TH2

    ;否则继续输入

    TH1:

    CALL

    CLEAR

    ;调用清屏函数

    DIS6

    80,0,0,0

    ;宏调用画上边框

    DIS7

    0,0,79,24

    ;宏调用画右3边框

    DIS7

    0,0,0,25

    ;宏调用画左1边框

    DIS6

    79,0,0,24

    ;宏调用画下边框

    DIS1

    STR4,10,25

    ;宏调用显示欢迎界面及速度选择项

    DIS1

    STR7,12,30

    DIS1

    STR8,14,30

    DIS1

    STR9,16,30

    DIS1

    STR0,20,16

    THD:

    MOV

    AH,7

    ;键盘等待输入相应的速度选项

    INT

    21H

    CMP

    AL,31H

    ;判断是否为1

    JNE

    MODIFYA

    JMP

    THB

    ;是则转,JMP实现间接跳转

    MODIFYA:

    CMP

    AL,32H

    ;判断是否为2

    JNE

    MODIFYB

    JMP

    THC

    ;是则转

    MODIFYB:

    CMP

    AL,33H

    ;判断是否为3

    JNE

    THD

    ;不是则转

    DIS4

    STR9,12,10

    ;速度3高亮度显示

    DIS1

    STRC,12,14

    MOV

    V,1

    ;速度3被选中的标志

    JMP

    THA

    THB:

    DIS4

    STR7,12,10

    ;速度1高亮度显示

    DIS1

    STRC,12,14

    MOV

    A,1

    ;速度1被选中的标志

    JMP

    THA

    THC:

    DIS4

    STR8,12,10

    ;速度2高亮度显示

    DIS1

    STRC,12,14

    MOV

    B,1

    ;速度2被选中的标志

    THA:

    DIS6

    80,0,0,0

    ;宏调用画上边框

    DIS7

    0,0,79,24

    ;宏调用画右3边框

    DIS7

    0,0,0,25

    ;宏调用画左1边框

    DIS6

    79,0,0,24

    ;宏调用画下边框

    MOV

    AH,7

    ;键盘等待确定输入

    INT

    21H

    CMP

    AL,0DH

    ;判断是否是回车确定

    JNE

    THA

    ;不是则继续等待

    CALL

    SLEEP2

    ;屏幕暂停缓冲

    CALL

    CLEAR

    ;调用清屏函数

    CALL

    PAINT

    ;调用函数画游戏边框

    CALL

    GOAL

    ;调用函数显示得分

    CALL

    FALL

    ;调用下落函数

    CMP

    N,1

    ;是否确定退出

    JE

    TH9

    ;是则转

    JMP

    AG

    ;不是继续

    TH9:

    MOV

    AH,4CH

    ;返回dos界面

    INT

    21H

    MAIN

    ENDP

    ;显示功能菜单函数

    DISPLAY1

    PROC

    NEAR

    DIS1

    STR1,10,25

    DIS1

    STR2,13,29

    DIS1

    STR3,16,31

    DIS1

    STR5,21,19

    DIS6

    80,0,0,0

    DIS6

    79,0,0,24

    DIS7

    0,0,0,25

    DIS7

    0,0,79,24

    RET

    DISPLAY1

    ENDP

    ;清屏函数,清除整个屏幕

    CLEAR

    PROC

    NEAR

    PUSH

    AX

    PUSH

    BX

    PUSH

    CX

    PUSH

    DX

    MOV

    AH,6

    MOV

    AL,0

    MOV

    BH,7

    MOV

    CH,0

    MOV

    CL,0

    MOV

    DH,24

    MOV

    DL,79

    INT

    10H

    MOV

    DX,0

    MOV

    AH,2

    INT

    10H

    DIS5

    25D,10100100B

    DIS3

    RET

    CLEAR

    ENDP

    ;下落函数,核心子函数

    FALL

    PROC

    NEAR

    LEA

    SI,STRD

    ;传递将要下落的字母子串

    T1:

    INC

    SI

    ;加1以便寻找下一个字母

    DIS2

    MOV

    AH,6D

    ;置主游戏屏界面颜色

    MOV

    AL,0

    MOV

    AL,23D

    MOV

    BH,01101110B

    MOV

    CH,1

    ;从左上第1行

    MOV

    CL,26

    ;从左上第26列

    MOV

    DH,1

    ;从右上第1行

    MOV

    DL,54

    ;从右上第54列

    INT

    10H

    DIS3

    CALL

    RANDOM

    MOV

    DL,AH

    ;获得随机数,保存至dl中

    dl

    为字母下落的y坐标

    ADD

    DL,26

    ;基数为26,使其在范围之内

    MOV

    DH,R

    MOV

    CX,23

    AGA:

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,0

    INT

    10H

    MOV

    AL,[SI]

    ;取下落字符

    PUSH

    DX

    MOV

    DL,AL

    MOV

    AH,02H

    INT

    21H

    POP

    DX

    PUSH

    AX

    ;AX,CX进栈,以防干扰

    PUSH

    CX

    MOV

    CX,0

    ;隐藏字母后面的光标

    MOV

    AH,1

    OR

    CH,00010000B

    INT

    10H

    POP

    CX

    POP

    AX

    CALL

    SP_ADJ

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,0

    INT

    10H

    PUSH

    DX

    MOV

    DL,;显示空格

    MOV

    AH,02H

    INT

    21H

    INT

    10H

    POP

    DX

    SUB

    AL,AL

    PUSH

    CX

    MOV

    CX,50000

    DL2:

    LOOP

    DL2

    POP

    CX

    PUSH

    DX

    MOV

    AH,6

    MOV

    DL,0FFH

    INT

    21H

    POP

    DX

    CMP

    AL,0

    ;判断是否输入

    JZ

    T0

    ;没有

    CMP

    AL,[SI]

    ;判断是否等于下落的字母

    JE

    T7

    ;等于下落的字母,则下落下一个字母

    JNE

    X1

    T7:

    INC

    M

    CALL

    POINT

    CALL

    BELL

    JMP

    T1

    X1:

    CMP

    AL,20H

    JE

    TA

    JNE

    T3

    TA:

    CALL

    PAUSE

    T3:

    CMP

    AL,45H

    JNE

    T0

    CALL

    EXIT

    CMP

    N,1

    JE

    T4

    T0:

    CMP

    AL,1BH

    JNE

    T12

    CALL

    CLEAR

    CALL

    DISPLAY1

    JMP

    T4

    T12:

    INC

    DH

    SUB

    CX,1

    JZ

    MODIFYC

    JMP

    AGA

    MODIFYC:

    JMP

    T1

    T4:

    RET

    FALL

    ENDP

    ;时间延迟函数及速度1函数

    SLEEP1

    PROC

    PUSH

    CX

    MOV

    CX,550D

    LOOP1:

    PUSH

    CX

    MOV

    CX,550D

    LOOP2:

    PUSH

    CX

    MOV

    CX,550D

    LOOP3:

    NOP

    NOP

    LOOP

    LOOP3

    POP

    CX

    LOOP

    LOOP2

    POP

    CX

    LOOP

    LOOP1

    POP

    CX

    RET

    SLEEP1

    ENDP

    ;时间延迟函数及速度2函数

    SLEEP2

    PROC

    PUSH

    CX

    MOV

    CX,400D

    LOOP4:

    PUSH

    CX

    MOV

    CX,400D

    LOOP5:

    PUSH

    CX

    MOV

    CX,400D

    LOOP6:

    NOP

    NOP

    LOOP

    LOOP6

    POP

    CX

    LOOP

    LOOP5

    POP

    CX

    LOOP

    LOOP4

    POP

    CX

    RET

    SLEEP2

    ENDP

    ;时间延迟函数及速度3函数

    SLEEP3

    PROC

    PUSH

    CX

    MOV

    CX,280D

    LOOP7:

    PUSH

    CX

    MOV

    CX,280D

    LOOP8:

    PUSH

    CX

    MOV

    CX,280D

    LOOP9:

    NOP

    NOP

    LOOP

    LOOP9

    POP

    CX

    LOOP

    LOOP8

    POP

    CX

    LOOP

    LOOP7

    POP

    CX

    RET

    SLEEP3

    ENDP

    ;时间延迟函数及速度3函数

    SP_ADJ

    PROC

    CMP

    A,1

    JE

    S1

    CMP

    B,1

    JE

    S2

    CMP

    V,1

    CALL

    SLEEP3

    JMP

    S3

    S1:

    CALL

    SLEEP1

    JMP

    S3

    S2:

    CALL

    SLEEP2

    S3:

    RET

    SP_ADJ

    ENDP

    ;画游戏边框

    PAINT

    PROC

    NEAR

    DIS2

    DIS6

    80,0,0,0

    ;宏调用画上边框

    DIS7

    0,0,55,25

    ;宏调用画右1边框

    DIS7

    0,0,56,25

    ;宏调用画右2边框

    DIS7

    0,0,79,24

    ;宏调用画右3边框

    DIS7

    0,0,0,25

    ;宏调用画左1边框

    DIS7

    0,0,24,25

    ;宏调用画左2边框

    DIS7

    0,0,25,25

    ;宏调用画左3边框

    DIS6

    79,0,0,24

    ;宏调用画下边框

    DIS1

    ST3,6,3

    DIS1

    ST1,9,5

    DIS1

    ST5,11,5

    DIS1

    ST2,13,5

    DIS1

    ST4,17,3

    DIS1

    ST8,15,5

    DIS3

    RET

    PAINT

    ENDP

    ;分数字符串显示函数

    GOAL

    PROC

    NEAR

    DIS2

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,0

    MOV

    DH,11

    MOV

    DL,60

    INT

    10H

    MOV

    AH,09H

    ;显示str1

    MOV

    DX,SEG

    STRE

    MOV

    DS,DX

    MOV

    DX,OFFSET

    STRE

    INT

    21H

    DIS3

    RET

    GOAL

    ENDP

    ;打印实际得分

    POINT

    PROC

    NEAR

    DIS2

    MOV

    AH,2

    ;置光标位置

    MOV

    BH,0

    MOV

    DH,11

    MOV

    DL,67

    INT

    10H

    MOV

    AL,M

    CMP

    AL,10

    JAE

    X9

    ADD

    AL,30H

    MOV

    DL,AL

    MOV

    AH,02H

    ;显示得分

    INT

    21H

    JMP

    X10

    X9:

    MOV

    AL,M

    MOV

    AH,0

    MOV

    DL,10

    DIV

    DL

    PUSH

    AX

    MOV

    AH,2

    MOV

    BH,0

    MOV

    DH,11

    MOV

    DL,67

    INT

    10H

    ;打印十位

    ADD

    AL,0

    MOV

    DL,AL

    INT

    21H

    POP

    AX

    MOV

    AL,AH

    MOV

    AH,2

    MOV

    DH,11

    MOV

    DL,68

    INT

    10H

    ADD

    AL,0

    MOV

    DL,AL

    INT

    21H

    X10:

    DIS3

    RET

    POINT

    ENDP

    ;暂停函数

    PAUSE

    PROC

    NEAR

    DIS2

    P1:

    MOV

    AH,07H

    ;无显示输入

    INT

    21H

    CMP

    AL,20H

    ;判断是否是继续的空格

    JNE

    P1

    ;不是则跳转

    DIS3

    RET

    PAUSE

    ENDP

    ;退出函数

    EXIT

    PROC

    NEAR

    DIS2

    CALL

    CLEAR

    ;调用清屏函数

    DIS1

    ST6,12,28

    DIS1

    ST7,14,20

    MOV

    AH,4CH

    INT

    21H

    DIS3

    RET

    EXIT

    ENDP

    ;表示击中的函数

    BELL

    PROC

    NEAR

    PUSH

    DX

    PUSH

    AX

    PUSH

    CX

    MOV

    DX,60000D

    ;turn

    on/of

    60000d

    times

    IN

    AL,61H

    AND

    AL,11111100B

    SOUND:

    XOR

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识