108.遞歸整數四則運算

      網友投稿 703 2025-04-06

      /* 在BC31下編譯 */

      /* compile under Borland C++ 3.1 */

      /*

      對四則混合運算所提取的形式化表達式(生成式)

      -> { }

      -> + | -

      -> { }

      -> * | /

      -> ( ) | Number

      */

      #include

      #include

      char token; /*全局標志變量*/

      /*遞歸調用的函數原型*/

      int exp( void );

      int term( void );

      int factor( void );

      void error( void ) /*報告出錯信息的函數*/

      {

      fprintf( stderr, "錯誤\n");

      exit( 1 );

      }

      void match( char expectedToken ) /*對當前的標志進行匹配*/

      {

      if( token == expectedToken ) token = getchar(); /*匹配成功,獲取下一個標志*/

      else error(); /*匹配不成功,報告錯誤*/

      }

      void Message(void)

      {

      printf("================================================================\n");

      printf("* 遞歸實現的四則運算表達式求值程序 *\n");

      printf("****************************************************************\n");

      printf("使用方法:請從鍵盤上直接輸入表達式,以回車鍵結束.如45*(12-2)[回車]\n");

      printf("*****************************************************************\n\n");

      }

      main()

      {

      int result; /*運算的結果*/

      Message();

      printf(" >> 請輸入表達式: ");

      token = getchar(); /*載入第一個符號*/

      result = exp(); /*進行計算*/

      if( token == '\n' ) /* 是否一行結束 */

      printf( " >> 表達式的計算結果為 : %d\n", result );

      else error(); /* 出現了例外的字符 */

      puts("\n\n 請按任意鍵退出 ...\n");

      getch();

      return 0;

      }

      int exp( void )

      {

      int temp = term(); /*計算比加減運算優先級別高的部分*/

      while(( token == '+' ) || ( token == '-' ))

      switch( token ) {

      case '+': match('+'); /*加法*/

      temp += term();

      break;

      case '-': match('-');

      temp -= term(); /*減法*/

      break;

      }

      return temp;

      }

      int term( void )

      {

      int div; /*除數*/

      int temp = factor(); /*計算比乘除運算優先級別高的部分*/

      while(( token == '*' ) || ( token == '/' ))

      switch( token ) {

      case '*': match('*'); /*乘法*/

      temp *= factor();

      break;

      case '/': match('/'); /*除法*/

      div = factor();

      if( div == 0 ) /*需要判斷除數是否為0*/

      {

      fprintf( stderr, "除數為0.\n" );

      exit(1);

      }

      temp /= div;

      break;

      }

      return temp;

      }

      int factor( void )

      {

      int temp;

      if( token == '(' ) /*帶有括號的運算*/

      108.遞歸整數四則運算

      {

      match( '(' );

      temp = exp();

      match(')');

      }

      else if ( isdigit( token )) /*實際的數字*/

      {

      ungetc( token, stdin ); /*將讀入的字符退還給輸入流*/

      scanf( "%d", &temp ); /*讀出數字*/

      token = getchar(); /*讀出當前的標志*/

      }

      else error(); /*不是括號也不是數字*/

      return temp;

      }

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:PPT轉PDF怎么轉?(wpsppt轉pdf怎么轉)
      下一篇:如何不顯示零值?(如何不顯示零值)
      相關文章
      亚洲国产精品久久久久秋霞影院| 亚洲国产精品国自产拍电影| 亚洲区视频在线观看| 亚洲午夜久久影院| 亚洲国产成人高清在线观看| 亚洲午夜久久久久久久久久| 国产AⅤ无码专区亚洲AV| 一本色道久久综合亚洲精品高清| 亚洲阿v天堂在线2017免费| 国产亚洲综合视频| 亚洲成av人片在线观看天堂无码| 在线观看亚洲电影| 国产亚洲精品免费| 亚洲视频在线精品| 亚洲中文字幕视频国产| 国产AV无码专区亚洲AV漫画| 亚洲精品国产品国语在线| 亚洲国产精品无码专区在线观看| 亚洲国产精品无码久久久秋霞2| 亚洲国产成人一区二区精品区 | 亚洲成AV人片一区二区| 亚洲国产精品无码AAA片| 久久精品国产亚洲沈樵| 亚洲AV无码一区东京热| 亚洲天堂中文资源| 亚洲欧洲日产国码二区首页| 97se亚洲国产综合自在线| 亚洲午夜精品一区二区麻豆| 在线亚洲午夜片AV大片| 亚洲成a∧人片在线观看无码 | 亚洲AV无码不卡无码| 亚洲免费精彩视频在线观看| 亚洲精品视频专区| 国产成人精品日本亚洲网址| 亚洲女女女同性video| 亚洲?v女人的天堂在线观看| 国产亚洲大尺度无码无码专线| 亚洲AV无码日韩AV无码导航| 亚洲无线一二三四区| 亚洲精品无码久久久久YW| 亚洲国产一区二区视频网站|