「電卓」(2005/11/07 (月) 05:39:20) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<p>25 :<font color="green"><b>名無し<font color=
"#FF0000">@C/C++の宿題を片付けます 52代目</font></b></font>
:2005/10/28(金) 13:48:31</p>
<dl>
<dd>名無し :2005/10/27(木) 22:48:14<br>
[1] 授業単元:電卓<br>
[2] 問題文:<br>
入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。<br>
操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。<br>
切り出した文字列を数値に変換する。加減算を行って結果を計算。<br>
出力:計算結果を等号"="の後ろに出力。<br>
[3] 環境<br>
[3.1] OS: Linux<br>
[3.2] コンパイラ名とバージョン: gcc<br>
[3.3] 言語: C<br>
[4] 期限: [2005年10月29日9:00まで]<br>
[5]
その他の制限:文字列を読み込み、整数か記号であるかを判断(isalpha,isdegit等)、次に数字を数値変換(strtoi,strtol等)でその後、演算記号に従って計算<br>
どうかお願いします。</dd>
<dd><br>
<hr></dd>
<dd>
<p>#include <stdio.h><br>
#include <ctype.h><br>
#include <stdlib.h><br>
int main() {<br>
char s[] = "1234+2345="; /* 入力 */<br>
char sl[256], sr[256], *stop;<br>
char *p = s, *q = sl, *r = sr, op;<br>
int i, lhs, rhs, ans;<br>
while (isdigit(*p)) *q++ = *p++;<br>
op = *p++;<br>
while (isdigit(*p)) *r++ = *p++;<br>
lhs = strtol(sl, &stop, 10); /* 10進法 */<br>
rhs = strtol(sr, &stop, 10); /* 10進法 */<br>
printf("lhs = %d, rhs = %d\n", lhs, rhs);<br>
switch (op) {<br>
case '+': ans = lhs+rhs; break;<br>
case '-': ans = lhs-rhs; break;<br>
}<br>
printf("ans = %d\n", ans);<br>
}</p>
</dd>
</dl>
<p>25 :<font color="green"><b>名無し<font color=
"#FF0000">@C/C++の宿題を片付けます
52代目</font></b></font>:2005/10/28(金) 13:48:31</p>
<dl>
<dd>名無し :2005/10/27(木) 22:48:14<br>
[1] 授業単元:電卓<br>
[2] 問題文:<br>
入力:二つの10進数(非負の整数、4桁以下で符号無し)を加算記号"+"、減算記号"-"、で連結し最後に等号を付け加えた式を文字列として入力。<br>
操作:入力された文字列から加算記号、減算記号、等号を区切り記号として二つの10進数を文字列として切り出す。<br>
切り出した文字列を数値に変換する。加減算を行って結果を計算。<br>
出力:計算結果を等号"="の後ろに出力。<br>
[3] 環境<br>
[3.1] OS: Linux<br>
[3.2] コンパイラ名とバージョン: gcc<br>
[3.3] 言語: C<br>
[4] 期限: [2005年10月29日9:00まで]<br>
[5]その他の制限:文字列を読み込み、整数か記号であるかを判断(isalpha,isdegit等)、次に数字を数値変換(strtoi,strtol等)でその後、演算記号に従って計算<br>
どうかお願いします。</dd>
<dd><br>
<hr></dd>
<dt>26 :<a href="mailto:sage"><b>デフォルトの名無しさん</b></a>
:2005/10/28(金) 14:10:31</dt>
<dd><a href="http://pc8.2ch.net/test/read.cgi/tech/1130431335/25" target=
"_blank">>>25</a>
前スレから移動するときはちゃんと経緯も書こうね</dd>
<dd>#include <stdio.h><br>
#include <ctype.h><br>
#include <stdlib.h><br>
int main() {<br>
char s[] = "1234+2345="; /* 入力 */<br>
char sl[256], sr[256], *stop;<br>
char *p = s, *q = sl, *r = sr, op;<br>
int i, lhs, rhs, ans;<br>
while (isdigit(*p)) *q++ = *p++;<br>
op = *p++;<br>
while (isdigit(*p)) *r++ = *p++;<br>
lhs = strtol(sl, &stop, 10); /* 10進法 */<br>
rhs = strtol(sr, &stop, 10); /* 10進法 */<br>
printf("lhs = %d, rhs = %d ", lhs, rhs);<br>
switch (op) {<br>
case '+': ans = lhs+rhs; break;<br>
case '-': ans = lhs-rhs; break;<br>
}<br>
printf("ans = %d ", ans);<br>
}</dd>
</dl>
表示オプション
横に並べて表示:
変化行の前後のみ表示: