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