Next:
Contents
Contents
Index
応用理工学情報処理
(c)1999年-2012年 電子・量子主専攻 牧村哲也
February 27, 2013更新
Contents
第
1
章 初めに
1
.
1
この文書について
1
.
2
表記法
1
.
3
筑波大学 全学計算機システム 固有のことがら
1
.
4
プログラムを作ってみる
第
2
章 まず慣れよう
2
.
1
本日の課題
2
.
2
新しい文法事項
2
.
3
puts, printf, scanf
第
3
章 演算と型
3
.
1
本日の課題
3
.
2
整数と実数
3
.
3
printf, scanfの書式
3
.
3
.
1
書式のまとめ
3
.
3
.
2
書式による詳細な出力制御
3
.
4
暗黙の型変換とキャスト
3
.
5
変数と演算
3
.
6
コラム: 変数の型, 書式 の整理
第
3
章 プログラムの流れの分岐 if, switch
3
.
1
学習のポイント
3
.
2
本日の課題
3
.
3
if
3
.
3
.
1
if の構文
3
.
3
.
2
入れ子
3
.
3
.
3
ブロック: 複数の文をまとめる
3
.
3
.
4
条件式
3
.
3
.
5
条件演算子
3
.
3
.
6
条件式の値
3
.
4
switch
3
.
5
if や switch を用いたプログラム
3
.
6
べき乗
3
.
7
実数が等しい
第
4
章 プログラムの流れの繰り返し do, while, for
4
.
1
本日の課題
4
.
2
for 文
4
.
2
.
1
for文の構文規則
4
.
2
.
2
break, continue: ループ本体内での制御
4
.
2
.
3
for文の実際
4
.
3
変数の演算
4
.
3
.
1
代入式
4
.
3
.
2
初期化子
4
.
3
.
3
複合代入演算子
4
.
3
.
4
後置演算子, 前置演算子
4
.
4
多重ループ
4
.
5
for文, while文, do文相互の書き換え
4
.
6
while
4
.
7
do...while
4
.
8
自由形式, インデント
4
.
9
for, while, do を用いたプログラム
第
5
章 配列
5
.
1
本日の課題
5
.
2
学習のポイント
5
.
3
新しい文法事項
5
.
4
注意
第
6
章 関数 その1
6
.
1
本日の課題
6
.
2
学習のポイント
6
.
3
関数を用いた例
6
.
4
変数の有効範囲
6
.
5
記憶域期間
第
6
章 関数 その2 --実引数としてアドレスを用いる--
6
.
1
本日の課題
6
.
2
学習のポイント
6
.
3
通常の変数の値とアドレス
6
.
3
.
1
ポインター
6
.
3
.
2
アドレスを仮引数とする関数呼び出し
6
.
3
.
2
.
1
通常の変数
6
.
3
.
2
.
2
配列
6
.
4
注意: 仮引数が const int mat[2][3]のときの関数呼出し (List6-17)
第
7
章 H12.11.基本型
第
7
章 H12.12.5: 基本型:文字, 2進数表示, 16進数表示
7
.
1
本日の課題
7
.
2
文字
7
.
3
wchar ワイドキャラクター
7
.
4
ビット演算
第
8
章 H.22 いろいろなプログラムを作ってみよう
8
.
1
課題
8
.
2
再帰
8
.
3
標準入力, 標準出力 とリダイレクト
8
.
3
.
1
標準出力への出力をファイルに保存する.
8
.
3
.
2
端末の中でコマンドを実行する.
8
.
4
標準入力からの読み込み
第
9
章 H.24.12.12 文字列の基本
9
.
1
新しい文法事項
9
.
2
プログラム
9
.
2
.
1
文字
9
.
2
.
2
文字列の宣言, 初期化, 入出力
9
.
2
.
3
代入, コピー
9
.
2
.
4
長さとサイズ
9
.
2
.
5
文字列の1次元配列 = 文字の2次元配列
9
.
3
自由課題
9
.
4
注意: 仮引数が const str[][6]の時の関数呼出し (List9-11, List9-12)
第
10
章 ポインタ (H.24年12月19日)
10
.
1
新しい文法事項
10
.
2
値, アドレス, サイズ
10
.
3
アドレスを仮引数とする関数呼び出し
10
.
4
ポインタは値を代入してから用いる.
10
.
5
メモリ上の配置を調べる.
10
.
6
記憶域上のイメージ
10
.
7
ポインターが有用な例
10
.
8
自由課題課題
10
.
9
プログラム
10
.
9
.
1
配列
10
.
9
.
2
複数の引数
第
10
章 H25.1.9: ポインタと配列
10
.
1
ポインタ変数
10
.
1
.
1
ポインタ変数の加減算
10
.
2
配列とポインタ
10
.
3
関数にポインタを渡す.
10
.
3
.
1
値を渡す
10
.
3
.
2
ポインタを渡す
10
.
3
.
3
配列を渡す
10
.
4
ポインタの有用性
10
.
4
.
1
大きなオブジェクトを関数の実引数とするとき
10
.
4
.
1
.
1
構造体を用いて比較してみる.
10
.
4
.
2
関数が複数の戻り値を必要とするとき
10
.
4
.
3
関数へのポインタ
10
.
4
.
4
任意アドレスの読み書き
10
.
4
.
5
値の評価の制御
第
11
章 H25.1.23: 文字列とポインタ
11
.
1
本日の課題
11
.
2
文字列とポインタ
11
.
3
配列名とポインタ変数
11
.
4
文字列の操作
11
.
5
プログラム
11
.
6
自由課題
11
.
7
文字列を扱うライブラリ関数: size_t
第
12
章 構造体
12
.
1
学習のポイント
12
.
2
構造体の特徴
12
.
3
変数の使い方
12
.
4
構造体の使い方
12
.
4
.
1
構造体を用いるとよい題材
12
.
4
.
2
構造体の定義, メンバーの参照, メンバーへの代入
12
.
4
.
3
初期化
12
.
4
.
4
構造体の代入
12
.
4
.
5
ポインタ変数
12
.
4
.
6
ポインタ変数: -> 演算子
12
.
4
.
7
構造体を受け取る関数
12
.
4
.
8
構造体を返す関数
12
.
4
.
9
構造体のアドレスを受け取る関数
12
.
4
.
10
構造体のアドレスを返す関数
12
.
5
実用上の使い方
12
.
6
自由課題: 構造体を用いた例: Scalable Vector Graphics
12
.
6
.
1
SVGファイル
12
.
6
.
2
SVGファイルをC言語を用いて作成する.
12
.
6
.
3
端末の中でコマンドを実行する.
12
.
6
.
4
汎用性の高いCプログラムにする.
12
.
6
.
5
構造体を用いるとより扱い易くなる.
第
13
章 H25.2.13 ファイル処理
13
.
1
本日の課題
13
.
2
Windows における拡張子
13
.
3
ファイル処理
13
.
3
.
1
ファイル処理の概要
13
.
3
.
2
fprintf関数によるファイルへの出力
13
.
3
.
3
fscanf関数によるファイルからの読み込み
13
.
4
SVGによるグラフィックス
13
.
4
.
1
SVGとは
13
.
4
.
2
SVGファイルを作って表示してみる.
13
.
4
.
3
SVGファイルの構造
13
.
4
.
4
SVGの基本図形
13
.
5
C言語によるSVG描画ファイルの作成
13
.
5
.
1
printf関数により画面に出力
13
.
5
.
2
fprintf関数によりファイルに出力
13
.
5
.
3
fprintf関数により変数の値をファイルに出力
13
.
5
.
4
ファイル操作を関数化する
13
.
5
.
5
関数に渡す引数を構造体にまとめる
13
.
5
.
6
SVGの他の基本図形も関数により描画
13
.
5
.
7
ヘッダファイルにする
第
14
章 H25.2.20 数値計算: 微分方程式を解く
14
.
1
本日の課題
14
.
2
gcc で数学関数を用いる.
14
.
3
グラフのプロット
14
.
4
オイラー法により数値的に微分方程式を解く
14
.
4
.
1
まず手始めに1ステッブだけ
14
.
4
.
2
次に 10ステッブまで
14
.
4
.
3
for を使って簡潔化
14
.
4
.
4
求めた解のグラフ化
14
.
4
.
5
誤差の評価
14
.
5
2階常微分方程式
14
.
5
.
1
一般的解法
14
.
5
.
2
振り子
14
.
5
.
3
強制振動
第
15
章 H25.2.27: 数値的に積分する
15
.
1
本日の課題
15
.
2
0次式 (長方形) で近似
15
.
2
.
1
まずは 10 区間に分割して足し合わせてみる
15
.
2
.
2
for を使って簡略化
15
.
3
1次式(台形公式)による積分
15
.
4
2次式 (シンプソンの公式) による積分
15
.
4
.
1
台形公式とシンプソンの公式の比較
15
.
4
.
2
シンプソンの公式の導出
15
.
5
ファイル操作: fscanf
15
.
5
.
1
ファイルから入力する
15
.
5
.
2
ファイルから入力し描画する.
15
.
5
.
3
ファイル上のデータを入力してグラフにする
15
.
5
.
4
CSVファイルの読み込み
第
16
章 H24.2.29: データ, 配列, 関数の整理
16
.
1
本日の課題
16
.
2
まとめ
16
.
2
.
1
変数, 構造体
16
.
2
.
2
変数, 構造体へのポインタ
16
.
2
.
3
変数, 構造体の配列
16
.
2
.
4
ポインタと配列
16
.
2
.
5
注意すべき事柄
16
.
2
.
6
ポインタ変数
第
17
章 データ, 配列, 関数の整理
17
.
1
配列でない変数, 構造体
17
.
2
配列
第
18
章 付録
18
.
1
数学関数
18
.
1
.
1
円周率
18
.
2
Cプログラムの運用
18
.
2
.
1
分割コンパイル
18
.
2
.
2
main 関数の引数と戻り値
18
.
3
CSVファイル形式のデータの入出力
18
.
4
SVGグラフィックス
18
.
4
.
1
CSVファイルのデータをプロットする.
18
.
5
数値計算
第
19
章 C 言語 I
19
.
1
C プログラムの構造
19
.
1
.
1
最も単純なプログラム
19
.
1
.
2
文
19
.
1
.
3
コメント
19
.
2
printf: 数の計算と出力
19
.
2
.
1
単純な文字
19
.
2
.
2
特殊な文字
19
.
2
.
3
整数と出力フォーマットを使った出力
19
.
2
.
4
浮動小数点数
19
.
2
.
5
複数の値
19
.
2
.
6
任意の型の組み合わせ
19
.
2
.
7
文字と文字列
19
.
3
変数
19
.
3
.
1
代入と演算
19
.
3
.
2
整数と実数のまとめ
19
.
3
.
3
1つだけ増減する.
19
.
4
関数
19
.
4
.
1
数学関数
19
.
4
.
2
関数を書いてみる
19
.
4
.
3
void: 値を受け取ったり返したりしない関数
19
.
4
.
4
関数の型宣言
19
.
4
.
4
.
1
型宣言の有用性
19
.
4
.
4
.
2
型宣言の実際
19
.
4
.
4
.
3
ヘッダーファイルの利用
19
.
4
.
5
main 関数
19
.
5
アドレス
19
.
5
.
1
変数のアドレス
19
.
5
.
1
.
1
変数へのポインター
19
.
5
.
1
.
2
ポインターを使った関数呼び出し
19
.
5
.
1
.
3
scanf: 入力関数
19
.
5
.
2
配列とアドレス
19
.
5
.
2
.
1
配列
19
.
5
.
2
.
2
可変長配列
19
.
5
.
2
.
3
配列とポインター
19
.
5
.
2
.
4
ポインター変数の演算
19
.
5
.
3
文字列
19
.
6
制御
19
.
6
.
1
if: 条件
19
.
6
.
2
for: 繰り返し
19
.
6
.
3
while: ループ
19
.
6
.
4
do-while: ループ
19
.
6
.
5
switch: 分岐
19
.
7
ファイル入出力
19
.
7
.
1
fprintf: ファイルへの出力
19
.
7
.
2
fscanf: ファイルからの入力
第
20
章 C 言語 II
20
.
1
ANSI C, C99: C 言語の規格
20
.
2
C 言語の構造
20
.
2
.
0
.
1
名前
20
.
2
.
0
.
2
予約語
20
.
2
.
0
.
3
プログラムのフォーマット
20
.
3
データ
20
.
3
.
1
基本データ型
20
.
3
.
2
定数
20
.
3
.
3
変数の有効範囲と構造化
20
.
3
.
3
.
1
auto 変数
20
.
3
.
3
.
2
auto 変数の有効範囲
20
.
3
.
3
.
3
auto変数とスタック
20
.
3
.
3
.
4
static 変数
20
.
3
.
3
.
5
大域変数
20
.
3
.
3
.
6
extern による翻訳単位外の変数の参照
20
.
3
.
3
.
7
static による翻訳単位外からの変数の遮蔽
20
.
3
.
4
配列
20
.
3
.
4
.
1
関数の仮引数としてのポインタの宣言
20
.
3
.
5
可変長配列
20
.
3
.
5
.
1
関数の引数としての可変長配列
20
.
3
.
5
.
2
pointer
20
.
3
.
5
.
3
typedef
20
.
3
.
5
.
4
sizeof
20
.
3
.
6
文字列
20
.
3
.
7
struct: 構造体
20
.
3
.
7
.
1
変数のグループ化
20
.
3
.
7
.
2
関数への引数
20
.
3
.
7
.
3
関数からの戻り値
20
.
3
.
7
.
4
構造体に配列を入れる
20
.
3
.
7
.
5
ポインター変数を含む構造体
20
.
3
.
8
union: 共用体
20
.
3
.
9
enum
20
.
3
.
10
typedef
20
.
3
.
11
変数の初期化
20
.
4
演算
20
.
4
.
1
演算子一覧
20
.
4
.
1
.
1
+, -, *, /, %: 符号, 加減乗除
20
.
4
.
1
.
2
=: 代入
20
.
4
.
1
.
3
++, - -: 1だけ増減
20
.
4
.
1
.
4
ビット演算
20
.
4
.
1
.
5
関係
20
.
4
.
1
.
6
論理演算
20
.
4
.
1
.
7
アドレス
20
.
4
.
1
.
8
sizeof 演算子
20
.
4
.
1
.
9
キャスト(型変換)
20
.
4
.
1
.
10
? : : 条件演算子
20
.
4
.
1
.
11
,: コンマ演算子
20
.
4
.
1
.
12
[]: 添字演算子
20
.
4
.
1
.
13
()関数呼び出し
20
.
4
.
1
.
14
. 構造体の参照
20
.
4
.
2
異なる型の数値の演算や代入
20
.
4
.
3
計算の精度
20
.
5
制御
20
.
5
.
1
文とブロック
20
.
5
.
2
制御に使われる ``式''
20
.
5
.
3
if
20
.
5
.
4
for
20
.
5
.
5
while
20
.
5
.
6
do-while
20
.
5
.
7
switch
20
.
5
.
8
break: 終了
20
.
5
.
9
continue: 次のループ
20
.
5
.
10
goto: ジャンプ
20
.
5
.
11
longjmp
20
.
6
関数
20
.
6
.
1
アドレスを引数とする関数呼び出し
20
.
6
.
2
可変長引数の関数
20
.
6
.
3
再帰呼び出し
20
.
6
.
4
関数へのポインター
20
.
6
.
5
static による翻訳単位外からの関数の遮蔽
20
.
7
プログラムを呼び出した側とのやりとり
20
.
7
.
1
main 関数の引数
20
.
7
.
2
main 関数や exit 関数の戻り値
20
.
7
.
3
環境変数
20
.
8
ライブラリー関数
20
.
8
.
1
printf
20
.
8
.
2
fprintf
20
.
8
.
3
scanf
20
.
8
.
3
.
1
scanf の使い方
20
.
8
.
4
fscanf
20
.
8
.
5
fgets
20
.
8
.
6
sscanf
20
.
8
.
7
入出力関数のまとめ
20
.
8
.
8
malloc: メモリーを確保する
20
.
8
.
9
数学関数
20
.
8
.
10
文字列関数
20
.
8
.
11
perror
20
.
9
複素数
20
.
9
.
1
複素数の使い方
20
.
9
.
2
実数と同じ部分
20
.
9
.
2
.
1
複素数同士の演算
20
.
9
.
2
.
2
複素数の配列
20
.
9
.
2
.
3
複素数を引数,戻り値とする関数
20
.
9
.
2
.
4
複素数変数へのポインター
20
.
9
.
3
複素数を扱うための型
20
.
9
.
4
複素数を扱うための基本的な関数
20
.
9
.
5
複素数を扱うための数学関数
20
.
10
ワイド文字とマルチバイト文字
20
.
10
.
1
まとめ
20
.
10
.
2
具体例
20
.
11
プリプロセッサ
20
.
11
.
1
標準定義マクロ
20
.
12
トピックス
20
.
12
.
1
標準入出力
20
.
12
.
2
メモリー領域
20
.
12
.
2
.
1
スタック
20
.
12
.
3
プログラムの分割
20
.
12
.
3
.
1
static 関数
20
.
12
.
3
.
2
ヘッダーファイル
20
.
12
.
3
.
3
大域変数
第
21
章 C 言語の演習と応用
21
.
1
for
21
.
2
do while: 数値積分
21
.
3
関数: マクローリン展開
21
.
4
πの値を得る
21
.
5
ネピアの定数
21
.
6
2進数で表示する.
21
.
7
アスキーコード表を作る
21
.
8
エラー処理付きのfopen
21
.
9
配列を実行時に確保する
21
.
10
乱数を発生する
21
.
11
時間を計る
21
.
12
平均値と標準偏差を求める
21
.
13
関数のグラフを作る.
21
.
14
ファイル上のデータを読み込む
21
.
15
ベクトル,行列の計算
21
.
15
.
1
配列による実装
21
.
15
.
1
.
1
ベクトル同士の演算
21
.
15
.
1
.
2
ベクトルに行列を演算
21
.
15
.
1
.
3
行列の積
21
.
15
.
2
構造体を使った実装
21
.
16
図形オブジェクト
21
.
16
.
1
操作する関数も構造体に保持させる.
第
22
章 Windows
22
.
1
コマンドプロンプト
22
.
2
ファイルとホルダー
22
.
3
開発環境
22
.
3
.
1
Windowsでの開発環境: bcpad で編集,実行, bccでコンパイル
22
.
3
.
1
.
1
初期設定
22
.
3
.
1
.
2
プログラム作成, 実行
第
23
章 UNIX 環境
23
.
1
ログイン ログアウト
23
.
2
端末
23
.
2
.
1
日本語の入出力
23
.
3
ファイルとディレクトリ
23
.
3
.
1
ファイルを操作するコマンド
23
.
3
.
2
ドットファイル
23
.
3
.
3
ディレクトリ
23
.
3
.
4
ディレクトリ の操作
23
.
4
OS とのやりとり
23
.
4
.
1
コマンドライン
23
.
4
.
2
端末からの入出力
23
.
4
.
3
環境変数
23
.
4
.
4
標準入出力とパイプ
23
.
4
.
4
.
1
stdout
23
.
4
.
4
.
2
stdout と stderr
23
.
4
.
4
.
3
stdin
23
.
4
.
4
.
4
パイプ
23
.
4
.
5
プロセス制御
23
.
4
.
6
Bourne Shell (sh, bash)
23
.
4
.
6
.
1
ワイルドカード
23
.
4
.
6
.
2
環境変数
23
.
4
.
6
.
3
リダイレクト, パイプ
23
.
4
.
6
.
4
コマンドの戻り値
23
.
5
X Window System
23
.
5
.
1
マウスによるコピーとペースト
23
.
5
.
2
起動時のオプション
23
.
6
プログラム開発
23
.
6
.
1
cc: C コンパイラー
23
.
6
.
2
cpp: C プリプロセッサー
23
.
6
.
3
プログラムの誤りを見つける
23
.
6
.
4
実行結果の記録
23
.
6
.
5
C での日本語の入出力
23
.
6
.
6
gdb: デバッガー
23
.
6
.
7
ライブラリのリンク
23
.
6
.
8
ライブラリーの中の関数
23
.
6
.
9
分割コンパイル
23
.
6
.
10
make: 作業を指示する.
23
.
6
.
11
開発用コマンド
23
.
7
開発環境
23
.
7
.
1
Emacs
23
.
7
.
1
.
1
プログラムの作成から実行まで
23
.
7
.
1
.
2
日本語の入出力とコメント
23
.
7
.
1
.
3
gdbを用いたデバッグ
23
.
7
.
1
.
4
デバッグの実際
23
.
7
.
1
.
5
デバッグ時のキー入力の簡略化
23
.
7
.
2
Eclipseで編集, 実行
23
.
7
.
2
.
1
eclipseの起動
23
.
7
.
2
.
2
新規プロジェクトを作成する
23
.
7
.
2
.
3
プログラムファイルの作成
23
.
7
.
2
.
4
コンパイルと実行
23
.
7
.
3
KDevelop
23
.
7
.
3
.
1
新規プログラムを作成するための準備
23
.
7
.
3
.
2
プログラム作成と実行
23
.
7
.
3
.
3
デバッグ
23
.
7
.
3
.
4
日本語入出力
23
.
8
ネットワーク
第
24
章 コマンド一覧 (詳細は man24.1.1 コマンド参照のこと)
24
.
1
情報源
24
.
1
.
1
man: オンライン マニュアル
24
.
2
ファイル
24
.
2
.
1
ls: ファイル名の一覧
24
.
2
.
2
mv: ファイルの移動
24
.
2
.
3
cp: ファイルのコピー
24
.
2
.
4
cat: ファイルの中身を見る ファイルの結合
24
.
2
.
5
rm: ファイルの削除
24
.
2
.
6
lv: ファイルの中身を見る
24
.
2
.
7
less: ファイルの中身を見る
24
.
2
.
8
more: ファイルの中身を見る
24
.
2
.
9
chmod: ファイル属性の変更
24
.
2
.
10
tar: アーカイブの操作
24
.
2
.
11
gzip: ファイルの圧縮・伸長
24
.
2
.
12
wc: 文字数, 語数, 行数を数える.
24
.
3
ディレクトリ
24
.
3
.
1
cd: ワーキングディレクトリの変更
24
.
3
.
2
pwd: ワーキングディレクトリの表示
24
.
3
.
3
mkdir: ディレクトリの作成
24
.
3
.
4
rmdir: ディレクトリの削除
24
.
4
編集
24
.
4
.
1
emacs: ファイルの編集
24
.
4
.
2
emacs による日本語ファイルの編集
24
.
5
ユーティリティ
24
.
5
.
1
gnuplot: グラフを描く
24
.
5
.
2
nkf: 漢字コードの変換
24
.
5
.
3
script: 画面表示内容の記録
第
25
章 参考となる文献
第
26
章 付録
26
.
1
GNU一般公有使用許諾書
26
.
1
.
1
日本語訳
26
.
2
有害な csh プログラミング
Index
(c)1999-2013 Tetsuya Makimura