C/C++の宿題のまとめ@Wiki

電卓

最終更新:

匿名ユーザー

- view
管理者のみ編集可

25 :名無し@C/C++の宿題を片付けます 52代目:2005/10/28(金) 13:48:31

名無し :2005/10/27(木) 22:48:14
[1] 授業単元:電卓
[2] 問題文:
  入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。
  操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。
     切り出した文字列を数値に変換する。加減算を行って結果を計算。
  出力:計算結果を等号"="の後ろに出力。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [2005年10月29日9:00まで]
[5]その他の制限:文字列を読み込み、整数か記号であるかを判断(isalpha,isdegit等)、次に数字を数値変換(strtoi,strtol等)でその後、演算記号に従って計算
どうかお願いします。


26 :デフォルトの名無しさん :2005/10/28(金) 14:10:31
>>25 前スレから移動するときはちゃんと経緯も書こうね
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
int main() {
 char s[] = "1234+2345="; /* 入力 */
 char sl[256], sr[256], *stop;
 char *p = s, *q = sl, *r = sr, op;
 int i, lhs, rhs, ans;
 while (isdigit(*p)) *q++ = *p++;
 op = *p++;
 while (isdigit(*p)) *r++ = *p++;
 lhs = strtol(sl, &stop, 10); /* 10進法 */
 rhs = strtol(sr, &stop, 10); /* 10進法 */
 printf("lhs = %d, rhs = %d ", lhs, rhs);
 switch (op) {
  case '+': ans = lhs+rhs; break;
  case '-': ans = lhs-rhs; break;
 }
 printf("ans = %d ", ans);
}
目安箱バナー