C言語(課題)
〜Cでプログラムを作成するときの練習問題〜

1.合計を求める

  1. 1から1000までの合計を求めるプログラムを,if文とgoto文を用いて作成しなさい.
  2. 1から1000までの合計を求めるプログラムを,for文を用いて作成しなさい.
  3. 1から1000までの合計を求めるプログラムを,while文を用いて作成しなさい.

2.素数を求める

  1. 1から1000までのうちの素数をすべて表示するプログラムを作成しなさい.
    ヒント:
    • ある自然数nは,n自身と1以外で割りきれないとき,素数である.※1は素数ではない.
    • すなわち,2〜n-1のすべてで割りきれないとき,素数である.※ただし,2については考慮が必要.
    • ある自然数nがxで割りきれるときは,n % x == 0 となる.割りきれないときは,n % x != 0となる.
  2. 1から1000までのうちの素数でない数をすべて表示するプログラムを作成しなさい.1も表示すること.
3.ナンバープレート
  1. 入力された値から,車のナンバープレート表記を作成するプログラムを作成しなさい.
    ヒント:
    • 車のナンバープレートは,4桁であり,多くの場合,12-34のように表示される.
    • 先頭から0が続くときには,0の代りに"・"が表示されるが,今回は"."を表示することとする. "."があるとき,中央の"-"は表示されない.
  2. 例:
    Enter Plate Number = 0001
    0001 → .. .1
    Enter Plate Number = 12
    0012 → .. 12
    Enter Plate Number = 0123
    0123 → .1 23
    Enter Plate Number = 1234
    1234 → 12-34
    Enter Plate Number = 3210
    3210 → 32-10
    Enter Plate Number = 2002
    2002 → "20-02"
    Enter Plate Number = 101
    101 → ".1 01"
    
  3. 入力された文字列が,ナンバープレート表記としてあっているかをチェックし, あっていれば"OK",間違っていれば"ERROR"と表示するプログラムを作成しなさい.
    例:
    Enter Plate Strings = .. .1
    OK
    Enter Plate Strings = 00 01
    ERROR
    Enter Plate Strings = 12345
    ERROR
    Enter Plate Strings = 12-45
    OK
    Enter Plate Strings = .1-23
    ERROR
    

4.カレンダ

  1. 任意の年がうるう年であるかどうかを表示するプログラムを作成しなさい.西暦1753年以降のみでよい.
    (1752年9月が特殊なため.UNIXで % cal 9 1752とやって確認せよ.)
    データ:
    • 4で割りきれる年はうるう年.ただし,100で割りきれる年はうるう年でない.ただし,400で割りきれる年はうるう年.
    例:
    Enter YYYY = 2001
    Not Leap year.
    Enter YYYY = 2000
    Leap year.
    Enter YYYY = 2100
    Not Leap year.
    Enter YYYY = 2004
    Leap year.
    Enter YYYY = 1964
    Leap year.
    
  2. 任意の年の1月1日の曜日を表示するプログラムを作成せよ.ただし,西暦1753年以降のみでよい.
    ヒント:
    • 1753年1月1日は,月曜日.
    • ある年が平年の場合は,翌年の1月1日は,その年の1月1日の曜日の次の曜日となる.※よって,1754年1月1日は火曜日.
    • ある年がうるう年の場合は,翌年の1月1日は,その年の1月1日の曜日の次の次の曜日となる.
  3. 任意の年月日に対応する曜日を表示するプログラムを作成しなさい.ただし,西暦1753年以降のみでよい.
    データ:
    • 1年は365日.ただし,うるう年は366日.
    • 1〜12月の日数は,それぞれ,31 28 31 30 31 30 31 31 30 31 30 31.ただし,うるう年の2月は29日.
    例:
    Enter YYYY/MM/DD = 2001/08/15
    Wednesday
    Enter YYYY/MM/DD = 2000/08/15
    Thuesday
    Enter YYYY/MM/DD = 2100/08/15
    Sunday
    Enter YYYY/MM/DD = 1801/08/15
    Saturday
    
  4. 任意の年月に対するカレンダーを表示するプログラムを作成しなさい.ただし,西暦1753年以降のみでよい.
    cal コマンドを利用して,結果があっているか確認せよ.
    例:
    Enter YYYY/MM = 2001/08
       August 2001
    Su Mo Tu We Th Fr Sa
              1  2  3  4
     5  6  7  8  9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31
    Enter YYYY/MM = 1852/06
       June 1852
    Su Mo Tu We Th Fr Sa
           1  2  3  4  5
     6  7  8  9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30
    
  5. 年号を「明治」「大正」「昭和」「平成」で表示できるようにしなさい.(明治以前は無視して良い)
  6. 入力する年号にMをつけると「明治」,Tをつけると「大正」,Sをつけると「昭和」,Hをつけると「平成」 と解釈するようにしなさい.
    例:
    Enter YYYY/MM = H13/08
    August 2001(平成13年8月)
    Su Mo Tu We Th Fr Sa
              1  2  3  4
     5  6  7  8  9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31
    

5.電卓

  1. 足し算を入力すると計算するプログラムを作成しなさい.正の整数同士の足し算のみでよい.
    例:
    Enter Equation : 1+1=
    1+1=2
    Enter Equation : 5+13=
    5+13=18
    Enter Equation : 6 + 30 =        ※空白を挟んでもOKとする
    6+30=36
    Enter Equation : 192 + 55       ※=がない場合などはエラー
    Syntax Error.
    Enter Equation : 123=           ※+がない場合などもエラー
    Syntax Error.
    Enter Equation : 15+92b=        ※変な文字がある場合などもエラー
    Syntax Error.
    
  2. 負の数も扱えるように拡張しなさい.
    例:
    Enter Equation : 1+-5=
    1+-5=-4
    Enter Equation : -100+50=
    -100+50=-50
    
  3. 引き算,掛け算,割り算もできるように拡張しなさい.

  4. 以下15〜18は難易度が高いため,余力のある人のみやってください.
    余力のない人は19へ
  5. 小数点を含んだ計算も出来るように拡張しなさい.
  6. 複数の項目を用いた式も計算できるようにしなさい.計算順序は前からでよい.
    例:
    Enter Equation : 1+1.2+1.4=
    1+1.2+1.4=3.6
    Enter Equation : 2+3*4+2=
    2+3*4+2=22
    Enter Equation : -5*6/2 = 
    -5*6/2=-15
    
  7. 計算順序を掛け算,割り算を優先するようにしなさい.
    例:
    Enter Equation : 2+3*4+2=
    2+3*4+2=16
    
  8. ()を利用できるようにしなさい.
    例:
    Enter Equation : 2+3*(4+2)=
    2+3*4+2=20
    Enter Equation : 2.76+3.11*(4.5522+2.3141)/((2.01+4.23)*5.86+8.234-16.2)=
    2.76+3.11*(4.5522+2.3141)/((2.01+4.23)*5.86+8.234-16.2)=???????
    

6.

  1. 考え中…

続き