iT邦幫忙

1

C語言四則運算

  • 分享至 

  • xImage

抱歉小妹還是新手沒辦法回覆上一篇給我幫助的人
謝謝大家很溫暖
目前碰到一個問題是要做一個自動計算的四則運算
我看網路上都是教學如何做一個輸入的計算機
想問一下以下程式碼該如何修改才會自己跑
先說謝謝大家?
int main() {
double a, b;
char op;
double answer;
printf("Please enter your number: ");
scanf("%lf%c%lf", &a, &op, &b);
if (op == '+') {
answer = a + b;
}
else if (op == '-') {
answer = a - b;
}
else if (op == '*') {
answer = a * b;
}
else {
answer = a / b;
}
printf("Answer: %lf\n", answer);
return 0;
}

看更多先前的討論...收起先前的討論...
先學會在這裏使用程式碼並縮放排列吧。
我一直再跟你說,先學會如何問。
這很重要的。
淺水員 iT邦大師 6 級 ‧ 2022-09-20 12:59:23 檢舉
貼程式碼參考這張圖
https://ithelp.ithome.com.tw/upload/images/20220506/20112943CaY46NCTvh.png
尼克 iT邦大師 1 級 ‧ 2022-09-20 13:09:07 檢舉
做看好心人士。我是線上測試沒問題!
https://www.onlinegdb.com/
台科大小妹!
柳丁柚 iT邦新手 1 級 ‧ 2022-09-20 13:33:39 檢舉
不用修改直接編譯?
有進步,MARKDOWN 的用法在熟悉一下,好好地把問題排版排好,程式碼哪邊不確定的寫清楚,然後大概的問題在哪說一下,這樣就是合格的發問者了,目前五十分,加油
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
japhenchen
iT邦超人 1 級 ‧ 2022-09-20 13:14:09

c的話你要自己做個簡化的直譯器.........

如果是c#的話,這裡有範例:
https://dotnetfiddle.net/B9ocfc

using System;
using org.matheval;
					
public class Program
{
	public static void Main()
	{
		Expression expression = new Expression("3*(4+5)/6*(7+8)-9");
		Decimal salary = expression.Eval<Decimal>();	
		Console.WriteLine(salary);
	}
}
看更多先前的回應...收起先前的回應...

這是我很久以前寫的四則運算(含括號)的程式,OBJECT PASCAL語法,上班時間不太好花太多心思在外務上,所以沒有想現在改成C語法,參考看看吧

function formulax(calcstr:string):double;
var
  x : integer;
  ssign: string ;
  calclist: TStringlist;
