練習 [13] 構造体(1/5)

練習 1(提出プログラム名:p1301a.c)

まず,このプログラム(p1301a.c)をダウンロードしなさい.
p1301a.c では X-Y 平面上の直線 y = ax + b を表現するために構造体 LINE を定義している.
構造体 LINE では 2 つの int 型変数 a, b をメンバとして持ち,a が直線の傾きを,b が直線の切片をそれぞれ表している.

このプログラムでは構造体 LINE の(LINE 型の)変数 s を用意し,
その変数を使って 1 つの直線を表している.
そして,直線 s が点 (u,v) を通るかどうかを判定しようとしている.
このプログラムの中の関数 get_y を完成させなさい
なお,この問題で扱う傾き,切片,座標はすべて整数であると仮定してよい.

【関数 get_y の仕様】
 引数 s : 対象となる直線(の傾きと切片)を表した LINE 型の変数
 引数 x : x 座標
 戻り値: 直線 s(y = ax+b)にあって,指定された x 座標に対応する点の y 座標
     (例)直線 s が「y = 2x + 3」を表していて,x = 5 を指定した場合,
        戻り値は 13 となる.

【注意】
この問題では get_y の中で計算して return するだけであり,main を書き換えてはいけません

【ヒント】
まれに「構造体」をよく理解できておらず,ものすごく難しいことをやっていると勘違いしてしまう人がいるのですが,ここでは非常に簡単なことしかしていません
ただ単に 2 個の変数 a, b をひとつにまとめた変数 s を考え,その s の型を LINE と呼んでいるだけです.この場合は変数 abs.as.b としてそれぞれ表現しているにすぎません

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
直線の傾き a と切片 b を入力してください:2 3
注目する点の x, y 座標を入力してください:5 13

直線 y = 2x + 3 は点(5, 13) を通ります
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
直線の傾き a と切片 b を入力してください:10 5
注目する点の x, y 座標を入力してください:1 4

直線 y = 10x + 5 は点(1, 4) を通りません

【過去にあったミス(減点となり,やり直しを命じられる)】
上の実行例と動作が違っている.
■ 注意書きを見落としていて main 関数を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 練習 2 (p1302a.c) ]