codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include <stdio.h> void pp(double n[], char op[]) { return; printf("%f %c %f %c %f\n", n[0], op[0], n[1], op[1], n[2]); } double calc(char s[]) { char *p1 = s, s2[100], *p2 = s2, op[2]; double n[3]; int i; //文字列を数字と演算子に分解 while (*p1) { if ((*p1 >= '0') && (*p1 <= '9')) { *p2++ = *p1++; } else { *p2++ = ' '; *p2++ = *p1++; *p2++ = ' '; } } *p2 = '\0'; sscanf(s2, "%lf %c %lf %c %lf", n, op, n + 1, op + 1, n + 2); pp(n, op); //式を変形(例:5 / 2 - 4--->2.5 * 1 + -4) for (i = 0; i < 2; i++) { if (op[i] == '*') { n[i] *= n[i + 1]; n[i + 1] = 1; } if (op[i] == '/') { n[i] /= n[i + 1]; n[i + 1] = 1; op[i] = '*'; } if (op[i] == '-') { n[i + 1] *= -1; op[i] = '+'; } } pp(n, op); for (i = 0; i < 2; i++) { if (op[i] == '*') { n[i + 1] *= n[i]; } else { n[i + 1] += n[i]; } } pp(n, op); return n[2]; } int main() { char s[100]; printf("input end = Ctrl + d\n"); while (printf("input:"), 1 == scanf("%s", s)) { printf("answer = %f\n", calc(s)); } return 0; }
Private
[
?
]
Run code
Submit