キーボードからの入力による計算
キーボードからの入力による計算
こんにちは。
double f(double x){
double a=3+x;
return a;
}
これは、関数fの第一引数double xに与えた数字に3を追加して返すプログラムですが、
3+x
この部分をキーボードから入力することで実現できる方法はないものでしょうか。
いろいろ考えたのですがなかなか妙案が思い浮かびません。
アイディアなどよろしくお願いします。
double f(double x){
double a=3+x;
return a;
}
これは、関数fの第一引数double xに与えた数字に3を追加して返すプログラムですが、
3+x
この部分をキーボードから入力することで実現できる方法はないものでしょうか。
いろいろ考えたのですがなかなか妙案が思い浮かびません。
アイディアなどよろしくお願いします。
Re: キーボードからの入力による計算
scanfをどのように使うのでしょうか?
scanf関数で扱う変数をdouble型とすると文字は格納できず、char型で
x+3
のように入力しても、そのxに値を代入することができません。
scanf関数で扱う変数をdouble型とすると文字は格納できず、char型で
x+3
のように入力しても、そのxに値を代入することができません。
Re: キーボードからの入力による計算
何をしたいのか、仕様を明確にすべきです。
入力した値を加算したいのであれば変数を宣言してscanfの引数にしてから加算すればいいです。
x+3のように入力とおっしゃっていますが、
xは引数として与えられるものなのでそれを関数内で入力させるのはおかしいです。
入力した値を加算したいのであれば変数を宣言してscanfの引数にしてから加算すればいいです。
x+3のように入力とおっしゃっていますが、
xは引数として与えられるものなのでそれを関数内で入力させるのはおかしいです。
Re: キーボードからの入力による計算
仕様ですか、失礼しました。
1.キーボードからxやyといった文字を含む式を入力する。
例:x+3 (←これは文字列)
2.xの値をdouble型で定め、文字列にそれを代入し、新たな文字列を生成する。
例: x=3.14(←double型) なら 3.14+3 (←これは文字列)
以上となります。不明な点があればよろしくお願いします。
1.キーボードからxやyといった文字を含む式を入力する。
例:x+3 (←これは文字列)
2.xの値をdouble型で定め、文字列にそれを代入し、新たな文字列を生成する。
例: x=3.14(←double型) なら 3.14+3 (←これは文字列)
以上となります。不明な点があればよろしくお願いします。
Re: キーボードからの入力による計算
うーん、それでは想定通りの動作になりません。
x+3 (char型)
という式を入力し、
x=3.14 (double型)
などと定めると、
3.14+3 (char型)
のような文字列を返してほしいのです。
x+3 (char型)
という式を入力し、
x=3.14 (double型)
などと定めると、
3.14+3 (char型)
のような文字列を返してほしいのです。
Re: キーボードからの入力による計算
x=3.14 はdouble型ではなくchar型ではないでしょうか?佐藤 さんが書きました: x=3.14 (double型)
などと定めると、
"3.14 "だけならdoubleですが、x= が含まれていますので。
Re: キーボードからの入力による計算
わかりづらくて申し訳ありません。
/*x+3のような式を文字列で入力する*/
char s[100];
scanf("%99s",s); → たとえば、x+3 (char型)
/*double型で数値を入力する*/
double x;
scanf("%f",&x); → たとえば、3.14 (double型)
このように入力したのち、
3.14+3 (char型)
という文字列が用意されてほしいのです。
/*x+3のような式を文字列で入力する*/
char s[100];
scanf("%99s",s); → たとえば、x+3 (char型)
/*double型で数値を入力する*/
double x;
scanf("%f",&x); → たとえば、3.14 (double型)
このように入力したのち、
3.14+3 (char型)
という文字列が用意されてほしいのです。
Re: キーボードからの入力による計算
トピックは計算となっていますが
やることは生成した文字列のポインタを返す でいいのでしょうか?
で、あれば3.14をdouble型で入力させる必要は無くて
最初から文字列として扱えばいいのではないでしょうか。
やることは生成した文字列のポインタを返す でいいのでしょうか?
で、あれば3.14をdouble型で入力させる必要は無くて
最初から文字列として扱えばいいのではないでしょうか。
Re: キーボードからの入力による計算
申し訳ありません。No.9の仕様で実現したいのです。
佐藤 さんが書きました:わかりづらくて申し訳ありません。
/*x+3のような式を文字列で入力する*/
char s[100];
scanf("%99s",s); → たとえば、x+3 (char型)
/*double型で数値を入力する*/
double x;
scanf("%f",&x); → たとえば、3.14 (double型)
このように入力したのち、
3.14+3 (char型)
という文字列が用意されてほしいのです。
Re: キーボードからの入力による計算
仮に3.14が文字列ならば、sprintf関数などを用いて文字列を結合させるだけなので、容易に実装できるのはわかっているのですが、これがdouble型になると……ということで難儀しています。
何かアドバイス等あればよろしくお願いします。
何かアドバイス等あればよろしくお願いします。
Re: キーボードからの入力による計算
まだ仕様がよくわかりません。
1.入力できる変数名はxだけですか?
(先程は、キーボードからxやyといった文字を含む式を入力する、と書かれていましたが...)
2.使える演算子は+だけですか?
例えば、以下のような式も計算できる必要がありますか?
・x - 3.434
・x + 5 / x
・x * x + (x - 1) * 2
1.入力できる変数名はxだけですか?
(先程は、キーボードからxやyといった文字を含む式を入力する、と書かれていましたが...)
2.使える演算子は+だけですか?
例えば、以下のような式も計算できる必要がありますか?
・x - 3.434
・x + 5 / x
・x * x + (x - 1) * 2
Re: キーボードからの入力による計算
こういう感じですか?(replace関数は適切に実装してください)
#include <stdio.h>
// str中で最初に見つかったbeforeをafterに置き換える
void replace(char *str, const char *before, const char *after);
int main()
{
char result[100];
char format[100];
double x;
scanf("%s", format);
scanf("%lf", &x);
replace(format, "x", "%f"); // "x"を"%f"に置き換える
sprintf(result, format, x);
puts(result);
return 0;
}