プログラミング入門 情報科学演習
2014.10.16
C言語を用いたプログラムを作成し,コンパイルして実行することを前回行いま
した.もう一度確認してみましょう.図1を前回もお見せしましたが,この2つの
アプリケーション(gEditとGNOME端末)を使い分けてプログラミングを行います.
図1 プログラミングのフロー
Cのソースプログラム hoge.c をLinuxの cc コマンドでコン
パイルします.
$ cc hoge.c
実行はコンパイルしてできた a.out という実行ファイルを使います.
これもコマンドらインから行います.
$ ./a.out
ここで,現在作業しているディレクトリにある a.out を実行するので,
コマンドパスとしての ./ が必要でした.また,コマンドライン操作
を行うときには TAB 補完を使うことが大切でしたので,よく覚えてお
きましょう.
先ほども書きましたが,コマンドライン操作では次の2つを活用しましょう.
コマンド操作の途中でTAB補完を使う癖をつけましょう.確実に操作ミスが減って効
率良くなります.
コマンドライン操作時に上矢印キー(↑)を押すとひとつ前に実行したコマンドが,下
矢印(↓)ではその時点での一つ後のコマンドが表示されます.活用しましょう.
また,しばらく前(1000回分程度)に入力したコマンドは
$ history
というコマンドで呼び出せます.もう一回実行するときには,そこで表示された
番号の前にエクスクラメーションマーク(!)を付けてやると実行できます.
名前をつけて保存したファイルの中には,自分では作成していないのに末尾に
~ のついたものがあります.これはgeditがバックアップのため
に自動的に一つ前のファイルを保存しているものなので,注意してくださ
い.
コメントアウトとは教科書のp.10の例題2.1の1行目にある注釈文の
ことで,プログラムだけを記述すると後から見てわかりづらいことが多いので,
説明を加えておくものです.C言語では
のように /* */ とスラッシュとアスタリスクの組合せでできた一組
の記号の中がコメントとなります.他の多くの言語では # がよく使わ
れています.
小テストや宿題などでは下に示すような解答用紙を使用します.これは授業資料として保管しますので,誰のプログラムソースかわかるよう
に解答用紙の最初には学生番号と名前を記入してもらいます.そのため,プログ
ラムの実行に関係ない部分ができてしまうためコメント行を置いていますので,注意してくだ
さい.
また,もう一つのコメントアウトする方法にスラッシュ二つ // があります.ある行に // があるとその行のそれ以降がコメントとなり,実行に関係なくなります.例えば,
のような処理があるとすると,2行目の方は出力されません.
反復処理が登場すると,途中経過を確認したくなることがよくあります.そのようなときに,試しに printf 文を入れておいて,確認しながらプログラミングを進め,邪魔になれば // をつけて表示をしないようにする,というような使い方とか,コンパイル時にエラーが出るので,新しく追加した行や怪しい行などに // をつけてみてコンパイル可能かどうかを確認する,という使い方がよくなされます.
「変数」とは値の入れ物で,プログラミング言語には必須の概念です.また,
「値」というのは「数値」だけでなく,「文字」や「真偽」なども含みます.さ
らに,C言語では変数を使用する際には最初に「宣言」が必要となります.変数
の種類としては代表的なものに以下のようなものがあります.
型について,詳しくは教科書のp.21を参照してください.この授業では主として int 型と char 型を使用します.まれに float や double が出てくる程度です.そこで, int と char について少しだけ補足しておきます.
例えば,100と画面に表示されるプログラムがあるとします.このとき,この100には二つの型の可能性があります.一つは「数値」としての100であり,これは足し算などの演算や大小比較ができる「値」です.これが int 型となります.一方,「文字列」としての1と0と0が並んでいる場合も考えられます.これはただの「文字」です.演算に使用することはできません.これが char 型となります.もちろんアルファベットや記号が画面に表示されている場合も char 型です.
また,同じような文字に見えても,文字と文字列は異なります.先ほどの例でいえば,100という3文字が一つにまとまったものが文字列で,その要素の1と0と0が文字となります.char 型で文字を扱う場合,プログラム中で文字か文字列かで扱いが異なりますので注意してください.以下のような違いを理解しておくことは重要です.
/* この部分は何を書いていてもプログラム内では無視されます */
/* ************************************************** */
/* */
/* プログラミング入門 情報科学演習C7 */
/* レポート課題 */
/* 2014.10.16 */
/* */
/* ************************************************** */
/* */
/* 学生番号: */
/* */
/* 氏名: */
/* */
/* ************************************************** */
/* */
/* この行以降に解答のプログラムを書くこと */
printf("Print\n");
// printf("Do not print\n");
記号(宣言名) 型
int 整数
long 倍長整数
float 浮動小数点数(実数)
double 倍精度浮動小数点数
char 文字
型 表現 説明
int 1 ただ普通にプログラム中に数値を書くと int
char "1" 二重引用符 " (ダブルクオート)で括られると文字列となる.これは1という文字と \0 というヌル文字とで構成されている.詳しくは,教科書p.66参照.
'1' 引用符 ' (シングルクオート)で括られると一文字となる.このときは本当に文字の1だけ.
整数と倍長整数については計算機の環境(実装)に依存します.整数 int
型で扱える範囲がどうなるかについては,例えば,以下のようなプログラ
ムで確認することができます.
#include <stdio.h> main() { int n; printf("%d\n", n); return(0); } |
printf や scanf のような画面やキーボードとのやりとりに 関する関数において,「書式指定文字列」を使うことで便利で簡単な入 出力が可能となります.覚えておく必要がありますので,以下のような よく使用するものをしっかり練習してください.特に,桁数の指定と右揃え,左揃えの指定は課題でもよく使用しますので確認を忘れずに.詳しくは,教科書の例題を参考にしてください.
記号 | 書式 | 補足 |
---|---|---|
%d | 整数(10進数) | |
%f | 浮動小数点数(実数) | |
%e | 指数形式の浮動小数点数 | |
%o | 8進数 | |
%x | 16進数 | |
%c | 文字 | '1'のような文字一つずつを表示させるときに使用 |
%s | 文字列 | "100"のような文字列を表示させるときに使用 |
ところで,教科書のプログラムのソースでは改行文字が¥nになっています.¥ マークは日本独自の文字コードで英語圏ではキーボードにはありません.日本語 キーボードで¥記号のところの文字コードは本来バックスラッシュ( " \ " )です.画面にバックスラッシュが表示されていてもまったく問題あ りませんので,気にしないでください.
前回の授業では見様見まねでプログラムを編集してコンパイルしましたが,今回 からは自分で入力することが多くなります.そこで,インデント(字下げ)につい て確認しておきましょう.
教科書のp.9にある図2.2を見ると,ブロックと呼ぶ中括弧({ })で囲ま れた部分は左側が空いていて,段落のようになっているのがわかります.また, 例題2.1や2.2を見ても,すき間がたくさんあります.これらはインデントと言っ て,プログラムを見やすくするものです.これが無いとブロックの範囲がわかり づらいものになります.約束事としてブロック単位で4文字程度字下げすること が良く行われます.インデントは無くてもプログラムは動作します.しかし,非 常にわかりづらいものになってしまいます.
教科書の様なインデントをやりやすくするためにgeditの設定を少し変更しましょ う.図4にあるようにgeditの「編集」メニューから「設定」を選択します.
図4 geditの設定画面
エディタのタブをクリックするとこの画面が現れますが,その中の「タブの幅」 の設定を4にしておくと,教科書と同じような見栄えになります.また,同じく 設定画面の「表示」を選ぶと図5に示すように行番号のチェックボックスがありま す.ここにチェックを入れておくと編集画面で行番号が表示されるので,エラー メッセージとの対応が楽になります.
図5 「表示」タブの行番号表示設定
実際のインデントは,今のレベルだと main の中括弧の中は全ての行 で入力の前に TAB キーを押せば正しくインデントできますので,必ず インデントを行なう習慣を付けてください.
教科書p.16の例題2.6で以下のような printf の使用法が出てきます.
printf("11と3の\n" "和 =%d\n" "差 =%d\n" "積 =%d\n" "商 =%d あまり%d\n", c, d, e, f, g); |
これは間違ってはいませんが,この授業ではこういう形式は使用しないようにしましょう.その方が無難です.日本語のスペース(いわゆる全角スペース)の混入がちょくちょく問題となりますので,以下のような使い方にしてください.
printf("11と3の\n和 =%d\n差 =%d\n積 =%d\n商 =%d あまり%d\n", c, d, e, f, g); |
もしくは
printf("11と3の\n"); printf("和 =%d\n", c); printf("差 =%d\n", d); printf("積 =%d\n", e); printf("商 =%d あまり%d\n", f, g); |
実習問題については当日案内します.
次回も引き続き教科書p.21までを扱いますので,予習をお願いします.
宿題についても当日ご案内します.
宿題はレポート提出システムを利用しますので,そちらにログインして作業してください.