2024年度
アルゴリズムとデータ構造1・演習

Linux基本操作の復習,プログラミングの練習

計算機実習1/2の復習

作業-2

アルゴリズムとデータ構造1・演習用のディレクトリ「alg_data1」の中にex1-1.cというファイルを作り,コンパイル(※後で説明します)して,実行しなさい.
※なお,\は,日本語のキーボードではです.

ex1-1.cの中身
#hmbktcd <rschn.g>

hms lZhm() {
        oqhmse("Gdkkn Vnqkc!\m");
        qdstqm(9);
}
コマンド入力例
$ ljchq Zkf_cZsZz
$ bc Zkf_cZsZz
$ uh dwz-z.b
$ fbb dwz-z.b -n dwz-z
$ ./dwz-z

解説-2

コンパイル

計算機が処理できるのは,各CPU のための命令一覧表(=数字) = 機械語(マシン語)です.
CPU が変われば,命令の数字も変わります.
数字の一覧表では,人間には理解が難しいので,対応する命令に置き換えたものがアセンブリ言語です.
アセンブリ言語で書かれたプログラムを,機械語に変換することをアセンブルといい,そのプログラムをアセンブラといいます.
1対1で対応しているため,文脈によっては機械語 = アセンブリ言語として用いることもあります.

当然,アセンブリ言語もCPU に依存しており,CPU が変わると,新しい言語を覚え直さないといけませんでした.

ゲーム機のソフトが,そのゲーム機でしか使えない理由は,このためです.
違うハード用にソフトを作り直すことを「移植」と読んでいました.

そこで,ハードに依存しない言語として,C言語が開発されました.
アセンブリ言語を組み合わせて1つの機能(= 関数 = 命令)を作り上げ,C言語からはその関数を呼び出す形で,プログラムを組みます.
この,「C言語の関数をアセンブリ言語の集合体に置き換える」作業のことを,コンパイルと言います.
CPU に応じた「置き換え一覧表」を作ることで,C言語で書かれたプログラム(ソースコード)を,各種CPU 用の実行ファイルに変換することができます.

ちなみに,今の計算機とは異なるCPU 用の実行ファイルを生成することも可能で,これをクロスコンパイルと言います.
ゲーム機用のソフトなどは,その仕組みを利用して,普通のパソコンで開発することができます.

まとめ
  • 計算機(CPU)は,機械語しか処理できない
  • C言語で書かれたソースファイルを,実行ファイル(機械語)に変換することをコンパイルという
  • プログラムの開発には,プログラムを書く → コンパイルする → 実行する という作業が必要

大きなプログラムを作る時は,プログラムをパーツに分けて,それぞれをコンパイルする方法を使います.

#include <stdio.h>

教科書にはよく「おまじないです」と書かれています.C言語の一般的な命令を使うのに必要な宣言です.

しかし,せっかくの電子情報の実習ですので,ここでは中身も解説します.


#includeは,英語の通り「含む」ということです.後ろに書いてあるファイルの中身を,展開(=読み込む)します.

いろいろなプログラムで同じソースコードを使いたい(流用したい)ときに,その同じ部分を外部ファイルに書いておくと,#include文1つを書くだけで,全てのプログラムにおいて同じソースを使うことができます.

もちろん,その共通部分の書き換えは,外部ファイルを書き換えるだけで,全てのプログラムに反映されます.


stdio.hは,Standard I/O(Input/Output)のHeader Fileのことです.このファイルを読み込むことで,標準入出力に関する命令が使えるようになります.
studio(スタジオ)ではないので,注意!

標準入出力については,第3回 ◆3.標準入出力とパイプを復習しましょう.

includeの後ろのファイル名を<>で囲った場合,これはシステムのファイルを読み込みます.具体的には,/usr/include/stdio.hです.

""で囲った場合,このファイル(ex1-1.c)と同じディレクトリの中のファイルを読み込みます.

課題 1-1

先ほどのプログラムにおいて,1行目(<stdio.h>のある行)を削除してコンパイルしてみましょう.必要なファイルを読み込んでいないので,エラーが出るはずです.そのエラーを報告して下さい.

int main() {...}

mainという名前の関数を宣言(=作る)します.

関数とは,自分で作る命令みたいなモノだと考えて下さい.

何かを実行したり,計算したり,結果を返したりします.
※計算機ができるのは,数字をいじくりまわして移動させるだけ です.

それらを組み合わせて,プログラムを作っていきます.

mainは,その名の通り,C言語において「最初に実行する関数」です.プログラムを読むときは,ここから読みましょう.


C言語では,文(=命令)の扱いとして,単文複文があります.
※要は,命令が1つか複数か の違い.

複文を表記するには,範囲を明示する必要があるため,{}を用いて範囲を示します.

このとき,{}で囲まれた範囲においては,タブを使ってインデント(一般に,4文字分のスペース,もしくは8文字分のスペース)をつけるのがマナーです.

また,文の区切りを表すために,;を用います.
※改行,スペース,タブは,無視されます.


intは,関数の戻り値の種類を表しています.数字や変数の扱いに関しては次回行います.

また,その戻り値を指定しているのが,return(0)です.この命令に関しても,今回は解説を省略します.


(から)に囲まれた部分は,引数を指定するのですが,今回は使わないので何も書いていません.


次に進むには,■こちら■をクリックして下さい.