- 本日の作業内容
- 課題の提出について
提出の不備が多く見られました.主なものは以下のようになっています.
- 件名の間違い
- 添付ファイル名の間違い
- 解答用紙の不使用
- コンパイルエラーの起こる解答の提出
以後注意してください.
なお,以下に示すものは減点の対象となる例です.これらについても注意してく
ださい.
#include
main()
{
int a=114099;
printf("My student number :s%d\n",a);
printf(" ^ \n");
printf(" / \\ \n");
printf(" / \\ \n");
printf(" / \\ \\ \n");
printf(" / \\ \\ \n" );
printf(" / \\ \\ \\ \n" );
printf(" / \\ \\ \\ \n");
printf("---------------------------------------\n");
return(0);
}
|
この例はインデント(字下げ)が不適切です.
#include
main()
{
printf("My student number: s114099\n"
" ^\n"
" / \\\n" /* \表示には\を重ねて\\と打つ */ " / \\\n"
" / \\ \\\n"
" / \\ \\\n"
" / \\ \\ \\\n"
"/ \\ \\ \\\n"
"\n"
"-----------------------------------------------\n");
char m[20] = "aiueokakikukeko";
return(0);
}
|
プログラムに必要ない例題などの残骸が含まれています.
#include
main()
{
char a, b, c, d, e, f, g, h, i;
printf("My stydebt number: s114099\n", a);
printf("\n");
printf(" ^\n", b);
printf(" / \\ \n", c);
printf(" / \\ \n", d);
printf(" /\\ \\ \n", e);
printf(" / \\ \\ \n", f);
printf(" /\\ \\ \\ \n", g);
printf("/ \\ \\ \\ \n", h);
printf("\n");
printf("-----------------------------------------------\n", i);
return(0);
}
|
使用する必要の無い変数があります.
^
/ \
/ \
/ \ \
/ \ \
/ \ \ \
/ \ \ \
------------------------------
|
上の例は表示が少し違っています.
他にも自分の学生番号の表示の無いものやハイフンのラインの無いもの,解答用
紙のクラスを適切に選択していないものなどありましたので,今後は注意してく
ださい.
- 前回の復習
- ヘッダファイル
C言語のプログラミングでは必ず main という名前の関数が必要です.
そして,結果を画面に表示するためには入出力のためのあらかじめ用意されてい
る道具を必要とします.画面のことを通常「標準出力」,キーボードからの入力
を「標準入力」と呼びますので,入出力を取り扱うための道具として「標準入出
力」(Standard Input Output)用のプログラムを
呼び込みます.そのようなプログラムを「ヘッダファイル」(Header
file)と言います.そこで標準入出力のためのヘッダファイルなので,
stdio.h というファイルを呼び込み(include)します.ですので,
画面に結果を表示するようなプログラムを組む場合,最初に必ず
を記述します.なお,命令である include とファイル名である
<stdio.h> の間にはスペースを入れます.無くても動作はしますが,
スペースは必ず入れてください.マナーです.
- printf
文字列を画面に表示するのに printf という命令を使用しました.二
重引用符で囲んだ範囲の文字列を画面に表示します.その際に,% 記
号を使用して,変数の値を埋め込むことが可能でした.また,画面上で改行する
ためにはバックスラッシュ記法を使用した改行文字 \n が必要なこと
も学習しました.今後,ずっと使用しつづけるので,早く慣れてください.
- インデント
中括弧 { } で囲まれた範囲をブロックと呼びます.(教科書p.9参照)
このブロックを使用するときには,ブロックの構成要素であることを視覚的にわ
かりやすくする目的でインデント(字下げ)が行われます.教科書では4文字分の
字下げとなっていますので,geditのTAB設定を4文字にしておくと,TABキーを押
すだけで,規定の幅のインデントが可能になります.スペースを必要な回数入れ
る方法では,不揃いの字下げになる可能性がありますので,必ずTABを使用して
ください.
ちなみに,宿題や小テストでは,インデントの不備は-2点とするようにしていま
す.10点満点で-2点ですので,注意してください.
- 代入
教科書ではp.16の例題2.6で使用する「代入」を前回の実習では使用しました.
ちょっと説明不足でしたので,わかりにくかったと思いますが,等号の記号
= を使用することで変数に値を代入することが出来ます.これもこれから
何度も使用しますので,すぐに慣れると思います.
- エラーメッセージ
プログラミングを始めると,作ったプログラムに間違いがあってコンパイル時に
エラーが表示されることがよくあります.メッセージを良く読むとどこが間違っ
ているのかわかるのですが,ただ単に英語で書いてあるというだけで見ない人が
多くいるようです.基本的なパターンは決まっているので,これも慣れさえすれ
ばわかるようになるので,必ず見るようにしてください.
例えば,以下に示すメッセージは,行末のセミコロン( ; )を忘れた場
合に出てくるものです.閉じ括弧の忘れなども同じような形式で出てきます.
/* error.c */
#include <stdio.h>
main()
{
printf("test\n") ← ここのセミコロンが無い
return(0);
}
|
error.c: In function ‘main’:
error.c:9: error: expected ‘;’ before ‘return’
|
1行目は main の中でエラーが発生したことを警告していて,2行目で
不具合が生じた行が何行目かを示しています.また,内容が簡潔な英語で書いて
ありますが,意味は「return の前に期待される ; 」という
ことで,セミコロンが無いことを教えてくれています.
C言語は「関数型」の言語なので,最初に記述する main というのも関
数です.関数は英語でfunctionと言うので,1行目に関数 main の中で,
とメッセージは言っています.
- 四則演算
本日の授業で扱うのは「整数」の演算です.計算機は2進数で内部処理している
のはみなさんもよく知っていると思いますが,2進数で小数点を持つ実数を扱う
のは,ちょっと面倒な処理が必要です.そのため,計算機の心臓部であるCPUで
は整数型と実数型の演算は別の機能として分けて行いますので,数値の「型」,
すなわち整数なのか実数なのかが重要なポイントです.教科書にあるように,変
数定義のときに,
のように int と指定すると変数の値が「整数型」になります.整数の
英語であるintegerから int は来ています.
- 除算の注意
整数型の演算ですから,扱える数は整数だけです.なので,4割る3は1,3割る4
は0です.ある数をそれよりも大きい数で割った場合,その答えは必ず0になるこ
とに注意してください.
- 剰余
「四則演算」というと,通常は加減乗除の4つですが,プログラミングではもう一つ
「剰余」というのが重要なので,それも含めて四則演算と言います.剰余とは割っ
た余りです.
皆さんは,小学校で小数を習って以来,それ以前に使用していた「余り」につい
て無視する癖が付いてしまっています.これからはそれを直していく必要があり
ますので,注意してください.以下にポイントを示しますので,一刻も早く慣れ
ることが重要です.
- 剰余の動作
教科書のp.17に出ているように,% の記号は剰余を表します.以下の
ような動作にります.
とすると,5割る3の除算を実行し,余りは2ですので,2を出力します.
- 剰余の使い道
例えば任意の整数を6で割る場合,その余りは0から5までの6つの整数になります.
1つずつ増えていく数列に対して剰余を求めると,特定の範囲の数だけが繰り返
されることになります.先ほどのように6の剰余を求めると,1から100までの数
列ですと,1からはじまり5まで行くと0に戻りまた5まで,ということを繰り返し
ます.
カレンダーの表示のようなものもわかりやすい例かと思いますが,
今月ですと,1から30までの日付が7つの曜日に分類されるのは日付を7で割った
余りを使用して実行できます.すなわち,今日の24日を7で割ると余りは3ですが,
余りが3になる日は全て月曜日です.
今後乱数を活用してプログラミングに偶然性を取り込みますが,その際に使用す
るのもこの剰余です.最初の週にgeditの使用例として挙げたプログラムに以下のものがあり
ます.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{
srand((unsigned) time(NULL));
printf("%d\n", rand() % 6 + 1);
return(0);
}
|
printf の行が乱数に関係する部分ですが,出てきた乱数 rand()
の6で割った余り(0, 1, 2, 3, 4, 5の6種類のどれか)に1を加えています.そうす
ると,結局1から6のどれかの整数が表示されることになるのですが,それがコン
ピュータで実現する「サイコロ」です.このような利用法もあります.
- 剰余のツボ
先ほどから何度か紹介していますが,ある整数で割った余りの種類(個数)はその
割った数と同じです.すなわち,6で割った余りの種類は6種類というこ
とですが,これが重要なポイントです.
- 単項演算子
教科書のp.17に算術演算子の一覧が出ています.四則演算といいながら演算子は
剰余を加えた5つではなく,さらに多い6種類あります.最初にある「負の符号」
というのも演算子ですが,単項演算子と分類されるもので,ちょっと注意が必要
です.その表には,一番右のコラムに「演算順位」というものがあり,この負号
は第1位になっています.この順位は「結合の強さ」とも呼ばれるもので,乗算
と除算は加算と減算よりも優先されるという小学校で習った規則を意味していま
す.つまり
2 + 3 * 4 - 5
という計算の答えは9になりますが,プログラミングでも同じようになっている
ということです.さて,では優先順位第1位の負号ですが,これは数学とは違う
プログラミング言語に固有のもので,以下のような演算を可能にするためにあり
ます.
動作は自分で確認してください.
- 演算子の前後のスペース
教科書の例題を見ると分かるように,四則演算をプログラム中に記述する場合,
演算子ならびに代入記号の前後にスペースが入っています.前項のような単項演
算子の負号のような場合もありますので,必ずスペースを入れるようにしましょ
う.ただし,後で出てくる if 文の条件式などのように入れない場合もあ
ります.
- 実習
実習の演習問題は当日ご案内します.
- 次回の予習範囲
教科書のp.21まで予習をしてきてください.
- 宿題
宿題についても当日ご案内します.ただし,
宿題の問題を見ることができるのは25日以降になりますので,注意してく
ださい.