找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人尊貴會員無限看帖不用回覆認識好友、聊天,分享生活趣事
office流出進擊的巨銀魂中字mg惡靈古堡
スターシkkbox 風潜入レ○fsdss 73pale car恵比寿と

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

中和廣福路 不滿轎車

(4月新番)[繁]THE NEW

[繁]怪人的沙拉碗03-

[繁]魔法科高中的劣等

衝進中橫水溝 紅牌重

[繁]老夫老妻重返青春
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 919|回復: 6
打印上一主題下一主題

[作業]模擬計算機功能[複製鏈接]

Rank: 1

帖子
21
積分
147 點
潛水值
3395 米
跳轉到指定樓層
樓主
發表於 2010-5-13 09:50 AM|只看該作者|倒序瀏覽
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
寫一程式模擬簡單的計算機 每個資料列含下列的運算子中的一個及其右運算元
假設左運算元存在累加器中(初值為0) 需要函式scan_data 有2個輸出參數回傳
從資料列讀入的運算子元和右運算元 亦需函式do_next_op 執行運算子的功能
此函式有2個輸入參數(運算子和運算元) 及一個輸入/輸出參數(累加器) 有效運算子有
+ 加
- 減
* 乘
/ 除
^ 次方
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

runeray2000 該用戶已被刪除
頭香
發表於 2010-5-13 01:38 PM|只看該作者
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
dev_c++寫的~   給你參考

  1. #include <iostream>
  2. #include <math.h>

  3. using namespace std;

  4. int scan_data(char *data_in,char *op,float *data_float)
  5. {
  6.     int sw_div;
  7.     char *a=data_in;
  8.     float div_=0;
  9.    
  10.     switch(*a)
  11.     {
  12.         case '+':
  13.         case '-':
  14.         case '*':
  15.         case '/':
  16.         case '^':
  17.         case 'q':
  18.             break;
  19.         default:
  20.             return 0;
  21.     }
  22.     *op=*a;
  23.     a++;
  24.     for(*data_float=0; *a!='\n' && *a!=0 ;a++)
  25.     {
  26.         
  27.         if(*a>='0' && *a<='9')
  28.         {
  29.             *data_float*=10;
  30.             *data_float+=(float)(*a-'0');
  31.         }

  32.         div_*=10;
  33.         if(*a=='.')
  34.           if(div_==0)
  35.             div_=1;
  36.           else
  37.             return -1;

  38.         if(!(*a=='.' || (*a>='0' && *a<='9')))
  39.           return 0;
  40.     }
  41.     if(div_>=1)
  42.       *data_float/=div_;
  43.     return -1;
  44.    
  45. }
  46. void do_next_op(float *result,char *op,float *data_float)
  47. {
  48.     switch(*op)
  49.     {
  50.         case '+':
  51.             *result+=*data_float;
  52.             break;
  53.         case '-':
  54.             *result-=*data_float;
  55.             break;
  56.         case '*':
  57.             *result*=*data_float;
  58.             break;
  59.         case '/':
  60.             if(*data_float==0)
  61.             {
  62.               cout << "can not / 0 \n";
  63.               break;
  64.             }
  65.             *result/=*data_float;
  66.             break;
  67.         case '^':
  68.             *result=pow(*result,*data_float);
  69.             break;
  70.     }
  71.     return ;
  72. }
  73. int main(int argc, char *argv[])
  74. {
  75.     float result=0,data_float;
  76.     char op='m',data_in[200];
  77.     while(op!='q')
  78.     {
  79.       cout << "result so far is " << result << "\n";
  80.       cin >> data_in;
  81.       if(scan_data(&data_in[0],&op,&data_float))
  82.         do_next_op(&result,&op,&data_float);
  83.       else
  84.       {
  85.         cout << "wrong data in\n";
  86.         continue;
  87.       }
  88.     }
  89.     cout << "final ressult is " << result << "\n";
  90.     system("PAUSE");
  91.     return EXIT_SUCCESS;
  92. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 1

帖子
21
積分
147 點
潛水值
3395 米
3
發表於 2010-5-13 01:54 PM|只看該作者
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。
very thanks 但我要寫的是C...可以再麻煩你??

使用道具檢舉

Rank: 1

帖子
21
積分
147 點
潛水值
3395 米
4
發表於 2010-5-13 02:44 PM|只看該作者
程式本身要可以用整數、分數、小數作輸入,輸出一律以最簡約分的分數(如果答案為分數),或整數顯示。
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

runeray2000 該用戶已被刪除
5
發表於 2010-5-13 04:05 PM|只看該作者
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php
=.= 你的題目要講清楚耶~  而且示範的輸出、輸入都是小數耶~




若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

Rank: 1

帖子
21
積分
147 點
潛水值
3395 米
6
發表於 2010-5-13 07:06 PM|只看該作者
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

runeray2000 該用戶已被刪除
7
發表於 2010-5-14 12:10 PM|只看該作者
本帖最後由 runeray2000 於 2010-5-14 12:12 PM 編輯

純 C 寫的~
^ 次方的函數的 範圍是抓大概的而已,超出會有錯誤訊息~
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. struct fn_
  5. {
  6.     long int up,low;
  7. }result,data;
  8. void uf(struct fn_ *d)    //約分
  9. {
  10.     long int i,v;
  11.     if(d->up<0)
  12.       v=-1;
  13.     else
  14.       v=1;
  15.     d->up*=v;
  16.     i=(d->up<d->low ? d->up : d->low);
  17.     for(;i>=2;i--)
  18.         if((d->up % i ==0) &&( d->low % i ==0))
  19.         {
  20.             d->up/=i;
  21.             d->low/=i;
  22.             i=(d->up<d->low ? d->up : d->low);
  23.         }
  24.     d->up*=v;
  25. }
  26. char *get_value(char *a,long int *val,long *val_div)    // 截取數字(含小數)
  27. {
  28.     *val_div=0;
  29.     *val=0;
  30.     for(; *a!='\n' && *a!=0 && *a!='/';a++)
  31.     {
  32.         if(*a>='0' && *a<='9')
  33.         {
  34.             *val*=10;
  35.             *val+=(long int)(*a-'0');
  36.         }

  37.         *val_div*=10;
  38.         if(*a=='.')
  39.           if(*val_div==0)
  40.             *val_div=1;
  41.           else
  42.             return 0;

  43.         if(!(*a=='/' || *a=='.' || (*a>='0' && *a<='9')))
  44.           return 0;
  45.     }
  46.     if(*val_div==0)
  47.       *val_div=1;
  48.       
  49.     return a;
  50. }
  51. int scan_data(char *a,char *op,struct fn_ *data)
  52. {
  53.     long int up_val=0,up_div=0,low_val=0,low_div=0;
  54.    
  55.     switch(*a)
  56.     {
  57.         case '+':
  58.         case '-':
  59.         case '*':
  60.         case '/':
  61.         case '^':
  62.         case 'q':
  63.             break;
  64.         default:
  65.             return 0;
  66.     }
  67.     *op=*a;
  68.     a++;

  69.    
  70.     if(!(a=get_value(a,&up_val,&up_div)))
  71.       return 0;
  72.     if(*a=='/')
  73.     {
  74.       if(!(a=get_value(++a,&low_val,&low_div)))
  75.         return 0;
  76.       if(*a=='/' || low_val==0)
  77.         return 0;
  78.       data->up=up_val*low_div;
  79.       data->low=low_val*up_div;
  80.       uf(data);
  81.       return -1;
  82.     }
  83.     data->up=up_val;
  84.     data->low=up_div;
  85.     uf(data);
  86.     return -1;
  87. }
  88. int do_next_op(struct fn_ *result,char *op,struct fn_ *data)
  89. {
  90.     double flt_v,flt_p;
  91.     char flt_str[100];
  92.     switch(*op)
  93.     {
  94.         case '+':
  95.             result->up=result->up*data->low+result->low*data->up;
  96.             result->low*=data->low;
  97.             break;
  98.         case '-':
  99.             result->up=result->up*data->low-result->low*data->up;
  100.             result->low*=data->low;
  101.             break;
  102.         case '*':
  103.             result->up*=data->up;
  104.             result->low*=data->low;
  105.             break;
  106.         case '/':
  107.             result->up*=data->low;
  108.             result->low*=data->up;
  109.             return 0;
  110.             break;
  111.         case '^':
  112.             flt_v=(double)result->up/(double)result->low;
  113.             flt_p=(double)data->up/(double)data->low;
  114.             flt_v=pow(flt_v,flt_p);
  115.             sp rintf(flt_str,"%5.4f",flt_v);                                   // 精度是整數五位小數四位
  116.             if(strlen(flt_str)>10)                                               // 範圍(用位數)
  117.             {
  118.               p rintf("out of range\n");
  119.               break;
  120.             }
  121.             get_value(&flt_str[0],&result->up,&result->low);
  122.             break;
  123.     }
  124.     uf(result);
  125.     return -1;
  126. }
  127. void show_out(const char* chr,struct fn_ a)                 //顯示
  128. {
  129.     p rintf("%s ", chr);
  130.    
  131.     if(a.up%a.low == 0)
  132.       p rintf("%ld\n",a.up/a.low);                                                      // 只有 整數時
  133.     else
  134.       if(a.up>a.low)
  135.         p rintf("%ld %ld/%ld\n",a.up/a.low,a.up%a.low,a.low);            //含整數 + 分字分母
  136.       else
  137.         p rintf("%ld/%ld\n",a.up,a.low);                                              //分子分母
  138. }
  139. int main(int argc, char *argv[])
  140. {
  141.     char op='m',data_in[200];
  142.     result.up=0;
  143.     result.low=1;
  144.     while(op!='q')
  145.     {
  146.       show_out("result so far is",result);
  147.       scanf("%s",data_in);
  148.       if(scan_data(&data_in[0],&op,&data))
  149.       {
  150.         if(!do_next_op(&result,&op,&data))
  151.           p rintf("wrong data input\n");         
  152.       }
  153.       else
  154.         p rintf("wrong data input\n");         
  155.     }
  156.     show_out("final ressult is",result);
  157.     system("PAUSE");
  158.     return 0;
  159. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部