本課題は渡辺先生の作成した「応用理工情報処理」のテキストをもとに一部改定を行ったものです。[渡辺先生のオリジナル版ページ]
渡辺先生に感謝!
今回はコンパイル環境を設定して、各自が1人でC言語のプログラム作成、コンパイル、実行を行えるようにすることが課題です。教科書「 新・明解C言語 第I巻 入門編 (柴田望洋著)ソフトバンクパブリッシング」に沿って授業を進めていきます。第1章から順に学習します。
目的
1回目は、とにかく自分でプログラムを作成しコンパイル・実行できるようになることが課題です。その上で、最初例として「文字列の表示プログラム」を書いてみましょう。
下記の課題を実行して下さい。自分で行き詰ったと感じたら手を上げて質問してください。
事前知識1: 拡張子の表示
C言語のソースコードの拡張子は .c です。この拡張子が付いているとコンパイラはC言語のソースコードと解釈します。ただし、Windows 7でのデフォルトの環境では、登録されているファイルの拡張子は表示されないようになっています。設定を変更して拡張子を表示するようにしましょう。
まずエクスプローラーを開いて、左上の整理メニューの「フォルダーと検索オプション」を選択して、フォルダーオプションダイアログを開きます。その表示タブを開き、「登録されている拡張子は表示しない」のチェックを外します。
事前知識2: キーボードショートカット
Windows上でほぼ全てのプログラムで共通して次のようなキーボードショートカットが利用できます。覚えておくとプログラミングを素早く行うことができます。
コピー: Ctrl+c (マウスの左ボタンを押しながらコピーしたい領域をドラッグして領域選択した後、Ctrlキーとcキーを同時に押す)
カット: Ctrl+x (マウスの左ボタンを押しながらコピーしたい領域をドラッグして領域選択した後、Ctrlキーとxキーを同時に押す.)
ペースト: Ctrl+v (マウスカーソルを挿入したい位置に置いて CtrlキーとVキーを同時に押す。)直前にコピーまたはカットした部分が挿入される。)
例えば、ある文をコピするときは、その領域をマウスドラッグなどでハイライトして Ctrl+c、そして、コピーした文を別の場所にペーストするときは、ペースとしたい場所にカーソルを動かして Ctrl+v です。
練習1: プログラムのコンパイルと実行
まず、このページからソースプログラムをコピーしてC言語プログラム開発環境 (CPad) に貼り付けてそれを実行する演習を行います。プログラミングの学習では自分でプログラムを動かしてみることが不可欠ですが、プログラミングの説明の段階で全員が手で入力するのを待っているのは効率的でないため、説明の段階ではこのような方法を多用しようと思います。そのため、以下の手順を試してみて、確実に身に付けてください。
BCC (CPad) を起動して新規作成を選択してください。
下のC言語ソースコードを選択して、Ctrl+cでコピーした後、CPad の編集領域にマウスカーソルを移動して一度クリックしてそのウインドウをアクティブにし、Ctrl+vを押してソースコードを挿入してください。
このソースコードを適当なファイル名(拡張子は絶対に.c)で保存します。
ツールバーのコンパイル&実行ボタンをクリックします。プログラムにエラーが無ければコンパイル後自動的に実行されます。
プログラム例
#include<stdio.h>
int main(void){
printf("Hello\n");
return (0);
}
練習2: 数字の表示
テキストP.2 List 1-1 のプログラムを動かしてみましょう。下記のプログラムを CPad のエディタにコピーして、拡張子が.c の適当なファイル名(例えばL1-1.c) として保存してコンパイル・実行してみてください。
/* 整数値15と37の和を表示する */
#include<stdio.h>
int main(void){
printf("%d", 15 + 37); /* 整数値15と37の和を10進数で表示 */
return (0);
}
ここで、実際に処理を行う命令をしているのは printf("%d", 15 + 37); の部分だけです。他の部分が何を行っているかというと、
C 言語では、標準で用意された関数でもその関数を使用する前にその関数が定義されたファイル(ヘッダーファイル)をプログラムに読み込んでおく必要があります。 #include <stdio.h> は printf関数の他、C言語プログラムで必ず用いるといっても良い関数が定義されたファイルです。そのため、ほとんどのプログラムには最初にこの行があります。(進んだ内容: この # で始まる行は、「プロプロセッサ」で処理されます。)
C 言語では、main関数はプログラムの開始点であり、main 関数が終了するとプログラムも終了します。int main (void) の最初の int はこの main 関数が整数値 (integer) を返すことを意味し、
return (0);
が対応しています。つまり整数値(0)を返すわけです。
これから先、様々なユーザー定義関数を作成していくわけですが、その場合呼び出しもとはユーザープログラムであり、関数は呼び出し元のプログラムに 値を返すわけです。しかしmain関数は特別で、これはオペレーティングシステム(Windows や Linux など)からユーザーの操作を通して呼ばれ、オペレーティングシステムに値を返します。ここで返される (0) という値は正常終了を意味します。
printf("%d", 15 + 37); /* 整数値15と37の和を10進数で表示 */
の行を 見てみましょう。
15 + 37 という式は評価されると 52 という値になります。
"%d"は書式文字列で、%dは整数を表示するための変換指定です。
printf関数は、1つの書式文字列と任意個の値を引数として取り、書式文字列の中の変換指定を順番に指定した値で置き換えた文字列を出力します。
C 言語プログラムの1つの命令はセミコロン(;)で終わります。これを文と呼びます。
※ 命令の終わりにセミコロンを付け忘れる、というミスは初診者にありがちです。気をつけて下さい。
/* から */ で囲まれた部分はプログラムを理解しやすくするためのコメントです。コンパイラはこの部分を読み飛ばします。プログラムに1行のみのコメントを入れる場合には、// も使うことが出来ます。例えば
printf("%d", 15 + 37); // 整数値15と37の和を10進数で表示
と書くことが出来ます。これは正確にはC++言語のコメントの書き方ですが、現在ではC 言語プログラムでもほぼ間違いなく使うことができます。
練習3: プログラムの変更
上のプログラムの printf 文を、printf ("15と37の和は%dです。\n", 15 + 37); と書き換えてみましょう。
書式文字列の中でよく使うのが、改行文字 (\n) です。文字列の中に改行文字があると、その表示はそこで改行されます。このテキストでは、改行文字は「バックスラッシュ+ n」となっていますが、日本語キーボード及び日本語表示環境ではしばしばバックスラッシュは円マーク(半角の¥)で表されるので注意して下さい。どちらで表示されていても役割は同じです。
今日の課題
この授業では、一通り説明を終えてから自分たちで課題のプログラムを作成してもらいます。
課題は2つありますが、最低でも一つは完成させ、担当教官もしくは TA の先生に確認してもらってください。それを持って出席・演習点を計算します。
残り1つの課題は担当教官に見せる必要はありませんが、といてから帰って下さい。本授業の最終点は期末試験も加味して計算します。期末試験できちんと転をとるためにはもう一つの課題をといておくことも必須だと思って下さい。(確実に単位をとるためには、対応するテキストの章をよく読んで、その中の課題もきちんとこなすようにしてください。)
また、課題プログラムはの作成は以下を満たした時点で合格とします。
ちゃんと動作すること。
読みやすいように正当なインデントがされていること。(テキスト p. 105「インデント」参照。)
プログラムのソースファイルの拡張子が ".c" になっていること。C 言語のプログラムの拡張子で ".cpp" や ".c++" はあやまりです。たとえ動いても認められません。プログラムが単純なときは動きますが、複雑になると様々なエラーのもとになります。(.cpp や .c++ は C++ 言語用の拡張子です。C 言語の C++ 言語は似ているだけで全く違うプログラム言語です。注意して下さい。)
そのプログラムに関する簡単な質問に答えられること
[課題 1]
以下に示す文字の表示を行うプログラムを作成せよ。ただし **** の部分は各自の名前を入れるものとする。
=======================
こんにちは。
私の名前は **** です。
それでは。
=======================
[課題2]
以下のようにを西暦を読み込んで令和年度を出力するプログラムを作成せよ。(数値の入出力は次回のWebページを参考にして下さい。)
西暦を入力:2021
令和3年度です。
※この課題2はオプション課題です。本来は第一回の課題の予定でしたが、講義のオンライン化のため第一回は様々な問題がおこると予想しています。
そのため、「スムースにいってここまでできる」というひとだけ課題2もやってみてください。それ以外の人は次回の課題にします。