こんにちは、@Solphaです。
参考書をひと通り読み終えた(内容を理解しているかは別ですが)ので、「プログラミング 初心者 練習問題」と検索して出てきた問題なんかを解いて練習しています。
その中でfor
を使う問題があったので、今回はfor
文に焦点を当てて九九表を作るプログラムを書いてみました。
#概要
##内容
- 各値の後に
|(パイプ)
を挟む - 格段ごとに改行する
- 体裁を整えるため、1桁の数字は前に
半角スペース
を入れて2桁数字に合わせる
##for文
for 初期化文; 条件; 後処理 {
// 条件がTrueの間、ここの処理が行われ続ける。
}
##for文の活用例
###1.Goにはwhile文がないので、for文で表現する
sample
i := 0
for i < 100 {
fmt.Println(i)
i++
}
###2. 無限ループ
sample
i := 0
for { //forの条件を指定しない。
fmt.Println(i)
}
実行するとPCに負荷が掛かるのでご注意を。
###3.他言語同様、breakやcontinueも使用可能
sample
for i := 1; i < 10; i++ {
for j := 1; j < 10; j++ {
if i*j > 25 {
// breakしたときのiとjの値を表示
fmt.Printf("i=%d, j=%d Break!\n", i, j)
break
} else {
continue
}
}
}
#プログラム
##コード
99.go
package main
import "fmt"
func main() {
for i := 1; i <= 9; i++ {
for n := 1; n <= 9; n++ {
// 2桁の数字と体裁を合わせるため、1桁の数字は半角スペースを挿入
if i*n < 10 {
fmt.Printf(" %d|", i*n)
} else {
fmt.Printf("%d|", i*n)
}
}
// 各段の終わりで改行
fmt.Println()
}
}
##コード(改)
heliac2000さんから表示方法についてコメントをいただいたので、コードを改良してみました。
99v2.go
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 9; i++ {
for n := 1; n <= 9; n++ {
// ”%2d”とすることで一桁の数字の場合は数字の前に半角スペースが入る。
fmt.Printf("%2d|", i*n)
}
// 各段の終わりで改行
fmt.Println()
}
}
改良前と比べてコードが簡素化されて分かりやすい!!
いやー、勉強になることが多くて楽しいですね。
コメントで「もっとこうしたらいいよ」的なことを教えていただけるこの環境はステキです。
##実行結果
$ go run 99.go
1| 2| 3| 4| 5| 6| 7| 8| 9|
2| 4| 6| 8|10|12|14|16|18|
3| 6| 9|12|15|18|21|24|27|
4| 8|12|16|20|24|28|32|36|
5|10|15|20|25|30|35|40|45|
6|12|18|24|30|36|42|48|54|
7|14|21|28|35|42|49|56|63|
8|16|24|32|40|48|56|64|72|
9|18|27|36|45|54|63|72|81|
#所感
- 掛け算の方法(
for
文にfor
文をネスト)するところまではすぐに思いつきましたが、1桁の数字の場合に数字の前に半角スペース
を挿入する方法に悩みました。(2014/12/20更新:コメントで、更に簡単にできる方法を教えていただきました) - 問題に対して深く考えすぎたせいで、最初は
else if
などを多用してとても見苦しいコードに・・・簡潔に考えるクセを身につけたいものです。