講義概要・C言語復習 - Site ~理工情報関連科目・情報教育Web

C プログラミング
第 1 回 講義概要・C言語復習
基幹理工学部
早稲田大学
基幹理工学部 (早稲田大学)
C プログラミング
1 / 17
講義概要
プログラム技術に関する目標
仕様に基づいてプログラムを完成できる
▶
▶
▶
要求されている機能を,基本的な命令・アルゴリズムを組み合わせて実現できる
必要メモリ量や計算量を考慮できる
効率よくバグを見つけて修正することができる
仕様変更に強い読みやすいプログラムが書ける
▶
▶
▶
無駄な処理を排除したり,同じような処理を一つに纏めることができる
変数のスコープ設定や処理の切り分けが適切にできる
インデント設定や変数・関数の命名が適切にできる
科学技術計算,データ構造に関する目標
初歩的な数値計算アルゴリズムを実装して使える
▶
▶
各数値型を有効範囲や精度を理解した上で使える
方程式の数値解の解法などを実装して使える
初歩的なデータ構造を実装して使える
▶
リストやキューなどを実装して使える
基幹理工学部 (早稲田大学)
C プログラミング
2 / 17
関連講義
履修を前提とする講義
C プログラミング入門
関連する講義
計算機概論,数値解析(数学)
数値解析,数理モデル基礎,プログラミング基礎(応用数理)
プログラミング,プログラミング言語(情報理工)
数値計算法,有限要素法(機械科学・航空)
計算科学(電子物理システム)
その他(理論計算が難しく,数値計算を必要とする科目は沢山ある)
基幹理工学部 (早稲田大学)
C プログラミング
3 / 17
講義日程
第 1 回 講義概要・基礎復習
第 2 回 行列の演算
第 3 回 ポインタ
第 4 回 連立一次方程式の解法 (1)
第 5 回 連立一次方程式の解法 (2)
第 6 回 方程式の反復解法 (1)
第 7 回 方程式の反復解法 (2)
第 8 回 構造体・再帰
第 9 回 ソート
第 10 回 探索
第 11 回 ファイル入出力
第 12 回 スタック・キュー
第 13 回 リスト
第 14 回 諸技法
基幹理工学部 (早稲田大学)
C プログラミング
4 / 17
成績評価
出欠
最低 2/3 以上(10 回以上)の出席が必要.
10 分以上の遅刻早退は欠席とする.やむを得ない場合は遅延証明などを
提示.
自分のパスワードを忘れてログインができない場合は欠席とする.
成績
試験は実施しない.レポートで評価
レポート課題は 4 回課す(第 5, 7, 11, 14 回を予定)
上記以外は毎回小レポート課題を課す.
課題の締切は,その都度指示する.
講義に欠席してもレポートは受け付ける.
レポートの提出は「Course N@vi」で行うこと.
基幹理工学部 (早稲田大学)
C プログラミング
5 / 17
プログラミング環境
エディタは xemacs を使う.起動するには
> xemacs filename &
▶
& を入れないと xemacs を終了するまでそのターミナルが使えず,コンパイル
などの他の作業ができない.別のターミナルを開いてもよいが,リソースの無
駄となる.
ウェブブラウザは firefox を使う.起動するには
> firefox &
UNIX の使い方については,前期の講義資料をもう一度良く見て復習してお
くこと.
基幹理工学部 (早稲田大学)
C プログラミング
6 / 17
主要な UNIX コマンド
pwd: 現在の作業ディレクトリ(フォルダ)名を表示する.
cd dirname1: 指定ディレクトリに移動する.
ls -al: 現在の作業ディレクトリにあるファイルの一覧を表示する.
cp filename1 filename2: 指定ファイルのコピーを作成して filename2 と
名付ける.
mv filename1 filename2: 指定ファイルの名前を filename2 に変更する.
mv filename1 dirname2: 指定ファイルを指定ディレクトリに移動する.
rm filename1: 指定ファイルを削除する.
mkdir dirname1: 指定ディレクトリを作成する.
less filename1: 指定ファイルの内容を表示する. q で表示を終了する.
man [カテゴリ番号] コマンド名または関数名: マニュアルを表示する.
↑ ↓ : 以前に入力したコマンドを遡って表示する.
Tab : ファイル名やディレクトリ名を入力する場面で自動補完する.
基幹理工学部 (早稲田大学)
C プログラミング
7 / 17
XEmacs 設定
行番号を表示させるには,XEmacs の設定で,次のチェックを入れる.
[Options] - [Display] - [Line Numbers]
その後,次のものを選択して,設定を保存する.
[Options] - [Save Options to Init File]
Ctrl+\で日本語入力に切り替えようとした時に,
Input method:
とウインドウ下部に表示された場合は,次のようにと打ち込む.
japanese-anthy
(Tab が使えるので,j Tab a Tab でも可).しかし,この設定は保存され
ない.
日本語入力設定を保存するには,
[Options] - [Edit Init File]
を選択すると,.xemacs/init.el ファイルの編集モードになるので,
(setq default-input-method ’japanese-anthy)
と書き込んで保存する.
基幹理工学部 (早稲田大学)
C プログラミング
8 / 17
C 言語基礎復習
プログラムの基本的な概念
プログラムは決められた順番で命令を一つずつ実行していく(並列計算は
例外).
プログラムがアクセスできるのはメモリ,ファイル,キーボード,ディスプ
レイのみ.メモリは変数宣言や,malloc によるメモリ確保を通じて使用す
る.メモリ以外はストリームという仕組みを通じて使用する.
変数にはソースコード上のスコープ(有効範囲)と実行時の持続期間がある
スコープは,その変数にアクセスできるソースコード上の範囲
▶
▶
関数内のローカル変数は別の関数からはスコープ外なのでアクセスできない.
グローバル変数はどの関数からもアクセスできる.
持続期間は,その変数が実行時に用意されてから破棄されるまでの期間
▶
▶
関数内のローカル変数は関数の呼び出し毎に用意され,呼び出しが終わると破
棄される.
グローバル変数はプログラムの実行開始時に用意され,終了時に破棄される.
基幹理工学部 (早稲田大学)
C プログラミング
9 / 17
プログラムの基本的な構造
C 言語のプログラムは基本的に次のような構造を持つ.
#include <ヘッダファイル> /* ヘッダファイルの指定 */
#define マクロ名 定義
/* 定数などの定義 */
/* 関数の定義 */
int main(void) {
/* 変数の宣言 */
/* 処理の記述 */
return 0;
}
main 関数は特別な関数で,プログラムの実行を開始すると main 関数が呼び
出され,main 関数が return するとプログラムが終了する.
様々な関数を定義して組み合わせることによって,目的とする処理を実現
する.
基幹理工学部 (早稲田大学)
C プログラミング
10 / 17
入出力関数
ディスプレイに表示するためには printf 関数,キーボードから入力を得るに
は scanf 関数を用いる.これらは書式(フォーマット)指定ができ,表示形
式を整えたり,入力の解釈をしたりしてくれる.
printf 関数/scanf 関数
printf(書式指定, 値,...);
scanf(書式指定, &受入変数,...);
← 変数の前の&に注意
書式指定の文字列には"%lf","%d","%s"などを含めることができる.
C 言語ライブラリにある関数はマニュアルが用意されており,次のように入
力することで表示させることができる.ここで「3」は C 言語のライブラリ
のカテゴリを表している.
> man 3 printf または scanf
基幹理工学部 (早稲田大学)
C プログラミング
11 / 17
練習 1
ファイル名: 011.c
角度 [度] を入力すると,単位を [ラジアン] に変換して出力するプログラムを
作れ.
入出力は以下のようにすること.
小数点以下の桁数を指定するには書式指定を"%.3f"などとする.
> ./a.out
input angle [deg]: 180
180.0 [deg] = 3.142 [rad]
基幹理工学部 (早稲田大学)
C プログラミング
12 / 17
数学ライブラリの利用
良く使われる数学関数はライブラリとして用意されている.また M PI など
の便利な定数も定義されている.
関数の定義については man コマンドで知ることができる.
> man 3 sin
これらの関数や定数を利用するにはヘッダーファイルを include する.
#include <math.h>
数学関数を利用する場合は更にコンパイル時に-lm オプションを付ける.
> gcc -pedantic -Wall -lm filename
基幹理工学部 (早稲田大学)
C プログラミング
13 / 17
練習 2
ファイル名: 012.c
角度 [度] を入力すると次の三角関数の値(sin, cos, tan)を計算し,出力するプロ
グラムを作れ.
入出力は以下のようにすること.書式指定を"%6.3f"などとして,桁を揃え
よ.
> ./a.out
input angle [deg]: -30
sin(-30.0[deg]) = sin(-0.524[rad]) = -0.500
cos(-30.0[deg]) = cos(-0.524[rad]) = 0.866
tan(-30.0[deg]) = tan(-0.524[rad]) = -0.577
C 言語の三角関数の計算では [度] か [ラジアン] のいずれを用いるべきか,
マニュアルを調べてみよ.
基幹理工学部 (早稲田大学)
C プログラミング
14 / 17
第 1 回演習課題
ファイル名: 013-[学籍番号].c
2 つの実数 a, b と分割数 n の 3 つを入力すると,積分
S≡
n−1
∑
w sin(a + wi),
但し w ≡
i=0
∫b
a
sin(x)dx の近似値
b−a
n
を計算し,出力するプログラムを作成せよ.尚,入力された値が a > b の場合は,
a と b を入れ換えてから計算するようにせよ.
入出力は以下のようにすること.
> ./a.out
input a, b and n: 6.28,3.14,10
integral of sin(x) on [3.14, 6.28] = -1.98
表示は小数点以下 2 桁とせよ.
基幹理工学部 (早稲田大学)
C プログラミング
15 / 17
演習課題の提出方法
Course N@vi で提出すること.
タイトルは「第 1 回演習課題」とする.
本文には(必要があれば)講義内容に対する質問を書くこと.
特に指定が無ければソースファイルのみを添付.
ファイル名は指定されているもの「013-[学籍番号].c」にする.
「-」はアンダースコアではなくハイフン.
例えば,自分の学籍番号が「1W123456-7」であれば、ファイル名は
「013-1W123456.c」にする.
最後のチェックディジットは付けない.
基幹理工学部 (早稲田大学)
C プログラミング
16 / 17
提出プログラム諸注意
理工 UNIX 上の gcc でコンパイルできること.
以下のコンパイルオプションでエラーも警告も出ないようにすること.
> gcc -pedantic -Wall -lm filename
文字コードは Unicode を,エンコーディングは utf-8 を使用すること.
▶
ソースファイルをメール添付したりすると文字コードが変わるので注意
インデントを正しく揃えること.
プログラム中のコメントは自分の言葉で入れること.
演習課題のプログラムで参考とした物がある場合は出典を明記すること.
基幹理工学部 (早稲田大学)
C プログラミング
17 / 17