* 第1回 C言語の復習(変数と制御構造) [#j1295f00]
** 目的 [#u08cf405]
C言語の文法を思い出し、実際の短いプログラムを作成する。
** 課題 [#cfd08251]
下記の問題から、各自自分のレベルに合った問題を解いて提出する。
みなさんのC言語の理解度のばらつきが大きすぎるので、多様なレベルの問題を用意した。全ての問題を時間内に解くのはまず無理だろうから、適切なところからはじめること。
まず、問題文をざっと見て、どのレベルの問題なら自分に解けそうか判断するべきである。まったくといっていいほど、C言語が分からない者は、問題 a1)からはじめること。
もちろん、高いレベルの問題をより多く解いていたほうがよい評価となるが、決して、他人のプログラムを写したりしないこと。コピーが発覚した場合には、厳しく減点するものとする。
提出は、[[提出エリア>../提出]]の自分の提出エリアにアップロードする。なお、プログラムは、きちんとコンパイルし、完全かつ正確に動作することを確認してから、提出すること。
- [[プログラムの提出のしかた>../提出]]
- [[C言語のコンパイルと実行のしかた>../C言語環境]]
*** 超初級レベル [#he36bd4a]
''表示と変数''
関連項目: printf, 書式(%d, %fなど)、変数の型(int, doubleなど)
a1) 標準出力に、自分の好きなことわざを1つ表示するプログラムを作成しなさい。
a2) 自分の氏名とメールアドレスを1行ずつ,画面に表示するプログラムを作成しなさい.
a3) 整数型の変数に自分の生まれた年(西暦)を代入して表示するプログラムを作成しなさい。
>【変数名】 変数名や関数名(「識別子」という)は、1文字とは限らない。1文字目には英文字、2文字目以降には英数字が使える。
pi, kingaku, y2003, ...
a4) 2つの文字型の変数に自分のイニシャルを代入し,「A.B」のように表示するプログラムを作成しなさい。
a5) 3.1415を変数に代入して表示するプログラムを作成しなさい。double型とint型ではどのように異なるか。
''演算子と入力''
関連項目: scanf, 書式(%d, %fなど)、演算子(+, -, *, %)
a6) キーボードから2つの整数n, mを読み込み,それらの和と差を計算し,n, m, 和,差を表示するプログラムを作成しなさい。
a7) 単価がx円の鉛筆をy本買いました。z円札を出したときのお釣りを求めるプログラムを作成しなさい。x, y, zの値はキーボードから入力すること。
>【%演算子】 整数演算a÷bのあまりを求める演算子として「%」が使える。
r = a % b;
a8) ある金額を硬貨で支払う際に,枚数がもっとも少なくなる支払い方を求めるプログラムを作成しなさい。支払い金額は入力すること。
a9) a=5.2, b=3.1として,a*b, a/bの演算を,aとbのデータ型を,int, float, double 型で,それぞれ色々変えて実行してみなさい。
a10) 2つの整数を読み込んで,前者の値が後者の値の何%であるかを小数第2桁まで表示するプログラムを作成しなさい。23, 13を入力した場合について結果を示すこと。
>【キャスト】 一時的に変数の型を変更するのは、キャスト演算子「(型名)」を用いる。
int a = 2, b = 3;
float q = (float) a / b;
*** 初級レベル [#ue9482ec]
''条件分岐''
関連項目: if-else
b1) 整数をひとつ入力し,それが偶数か奇数かを判定し出力するプログラムを作成しなさい。
>【代入と等号】 変数に値を入れる代入(=)と、等しいことを判定する等号(==)は異なる。C言語の基本中の基本だが、慣れてきてもうっかり間違えやすいところ。
a = 10;
if (a == 10) { …
b2) キーボードから入力した2つの整数の差を求めなさい。常に大きい値から小さい値を引いて,差の絶対値となるようにしなさい。
b3) 2次方程式の各項の係数を入力し,実数解の個数を出力するプログラムを作成しなさい。
- 参考 http://www.asahi-net.or.jp/~jb2y-bk/NaturalSci/math/houtei2ji.htm
>【else if】 elseの後には、ifを続けて書ける。
if (...) {
...
} else if (...) {
...
} else if (...) {
...
} else {
...
}
b4) 整数x, y, zを読み込み、それらを3辺の長さとする三角形が、直角三角形であるか、二等辺三角形であるか、直角二等辺三角形であるか、正三角形であるか判定するプログラムを作成せよ。
- 参考 http://contest.thinkquest.gr.jp/tqj2002/50027/page183.html
>【条件式】 条件式は、
if (a < b < c) { … /* 誤り!! */
if (a == b == c) { … /* 誤り!! */
のようには続けて書けない。かわりに、
if (a < b && b < c) { …
if (a == b && b == c) { …
のように、論理AND演算子&&(〜かつ〜)を利用する。
b5) キーボードから、整数を1つ読み込み、それが、偶数だった場合には「2」、4の倍数だった場合には、それに加えて「4」、どちらにもあてはまらない場合には「X」、と表示するプログラムを作成せよ。
''繰り返し''
関連項目: for, while
b6) 1以上100未満の整数を,小さい順に画面に表示するプログラムを作成しなさい.
b7) 10個の整数をキーボードから読み込み,奇数と偶数の数を数えて出力するプログラムを作成しなさい。
b8) キーボードから自然数nを読み込み,nのすべての約数dについて,dが奇数ならば数値をカッコで囲んで「(3)」というように表示し,そうでないならば単に数値だけを表示するC言語のプログラムを作成せよ.以下に例を示す。
入力:6 出力:(1) 2 (3) 6
入力:30 出力:(1) 2 (3) (5) 6 10 (15) 30
b9) 2つの整数xとaを入力し,xのa乗を計算して,出力するプログラムを作成しなさい。ただし,aは正数であるとする。
b10) 2つの整数aとbを入力し,aからbまでの和a + (a+1) + … + (b-1) + b を計算して出力するプログラムをfor文を用いて作成しなさい。
*** 中級レベル [#sd7ba2b4]
c1) 1日目は1円,2日目は2円(1円×2),3日目は4円(2円×2)もらう。このように1日経つごとに2倍の金額をもらうとします。30日間で合計いくらになるか求めるプログラムを作成しなさい。
c2) 毎月x%の金利がつく口座に、毎月1000円ずつ積み立てる。最初の1000円を入金してから、何年何ヶ月後に10万円を越えるか計算するプログラムを作成しなさい。
c3) a(1) = a(2) = 1, a(n) = a(n-1) + a(n-2) で表される数列をa(1)からa(100)まで表示するプログラムを作成しなさい。ただし、配列は使ってはならない。
c4) キーボードから自然数を順次読み込み、0を読み込んだら、それまでの最大値を表示して終了するプログラムを作成しなさい。
c5) キーボードから、任意の個数の正の整数を読み込み、その合計を表示するプログラムを作成しなさい。なお、ユーザが負の数を入力したときに合計を表示し、プログラムを終了するものとする。
c6) 九九の表を出力するプログラムを作成しなさい。時間のあるひとは左上/右上半分だけ出力するプログラムを作成しなさい。
c7) キーボードから読み込みこんだ整数n (ただしn≧2)を1辺の長さとするアスタリスク(*)の正方形を描画するC言語のプログラムを作成せよ。たとえば、n=2,3,4のときは、それぞれ以下のような図形が出力される。
** *** ****
** * * * *
*** * *
****
c8) 2+3+5のように,合計が 10 になる異なる正の整数の組合せ(整数の個数は任意)を列挙するプログラムを作成しなさい。※この問題はかなり難しいです。後回しにしたほうがいいかも。
c9) 数列 Xn+2 = a Xn+1 + b Xn (n≧0), X0 = X1 = 1 において、a, bをキーボードから読み込み、Xnを順次計算して、Xnの値がはじめて2000以上になるときのnの値を表示するプログラムを作成しなさい。
c10) キーボードから正の整数nを読み込み、「1234512345…」というように、12345を繰り返しながら、全部でn文字を画面に表示するC言語のプログラムを作成しなさい。たとえばn=13のときは、「1234512345123」と出力される。
*** 上級レベル [#f1d026cd]
z1) キーボードからいくつかの正の整数を読み込み、棒グラフを作成するプログラムを作成せよ。以下にプログラムの例を示す。※配列も使います。
データ1を入力してください: 10 ← 数の入力中…
データ2を入力してください: 5
データ3を入力してください: 8
データ4を入力してください: 3
データ5を入力してください: -1 ← マイナスの数を入力すると終了
4つのデータが入力されました。
棒グラフを作成します。
データ1 10 |**********
データ2 5 |*****
データ3 8 |********
データ3 3 |***
以上の問題でも物足りないという者は、もうすこし大きな課題に挑戦してもらいたいので、担当教員に相談すること。
例) ○×ゲームのプログラムを作りなさい。