黄色国产视频,男女啪啪18禁无遮挡激烈,久草热8精品视频在线观看,四虎国产精品永久在线下载

            數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告總結(jié)

            時間:2022-07-01 22:45:35 報告范文 我要投稿
            • 相關(guān)推薦

            數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告總結(jié)

            設(shè)計題目:模擬計算器程序

            數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告總結(jié)

            學(xué)生姓名:謝先斌

            系 別:計算機(jī)與通信工程學(xué)院

            專 業(yè):計算機(jī)科學(xué)與技術(shù)

            班 級:1班

            學(xué) 號:541007010144

            指導(dǎo)教師:盧冰 李曄

            2012 年 6 月 21 日

            鄭州輕工業(yè)學(xué)院

            課 程 設(shè) 計 任 務(wù) 書

            題目 模擬計算器程序

            專業(yè)、班級 計算機(jī)科學(xué)與技術(shù)10-01班 學(xué)號 541007010144 姓名 謝先斌

            主要內(nèi)容:

            設(shè)計一個模擬計算器的程序,要求能對包含加、減、乘、除、括號運(yùn)算符及SQR和ABS函數(shù)的任意整型表達(dá)式進(jìn)行求解。

            基本要求:

            要檢查有關(guān)運(yùn)算的條件,并對錯誤的條件產(chǎn)生報警。

            主要參考資料:

            [1] 嚴(yán)蔚敏 吳偉民 編著《數(shù)據(jù)結(jié)構(gòu)(C語言版)》 清華大學(xué)出版社 第44頁 3.1 棧、第52頁3.2.5表達(dá)式求值

            完 成 期 限: 2012年6月21日

            指導(dǎo)教師簽名:

            課程負(fù)責(zé)人簽名:

            2012年 6月 21 日

            一、 設(shè)計題目

            模擬計算器的程序

            設(shè)計一個模擬計算器的程序,要求能對包含加、減、乘、除、括號運(yùn)算符及SQR和ABS函數(shù)的任意整型表達(dá)式進(jìn)行求解。

            設(shè)計要求:要檢查有關(guān)運(yùn)算的條件,并對錯誤的條件產(chǎn)生報警。

            二、 算法設(shè)計的思想

            本程序設(shè)計主要是應(yīng)用了棧,利用棧的“先進(jìn)后出”原理,建立了兩個棧,分別為運(yùn)算符棧pOStack和運(yùn)算數(shù)棧pDStack。算法的基本思想(參考課本p53頁)是:

            (1) 首先置操作數(shù)棧為pDStack空棧,表達(dá)式起始符為“=”,位運(yùn)算符棧的棧底元素;

            (2) 依次讀入表達(dá)式中的每個字符,若是操作數(shù)則進(jìn)入pDStack棧,若是運(yùn)算符則和pOStack棧的棧定運(yùn)算符比較優(yōu)先權(quán)后作相應(yīng)操作,直到整個表達(dá)式求值完畢(即pOStack棧的棧定元素和當(dāng)前讀入的字符均為“=” )。

            三、 算法的流程圖

            本程序的流程如下附圖1所示:

            附圖1 程序流程圖

            四、 算法設(shè)計分析

            首先創(chuàng)建了兩個棧:

            typedef struct OPStack //定義運(yùn)算符棧

            {

            char opStack[MAX_OPERATOR_NUM];

            int top;

            }OPStack, *pOPStack;

            typedef struct DATAStack //定義運(yùn)算數(shù)棧

            {

            double stack[MAX_DATA_NUM];

            int top;

            }DATAStack, *pDATAStack;

            來分別存放運(yùn)算符和運(yùn)算數(shù)。在兩個結(jié)構(gòu)體中均有一個top數(shù)據(jù)域,當(dāng)top=-1時,表示該站為空棧。

            定義一個Evaluateexpression_r()函數(shù)來完成函數(shù)運(yùn)算的主要功能:讀入表達(dá)式,并計算結(jié)果。以下是對該函數(shù)的分析:

            當(dāng)一次運(yùn)算開始時,分別調(diào)用InitpOPStack(pOPStack &pOStack)函數(shù)和InitpDATAStack(pDATAStack &pDStack)函數(shù)分別對運(yùn)算符棧和運(yùn)算數(shù)棧進(jìn)行初始化。調(diào)用PushOPStack(pOStack, '=')函數(shù)來完成運(yùn)算符棧棧低元素的設(shè)置。

            通過PushOPStack(pOPStack &pOStack, char ch)函數(shù)、

            PopOPStack(pOPStack &pOStack, char &ch)函數(shù)、

            PushDATAStack(pDATAStack &pDStack, double d)函數(shù)和PopDATAStack(pDATAStack &pDStack, double &d)函數(shù)來分別完成運(yùn)算符和運(yùn)輸數(shù)的進(jìn)出棧操作。getToppOPStack(pOPStack &pOStack)函數(shù)和getToppDATAStack(pDATAStack &pDStack) 函數(shù)主要是進(jìn)行得到棧定元素的作用,特別是在對運(yùn)算符棧優(yōu)先級的比較中十分重要,其中還會調(diào)用IsOP(char &ch) 函數(shù)來區(qū)分讀入的是運(yùn)算符還是運(yùn)算數(shù)。

            ChangeChar(char &c)函數(shù)當(dāng)每次讀入一個字符是都會調(diào)用一次,主要的作用就是完成不用區(qū)分A、S的大小的功能。

            Precede(char op1, char op2)函數(shù)主要是通過一個二維字符串?dāng)?shù)組來存放9種運(yùn)算符的優(yōu)先級比較的結(jié)果,每當(dāng)讀到一個運(yùn)算符后就進(jìn)行與運(yùn)算符棧頂元素比較,通過返回的“<、>、=”結(jié)果來進(jìn)行下一步的操作:'<'表示棧頂元素優(yōu)先級低,運(yùn)算符進(jìn)棧;'='表示脫括號并接受下一個字符;'>'表示運(yùn)算符和運(yùn)算數(shù)各退棧一次并調(diào)用Operate(double a, char theta, double b)函數(shù)(主要是對出棧的運(yùn)算符和運(yùn)算數(shù)進(jìn)行計算),最后將運(yùn)算結(jié)果壓入運(yùn)算數(shù)棧pDStack。

            當(dāng)操作結(jié)束時運(yùn)算數(shù)棧的棧頂元素就是計算結(jié)果,分別調(diào)用ClearpOPStack(pOStack)函數(shù)清空運(yùn)算符棧、ClearpDATAStack(pDStack)函數(shù)清空運(yùn)算數(shù)棧以待下一次繼續(xù)進(jìn)行相關(guān)操作。

            print_user()函數(shù)和exit_E()函數(shù)開始和結(jié)束時個調(diào)用一次,分別完成歡迎界面和退出界面的布置。main()是本程序的主函數(shù),主要通過while語句和switch語句來完成本程序的運(yùn)行,當(dāng)輸入Y(y)時調(diào)用Evaluateexpression_r()函數(shù)完成計算,當(dāng)輸入N(n)時,調(diào)用exit_E()函數(shù)退出本程序的運(yùn)行。

            本程序還考慮到各種異常的處理,如運(yùn)算時除數(shù)為0、被開方數(shù)為0等情況的出現(xiàn),最終的處理是直接退出程序的運(yùn)行。

            五、 運(yùn)行結(jié)果分析

            1. 程序開始界面,如附圖2:

            附圖2 開始界面

            2.如下附圖3,附圖4分別是選擇進(jìn)入和退出程序界面:

            附圖3(在以下界面輸入計算式即可運(yùn)行出計算結(jié)果如附圖5)

            附圖4 退出界面

            附圖5 運(yùn)行界面

            2. 對異常的處理

            a) 對異常1除數(shù)為0,如輸入“1+2/0=”程序?qū)⒅苯油顺觯绺綀D6:

            附圖6 異常1除數(shù)為0

            b) 對異常2被開方數(shù)為負(fù)數(shù),如輸入“3+S(-9)=”程序?qū)⒅苯油顺觯绺綀D7:

            附圖7 異常2被開方數(shù)為負(fù)數(shù)

            3.以下是對各種簡單運(yùn)算的運(yùn)行結(jié)果,如附圖8:

            附圖8 簡單運(yùn)算

            3. 綜合運(yùn)算:如式子“1/2+A(7-8)-S(9*8)=”運(yùn)行結(jié)果如附圖9

            附圖9 綜合運(yùn)算

            六、 收獲及體會

            本程序以C語言的棧的相關(guān)知識為基礎(chǔ),通過控制兩個棧(運(yùn)算數(shù)棧和運(yùn)算符棧)的進(jìn)出的棧操作,來實(shí)現(xiàn)對包含加、減、乘、除、括號運(yùn)算符及SQRT和ABS函數(shù)的任意整型表達(dá)式的求解運(yùn)算。

            從程序的編寫來看,感覺這次自己真的學(xué)到了好多,特別是對程序的開發(fā)流程。從最初的選定程序,到最終的程序運(yùn)行成功,讓我感到如果是僅僅掌握課本上的知識是遠(yuǎn)遠(yuǎn)不能夠很好的應(yīng)用到實(shí)際的編程中去的。在這個過程中還需要我們更多的去考慮到實(shí)際條件的種種限制和約束。

            我在寫本程序的過程中也遇到了很多的問題,當(dāng)然本程序的核心問題就是對兩個棧的壓出棧操作,需要做優(yōu)先級判斷,并要考慮什么時候進(jìn)棧,什么時候出棧等操作。我采用了課本上第52-54頁講的通過一個二維字符串?dāng)?shù)組來控制比較“+-*、()AS=”共9個運(yùn)算符的優(yōu)先級控制。對異常,如除數(shù)為0、被開方數(shù)小于0等異常也進(jìn)行了精心的處理。對操作過程中要用到的Y、N、A、S等字符也進(jìn)行了改進(jìn),最終本程序可以不區(qū)分大小寫就完成相關(guān)操作。

            總之,經(jīng)過本次專業(yè)課程設(shè)計,讓我掌握了開發(fā)應(yīng)用軟件的基本流程,運(yùn)用所學(xué)編程技能的基本技巧,也讓我初步了解了軟件設(shè)計的基本方法,提高進(jìn)行工程設(shè)計的基本技能及分析、解決實(shí)際問題的能力,為以后畢業(yè)設(shè)計和工程實(shí)踐等打下良好的基礎(chǔ)。相信通過這次的課程設(shè)計,我對所學(xué)的《數(shù)據(jù)結(jié)構(gòu)(C語言版)》和各種編程語言都有了一個全新的認(rèn)識。我也會積極吸取本次課程設(shè)計的經(jīng)驗(yàn),繼續(xù)研究數(shù)據(jù)結(jié)構(gòu)和所學(xué)的各種編程語言。

            七、 源代碼

            # include

            # include

            # include

            # include

            # define MAX_OPERATOR_NUM 100 //運(yùn)算符棧數(shù)組長度

            # define MAX_DATA_NUM 100 //運(yùn)算數(shù)棧數(shù)組長度

            typedef struct OPStack //定義運(yùn)算符棧

            {

            char opStack[MAX_OPERATOR_NUM];

            int top;

            }OPStack, *pOPStack;

            typedef struct DATAStack //定義運(yùn)算數(shù)棧

            {

            double stack[MAX_DATA_NUM];

            int top;

            }DATAStack, *pDATAStack;

            void InitpOPStack(pOPStack &pOStack) //初始化運(yùn)算符棧

            {

            if( !(pOStack = (pOPStack)malloc(sizeof(OPStack)))) //為運(yùn)算符棧分配空間

            {

            printf("分配內(nèi)存空間失敗! ");

            exit(-1);

            }

            pOStack->top = -1;

            }

            void InitpDATAStack(pDATAStack &pDStack) //初始化運(yùn)算數(shù)棧

            {

            if( !(pDStack = (pDATAStack)malloc(sizeof(DATAStack)))) //為運(yùn)算數(shù)棧分配空間

            {

            printf("分配內(nèi)存空間失敗! ");

            exit(-1);

            }

            pDStack->top = -1;

            }

            void PushOPStack(pOPStack &pOStack, char ch) //運(yùn)算符進(jìn)棧

            {

            pOStack->opStack[++(pOStack->top)] = ch;

            }

            void PopOPStack(pOPStack &pOStack, char &ch) //運(yùn)算符出棧

            {

            ch = pOStack->opStack[pOStack->top];

            pOStack->top--;

            }

            void PushDATAStack(pDATAStack &pDStack, double d) //運(yùn)算數(shù)進(jìn)棧

            {

            ++(pDStack->top);

            pDStack->stack[pDStack->top] = d;

            }

            void PopDATAStack(pDATAStack &pDStack, double &d) //運(yùn)算數(shù)出棧

            {

            d = pDStack->stack[pDStack->top];

            pDStack->top--;

            }

            void ClearpOPStack(pOPStack &pOStack) //清空運(yùn)算符棧

            {

            pOStack->top = -1;

            }

            void ClearpDATAStack(pDATAStack &pDStack) //清空運(yùn)算數(shù)棧

            {

            pDStack->top = -1;

            }

            char GetToppOPStack(pOPStack &pOStack) //獲取運(yùn)算符棧頂元素

            {

            return pOStack->opStack[pOStack->top];

            }

            double GetToppDATAStack(pDATAStack &pDStack) //獲取運(yùn)算數(shù)棧頂元素

            {

            return pDStack->stack[pDStack->top];

            }

            bool IsOP(char &ch) //區(qū)分 運(yùn)算符 和 運(yùn)算數(shù) 的函數(shù),是運(yùn)算符時返回true,否則返回false

            { //判斷是否為符號

            if ( (ch == '+') || (ch == '-') || (ch == '*') || (ch == '/') || (ch == '=') || (ch == 'A') || (ch == 'S') || (ch == 'a') || (ch == 's') || (ch == '(') || (ch == ')') )

            return true;

            else

            return false;

            }

            char Precede(char op1, char op2) //參考《數(shù)據(jù)結(jié)構(gòu)》(C語言版)第53頁 3.2.5表達(dá)式求值 表 3.1

            {

            char tab[9][10]; //定義字符串的二維數(shù)組來存放運(yùn)算符優(yōu)先級的關(guān)系

            strcpy( tab[0], ">><<<><<>" );

            strcpy( tab[1], ">><<<><<>" );

            strcpy( tab[2], ">>>><><<>" );

            strcpy( tab[3], ">>>><><<>" );

            strcpy( tab[4], "<<<<<=<

            strcpy( tab[5], ">>>>E>>>>" );

            strcpy( tab[6], ">>>><>>>>" );

            strcpy( tab[7], ">>>><>>>>" );

            strcpy( tab[8], "<<<<

            printf(" | ***歡迎您的下次使用!謝謝!!!*** | "); //退出使用

            printf(" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ");

            }

            double Operate(double a, char theta, double b) //對出棧的運(yùn)算符和運(yùn)算數(shù)進(jìn)行計算

            {

            double s;

            switch(theta)

            {

            case '+':

            s = a + b;

            break;

            case '-':

            s = a - b;

            break;

            case '*':

            s = a * b;

            break;

            case '/':

            if ( b != 0 ) //判斷除數(shù)是否為0,若為0,退出程序

            {

            s = a/b;

            break;

            }

            else

            {

            printf(" #### 除數(shù)為0,非法運(yùn)算。程序終止! #### ");

            exit_E(); //打印結(jié)束菜單

            exit(-1);

            }

            case 'A':

            s = fabs(b); //調(diào)用FABS()函數(shù)

            break;

            case 'S':

            if( b >= 0) //判斷被開方數(shù)是否為0,若為0,退出程序

            {

            s = sqrt(b); //調(diào)用SQRT()函數(shù)

            break;

            }

            else

            {

            printf(" #### 求負(fù)數(shù)的平方根是非法運(yùn)算。程序終止! #### ");

            exit_E(); //打印結(jié)束菜單

            exit(-1);

            }

            }

            return s;

            }

            char ChangeChar(char &c) //通過ChangeChar函數(shù)來把a(bǔ)、s的小寫字母改為大寫的

            {

            if( c == 'a' )

            c = 'A';

            else if( c == 's' )

            c = 'S';

            return c;

            }

            //參考《數(shù)據(jù)結(jié)構(gòu)》(C語言版)第53頁 3.2.5表達(dá)式求值算法3.4 Evaluateexpression_r()函數(shù)

            void Evaluateexpression_r() //計算函數(shù):讀入表達(dá)式,并計算結(jié)果

            {

            pOPStack pOStack; //聲明運(yùn)算符棧

            pDATAStack pDStack; //聲明運(yùn)算數(shù)棧

            double result; //存運(yùn)算的結(jié)果

            char x, theta, c; //c存放讀取的字符,x、theta存放運(yùn)算符棧的棧頂元素

            int flag, data; //標(biāo)識符,用來讀入連續(xù)的數(shù)字

            double s;

            double getd; //存放GetTop***的結(jié)果

            double a, b, cc; //a,b存放數(shù)據(jù)棧出棧的棧頂元素, c存放運(yùn)算結(jié)果

            flag = 0; //初始化標(biāo)識符,用來判斷字符串中的連續(xù)數(shù)字

            data = 0; //

            InitpOPStack(pOStack); //初始化運(yùn)算符棧

            InitpDATAStack(pDStack); //初始化運(yùn)算數(shù)棧

            PushOPStack(pOStack, '='); //在運(yùn)算符棧底放入'='

            printf(" &請輸入表達(dá)式以'='結(jié)束:");

            c = get); //讀入字符

            ChangeChar(c); //通過調(diào)用函數(shù)來實(shí)現(xiàn)把小寫的a、s改為大寫的A、S

            while( c != '=' || GetToppOPStack(pOStack) != '=')

            {

            if( !IsOP(c) ) //不是運(yùn)算符進(jìn)棧

            {

            s = c - '0'; //把字符轉(zhuǎn)化為數(shù)字

            if ( flag == 1 )

            {

            PopDATAStack(pDStack, getd);

            s = getd*10 + s;

            }

            PushDATAStack(pDStack, s);

            flag = 1;

            c = get);

            ChangeChar(c);

            }

            else

            {

            flag = 0;

            switch( Precede(GetToppOPStack(pOStack), c) ) //輸入元素和運(yùn)算符棧頂元素比較

            {

            case '<': //棧頂元素優(yōu)先級低

            PushOPStack(pOStack, c);

            c = get);

            ChangeChar(c);

            break;

            case '=': //托括號并接受下一個字符

            PopOPStack(pOStack, x);

            c = get);

            ChangeChar(c);

            break;

            case '>': //退棧并將運(yùn)算結(jié)果進(jìn)棧

            PopOPStack(pOStack, theta);

            PopDATAStack(pDStack, b);

            PopDATAStack(pDStack, a);

            cc = Operate(a, theta, b);

            PushDATAStack(pDStack, cc);

            break;

            }//switch

            }//else

            }//while

            result = GetToppDATAStack(pDStack); //運(yùn)算結(jié)束時,運(yùn)算數(shù)棧的棧底元素就是計算結(jié)果

            ClearpOPStack(pOStack); //清空運(yùn)算符棧

            ClearpDATAStack(pDStack); //清空運(yùn)算數(shù)棧

            printf(" ->計算結(jié)果為:%.2f ", result); //輸出運(yùn)算結(jié)果

            return ;

            }

            void print_user() //歡迎界面

            {

            printf(" 歡迎使用C語言版模擬計算器 ");

            printf("************************************************************************ ");

            printf(" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ");

            printf(" | 模擬計算器使用說明 | ");

            printf(" | 作者:謝先斌 | ");

            printf(" | 本程序包括對'+'、'-'、'*'、'/'、'()'的運(yùn)算 | ");

            printf(" | 本程序中ABS()算用A()替代、SQRT()運(yùn)算用S()代替 | ");

            printf(" | 本程序中的一切字母均不區(qū)分大小寫 | ");

            printf(" 正確的表達(dá)式如:1+A(7-8)+S(9*8)= ");

            printf(" | 輸入'='表示表達(dá)式輸入結(jié)束!! | ");

            printf(" | 歡迎使用!!!-->--> | ");

            printf(" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| ");

            printf("************************************************************************ ");

            }

            int main() //主函數(shù)

            {

            char in;

            bool b; //標(biāo)識符,用來標(biāo)識是否結(jié)束程序

            b = true; //初始化,不結(jié)束

            print_user(); //打印歡迎界面

            printf(" *請確認(rèn)使用計算器Y/N:");

            while(1)

            {

            scanf("%c", &in); //確認(rèn)是否繼續(xù)操作

            get); //吃掉會車,避免干擾

            switch(in)

            {

            case 'Y':

            case 'y':

            {

            Evaluateexpression_r(); //進(jìn)入計算函數(shù):讀入表達(dá)式,并計算結(jié)果

            break;

            }

            case 'N':

            case 'n':

            {

            exit_E();

            b = false;

            break;

            }

            //default:

            // printf(" **輸入錯誤,請重新輸入Y/N:");

            // break;

            }

            if(b==false) //如果 b==false ,退出整個程序

            break;

            printf(" *您確定要繼續(xù)使用計算機(jī)Y/N:");

            get); //用getchar吃掉回車,避免對后續(xù)輸入中in的干擾

            }

            return 0;

            }


            【數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告總結(jié)】相關(guān)文章:

            實(shí)驗(yàn)報告總結(jié)02-14

            excel實(shí)驗(yàn)報告總結(jié)范文07-04

            中財實(shí)驗(yàn)報告總結(jié)怎么寫07-03

            關(guān)于實(shí)驗(yàn)報告01-27

            化學(xué)實(shí)驗(yàn)報告01-28

            電路實(shí)驗(yàn)報告11-09

            生物實(shí)驗(yàn)報告08-13

            化學(xué)實(shí)驗(yàn)報告07-03

            實(shí)驗(yàn)報告范文09-05

            科技實(shí)驗(yàn)報告05-26

            主站蜘蛛池模板: 丰满岳妇乱一区二区三区| 亚洲永久在线观看| AV免费网址在线观看| 精品熟女少妇av久久免费 | 男女激情视频网站| 国产精品亚洲专区无码老司国| 免费无毒永久av网站| 欧美日韩激情一区| 免费毛片一区二区三区亚女同| 99久久婷婷国产综合精品青草漫画| 久久久久久久久久久免费精品| av一区二区三区| 日本久久久久久科技有限公司| 日日骑夜夜操| 亚洲欧美偷国产日韩| 国产精品免费麻豆入口| 99精品视频网站| 日韩久久毛片| 91精品视频一区| 国产一卡2卡3卡4卡网站免费| 国产精品亚洲专区无码唯爱网| 国产v片免费观看| 少妇高潮露脸国语对白| 国产精选第一页| 又黄又爽的60分钟视频| 女人被躁到高潮免费视频软件| 国产精品18在线观看| 性生活免费大片| 精品国产免费久久久久久婷婷 | 77777五月色婷婷丁香视频在线| 免费无码国产完整版av| 国产精品成人观看视频国产奇米| 黄色激情免费网站| 一级特黄特色的免费大片视频| 毛片手机在线看| 97影院理论午夜伦不卡| 亚洲 精品 综合 精品 自拍| 久久嫩草精品久久久久| 有码中文字字母| 久久不卡网| 亚洲熟妇无码av不卡在线观看|