こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

数式を読みこんで答えをかえすプログラム

C言語で、「キーボードから入力された数式(加法、減法限定)の答えをかえすプログラム」をつくりたいのですが。。。
※4+35+287-43など

#include<stdio.h>
#include<string.h>
#define NUM 40

int main(void){

char str[NUM];
int i, result, x;

printf("Please input an expression:\n");

scanf("%s", str);
x = strlen(str);

result = 0;

for(i=0; i<=x; i++){
if((str[i] == '+') || (str[i] == '-')){
// printf(",");

}
printf("%c", str[i]);

}

}


printfで+と-を「,」で区切って、それをヒントにそれぞれ配列の中に入れるのかな、というところまでは出来たのですが。。。
解り易い解説をつけて下さるとありがたいです。よろしくお願いします。

投稿日時 - 2008-02-19 20:32:44

QNo.3791226

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

★アルゴリズムが全く浮かばないのですか?
・ヒントとしては
 (1)最初 result 変数に strtol() 関数で1つ目の数値を代入
 (2)strtol() 関数の第2引数で渡したポインタを参照
 (3)ポインタの文字が(+)なら result 変数に += 複合代入で次の数値を読む
 (4)ポインタの文字が(-)なら result 変数に -= 複合代入で次の数値を読む
 (5)ポインタの文字が(\0)以外なら(3)へ行き、繰り返す
 (6)ポインタの文字が(\0)なら result 変数の値を表示
 (7)おわり
・strtol()関数の使い方は
 http://www9.plala.or.jp/sgwr-t/lib/strtol.html
 このリンクを読みましょう。
 分かりやすく解説されています。
・その他
>for ( i = 0 ; i <= x ; i++ ){
 ↑
 条件式の『i<=x』だと末尾の\0文字まで処理してしまいます。
 条件式は『i<x』にしましょう。
・最後に次のリンクを紹介します。
 http://www6.atwiki.jp/c-cpp_homework/pages/6.html
 あなたと同じ宿題のようです。
 参考にして下さい。

参考URL:http://www6.atwiki.jp/c-cpp_homework/pages/6.html

投稿日時 - 2008-02-19 21:17:58

ANo.1

ここまでのソースと、質問内容を比較する限り、
授業で途中までやって、残りは宿題!ってなったやつの丸投げですかね?

とりあえず注意点として、
・計算する為に文字列から数値への変換
・文字列がいきなり「+」「-」だったり、「+」「-」で終わった場合でも判断出切るようにする?
・「+」か「-」が入るまでは数字
 ただ、それが何桁か分からないのでとりあえず保存しておく
・40文字まで入力に対応しているので、素直に作ると9999999999999999999999999999999999999+9のような計算も出来るはずだが、そんなに大きな数字は扱えない
 制限入れる?それとも暗黙の了解とする?(課題レベルなら暗黙の了解でもいいかも?)

もう少し不明点を明確に上げてもらえればお力になれるかもしれません。

投稿日時 - 2008-02-19 20:52:15