Download : sample-001.c
/* * CDATE sample-001.c */ /* * 複数条件の分岐 * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-001.exe sample-001.c * 実行 * sample-001 */ #include <stdio.h> /* * trump * トランプの番号から、その名前を表示する */ void trump ( int number ) { printf ( "数値 %d の表すカードは、", number ); if ( number == 1 ) { /* 番号が 1 なら エース (A) */ printf ( "エース" ); } else if ( number == 11 ) { /* 番号が 11 なら ジャック (J) */ printf ( "ジャック" ); } else if ( number == 12 ) { /* 番号が 12 なら クイーン (Q) */ printf ( "クイーン" ); } else if ( number == 13 ) { /* 番号が 13 なら キング (K) */ printf ( "キング" ); } else if ( number == 0 ) { /* 番号が 0 の場合は例外的に ジョーカー ($) */ printf ( "ジョーカー" ); } else { /* それ以外 */ if ( number < 0 ) { /* 番号が負の場合は.. */ printf ( "範囲外" ); } else if ( 13 < number ) { /* 番号が 13 より大きい場合は.. */ printf ( "範囲外" ); } else { /* それ以外は.. */ printf ( "%d の数カード", number ); } } printf ( "です。\n" ); } /* * main * */ int main( int argc, char *argv[] ) { trump ( -1 ); trump ( 0 ); trump ( 1 ); trump ( 7 ); trump ( 10 ); trump ( 13 ); trump ( 20 ); return 0; }
$ ./sample-001.exe 数値 -1 の表すカードは、範囲外です。 数値 0 の表すカードは、ジョーカーです。 数値 1 の表すカードは、エースです。 数値 7 の表すカードは、7 の数カードです。 数値 10 の表すカードは、10 の数カードです。 数値 13 の表すカードは、キングです。 数値 20 の表すカードは、範囲外です。 $
Download : sample-002.c
/* * 2019/09/27 sample-002.c */ /* * 複数条件の分岐(case 文を利用した場合) * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-002.exe sample-002.c * 実行 * sample-002 */ #include <stdio.h> /* * trump * トランプの番号から、その名前を表示する */ void trump ( int number ) { printf ( "数値 %d の表すカードは、", number ); switch ( number ) { /* 一つの式の値で分岐 */ case 1: /* 番号が 1 なら エース (A) { (開きブロック) */ printf ( "エース" ); break; /* ここで 1 の場合がおわる } (閉じブロック) */ case 11: /* 番号が 11 なら ジャック (J) */ printf ( "ジャック" ); break; case 12: /* 番号が 12 なら クイーン (Q) */ printf ( "クイーン" ); break; case 13: /* 番号が 13 なら キング (K) */ printf ( "キング" ); break; case 0: /* 番号が 0 の場合は例外的に ジョーカー ($) */ printf ( "ジョーカー" ); break; case 2: /* 範囲は指定できないので、全て列挙 */ /* 2 の場合は 3 の場合と同じなので break しない */ case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: printf ( "%d の数カード", number ); break; /* 2 〜 10 の場合はここで、終了 */ default: /* それ以外は.. */ printf ( "範囲外" ); break; /* これは不要だが、つける習慣を (マナー) */ } printf ( "です。\n" ); } /* * main * */ int main( int argc, char *argv[] ) { trump ( -1 ); trump ( 0 ); trump ( 1 ); trump ( 7 ); trump ( 10 ); trump ( 13 ); trump ( 20 ); return 0; }
$ ./sample-002.exe 数値 -1 の表すカードは、範囲外です。 数値 0 の表すカードは、ジョーカーです。 数値 1 の表すカードは、エースです。 数値 7 の表すカードは、7 の数カードです。 数値 10 の表すカードは、10 の数カードです。 数値 13 の表すカードは、キングです。 数値 20 の表すカードは、範囲外です。 $
Download : sample-003.c
/* * 2019/09/27 sample-003.c */ #include <stdio.h> /* * for 文を利用して、0 から 9 の数値を表示する * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-003.exe sample-003.c * 実行 * sample-003 */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ for ( i = 0; i < 10; i = i + 1 ) {/* i を 0 〜 9 迄変化 */ printf ( "%d\n", i ); /* i を出力 */ } return 0; }
$ ./sample-003.exe 0 1 2 3 4 5 6 7 8 9 $
Download : sample-004.c
/* * 2019/09/27 sample-004.c */ #include <stdio.h> /* * for 文を利用して、1 から 10 の数値を表示する * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-004.exe sample-004.c * 実行 * sample-004 */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ for ( i = 1; i <= 10; i = i + 1 ) {/* i を 1 〜 10迄変化 */ printf ( "%d\n", i ); /* i を出力 */ } return 0; }
$ ./sample-004.exe 1 2 3 4 5 6 7 8 9 10 $
Download : sample-005.c
/* * 2019/09/27 sample-005.c */ #include <stdio.h> /* * for 文を利用して、0 から 9 の数値を表示する * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-005.exe sample-005.c * 実行 * sample-005 */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ for ( i = 0; i < 10; i++ ) { /* i を 0 〜 9 迄変化 */ /* i++ は i = i + 1 と同じ */ printf ( "%d\n", i ); /* i を出力 */ } return 0; }
$ ./sample-005.exe 0 1 2 3 4 5 6 7 8 9 $
Download : sample-006.c
/* * 2019/09/27 sample-006.c */ #include <stdio.h> /* * for 文を利用して、0 から 9 迄の 10 個の数値を和を表示する * sum = \sum_{i=0}^{9} i * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-006.exe sample-006.c * 実行 * sample-006 */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ int sum = 0; for ( i = 0; i < 10; i++ ) { /* i を 0 〜 9 迄変化 */ /* i++ は i = i + 1 と同じ */ sum = sum + i; /* sum に i の値を加える */ printf ( "%d %d\n", i, sum ); /* i と sum を出力 */ } printf ( "最終的には sum = %d\n", sum ); return 0; }
$ ./sample-006.exe 0 0 1 1 2 3 3 6 4 10 5 15 6 21 7 28 8 36 9 45 最終的には sum = 45 $
Download : sample-007.c
/* * 2019/09/27 sample-007.c */ #include <stdio.h> /* * for 文を利用して、0 から 9 の数値を表示する * プログラムを while に書き直す * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-007.exe sample-007.c * 実行 * sample-007 */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ /* 元々のプログラム for ( i = 0; i < 10; i++ ) { printf ( "%d\n", i ); } step-1 <初期化式> を前にもってくる i = 0; for ( i < 10; i++ ) { printf ( "%d\n", i ); } step-2 <再初期化式> を、繰返し文の後にもって行く i = 0; for ( i < 10 ) { printf ( "%d\n", i ); i++; <= { 〜 } の一番最後 } step-3 for を while に書き換える i = 0; while ( i < 10 ) { printf ( "%d\n", i ); i++; } */ /* 元々のプログラム for ( i = 0; i < 10; i++ ) { printf ( "%d\n", i ); } */ i = 0; while ( i < 10 ) { printf ( "%d\n", i ); i++; } return 0; }
$ ./sample-007.exe 0 1 2 3 4 5 6 7 8 9 $
Download : sample-008.c
/* * 2019/09/27 sample-008.c */ #include <stdio.h> /* * for 文では、条件式がサボれる * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-008.exe sample-008.c * 実行 * sample-008 */ int main(int ac, char *av[] ) { for ( ;; ) { /* while では条件を省略できないが for 文ではできる .. */ /* 条件が省略されると、「常に真」になるので無限ループ */ /* プログラムを停止させるには * Ctrl-C ([Ctrl] キーを押しながら [C] キーを押す) * を押す。 */ printf ( "動いています...\n" ); } return 0; }
動いています... 動いています... 動いています... 動いています... .... 動いています... 動いています... 動いています... 動いています... 動いてい^C
Download : sample-009.c
/* * 2019/09/27 sample-009.c */ #include <stdio.h> /* * for 文を利用して、0 から 99 の偶数の数値 * アプローチ * (その一) i を 0 〜 99 として、但し偶数だけを出す * * 利用方法 * コンパイル * cc -I ~/c/include -o sample-009.exe sample-009.c * 実行 * sample-009 */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ for ( i = 0; i < 100; i++ ) { /* i を 0 〜 99 迄変化 */ /* 但し、i が偶数の時だけ → if 文を利用する */ if ( i % 2 == 0 ) { /* i を 2 で割った余り(i%2)が 0 */ /* 即ち i が偶数の時.. */ printf ( "%d\n", i ); /* i を出力 */ } } return 0; }
$ ./sample-009.exe 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 $
/* * 課題 CNAME-05 * * CDATE FILENAME * * while 文 */ #include <stdio.h> /* #include "s_print.h" */ /* printf にしたので、不要 */ /* * main */ /* 25 = 5^2 = \sum_{i=1}^5 (2*i-1) = 1 + 3 + 5 + 7 + 9 = 25 = 0 + 1 + 3 + 5 + 7 + 9 = 25 */ int main( int argc, char *argv[] ) { /* 整数型変数 odd の宣言とその初期化 ( 初期値は 1 を指定 ) */ int odd = 1; /* 1, 3, 5, .. 2 づつ増えてゆく */ /* 整数型変数 sum の宣言とその初期化 ( 初期値は 0 を指定 ) */ int sum = 0; /* 総和の計算する : 最初は 0 */ /* sum = 1 + 3 + .. + 9 = 25 = 5^2 */ /* odd の値が 9 以下の間は繰り返す */ while ( odd <= 9 ) { /* odd = 1 .. 9 は実行する 11 になったらやめる */ /* sum に odd の値を「追加」する */ sum = sum + odd; /* 蓄積に相当する : 総和計算の時のパターン */ /* odd の値を次の奇数にする */ odd = odd + 2; /* 奇数列をつくるために +2 している */ /* 繰り返しの条件は odd に値を利用しているので、odd の更新が不可欠 (そうでないと無限ループになる) */ } /* 整数型変数 sum の値を画面に出力 */ /* printf に書き換える */ /* s_print_string ( "1 から 9 までの奇数の和は " ); s_print_int ( sum ); s_print_string ( " です。\n" ); */ printf ( "1 から 9 までの奇数の和は %d です。\n", sum ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int var; /* 変数宣言 : var という名前の変数を整数型として宣言 */ /* 1. 以下(ブロック内)では、var という名前の変数が利用できる */ /* 2. var には、整数値を保持する事ができる */ var = 1 + 2 + 3; /* 変数 var に対して、式「1+2+3」の値(整数型)を代入する */ /* 結果的に、これ以降は、var には、「6」が保持される */ printf ( "var = %d\n", var ); /* 書式(format)付の出力 */ /* 基本、書式(printf の最初の文字列型の引数) の内容がそのまま出力される */ /* ただし、 */ /* 書式内に書式指定(%から始まる数文字)があると、そこには、*/ /* (多くは)そのあとに指定されている引数の値を、そこに埋め込んで(その値を文字列に変換して)出力する */ /* 書式指定: いろいろ => ググって自分で調べる */ /* %d => 整数値 */ /* %c => 文字 */ /* %s => 文字列 */ return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int var; /* 変数は、宣言(定義)した直後は不定 */ /* 代入前に、var の値を参照する(初期化忘れ)の不適切 */ /* 初級者の誤りの多くが、初期忘れ */ /* 関数の「仮引数変数」も「変数」だが これは関数呼び出しの時に、必ず実引数値で初期化されるので、この心配がない */ /* 代入前 : var になにが入っているか不明 */ var = 1 + 2 + 3; /* 変数に代入 */ /* 代入後 : var には、代入によって割り当てられた値(6) が入っている事が保証される */ /* 「代入(代入文の実行)」によって、変数の値が変わる */ printf ( "var = %d\n", var ); /* printf の引数にあられた変数 (var) は評価されて その変数に保持されている値(6)が printf に渡される */ /* printf ( "var = %d\n", 6 ); */ printf ( "var = %d\n", var ); /* 変数の内容(変数に割り当てられている値) は、何度参照しても変わらない */ return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int var; var = 1 + 2 + 3; printf ( "var = %d\n", var ); printf ( "var = %d\n", var ); /* 一つ上と同じ結果 */ var = 9; /* var に 9 が代入される */ /* すでに値が入っている(初期化済)変数に対して、代入を行うことができる */ /* => 再代入 */ /* => 結果として (代入なので..) それ以後の変数の値は、代入によって割り当てられたものになる */ /* 1. この代入文を実行した「後」から */ /* 2. この代入以前に変数が保持していた値は、その変数を利用して、参照できなくなる */ printf ( "var = %d\n", var ); /* 同じ命令だが、変数の内容が異なるので結果が変化 */ return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int var; var = 1; printf ( "var = %d\n", var ); var = var + 1; /* var = 2 と同じ */ /* 元の値を 1 増やす */ printf ( "var = %d\n", var ); var = var + 1; /* 元の var の値(2)を利用して、新しい値を計算する事ができる */ /* 1. var の現在(元) の値が取り出される => 2 */ /* 2. その値を使って、式「var + 1」=>「2 + 1」の値(3)が計算される */ /* 3. 計算された値が、変数(var)に(再)代入され、その値(3)がその変数(var)に割り当てられる */ /* (4. 元の変数の値(2) は、これ以後、この変数(var)を利用しては参照できなくなる) */ /* => 元の値を利用して新しい値を定める=>「情報の蓄積」に相当する */ printf ( "var = %d\n", var ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int sum = 0; /* 変数は宣言と同時に代入が可能(初期代入) */ /* この文は、実質 int sum; smu = 0; の二つの表現とほぼ同様 */ int n = 1; /* 変数名 | 値 --------+------- sum | 0 n | 1 */ printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 1; /* 変数名 | 値 --------+------- sum | 1 n | 2 */ printf ( "n = %d : sum = %d\n", n, sum ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int sum = 0; int n = 1; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 1; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 1; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 1; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 1; printf ( "n = %d : sum = %d\n", n, sum ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int sum = 0; int n = 1; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 2; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 2; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 2; printf ( "n = %d : sum = %d\n", n, sum ); sum = sum + n; n = n + 2; printf ( "n = %d : sum = %d\n", n, sum ); return 0; } /* 四角数 : ものを四角く並べた時に、その個数 * * 1 1 o* 4 3 ** oo* 9 5 oo* *** */
#include <stdio.h> /* 同じ命令を繰り返す 概論 A => 再帰を利用する <= 今回、新しく、while を利用する事にする while 構文を利用した、繰り返し 0. 繰り返したい部分を抜き出す 1. その部分をブロック化する 2. ブロックの先頭に while() 挿入 => 0 の部分が繰り返される 3. while の後ろの () の中に、繰り返すために必要な条件(式)をかく */ int main(int argc, char *argv[]) { int sum = 0; /* 初期化 */ int n = 1; printf ( "n = %d : sum = %d\n", n, sum ); /* 初期状態の確認 */ while ( 1 == 1 ) { /* 1 == 1 これは常に真なのいつでも成立 */ /* 繰り返しの部分 => ここから*/ /* 同じ事を繰り返す */ sum = sum + n; n = n + 2; printf ( "n = %d : sum = %d\n", n, sum ); /* 繰り返しの部分 <= ここまで*/ } return 0; } /* このプログラムは、while の条件が常に真なので、無限回繰り返す(無限ループ) 表示を一時的に止めるには、Ctrl-S ( [Ctrl] + [s] ) 表示を再開するには、 Ctrl-Q とする プログラムを(強制的に..)終了させるには、Ctrl-C お押す */
#include <stdio.h> /* while 構文の挙動 0. 条件式をチェックする もし、成立していなければ、何もせず、while 構文の次の命令に行く 1. ブロック内の繰り返しの命令を行う 2. 0. に戻る もし、最初から条件が不成立の場合は、一度も繰り返さない => なにかをする前に、してもよいかどうかを判定する仕組み while 構文の良い性質 # do - while という構文もある(多分説明しない..) # => while と違って、命令を実行してから、チェックを行う */ int main(int argc, char *argv[]) { int sum = 0; /* 初期化 */ int n = 1; printf ( "n = %d : sum = %d\n", n, sum ); /* 初期状態の確認 */ while ( n < 10 ) { /* n < 10 の時だけ実行する */ /* この条件判断には、繰り返す命令の中にある代入文の左辺に現れる変数を利用する(必要がある) */ sum = sum + n; n = n + 2; printf ( "n = %d : sum = %d\n", n, sum ); } /* while 構文の繰り返しの部分には、「代入文」が不可欠 */ return 0; } /* このプログラムは、while の条件が常に真なので、無限回繰り返す(無限ループ) 表示を一時的に止めるには、Ctrl-S ( [Ctrl] + [s] ) 表示を再開するには、 Ctrl-Q とする プログラムを(強制的に..)終了させるには、Ctrl-C お押す */
#include <stdio.h> /* while 構文を利用して、 1 から 10 の値を出力する 0. やりたいことを、具体的記述する ( .. を利用してよい ) => 違う表現を並べたものになる可能性がある 1. 変数の更新を利用して、違う表現によって実現されている異なる命令を、 同じ表現によって、異なる命令を実行する形に書き換える # 命令の違いを変数の値の違いで、置き換えている => 同じ表現の繰りかえしになる 2. 繰り返し現れる、命令を while 構文でくくって、 あとは、繰り返しの条件を追加する cf. 繰り返しを使わない場合(順接で実現する場合)は、命令の終わりが、実行終わりになる => 終わりの条件を明示的に記述する必要はない */ int main(int argc, char *argv[]) { int i = 1; /* while 構文の制御変数(while 構文の条件式の中に出現して、while 構文の振る舞いを制御する) */ /* printf ( "i=%d\n", i ); i = 2; .. printf ( "i=%d\n", i ); i = 11; +/ /* printf ( "i=%d\n", i ); i = i + 1; .. printf ( "i=%d\n", i ); i = i + 1; */ while ( i <= 10 ) { /* i が 10 以下であれば繰り返す */ printf ( "i=%d\n", i ); i = i + 1; } return 0; }
#include <stdio.h> /* while 構文は、機械的に、再帰呼び出しに書き換える事が可能 実は、逆の書き換え( 再帰を while 構文に)は、原理的には可能だが、 機械的に書き換えるのは、簡単ではない => 再帰の方が、複雑で、表現能力が高い */ void print1to10( int i ) { if ( i <= 10 ) { printf ( "i=%d\n", i ); print1to10 ( i + 1 );/* i = i + 1; */ } else { /* do nothing */ } } int main(int argc, char *argv[]) { /* int i = 1; while ( i <= 10 ) { printf ( "i=%d\n", i ); i = i + 1; } */ print1to10 ( 1 ); /* i = 1 */ return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int var; /* 入力した値を保存する変数 */ printf ( "キーボードから、整数値を一つ入力してください : " ); /* プロンプト(入力促進表示) : 「入力してくださいね」表示 */ scanf ( "%d", &var ); /* 変数 var には、キーボードから入力された (整数値表現する文字列を対応する整数値に変換した)値 が代入される */ /* scanf は(printf と同じように..) 最初の引数は書式指定を含む文字列 */ /* この書式指定は、キーボードから入力された「文字列」から、 その書式にしたがった、データに変換して、その値を、 後に続く、変数のポインター値(<=未定義用語)の指す変数に保存する */ /* &は、変数の前につけて、変数のポインター値を求める演算(今回は説明しない) */ printf ( "キーボードから整数値 (%d) が入力されました\n", var ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int var; /* 入力した値を保存する変数 */ printf ( "キーボードから、整数値を一つ入力してください : " ); scanf ( "%d", &var ); /* %d 整数値 %c 文字 (%s : 文字列) !!! scanf を使う時には(なぜだか説明はしないが..) 代入する変数の前に & を付ける !!! => つけ忘れると、何が起きるかは、不明(入力はおもったようにゆかない) !!! scanf の書式には、書式指定以外のものを(いれてもよくて、それには、それなりの重要な意味があるが、) !!! いれないことを強く推奨する。 */ printf ( "キーボードから整数値 (%d) が入力されました\n", var + 1 ); return 0; }
2019/09/27 [前回] ガイダンス A と同じ A の内容は既知とする コンピュータの技術は、ならった事は、次の時にそのまま利用しする => 全部習得していないと、次に進めない 私語厳禁 新しい内容 変数への「代入」 構文 : 変数名 = 式 式の計算した結果の値が、(その代入文を実行した後は)その変数の値となる 代入の性質 0. 変数は、宣言しただけでは、値が定まらない => 必ず、利用するまえに、代入をして値を定める(初期化)必要がある 1. 代入によって、変数の値が変化する => (間接的に、その変数を利用している命令の結果が変化する) 2. 代入には、前後関係があって 代入前 (元の値)と、代入後(新しい値) という「時間」の概念が導入される 3. 代入が行われると、元の値は、(その変数を経由して)参照する事ができなくなる 値の破壊 4. 代入文の式(右辺)に、これから代入する変数(左辺)を参照する事ができる => 変数の以前の値を利用して、変数の新しい値を計算する事になる => 計算の蓄積(計算結果の蓄積)になる 例 : それを繰り返せば、「総和(Σ)」の計算を行う (変数の)値の更新と、繰り返しが組み合わされたものが、総和 printf の書式機能の利用 [今回] 変数の更新(代入文の右辺の式の中に、左辺に変数を含める形の代入文) それを繰り返す事によって、すこしずつ、答えに近づけて、最終的に、 その答えを求めるとというアプローチ(考え方)に対応した表現 動的なアプローチ !! 数学では、「無限回」が許されるが、計算機では、「有限」である必要である必要があるので !! => (連続量ではなく..)離散量を利用して、「有限回」で終わらせるか !!あるいは !! => 有限回数で終わらせる代わりに、「誤差(答えとの少しの違い)」を許容する立場をとる必要がある while 構文 命令を繰り返すための(もう一つの:再帰でない)方法 繰り返す部分を {} でかこみ、その前に while(条件)を追加 条件には、繰り返し部分で値が変化する変数を利用する while 構文と再帰の関係 ともに、繰り返しを行うための仕組み while 構文を利用するには、代入文が必要 再帰を利用するには、引数付き関数の定義が必要 while 構文で記述された部分は、機械的に、再帰関数に書き換える事ができる # 逆も可能だが、簡単とは限らない scanf scan with format => いろいろなデータの入力に利用できる 通常は printf と対にして覚える !!! printf は、まちがっても、せいぜい、変な表示になるだけ !!! scanf は、間違えると、プログラムが異常停止するような不可解な振る舞いにつながる !!! => why : 今は説明しない
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20190927-01.c
/* * 課題 CNAME-01 * * CDATE FILENAME * * キーボードから一文字入力し、その文字によって異る国の挨拶をする */ #include <stdio.h> /* * hello ( char contry ) * char contry : 国を表す一文字 * j : 日本 * e : 英語 * c : 中国 * f : フランス語 * g : ドイツ語 */ void hello ( char cmd ) { switch ( cmd ) { case 'j': /* 'j' の時は、日本語にする */ printf ( "こんにちは\n" ); break; case 'e': /* 'e' の時は、英語にする */ /* ** この部分を完成させなさい */ break; case 'c': /* 'c' の時は、中国語にする */ printf ( "ニイハオ\n" ); /* ** この部分を完成させなさい */ case 'f': /* 'f' の時は、フランス語にする */ printf ( "Bonjour\n" ); break; /* ** この部分を完成させなさい */ printf ( "Guten tag\n" ); break; default: /* どれでもなければ.. */ printf ( "???\n" ); break; } } /* * main */ int main( void ) { printf ( "国を表す文字を入力してください\n" ); printf ( "\tj\t日本\n" ); printf ( "\te\t英語\n" ); printf ( "\tc\t中国\n" ); printf ( "\tf\tフランス\n" ); printf ( "\tg\tドイツ\n" ); hello ( getchar() ); /* getchar() で文字を入力し、それに対応する結果を出す */ return 0; }
f
$ ./20190927-01-QQQQ.exe 国を表す文字を入力してください j 日本 e 英語 c 中国 f フランス g ドイツ Bonjour $
Download : 20190927-02.c
/* * 課題 CNAME-02 * * 20190927 20190927-02-QQQQ.c * * 0 〜 99 の偶数を出力する * */ #include <stdio.h> /* * for 文を利用して、0 から 99 の偶数の数値 (そのニ) i が 0 〜 99 の間の偶数だけを動くようにし、毎回 i を出す */ int main(int ac, char *av[] ) { int i; /* for 文の制御変数 */ for ( i = 0; i < 100; /* p:ここ */ ) { /* i++ だと i = 0, 1, 2, .. */ /* ○○とすれば i = 0, 2, 4, .. */ printf ( "%d\n", i ); /* i を出力 */ } return 0; }
$ ./20190927-02-QQQQ.exe 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 $