0.C言語基礎


0.C言語課題

この章はC言語の基礎を勉強するための課題群です.特に解説はしませんが,これから画像プログラミングを勉強するために必要な最低限の知識なので,プログラムに自信のない人はこの章の課題から始めて下さい.課題の後ろに赤字で必要な関数などを書いていますので,分からない場合はそれをヒントに本などで調べましょう.


0−1.本当の基本

  1. 自分の名前を次のように表示しよう. [printf]
    【例】  My name is Masaki Onishi.

  2. 1 から 100 までの整数の和を求め,以下のように表示しよう. [int, for文]
    【例】  SIGMA(1:100) = 5050

  3. 任意の正整数 n を入力し,1 から n までの和を求めて 2 と同じように表示しよう. [scanf]
    【例】  Input Number ?: 123
         SIGMA(1:123) = 7626

  4. 任意の整数 n を入力し,n が正整数なら 1 から n までの和を求め再び入力を待ち,負整数なら終了するようにしよう. [while, if, break]
    【例】  Input Number ?: 100
         SIGMA(1:100) = 5050
         Input Number ?: 123
         SIGMA(1:123) = 7626
         Input Number ?: -1
         finish

  5. 任意の2整数 n, m を入力し,n÷m の値を四捨五入して少数第二位まで求めよう. [ float ]
    【例】  Input Number ?,?: 30, 7
         30/7 = 4.29

  6. 任意の2整数 n, m を入力し,n÷m の商と余りを求めよう.
    【例】  Input Number ?,?: 30, 7
         30/7 = 4 ... 2

  7. 任意の整数(0〜255)を入力し,これを16進数と2進数で表示しよう.
    【例】  Input Number ?: 18
         18 = 12(HEX) = 00010010(BIN)

  8. 任意の2正整数 n, m を入力し,n, m の最小公倍数と最大公約数を求めて表示しよう.
    【例】  Input Number ?,?: 18, 30
         GCM(18,30) = 90, LCM(18,30) = 6

  9. 上のプログラムを最小公倍数を求める関数 int GCM(int n, int m) と最大公約数を求める関数 int LCM(int n, int m) を使ったプログラムに変更しよう.[関数,引数,戻り値]

  10. 任意の整数 n を入力して,n ! を表示しよう.ただし,n ! は再帰呼び出しによる関数によって求めよう. [再帰呼び出し]
    【例】  Input Number ?: 5
         5x4x3x2x1 = 120


0−2.ポインタと配列

  1. 10個の配列(a[10])を用意し,配列の個数目を n とした時に配列に n^2 ( n の 2 乗)を代入し,その値を表示しよう. [配列]
    【例】  a[0] = 1^2 = 1
         a[1] = 2^2 = 4
         a[2] = 3^2 = 9
           (略)

  2. ある数 n を入力し n 個の配列( a[n] )を用意し,それぞれの配列に n^n を代入した後,それを表示しよう.ただし,配列の代わりにポインタを使い,malloc によって領域を確保しよう. [malloc, free]
    【例】  Input Number ?: 7
         a[0] = 1^1 = 1
         a[1] = 2^2 = 4
         a[2] = 3^3 = 27
           (略)

  3. 任意の正整数 n を入力し,n 以下の素数を表示させよう.ただし,プログラムには配列と関数を使おう.
    【例】  Input Number ?: 2520
         PRIME(2520) = 2,3,5,7

  4. 0 〜 9 までの乱数を入力した任意の n 個発生させ,それぞれの数の出現回数を数えよう. [rand]
    【例】  Input Number ?: 100
         0 : 10
         1 : 8
         2 : 9
         3 : 11
         (略)

  5. 3×5の配列 a[ i ][ j ] に右下表の値を格納し,a[ i ][ j ] の値をポインタを使って参照することで,値を表示させてみよう. [2次元配列,ポインタ]
    【例】   (略)
         a[1][2] = 27
         a[1][3] = 28
          (略)

  6. a と b の値を入れ替える関数 replace(int a, int b) を作りたい.ただし,このような関数は実現できないので,ポインタを使って工夫する必要がある.replace(int *a, int *b) で a と b を入れ替える関数を作ろう.
    【例】  Input Number a?: 3
         Input Number b?: 5
         a = 5, b = 3

  7. ある入力 x に対して,x^2, x^3, x^4 を得たい.複数の値を得る一つの関数を作り,main() から呼び出して実現・表示してみよう.複数の値を得る方法はいくつかあるが,構造体を用いず,6 のように関数の引数にポインタを用いる方法で実現しよう. [ポインタ, 関数]
    【例】  Input Number ?: 5
         5^2 = 25, 5^3 = 125, 5^4 = 625

  8. 7 と同じことをポインタを使わず構造体を使って実現しよう. [構造体]

  9. 学生名簿を想定し,学生番号,名前,性別を含む構造体を作り,対話形式で入力し,一括して表示しよう.
    【例】  No ?: 1234567
         Name ?: Masaki Onishi
         Sex ?: Male
         1234567, Masaki Onishi, Male

  10. 3 × 3 行列を入力し,逆行列を求めよう.ただし,(a) 行列の要素の入力,(b) 行列式の計算, (c) 逆行列の要素の計算,(d) 逆行列の要素の表示は関数を用い,main 文ではその制御をしよう.(d) では配列表現を用いず,ポインタとして扱おう.


0−3.文字列操作・ファイル操作

  1. メモ帳や mule などテキストエディタを使って作成したテキストファイル(例,Masaki Onishi AIST )を読み込み,その内容を表示してみよう. [fopen, fscanf, fclose]
    【例】  Masaki Onishi
         AIST

  2. 上のプログラムで小文字の i と大文字の I の数を数え,その数を行ごとに出力するようにしよう.
    【例】  Masaki Onishi ( i = 3, I = 0 )
         AIST ( i = 0, I = 1 )

  3. 1 で作ったテキストファイルを読み取り,大文字と小文字を反転させたテキストファイルを作り,その内容をテキストエディタで確認してみよう.ただし,大文字と小文字の文字コードを調べ,大文字と小文字を反転する関数を用いること. [fprintf]
    【例】  mASAKI oNISHI
         aist

  4. エディタで作成した右下のようなデータファイル(価格,メニュー)を読み込み,価格を入力するとその価格に近いメニューを2つ表示するようにしてみよう.また,a によって新しいメニューの追加をプログラム上で行えるようにしよう. [構造体]
    【例】  price?: 380
         > 350 bacon_and_egg
         > 400 pasta_set
         price?: a
         what?: Y_set
         How much?: 520
         price?: 550
         > 520 Y_set
         > 480 karaage_teisyoku


| トップ | 0章へ | 1章へ | 2章へ | 3章へ | 4章へ | 5章へ |
Copyright(c) Masaki Onishi All rights reserved.