begin
  result:=0;
  calclist:=TStringlist.Create;
  calcstr:=stringreplace(calcstr,' ','',[rfReplaceAll]);
  calcstr:=stringreplace(calcstr,#13#10,'',[rfReplaceAll]);
  calcstr:=stringreplace(calcstr,'*','|*'#13,[rfReplaceAll]);
  calcstr:=stringreplace(calcstr,'/','|/'#13,[rfReplaceAll]);
  calcstr:=stringreplace(calcstr,'+','|+'#13,[rfReplaceAll]);
  calcstr:=stringreplace(calcstr,'-','|-'#13,[rfReplaceAll]);
  calclist.text:=calcstr;
  if calclist.Count>0 then begin
    while calclist.Count>1 do begin
      for x:= 0 to calclist.count - 1 do begin
        if split(calclist[x],'|',1)='*' then begin
          calclist[x]:=format('%0.9f',[strtofloatdef(split(calclist[x],'|',0),0)*strtofloatdef(split(calclist[x+1],'|',0),1)]);
          ssign:=split(calclist[x+1],'|',1);
          calclist.Delete(x+1);
          if ssign<>'' then calclist[x]:=calclist[x]+'|'+ssign;
          break;
        end;
        if (split(calclist[x],'|',1)='/') then begin
          try
            calclist[x]:=format('%0.9f',[strtofloatdef(split(calclist[x],'|',0),0)/strtofloatdef(split(calclist[x+1],'|',0),1)]);
          except
            Calclist[x]:='0';
          end;
          ssign:=split(calclist[x+1],'|',1);
          calclist.Delete(x+1);
          if ssign<>'' then calclist[x]:=calclist[x]+'|'+ssign;
          break;
        end;
        if (split(calclist[x],'|',1)='+')and(pos('|*',calclist.text)=0)and(pos('|/',calclist.text)=0) then begin
            calclist[x]:=format('%0.9f',[strtofloatdef(split(calclist[x],'|',0),0)+strtofloatdef(split(calclist[x+1],'|',0),1)]);
          ssign:=split(calclist[x+1],'|',1);
          calclist.Delete(x+1);
          if ssign<>'' then calclist[x]:=calclist[x]+'|'+ssign;
          break;
        end;
        if (split(calclist[x],'|',1)='-')and(pos('|*',calclist.text)=0)and(pos('|/',calclist.text)=0) then begin
          calclist[x]:=format('%0.9f',[strtofloatdef(split(calclist[x],'|',0),0)-strtofloatdef(split(calclist[x+1],'|',0),1)]);
          ssign:=split(calclist[x+1],'|',1);
          calclist.Delete(x+1);
          if ssign<>'' then calclist[x]:=calclist[x]+'|'+ssign;
          break;
        end;
      end;
    end;
    result:=strtofloatdef(calclist[0],0);
  end;
  calclist.free;
end;

Cora1116 iT邦新手 5 級 ‧ 2022-09-20 19:54:09 檢舉

哇我要研究一下,希望我看得懂.....

Cora1116 iT邦新手 5 級 ‧ 2022-09-20 19:54:40 檢舉

謝謝大大回覆

我所謂四罰運算,不是單純一問一答式的計算,而是直接輸入文字化的計算式,像EXCEL那樣的=函數,就可以算出結果
PL-18902015000
這常用在鋼鐵廠的重量跟面積計算式上,上式是鋼板規格,沒有自動四則運算的話,這重量怎麼算?

18901500020*7.85/1000000
把規格代進鋼板PL設定的四則重量式裡,再求出理論重(實重一定有差,鋼的合金量不同絕對不會是鐵比重7.85)

1
柳丁柚
iT邦新手 1 級 ‧ 2022-09-20 13:31:11

???會動啊
如果要一直跑可以參考

#include <stdio.h>

int main() {
double a, b;
char op;
double answer;
while(1){
    printf("Please enter your number: ");
    scanf("%lf%c%lf", &a, &op, &b);
    if (op == '+') {
        answer = a + b;
    }else if (op == '-') {
        answer = a - b;
    }else if (op == '*') {
        answer = a * b;
    }else {
        answer = a / b;
    }
    printf("Answer: %lf\n", answer);
    if(a == 100){
        break;
    }
}
return 0;
}
看更多先前的回應...收起先前的回應...
Cora1116 iT邦新手 5 級 ‧ 2022-09-20 20:08:47 檢舉

https://imgur.com/a/A084did

不好意思我不知道為啥跑不動

Cora1116 iT邦新手 5 級 ‧ 2022-09-20 20:09:05 檢舉

Cora1116 iT邦新手 5 級 ‧ 2022-09-20 20:09:22 檢舉
https://imgur.com/a/A084did
柳丁柚 iT邦新手 1 級 ‧ 2022-09-21 00:04:45 檢舉

首先 請你先看一看這邊Markdown 常用語法
另外 圖實在太模糊了 你可以直接上傳it幫 不用透過第三方

柳丁柚 iT邦新手 1 級 ‧ 2022-09-21 00:09:27 檢舉

其次 我不確定是不是你們老師規定要用visual studio編輯
我慣用的C/C++語言編輯器是 DEV C++
條件容許的話換了吧 經典好用
vscode 跟 visual studio 有相容問題要解決 對新手相對不友善

柳丁柚 iT邦新手 1 級 ‧ 2022-09-21 00:12:53 檢舉

三 你可以檢核你的debugger(下面) 他有告訴你 在visual studio中
他認為scanf有溢位風險 建議你改成scanf_s

柳丁柚 iT邦新手 1 級 ‧ 2022-09-21 00:16:40 檢舉

你將錯誤資訊餵google 其實可以發現更完善的解答
不想換編輯器可以在頂部加一行
#define _CRT_SECURE_NO_WARNINGS
(無驗證)

柳丁柚 iT邦新手 1 級 ‧ 2022-09-21 00:20:41 檢舉

學習新語言遇到問題是正常的
所以要學會如何找出問題跟解決它
加油!!

Cora1116 iT邦新手 5 級 ‧ 2022-09-22 08:18:03 檢舉

謝謝柳丁大

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-09-20 23:23:02

抄前面尼克大大的gdb

最前面加一列#include <stdio.h>即可
https://ithelp.ithome.com.tw/upload/images/20220920/20001787wFvRVWTp97.png

Cora1116 iT邦新手 5 級 ‧ 2022-09-22 08:18:49 檢舉

謝謝海綿寶寶大感恩

0
小幫手
iT邦新手 5 級 ‧ 2022-12-20 00:56:30

#include<stdio.h>

int main(int argc, char *argv[]) {

double a, b;
char op;
double answer;

printf("\n請輸入數字(1)):");
scanf("%lf",&a);
printf("\n請輸入 + - x ÷:");
scanf("%s",&op);
printf("\n請輸入數字(2)):");
scanf("%lf",&b);

if (op == '+') {
answer = a + b;
}
if (op == '-') {
answer = a - b;
}
if (op == '*') {
answer = a * b;
}
if (op == '/') {
answer = a / b;
}

printf("\n答案: %lf\n", answer);
return 0;

}

C語言四則運算,程式碼可以參考看看,感恩。

我要發表回答

立即登入回答