• ベストアンサー

変数の表示

プログラミングで、 y=2x+1はx座標1,y座標3を通る直線です。 と表示したいんです。 #include<stdio.h> main() { printf("y=2x+1はx座標1,y座標3を通る直線です。"); } と書いてみたのですが、これでは文章がそのまま表示されるだけです。このとき、1と3を変数で表したいのですがどうしたらいいのでしょうか・・・intとかcharを使うのでしょうか?文字と数字が両方入っているので、混乱してわかりません。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • fatbowler
  • ベストアンサー率48% (26/54)
回答No.5

初心者向けにやさしく作ってみました。 これなら分かるでしょ? #include <stdio.h> void main(void) { int x, y; /* x座標の入力 */ printf("x = "); scanf("%d", &x); /* y座標の計算 */ y = 2 * x + 1; /* 結果の表示 */ printf("y=2x+1はx座標%d,y座標%dを通る直線です。\n", x, y); }

ichigo2007
質問者

お礼

回答ありがとうございます。 わかりやすいですね。初心者向けで、理解しやすく、自分のレベルにあっていると思います。 じっくり一つ一つ理解して行きたいと思います。 とても助かりました。ありがとうございました。

その他の回答 (5)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.6

★アドバイス >int char %d くらいのことしかまだ理解できていないので、このプログラムを理解するのはもう少し先になりそうです・・・。  ↑  本当に理解しているのならば、 >1と3を変数で表したいのですがどうしたらいいのでしょうか・・・ >intとかcharを使うのでしょうか? >文字と数字が両方入っているので、混乱してわかりません。 >お願いします。  ↑  これ矛盾しない。それとも回答者 No.3 さんの時にやっと理解できたの? >y=2x+1はx座標1,y座標3を通る直線です。 >と表示したいんです。  ↑  この問題を解く前に基本の『型』とか、printf() 関数の『書式制御文字』を  ちゃんと理解する必要がありそうですね。 本題: ・char、int、short、long、long long型はみんな整数変数です。  扱える数値の範囲や符号付き、符号なしでいろいろな組み合わせがあります。  ●符号付きの場合  char⇒-128~+127  short⇒-32768~+32767  int⇒-32768~+32767(int型が16ビット時)  int⇒-2147483648~+2147483647(int型が32ビット時)  long⇒-2147483648~+2147483647  long long⇒-9223372036854775808~+9223372036854775807  ※short、long 型は int 型に付ける『修飾子』です。  ※正しくは short int、long int、long long int 型としますが『int』を省略できます。 ・数値を扱う範囲により使う『型』を択びます。  今回は小数を扱ったり、大きい数を扱うわけではないため普通の int 型で十分です。 回答: >printf("y=2x+1はx座標1,y座標3を通る直線です。"); >1と3を変数で表したいのですがどうしたらいいのでしょうか・・・  ↑  それなら1を x 変数、3を y 変数として宣言、管理すれば良いでしょう。  下にサンプルを載せておきます。 サンプル: int main( void ) {  int x, y; ←宣言    // 代入  x = 1; ←単純に代入(x座標)  y = 3; ←単純に代入(y座標)    // 表示  printf( "y=2x+1はx座標%d,y座標%dを通る直線です。\n", x, y );  ↑  文字列にある最初の『%d』が x を表示して次の『%d』が y 変数を表示します。  return 0; } その他: ・printf() 関数の書式制御文字にはたくさんの種類があるため最初は整数変数用のだけ  覚えておけば良いでしょう。→%d、%u、%o、%x など。  %d⇒10進数で表示(符号付き)…int、short、long 型など  %u⇒10進数で表示(符号なし)…unsigned int、unsigned short、unsigned long 型など  %o⇒8進数で表示(強制的に符号なし)  %x⇒16進数で表示(強制的に符号なし)  ↑  この指定は int 型を基準しています。  (1)もし、short 修飾子が付いている int 型なら %hd、%hu、%ho、%hx と『h』を付けます。  (2)また、long 修飾子が付いている int 型なら %ld、%lu、%lo、%lx と『l』を付けます。  (3)C99 以降の long long 修飾子の int 型なら %lld、%llu、%llo、%llx と『ll』を付けます。  となります。詳しくは http://ja.wikipedia.org/wiki/Printf→『printf』をどうぞ。 最後に: ・上記のを参考にして『y = 2x + 1』という式を組み込むと回答者 No.5 さんのソースが  この質問のほぼ答えです。回答を見てみると以外に簡単ですね。今回で重要なのは関数の  printf()、scanf() の部分でしょう。この2つは入出力の基本ですのでしっかりと覚えて  下さい。ネットで検索するとたくさん発見できるのでお勉強に検索術を取り入れて下さい。 ・以上。printf()、scanf() については下の『参考URL』もどうぞ。

参考URL:
http://www9.plala.or.jp/sgwr-t/c/sec05.html
ichigo2007
質問者

お礼

こんなに詳しく回答いただいてありがとうございます。 今回の課題だけでなく、これから勉強して行く上でも役に立ちそうです。 参考のURLも勉強の過程で利用させていただきます。 ありがとうございました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.4

>int char %d くらいのことしかまだ理解できていないので ソッチの方がわからねぇ。 コマンドラインから x 座標を引数として与えて、結果を出力するだけの適当プログラムでした。 (実行例) $ ./a.out 34 y=2x+1はx座標 34,y座標 69を通る直線です。

ichigo2007
質問者

お礼

回答ありがとうございます。 こっちの方がわかりにくいですか^^; 色々な方法があって本当に奥が深いですね。こんなふうにパパッと作れてしまうなんてうらやましい限りです。私も一つ一つ勉強して行きたいと思います。ありがとうございました。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

y = 2x + 1 が固定でいいのなら、2 つも変数を取る必要はなかろう。 int main(int argc, char* argv[]) {  if ( argc != 2 ) exit(EXIT_FAILURE);  long coordinate_x;  char* endptr;  coordinate_x = strtol(argv[1], &endptr, 10);  if ( errno == ERANGE || *endptr != '\0' ) exit(EXIT_FAILURE);  printf("y=2x+1はx座標 %ld,y座標 %ldを通る直線です。",      coordinate_x, 2*coordinate_x + 1);  exit(EXIT_SUCCESS); }

ichigo2007
質問者

お礼

回答ありがとうございます。 なんだかわからない文字がいっぱい・・・ int char %d くらいのことしかまだ理解できていないので、このプログラムを理解するのはもう少し先になりそうです・・・。 もっとしっかり勉強していかなくてはなりませんね。 ありがとうございました。

  • DT200
  • ベストアンサー率38% (63/164)
回答No.2

> x座標1、y座標9447152と出て来てしまうのですが、どう改善したらよいのでしょうか。 もしかして、#1の例をそのまま実行したのでしょうか? 変数arg_x、arg_yは初期化されていないので何が設定されているか 不定です。 /* 何らかの方法でarg_xとarg_yに値を代入 */ とあるように、arg_xとarg_yに標準入力(キーボード)から数値を入力す るように修正してください。数値を入力するための関数のひとつにscanfが あります。URLを貼り付けておきますのでそれを参考にしてください。

参考URL:
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
ichigo2007
質問者

お礼

回答ありがとうございます。 そのまま実行してしまいました。初心者な者で全然わからなくて・・・すみません。 URLありがとうございます。やっぱり難しいですね^^;しっかり勉強して行きたいと思います。

  • TA-HT81S
  • ベストアンサー率39% (72/184)
回答No.1

main() { int arg_x; int arg_y; /* 何らかの方法でarg_xとarg_yに値を代入 */ printf("y=2x+1はx座標%d,y座標%dを通る直線です。",arg_x,arg_y); }

ichigo2007
質問者

お礼

回答ありがとうございます。 x座標1、y座標9447152と出て来てしまうのですが、どう改善したらよいのでしょうか。よろしければ御教授お願できますでしょうか。