前回(2021/04/23)の復習 関数の作り方 命令列に名前を付け、名前で、その命令例を呼び出せる 引数付関数の作り方 命令列の一部を変数にする事により、後から振舞いを変える事ができる ソフトウェア概論の目的 C 言語を利用して、プログラムが書けるようになる C 言語とは何か .. C 言語を使って、自分が望んでいる内容を記述するには ? 色々な表現方法を学ぶ # ソフトウェア概論のメイン プログラムをつくったら、動かなさないと面白くない プログラムの動かし方 => ubuntu 上で、C 言語で記述されたプログラムの実行方法 プログラム ( <= 普通の会話とは異なる ) そのものを学ぶ 初日と二回目 => ubuntu 上での操作方法 プログラムファイルの作り方 ( サクラエディタで入力する ) 拡張子 .c ( <= C 言語のソースプログラムファイル ) 日本語は UTF-8 改行は LF (unix) 保存先のフォルダー C:\usr\c\日付 名前は適当に.. コンパイル cc -c ソースコードファイル名 ( xxx.c ) 具体例 : cc -c p-001.c => (うまくいった場合) オブジェクトファイル ( xxx.o ) できる リンク cc -o 実行ファイル名 ( xxx.exe ) オブジェクトファイル ( xxx.o ) 具体例 : cc -o p-001.exe p-001.o => (うまくいった場合) 実行ファイル ( xxx.exe ) できる 実行 ./実行ファイル名 具体例 : ./p-001.exe => 実行結果が得られる 前回 ( 三回目 ) => C 言語の表現方法 1. printf ( "文字列" ) => 「文字列」が、画面に表示される => 「表示する」という目的(有限なら..) なんでもできる 2. 1. のようなものを並べると、 並べた順に、それがすべて実行される [順接] 3. 「関数」( <= しばらくは、数学の関数とは別物 ) 3.1 命令列に名前を付ける事ができる => 関数の定義 3.2 名前を付けた命令(「関数」とよぶ)を、 その名前(「関数名」)で呼び出す事ができる => 関数呼び出し 関数の効用 関数には、名前が付けられる => 意味のある名前をつければ、 命令列の「意味」が把握しやすい 同じ関数を呼び出せば、同じ命令が実行される事が保証される => 長い命令でも、比較が簡単になる 4. 引数付き関数 命令の一部を変数にする事によって、後で、その関数の振る舞いを変更する仕組み やりたい事を、短い表現で実現できる やりたい事の最終イメージ => 命令の並び => 順接で実現 <= 「効率」が悪い 「効率」の例 => 記述量が増える # 「作成速度」が遅くなる # <= ミスが起きやすい => 関数を導入する 記述量が減る ( メリット ) => 開発効率が高まる プログラムは思い通りに動かない、書いた通りに動く [2021/04/30] C 言語における「文字列」 C 言語における「文字列」 二つの「" (ダブルクォーテーション)」で挟んだ「『文字』の列」 例: 「"abc"」は、三つの文字 「a」, 「b」, 「c」から成る、長さ 3 の文字列 文字列 "abc" は、 a, b, c の三つの文字からなる C 言語における「文字」 : 「(ASCII) 文字」 基本は、キーボードから「1 キー」で入力されて、画面に表示される「モノ」 キーボードで「a」を入力すると、画面に「a」と入る (これが『文字』) 定義(C 言語の『文字』) ASCII Code 表 ( 1 byte で表現可能な「文字」表 ) 半角の英数字、記号 !! 漢字に代表される、「全角文字」は... ? !! => この講義では、「文字」とは扱わない !! <= 文字列の中に全角を入れる事はある printf ( "Hello, World\n" ); 「"Hello, World\n"」が文字列 「H」, 「e」, 「l」, 「l」, 「o」, 「,」,「 」, .. という文字からなる printf ( "こんにちは、みなさん\n" ); 「"こんにちは、みなさん\n"」が文字列 この文字列を構成している「文字」は、考えない 講義中で、「文字列」とか「文字」と呼ぶ場合は、 それぞれ、 ASCII Code で表現される文字の並びと、文字を指す C 言語における「文字」は、ASCII Code 表の 1 byte で表現できる「モノ」 「日本語文字」は、1 byte で表現できない ( ASCII Code 表にない ) 「日本語文字列」は扱えるが、今は説明しない (UTF-8 にする事だけ注意) この講義内では、「日本語文字列」は「対象外」 エスケープシーケンス ASCII コード表の中に、「改行」に相当する「文字」がない # 画面への表示を考えると「改行」は不可欠.. キーボードに表記されていない文字の表現 キーボード上で表現されていない「文字」がある (キーボードは 256 もない) 例 改行, タブコード 表示できないのであれば、 表示できる方法を利用して、それを表す C 言語の表現 基本 : キーボード上に表記されている文字は、 その文字一文字自身が、その文字を表す キーボードの [A] というキーで入力できる 「A」は、C 言語上でも「A」という文字 一方、[改行]を表現する文字はないので、その場合は \(円マーク/バックスラッシュ)で始まる文字の並びで、 その文字を表現する 具体的には 改行(一個の文字) \n ( 「\」+「n」で表現 ) タブ \t キャリッジリターン \r => 行の先頭に移動する \ 自身は \\ エスケープシーケンスを利用して、色々な「文字」を表現する C 言語におけるエスケープ文字 「\ (バックスラッシュ)」が利用される (ubuntu : UTF-8 ) エスケープ ( escape : 逃げる .. ) \ がきたら、その後に続く文字が、通常と異なる解釈をする # 通常から、特別な状態になる(から、エスケープ) # 例 : # n => 通常ならば「n」という英小文字を表す # \n => 「エスケープ文字 \ 」の後ろなので、 # 「改行」という特別な文字を表す表現として扱われる # エスケープシーケンスは、終わったら終わる # => エスケープシーケンスによっては、 # 「\」の後の数文字続く事がありえる # 個別に覚える 必ず覚える必要があるエスケープシーケンス \n 改行 \\ \ そのもの \" 文字列の中で、「"」を表す場合 \' 一文字を表すときに「'」を表す場合 11:25 まで演習 前回の 20210423-02 の問題を解く