Download : sample-001.c
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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
/* * 2018/10/26 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-01 * * 20181019 20181019-01-QQQQ.c * * printf の書式指定 * */ #include <stdio.h> /* * 課題の目的: printf を使ってみる(書式指定:浮動小数点数は %f を利用) */ /* * main */ int main( int argc, char *argv[] ) { int ia = 7; int ib = 15; double da = 3.14; double db = 1.59; printf ( "%d + %d = %d\n", ia, ib, ia + ib ); /* 整数型の和 */ /* => 「7 + 15 = 22」 */ printf ( "%f / %f = /* r:ここ */\n", /* s:ここ */, /* u:ここ */, /* s:ここ */ / /* u:ここ */ ); /* 浮動小数点数の商 */ /* => 「3.14 / 1.59 = ...」 */ return 0; }
/* * 課題 CNAME-02 * * 20181019 20181019-02-QQQQ.c * * scanf の書式指定 * scanf の最初の引数は「書式指定」(のみ)を含んだ書式文字列 * 二つ目以後は、&を先行した変数名の並び */ #include <stdio.h> /* * */ /* * main */ int main( int argc, char *argv[] ) { int i; /* キーボードから入力された整数値を保持する整数型変数 */ double d; /* キーボードから入力された浮動小数点数値を保持する浮動小数点数型変数 */ printf ( "整数値をキーボードから入力します : " ); scanf ( "%d", &i ); printf ( "入力された整数値は %d でした。\n", i ); printf ( "浮動小数点数値をキーボードから入力します : " ); scanf ( "%lf", &d ); /* 浮動小数点数は、出力は %f だが、入力は %lf を使う */ printf ( "入力された浮動小数点数値は %f でした。\n", d ); /* 詳しくは、C 言語、printf、書式指定、でググる */ return 0; }
/* * 課題 CNAME-03 * * CDATE FILENAME * * 代入文 * 整数型変数 ( a, b, c ) を三つ宣言する * 整数型変数 a, b にそれぞれ、123, 4 を代入する * 整数型変数 c に a と b の和を代入する * 整数型変数 c の値を画面に出力する */ /* 代入文の使い方と変数宣言 ブロックの先頭で、適切な型で変数を宣言する事 代入文では、(宣言によって型が明確になった)変数が使われる # cf. 変数宣言を忘れると、コンパイラが教えてくれる(Error になる) */ #include <stdio.h> #include "s_print.h" /* * main */ int main( int argc, char *argv[] ) { /* 整数型変数 a の宣言 */ int a; /* 整数型変数 b の宣言 */ int b; /* 変数 b が宣言されたので、関数内で, 変数 b が利用できる */ /* 整数型変数 c の宣言 */ int c; /* 整数型変数 a に 123 を代入 */ a = 123; /* 整数型変数 b に 4 を代入 */ b = 4; /* この代入によって、はじめて、変数 b の 値は 4 になる */ /* それまでの変数 b の値は、「不定」である */ /* 整数型変数 c に、変数 a と 変数 b の和を代入 */ c = a + b; /* 整数型変数 c の値を画面に出力 */ s_print_string ( "変数 c の値は " ); s_print_int ( c ); s_print_string ( " です。\n" ); return 0; }
/* * 課題 CNAME-04 * * CDATE FILENAME * * while 文 */ #include <stdio.h> #include "s_print.h" /* * main */ int main( int argc, char *argv[] ) { /* 整数型変数 odd の宣言とその初期化 ( 初期値は 1 を指定 ) */ int odd = 1; /* 整数型変数 sum の宣言とその初期化 ( 初期値は 0 を指定 ) */ int sum = 0; /* sum = 1 + 3 + .. + 9 = 25 = 5^2 sum = 0 + 1 + 3 + .. + 9 = 25 = 5^2 sum = (...((0 + 1) + 3) )+ .. )+ 9 = 25 sum = sum + odd を繰り返す */ /* odd の値が 9 以下の間は繰り返す */ while ( odd <= 9 ) { /* sum に odd の値を「追加」する */ sum = sum + odd; /* 再帰の時の「蓄積型」 */ /* odd の値を次の奇数にする */ odd = odd + 2; } /* 整数型変数 sum の値を画面に出力 */ s_print_string ( "1 から 9 までの奇数の和は " ); s_print_int ( sum ); s_print_string ( " です。\n" ); return 0; }
#include <stdio.h> #include "s_print.h" void print_n ( int n ) { /* 変数 n の値は 10 */ s_print_int ( n ); /* n に 10 が指定されているので .. */ s_print_newline(); /* 「10<改行>」を出力する */ n = 100; /* 代入を行う */ /* 変数 n の値が 100 に変わる */ /* もともともっていた値 10 は、 (変数 n を利用しては..) 参照できなくなる */ /* 代入によって、代入以前と以後では、同じ命令列でも 異なる結果になる */ /* 上の 8,9 行目の命令をコピーした... */ s_print_int ( n ); /* n に 100 が代入されているので .. */ s_print_newline(); /* 「100<改行>」を出力する */ } int main(int argc, char *argv[] ) { print_n ( 10 ); /* print_n ( 10 ) => print_n ( n ) / n = 10 => n = 10 s_print_int ( n ); s_print_newline(); => s_print_int ( 10 ); s_print_newline(); cf. n = 10; 等式ではなく、代入 s_print_int ( n ); s_print_newline(); */ return 0; }
#include <stdio.h> #include "s_print.h" /* ?t?B?{?i?b?`????A?[?I??` fib_0 = 0 fib_1 = 1 fib_{k} = fib_{k-1} + fib_{k-2} (k>1) {fib_i} = 0, 1, 1, 2, 3, 5, 8, ... */ int fib(int k) { if ( k == 0 ) { return 0; } else if ( k == 1 ) { return 1; } else { return fib( k-1 ) + fib( k - 2 ); } } int main(int argc, char *argv[] ) { s_print_int ( fib ( 5 ) ); /* f5 = f4 + f3 = (f3+f2) + (f2+f1) = ((f2+f1)+(f1+f0)) + ((f1+f0)+f1) = (((f1+f0)+f1)+(f1+f0)) + ((f1+f0)+f1) = (((1+0)+1)+(1+0)) + ((1+0)+1) f5 = 5 ????? 5 ??v?Z??????????A???????? 1 ?? 5???????K?v?????? ??? f_n ??l??A2^n ???x????????? ?????Af_100 => 2^100 => 2^100 ??? 1 ???????? 2^100 = (2^10)^10 = (10^3)^10 = 10^30 */ s_print_newline(); return 0; }
#include <stdio.h> #include "s_print.h" /* f_5 ?????????v?Z?????? */ int main(int argc, char *argv[]) { int f0=0; int f1=1; int f2=f0+f1; int f3=f2+f1; int f4=f3+f2; int f5=f4+f3; /* f5 ??v?Z?? 4 ???????Z f_100 ??v?Z?? 99?@??????Z????? */ s_print_int ( f5 ); s_print_newline(); return 0; }
#include <stdio.h> int main(int argc, char *argv[] ) { int a = 100; int b = 15; int wa = a + b; printf ( "%d と %d の和は %d です。\n", a, b, wa ); /* ^^ ^^ ^^ = = == */ /* 「<aの値> と <bの値> の和は <waの値> です。」と表示される */ /* s_print_int ( a ); s_print_string ( " と " ); s_print_int ( b ); s_print_string ( " の和は " ); s_print_int ( wa ); s_print_string ( "です\n" ); */ return 0; }
#include <stdio.h> void print_int ( int n ) { printf ( "v = %d\n", n ); /* %d は整数値の出力書式 */ } void print_double ( double d ) { printf ( "v = %f\n", d ); /* %f は、浮動小数点数の出力書式 */ }
#include <stdio.h> /* プロトタイプ宣言をして、引数の型に関する情報を提供する */ extern void print_int ( int ); extern void print_double ( double ); /* 普通に関数呼び出しを利用するとき 型の情報は重要 関数の引数の型宣言を利用して、制御する(事ができる) */ int main(int argc, char *argv[]) { /* print_int ( 100 ); print_double ( 3.14 ); */ print_int ( 100.0 ); print_double ( 314 ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { /* printf ( "v = %d\n", 100 ); printf ( "v = %f\n", 3.14 ); */ printf ( "v = %d\n", 100.0 ); printf ( "v = %f\n", 314 ); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { int a; /* 割られる整数値を保存する変数 */ int b; /* 割る整数値を保存する変数 */ printf ( "割られる数を入力してください : " ); scanf ( "%d", &a ); /* 書式指定で「%d」を指定しているので、整数値を読み込む */ /* その読み込んだ値は、その後ろの 「&」がついた変数名(a)の 変数に代入される */ /* 書式は、(基本)printf と共通 ただし、「ふつうは」書式指定しか入れない(%xx 以外はいれない) そのあとの引数(代入する変数)には、& を付ける必要がある */ printf ( "割る数を入力してください : " ); scanf ( "%d", &b ); printf ( "%d を %d で割ると、%d になります。\n", a, b, a/b ); return 0; }
#include <stdio.h> /* 1 ???? 10 ????????o?????v???O???? print_to_n ( 10 ) 1 2 3 .. 9 10 => 1 2 3 .. 9 10 => print_to_n ( 9 ) printf ( "%d\n", n ); n=10 */ void print_to_n ( int n ) { if ( n <= 0 ) { /* ????????? */ } else { print_to_n ( n - 1 ); printf ( "%d\n", n ); } } int main(int argc, char *argv[]) { print_to_n ( 10 ); return 0; }
#include <stdio.h> /* 1 ???? 10 ????????o?????v???O???? print_to_n ( 10 ) 1 2 3 .. 9 10 => 1 2 3 .. 9 10 => print_to_n ( 9 ) printf ( "%d\n", n ); n=10 */ void print_to_n ( int n ) { if ( n <= 0 ) { /* ????????? */ } else { print_to_n ( n - 1 ); printf ( "%d\n", n ); } } int main(int argc, char *argv[]) { int n = 1; /* ??????????J???????A??????X??????? ?ω??????????K?v : ??? n */ /* ????? n ?? 1 ????A?????? */ while ( n <= 10 ) { /* n ?? 10 ????????? */ printf ( "%d\n", n ); /* n = 1, 2, ..., 10 */ n = n + 1; /* ???? n ??l?? 1 ????????An ???????? */ /* C ?????u=?v??A?u????L???v?????A?u?????L???v????? */ /* C ?????u?????L???v??A?u==?v??p???? */ } return 0; } /* void fwhile ( int n ) { if ( n <= 10 ) { printf ( "%d\n", n ); fwhile ( n + 1 ); } else { } } fwhle ( 1 ); n = 1; */
[前回] 構文 代入文 構文 : 変数名 = 式 意味 : 「式」の値を計算して、その結果を「変数名」が表す変数に「代入」する 代入 : 変数の値を変更する 以前にもっていた変数値は、「変数の値」でなくなる 代入後は、代入された値が、「変数の値」になる cf. 変数:変数名で、変数の値を参照(取り出す)仕組み => 関数の仮引数変数:(これまでは)値が一度設定されると、それ以後は変化しなかった(パラメータ) 「代入」の機能は、関数の仮引数変数に対して、関数呼び出しをする時に働いていた # 「代入文」インパクト # 代入文の前と後では、「同じ表現の結果が変わる」 # 代入は基本的な機能 : 使い分けが難しい # 自由に使うのではなく、制限して使うと協力かつ安全 # cf. 関数の仮引数変数への実引数値の代入は、制限された代入の例で、安全かつ強力 ## C 言語の設計思想 ## 危ないけど強力な機能を、シンプルに提供する(実行効率を高める) ## => 使いこなしは、プログラマの技量に任せる 変数宣言 構文 : 型名 変数名 意味 : その「型名」の表す型を持つ変数を用意し、「変数名」の名前を付ける => 新しい変数作られる # cf. 関数の仮引数宣言 : 制限された変数宣言 # 関数の仮引数変数は、関数呼び出しの実引数の値で初期化されている # 変数宣言は、ブロック 「{ ? } の間」の先頭でのみ、行われ # その変数の有効(スコープ)は、そのブロック内のみである # 例外: 関数の仮引数変数は、関数のヘッド部(引数の所)に # 記載されるが、その有効範囲は、ボディ部({ ? } の間)になる # => 関数の仮引数変数のスコープは、関数内全域になる 「変数」と「代入」を多用する理由 => いったん計算した結果を、変数に代入して、使いまわす => 同じ計算を回避できるので、効率的になる == printf の正体 前回以前 : printf は引数に文字列を指定して、その文字列を画面に表示する => 文字列表示専用の関数 # cf 文字列以外の出力 s_print_aaaa を使え.. 実は、printf は出力の万能選手で、いろいろな型の値を出力できる 構文 : printf ( 書式文字列, 必要に応じて追加の値 ) 意味 : 基本は書式文字列を画面に出力するが、 その文字列の中の書式指定(%から始まる)があると、 その部分に、指定された型で、追加された値を、順に当てはめて出力をする 具体的な例 printf ( "x=%d\n", 1+2+3 ); x=6<改行> /* %d が 6 に置き換わる */ cf. C 言語には、文字列を出力する puts がある => Hello World では puts でもかまわなかった にも拘わらず、printf を使っている => K&R は、printfを自慢したかった可能性がある !! printf は非常に強力 printf はすごく変 引数の個数がかわったり、 引数の型がかわったりする # 「printf の原理」=> 時間があれば、説明したい 1. printf という大変便利なものがあるので活用しよう # cf. s_print.h よ、おさらば 2. 1. にも拘わらず、printf は注意深く利用する必要がある [今日の話] printf : 出力 <-> 入力 : scanf scanf : さらに注意が必要 => 詳しくは、また後回し 構文 : scanf ( 書式, &をつけた変数(名)を並べる ) 意味 : 「書式」で指定した型の値をキーボードから入力し、 そのあとの引数で指定した変数に代入する !!!! 実は、「嘘」だが、そのようにまず理解してお while 構文 構文 : while ( 条件 ) { 命令 } 意味 : 「条件」が成立している限り「命令」を繰り返す cf. 繰り返しを行う構文 (これまでは、再帰呼び出して実現) => 関数を作らずに「繰り返し」が実現できる [ポイント] 「命令」を実行すると、「条件」が変化する可能性がある必要がある ふつうは、条件に変数を入れて、命令の中でその変数の値を代入を利用して、変化させる # cf. while 文は、いつでも、形式的に再帰関数に変換できる # while ( 条件 ) { 命令; 変数の変更 } # 例 : 条件 ( n <= 10 ) / 命令 : printf () / 変数の変更 n = n + 1 # # while( 変数:代入文の左 ) { # if ( 条件 ) { # 命令 # fwhile ( 代入文の右 ); # } else {} # }
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20181026-01.c
/* * 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
$ ./20181026-01-QQQQ.exe 国を表す文字を入力してください j 日本 e 英語 c 中国 f フランス g ドイツ Bonjour $
Download : 20181026-02.c
/* * 課題 CNAME-02 * * 20181026 20181026-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; }
$ ./20181026-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 $