Download : sample-001.c
/* * 2020/04/24 sample-001.c */ /* * 最初のプログラムは "Hello, World" */ #include <stdio.h> /* * main 関数 */ int main ( void ) { printf ( "Hello, World\n" ); /* "Hello, World" という文字列と改行 ( "\n" ) を表示する */ return 0; }
$ ./sample-001.exe Hello, World $
Download : sample-002.c
/* * 2020/04/24 sample-002.c */ /* * エラーを含む例 */ #include <stdio.h> /* * main 関数 */ int main ( void ) { printf ( "Hello, World\n" ) /* セミコロンを付け忘れた */ return 0; } /* * エラーを発見したら、エディタで修正し、また、コンパイルする */
$ cc -c sample-002.c sample-002.c: 関数 'main' 内: sample-002.c:19:2: エラー: expected ';' before 'return' $
Download : sample-003.c
/* * 2020/04/24 sample-003.c */ /* * printf を並べれば、沢山の文字列が表示できる */ #include <stdio.h> /* * main 関数 */ int main ( void ) { printf ( "おはよウナギ\n" ); /* 複数の命令が並べられる */ printf ( "こんにちワン\n" ); /* 結果は「並べられた順」になる */ printf ( "こんばんワニ\n" ); /* 「書く順」で、「表示順」を决める事ができる */ /* 「順接」による、プログラミング */ return 0; }
$ ./sample-003.exe おはよウナギ こんにちワン こんばんワニ $
Download : sample-004.c
/* * 2020/04/24 sample-004.c */ /* * "\n" は改行を意味する。"\n" がなければ改行しない。 */ #include <stdio.h> /* * main 関数 */ int main ( void ) { printf ( "おはよ" ); /* \n がないので、ここでは、改行しない */ printf ( "ウナギ\n" ); /* 最後に \n があるので、ここで改行 */ printf ( "こんにちワン\nこんばんワニ\n" ); /* 途中に \n があるので、そこでも、改行する */ return 0; }
$ ./sample-004.exe おはよウナギ こんにちワン こんばんワニ $
Download : sample-005.c
/* * 2020/04/24 sample-005.c */ /* * 関数 : プログラムの一部に名前を付けて、呼び出す事ができる。 */ #include <stdio.h> /* * unagi 関数の定義 * プログラムの断片「printf ( "ウナギ\n" );」に unagi と言う名前を付ける * 関数 unage を「printf ( "ウナギ\n" );」と定義する */ void unagi ( void ) { /* "ウナギ" の出力と改行を行う部分に "unagi" という名前を付ける */ printf ( "ウナギ\n" ); } /* * main 関数 */ int main ( void ) { /* 最初に実行されるのは、何時でも main 関数 */ /* 他の関数は main から呼び出されないと意味がない */ printf ( "おはよ" ); /* \n がないので改行しない */ unagi(); /* 関数呼出し : printf の代わりに unagi を呼び出す */ /* 関数呼出しには、「関数名」と「引数」が必要 */ printf ( "こんにちワン\nこんばんワニ\n" ); return 0; }
$ ./sample-005.exe おはよウナギ こんにちワン こんばんワニ $
Download : sample-006.c
/* * 2020/04/24 sample-006.c */ /* * 関数は何度でも呼び出す事ができる */ #include <stdio.h> /* * unagi 関数 */ void unagi ( void ) { printf ( "ウナギ\n" ); } /* * main 関数 */ int main ( void ) { unagi(); /* 関数 unagi() が 5 回呼ばれたので、5 回「ウナギ」を表示 */ unagi(); unagi(); unagi(); unagi(); return 0; }
$ ./sample-006.exe ウナギ ウナギ ウナギ ウナギ ウナギ $
Download : sample-007.c
/* * 2020/04/24 sample-007.c */ /* * 関数の中身を変更すれば、一挙に全体が変化 */ #include <stdio.h> /* * unagi 関数 */ int unagi ( void ) { /* "ウナギ" ではなく、"ウナギイヌ" に変更 */ printf ( "ウナギイヌ\n" ); } /* * main 関数 */ int main ( void ) { unagi(); /* 関数を呼び出す側は変化しないが、全体の動作は変化 */ unagi(); unagi(); unagi(); unagi(); return 0; }
$ ./sample-007.exe ウナギイヌ ウナギイヌ ウナギイヌ ウナギイヌ ウナギイヌ $
Download : sample-008.c
/* * 2020/04/24 sample-008.c */ /* * 関数の中から、関数が呼び出せるので... */ #include <stdio.h> /* * */ int unagi ( void ) { printf ( "ウナギイヌ\n" ); } /* * 「電気」の後に、「ウナギイヌ」を出力 */ int denki_unagi ( void ) { printf ( "電気" ); unagi(); /* 関数 unagi を呼び出す */ } /* * 「節電」の後に、「ウナギイヌ」を出力 */ int setsuden_unagi ( void ) { printf ( "節電" ); unagi(); /* 同 */ } /* * */ int main ( void ) { denki_unagi(); printf ( "と\n" ); setsuden_unagi(); printf ( "が仲良く CM に登場\n" ); return 0; }
$ ./sample-008.exe 電気ウナギイヌ と 節電ウナギイヌ が仲良く CM に登場 $
Download : sample-009.c
/* * 2020/04/24 sample-009.c */ /* * 関数の中から、関数が呼び出せるので... */ #include <stdio.h> /* * niwa */ int niwa ( void ) { printf ( "にわ" ); } /* * niwa_niwa */ int niwa_niwa ( void ) { niwa(); niwa(); } /* * niwa_niwa_niwa */ int niwa_niwa_niwa ( void ) { niwa_niwa(); niwa(); } /* * */ int main ( void ) { printf ( "うら" ); niwa_niwa_niwa (); niwa_niwa_niwa (); niwa(); printf ( "とりがいる。\n" ); return 0; }
$ ./sample-009.exe うらにわにわにわにわにわにわにわとりがいる。 $
/* * 20200501-01-QQQQ.c * 「Hello, 自分の名前」を 3 回出力するプログラム */ #include <stdio.h> /* * main */ int main ( void ) { printf ( "Hello, 栗野俊一\n" ); printf ( "Hello, 栗野俊一\n" ); printf ( "Hello, 栗野俊一\n" ); return 0; }
/* * 20200501-02-QQQQ.c * 「Hello, 自分の名前」と出力する関数 print_hello_me を作成する */ #include <stdio.h> /* * print_hello_me */ void print_hello_me ( void ) { printf ( "Hello, 栗野俊一\n" ); /* 「Hello, 自分の名前」を表示する */ } /* * main */ int main ( void ) { /* 関数 print_hello_me を一回呼び出す */ print_hello_me(); print_hello_me(); print_hello_me(); return 0; }
/* * 20200501-03-QQQQ.c * 「Hello, 自分の名前」を 100 回以上出力するプログラム */ /* 方針 100 回以上なので、 printf を 100 行並べればよい => これでも OK !! 課題でも、試験でも、「結果が適切」なら「実現方法」は不問 */ #include <stdio.h> /* * sub */ void print1() { /* 「Hello, 自分の名前」を一回出す */ printf ( "Hello, 栗野俊一\n" ); } void print2() { /* 「Hello, 自分の名前」を二回出す */ print1(); /* print1 が一回なので、それを二回呼べば二回出す */ print1(); } void print4() { /* 四回出すには、print1 を四回でもよいが.. */ print2(); /* その代わりに、print2 を二回でもよい */ print2(); /* 2 x 2 -> 4 */ } void print8() { /* 八回出すには、print1 を八回でもよいが.. */ print4(); /* その代わりに、print4 を二回でもよい */ print4(); /* 4 x 2 -> 8 */ } void print16() { print8(); print8(); } void print32() { print16(); print16(); } void print64() { print32(); print32(); } void print128() { print64(); print64(); } /* * main */ int main ( void ) { print128(); /* 「Hello, 自分の名前」を 128 回出す */ return 0; }
/* ステップ 1 C 言語で、ソースプログラムファイル (p-001.c) を作成 */ #include<stdio.h> int main(void) { printf ( "こんにちわ\n" ); return 0; }
/* コメント */ #include <stdio.h> int main ( void ) { printf ( "こんにちは、世界\nこんにちは、世界\nこんにちは、世界\n" ); return 0; }
/* コメント */ #include <stdio.h> int main ( void ) { printf ( "こんにちは、世界\n" ); /* printf の呼び出しは命令 */ printf ( "こんにちは、世界\n" ); /* 命令を複数並べられる */ printf ( "こんにちは、世界\n" ); return 0; }
/* コメント */ #include <stdio.h> int main ( void ) { printf ( "1.こんにちは、世界\n" ); /* printf の呼び出しは命令 */ printf ( "2.こんにちは、世界\n" ); /* 命令を複数並べられる */ printf ( "3.こんにちは、世界\n" ); /* 命令を並べて書くことができる (順接) 命令の実行順序は、並べた順に行われる => 命令の順序を指定することにより 「命令の実行順序」を指定する(命令の実行制御) 命令を組み合わせて、プログラムを作るの第一歩 */ return 0; }
#include <stdio.h> /* 関数定義:関数を作る 1. どの部分に名前を付けるか決める 例 : 「 printf ( "こんにちは、世界\n" );」に名前つける 2. どんな名前を付けるかを考える 名前は、基本、英小文字から始まり、英小文字または数字または「_」の並び => 普通は、英単語を「_」でつないだもの 例 : 「hello_world」という名前にする 3. 関数定義を次のように行う 3.1 名前(関数名)を int main() と #include の間に書く 3.2 名前の前に「void」+「空白」 3.3 名前の後に「(void){」+「改行」を追加 3.4 次の行に「}」を入れる 3.5 「{」と「}」の間に、命令を入れる 関数呼び出し:関数の利用法 4. 命令として「関数名();」と書くと、 関数呼び出し(名前を付けた、命令の実行)となる */ void hello_world (void) { printf ( "こんにちは、世界\n" ); printf ( "こんにちは、世界\n" ); printf ( "こんにちは、世界\n" ); } int main ( void ) { hello_world(); /* 関数 hello_world の呼び出し */ /* => 名前がつけられた命令が実行される */ hello_world(); /* 同じ関数を何度も呼ぶと、同じ命令が何度も実行される */ hello_world(); return 0; }
#include <stdio.h> int main ( void ) { printf ( "こんにちは、世界\n" ); return 0; }
/* * 2020/04/24 sample-002.c */ /* * エラーを含む例 */ #include <stdio.h> /* * main 関数 */ int main ( void ) { printf ( "Hello, World\n" ); /* セミコロンを付け忘れた */ return 0; } /* * エラーを発見したら、エディタで修正し、また、コンパイルする */
前回(2020/04/24)の内容 講義の進め方 (相変わらず、栗野は小言が多い) 他の人の学習の邪魔はしてはならない 講義中は喋るな !! ubuntu 環境での C 言語処理 Ubuntu の操作の仕方 Windows の作業フォルダの作成方法 講義内容 Web で公開されているので、復習する グーグル検索 kurino と入力 演習課題 毎回堤出する事 成績は、課題中心 期限が遅れても、とにかく、「全部」堤出する 期限 : 次の講義の日まで => 試験の当日まで提出 Ubuntu での C 言語の開発環境とコンパイルの仕方 1. エディタ(sakura editor) で、ソースファイル( .c ) を作成 => windows で行う c:\usr\c\日付 の下に保存 文字コードは UTF-8 ( 改行は LF (unix) ) にする 2. cc コマンドを利用してコンパイルをする => ubuntu で行う cc -c ファイル名.c => ファイル名.o (オブジェクトファイル)が作られる 3. cc コマンドを利用して、リンクを行う => ubuntu で行う cc -o ファイル名.exe ファイル名.o => ファイル名.exe (実行ファイル)が作られる 4. ./ファイル名.exe で、プログラムを実行する == 順接 命令(printf関数の呼び出し)を並べることにより、 その並び順に命令を実行することが可能 => 命令を組み合わせて、プログラムを作る
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20200501-01.c
/* * 20200501-01-QQQQ.c * 「Hello, 自分の名前」を 3 回出力するプログラム */ #include <stdio.h> /* * main */ int main ( void ) { printf ( /* q:ここ */ ); printf ( /* q:ここ */ ); printf ( /* q:ここ */ ); return 0; }
$ ./20200501-01-QQQQ.exe Hello, 栗野 Hello, 栗野 Hello, 栗野 $
Download : 20200501-02.c
/* * 20200501-02-QQQQ.c * 「Hello, 自分の名前」と出力する関数 print_hello_me を作成する */ #include <stdio.h> /* * print_hello_me */ void print_hello_me ( void ) { printf ( /* q:ここ */ ); /* 「Hello, 自分の名前」を表示する */ } /* * main */ int main ( void ) { /* 関数 print_hello_me を一回呼び出す */ /* ** この部分を完成させなさい */ return 0; }
$ ./20200501-02-QQQQ.exe Hello, 栗野 $
Download : 20200501-03.c
/* * 20200501-03-QQQQ.c * 「Hello, 自分の名前」を 100 回以上出力するプログラム */ #include <stdio.h> /* * sub */ void print1() { printf ( /* q:ここ */ ); } void print2() { print1(); print1(); } void print4() { print2(); print2(); } /* ** この部分を完成させなさい */ void print128() { print64(); print64(); } /* * main */ int main ( void ) { print128(); return 0; }
$ ./20200501-03-QQQQ.exe Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 Hello, 栗野 $