プログラミング入門 第14回

プログラミング入門2
第14回
情報工学科 篠埜 功
今日の内容
• 前回出題した総合演習課題の続き
– 今日の16:10までに総合演習課題を終了してく
ださい。これまでの各回の課題も今日の16:10
までとします。
• 中間試験について
• 期末試験について
中間試験について
• 大多数の学生は6割以上できていましたが、
6割以下が12名います。(36点満点、22点以
下だった人は期末までに十分に準備してくだ
さい。)
• 注意事項2点(次ページ以下)
– 関数定義のネストについて
– グローバル変数について
関数定義のネストについて
• 関数定義の中に関数定義を書いた人が1名いま
した。これは、ISO規格では許されていません。た
だし、GNUの言語拡張では許されています。演
習室のCコンパイラはGNUのコンパイラであり、
関数定義内に関数定義を記述可能です。
• 関数定義のネストは他の多くの言語では許され
ており、自然ですが、ISO規格では許されていな
いということを知っておいてください。(規格に取
り入れてもよさそうに思いますが、今は入ってい
ません。)
• 減点対象とはしません。
関数定義のネストの例
#include <stdio.h>
int main (void) {
赤字部分が、関数定義
int sum (int n){
内に記述した関数定義
int i, sum=0;
for (i=1; i<=n; i++)
このプログラムは演習室の環
sum=sum+i;
境ではコンパイルが通るが、
return sum;
ISO規格では許されていない。
}
printf ("sum(10)=%d\n",
$ gcc –pedantic test.c
sum(10));
のように-pedanticをオプショ
return 0;
ンに指定することによって、
}
警告が出るようになる。
グローバル変数について
• 関数定義の外に変数宣言を書いた人がいました。
関数定義の外で宣言すると、グローバル変数と
なり、関数呼び出しとは関係なく、プログラム実
行の最初から最後まで存在します。関数定義の
内部に書いた変数は、その関数の呼び出し毎に
別の変数として扱われます。
• グローバル変数を使って挙動のおかしいプログ
ラムを書いた場合は減点対象とします。
• グローバル変数は講義では説明していません。
• 期末試験ではグローバル変数は使わないように
してください。
例
#include <stdio.h>
int s=0;
int sum (int n) {
int i;
for (i=1; i<=n; i++)
s=s+i;
return s;
}
int main (void) {
printf ("sum=%d\n", sum(10));
printf ("sum=%d\n", sum(10));
return 0;
}
このプログラムではsをグロー
バル変数として宣言している。
main関数内で2回sumを呼び
出している。1回目はsの値が
55になり、返り値が55となる
が、2回目はsの値が55の状
態から計算が始まり、返り値
が110となる。
細かい注意事項
scanf関数でint型の数をキーボードから受
け取る場合、
scanf (“%d”, &x);
のように記述してください(\nを入れないよ
うにしてください)。
変数宣言のし忘れ、中括弧の閉じ忘れ、
ダブルクォートの閉じ忘れ等にも注意して
ください。
期末試験について
• 各回(第1回から第12回まで)の2問の課題のプ
ログラムが書けるようにしておいてください。
• 中間試験で出題した問題が解けるようにしてお
いてください。
• 細かい書き間違い(セミコロンの付け忘れ等)に
注意してください。減点対象とします。
• なるべく読みやすく書いてください。一部の人は
(字の判別に苦労するほど)読みにくく、採点に
非常に時間がかかります。(減点対象ではありま
せんが)