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);
}