ログイン
編集不可のページディスカッション情報添付ファイル
"moba/C言語講習会宿題"の差分

MMA
2と23のリビジョン間の差分 (その間の編集: 21回)
2013-07-08 18:09:42時点のリビジョン2
サイズ: 305
編集者: moba
コメント:
2013-07-21 20:45:01時点のリビジョン23
サイズ: 4081
編集者: moba
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 1: 行 1:
C言語講習会の宿題
行 5: 行 3:
任意の数字の入力があった際に次のようなルールに則った出力が得られるようにしてください。
||<#DDFFFF>'''入力'''<<BR>>  15<<BR>>||
Fizz''''''Buzzという遊びを知っていますか?Wikipediaによると
<<BR>>
 ||「Fizz Buzz(フィズ・バズ、Bizz Buzz や Buzz とも呼ばれる)は英語圏で長距離ドライブ中や飲み会の時に行われる言葉遊びである」<<FootNote(http://ja.wikipedia.org/wiki/Fizz_Buzz)>>||
という遊びだそうです。それでは任意の数が与えられた時に、その数までのFizz''''''Buzz遊びの結果を出力するプログラムを組んでみましょう。
<<BR>>このゲームにおけるルールは次のようになっています。

 * 3の倍数の時は"'''Fizz'''"
 * 5の倍数の時は"'''Buzz'''"
 * 15の倍数の時は"'''Fizz''''''Buzz'''"
 * それ以外は数字を出力

例えば入力する値が16だった場合、出力結果は次のようになります。

||<#EEFFFF>'''入力'''<<BR>>  16<<BR>>'''出力'''<<BR>>  1<<BR>>  2<<BR>>  Fizz<<BR>>   4<<BR>>  Buzz<<BR>>  Fizz<<BR>>  7<<BR>>  8<<BR>>  Fizz<<BR>>  Buzz<<BR>>  11<<BR>>  Fizz<<BR>>  13<<BR>>  14<<BR>>  Fizz''''''Buzz<<BR>>  16||
行 8: 行 18:
Euclidの互除法 は知っていますか?2つの数の最大公約数を知るのに便利な定理です。定理の内容は以下のようになっています。
||<#EEFFFF>数A,B(B≠0)に対して<<BR>>  A=BQ+R<<BR>>を満たす数Q,Rがただひとつ存在する。||
このままではわかりにくいので例を出すと、195と225との最大公約数はこのEuclidの互除法を用いると次のように求められます。
||<#EEFFFF>まず、225は195を用いて次のように表されます<<BR>>  225='''195'''×1+'''30'''<<BR>>この195を、225を195で割った際に出てくる余り30で割ると<<BR>>  195='''30'''×6+'''15'''<<BR>>同様にして割った際に出てくる商である30と余りである15を用いて<<BR>>  30='''15'''×2+0<<BR>>これより195と225の最大公約数は15であることがわかりました。||
このように、面倒な素因数分解をせずとも簡単に2数の最大公約数を求めることができます。では、このEuclidの互除法を用いて、入力された任意の2数に対して最大公約数を求めるプログラムを組んでみましょう。ただし、入力される数は'''''自然数'''''とします。
<<BR>>以下は一例です。
||<#EEFFFF>'''入力'''<<BR>>  1つ目の自然数--->156<<BR>>  2つ目の自然数--->168<<BR>>'''出力'''<<BR>>  最大公約数は12||
'''※ヒント※'''<<BR>>  Cには「剰余演算子」というものがあります。自分で調べてみましょう。それを使ってとくと簡単ですよ。
行 9: 行 27:
ポインタを用いて変数のアドレスを表示しましょう。
||<#EEFFFF>'''出力'''<<BR>>  変数aのアドレス--->0x7fff5fbffa5c<<BR>>  変数bのアドレス--->0x7fff5fbffa58||
(ただし出力結果はそれぞれの環境でこれとは異なるはずです。たぶん...)
行 10: 行 31:
char型で文字列"Hello, World!!"を用意して、それをwhile文とポインタ演算を使って表示してみましょう。<<BR>>
||<#EEFFFF>'''出力'''<<BR>>  Hello, World!!||
行 11: 行 34:
Unix環境にはyesコマンドというものが存在します(わからない人は自分で調べて下さい)。今回はコマンドライン引数から文字列を取得する方法は教えていないはずなので、scanf関数を使って文字列を変数に代入し、代入された文字列を表示し続けるyesコマンドを作成してみましょう。'''''ただし、文字列内に空白は含めないものとします'''''
||<#EEFFFF>'''入力'''<<BR>>  文字列を入力して下さい--->Hello, World!!<<BR>>'''出力'''<<BR>>  Hello, World!!<<BR>>  Hello, World!!<<BR>>  Hello, World!!<<BR>>  …<<BR>>  …<<BR>>  …<<BR>>  Hello, World!!||

第1問

FizzBuzzという遊びを知っていますか?Wikipediaによると

  • 「Fizz Buzz(フィズ・バズ、Bizz Buzz や Buzz とも呼ばれる)は英語圏で長距離ドライブ中や飲み会の時に行われる言葉遊びである」1

という遊びだそうです。それでは任意の数が与えられた時に、その数までのFizzBuzz遊びの結果を出力するプログラムを組んでみましょう。
このゲームにおけるルールは次のようになっています。

  • 3の倍数の時は"Fizz"

  • 5の倍数の時は"Buzz"

  • 15の倍数の時は"FizzBuzz"

  • それ以外は数字を出力

例えば入力する値が16だった場合、出力結果は次のようになります。

入力
  16
出力
  1
  2
  Fizz
   4
  Buzz
  Fizz
  7
  8
  Fizz
  Buzz
  11
  Fizz
  13
  14
  FizzBuzz
  16

第2問

Euclidの互除法 は知っていますか?2つの数の最大公約数を知るのに便利な定理です。定理の内容は以下のようになっています。

数A,B(B≠0)に対して
  A=BQ+R
を満たす数Q,Rがただひとつ存在する。

このままではわかりにくいので例を出すと、195と225との最大公約数はこのEuclidの互除法を用いると次のように求められます。

まず、225は195を用いて次のように表されます
  225=195×1+30
この195を、225を195で割った際に出てくる余り30で割ると
  195=30×6+15
同様にして割った際に出てくる商である30と余りである15を用いて
  30=15×2+0
これより195と225の最大公約数は15であることがわかりました。

このように、面倒な素因数分解をせずとも簡単に2数の最大公約数を求めることができます。では、このEuclidの互除法を用いて、入力された任意の2数に対して最大公約数を求めるプログラムを組んでみましょう。ただし、入力される数は自然数とします。
以下は一例です。

入力
  1つ目の自然数--->156
  2つ目の自然数--->168
出力
  最大公約数は12

※ヒント※
  Cには「剰余演算子」というものがあります。自分で調べてみましょう。それを使ってとくと簡単ですよ。

第3問

ポインタを用いて変数のアドレスを表示しましょう。

出力
  変数aのアドレス--->0x7fff5fbffa5c
  変数bのアドレス--->0x7fff5fbffa58

(ただし出力結果はそれぞれの環境でこれとは異なるはずです。たぶん...)

第4問

char型で文字列"Hello, World!!"を用意して、それをwhile文とポインタ演算を使って表示してみましょう。

出力
  Hello, World!!

第5問

Unix環境にはyesコマンドというものが存在します(わからない人は自分で調べて下さい)。今回はコマンドライン引数から文字列を取得する方法は教えていないはずなので、scanf関数を使って文字列を変数に代入し、代入された文字列を表示し続けるyesコマンドを作成してみましょう。ただし、文字列内に空白は含めないものとします

入力
  文字列を入力して下さい--->Hello, World!!
出力
  Hello, World!!
  Hello, World!!
  Hello, World!!
  …
  …
  …
  Hello, World!!

moba/C言語講習会宿題 (最終更新日時 2013-07-21 20:53:11 更新者 moba)