工学部精密工学科プログラミング基礎

担当 神保泰彦 教授・大竹豊 講師

テキスト

http://lecture.ecc.u-tokyo.ac.jp/~tohtake/cmain1.pdf
東大内部からのみアクセス可能
関数のグラフのさせ方(gnuplot版)
ファイル入出力についての説明

第1回(10/19)

配付資料

http://lecture.ecc.u-tokyo.ac.jp/~tohtake/1019.txt

プログラムの入力・コンパイル・実行のメモ

emacs ファイル名
gcc ファイル名
./a.out

参考

HyperWorkbook 12.2.1 コマンド入力の基本

unix コマンド

"man"マニュアル表示 (ex. "man cp")
"cd"ディレクトリ移動
"cd .." ひとつ上にディレクトリ移動
"pwd"現在のディレクトリの場所を絶対パスで表示
"ls" or "ls -a" ファイル・ディレクトリの情報表示
"mkdir"ディレクトリ表示
"cp"ファイルのコピー
"rm"ファイルの削除
"rmdir"ディレクトリの削除
"emacs", "gnuplot"それぞれの実行
"fg"中断している仕事の復帰

emacsコマンドのメモ

"Ctrl+x Ctrl+s"ファイルセーブ
"Ctrl+x Ctrl+w"別名にしてファイルセーブ
"Ctrl+x Ctrl+f"ファイルオープン
"Ctrl+x Ctrl+c"エディタの終了
"Ctrl+g"編集への復帰
"Ctrl+z"エディタの中断 (復帰は"fg")
移動 "Ctrl+f"一つ前進 (forward)
移動 "Ctrl+b"一つ後退 (back)
移動 "Ctrl+n"一行下へ (next)
移動 "Ctrl+p"一行上へ (previous)
移動 "Ctrl+d"一つ消去 (delete)
"Ctrl+x Ctrl+c"エディタの終了

参考

google検索 「emacs コマンド」
HyperWorkbook 15. エディタ

自宅からログインするためのメモ

自宅からログインする方法についてのECCSによる記述はここにあるが極めて不親切である。ここでも親切には解説できないので、詳しい人に聞くこと。
windowsの場合:
http://hp.vector.co.jp/authors/VA024651/download/file/putty-0.60-jp20070603.zip
をダウンロードし、解凍して、puttyjp.exeを実行する。ホスト名にux101.ecc.u-tokyo.ac.jpを入力して「開く」を押す。

MacOSXの場合:
アプリケーション:ユーティリティ:ターミナルを開く
ssh aa000000@ux101.ecc.u-tokyo.ac.jp
(aa000000の部分を自分のユーザ名で置き換えること)
と入力してリターンを押す。

第2回(10/26)

まとめ
課題

第3回(11/2)

まとめ

第4回(11/9)

修正テキスト: 9. 応用: 関数のグラフ(修正gnuplot版)
(xgraphは現在のシステムでは利用できないのでgnuplotに変更したもの)

参考

GNUPLOTの第一歩:ファイルに保存されたデータのグラフの表示
課題
posix termiosを利用した例 サンプル 参考
curses ライブラリを利用した例 サンプル 参考

第5回(11/16)

まとめ:
アドレス渡しを使う場合のポイント 返値を使って結果を戻す例
double neg(double f);
int main(void)
{
  double a;
  
  a=1.0;
  a=neg(a);
  printf("%f\n",a);  
}
double neg(double f)
{
  return(-f);
}
アドレス(ポインタ)渡しによって結果を戻す例
void neg(double *f);
int main(void)
{
  double a;

  a=1.0;
  neg(&a);
  printf("%f\n",a);  
}
void neg(double *f)
{
  *f = -(*f);
}
課題:
1)図4 fahren.cを、華氏を引数として与えると、摂氏を返す関数をつかって書き直せ。
2) x=0近傍のsin(x)を5次のベキ上近似で計算する関数を作り、その動作チェックをするプログラムを作れ(scanfを使って実数を入力して、自作の関数と、C言語にもとから用意されているsin関数を使った計算結果を表示させる。sin関数を使うには#include が必要。
3) アドレス渡しの関数を使って、2つの整数a,bを引数として与えると、aをbでわった商と余りを返す関数を作り、その動作チェックをするプログラムを作れ
4) quad2.cを改造して以下のようなプログラムquad3.cにせよ

・関数quadの仕様を次のようにする
引数: int型3つ(a,b,c)、float型ポインタ2つ(r1,r2)
戻り値: int型

a) 実数解が存在し、{重解でなければr1,r2が指すアドレスに解を代入し2を返す。重解ならば、r1,r2が指すアドレスに解(同じ値)を代入し1を返す}
b) 実数解が存在しないとき、複素数の解を求め、実部をr1が指すアドレスに、虚部の絶対値をr2が指すアドレスに代入し0を返す
c) aがゼロの場合、何もせず、-1を返す

・関数mainではquadの戻り値に応じて場合分けをして、結果をprintf文で適切に表示するようにする

5)2)のプログラムを改造して、xと近似の次数nを引数として与えると、sin(x)を計算するプログラムを作れ。sin(x)の対称性を考慮して、任意のxに対してよい近似で計算できるようにせよ。

第6回(11/30)

1次元配列について学びます.
講義内容と課題は以下のファイルをご覧ください.
[PDF 形式][PPT 形式]

第7回(12/7)

2次元配列について学びます.
講義内容と課題は以下のファイルをご覧ください.
[PDF 形式][PPT 形式]

第8回(12/14)

簡単な数値解析法について学びます.
講義内容と課題は以下のファイルをご覧ください.
講義 : [PDF 形式][PPT 形式]
課題 : [PDF 形式]
課題@のヒント

第9回(12/21)

文字列の扱いとファイル入出力について学びます.
講義内容と課題は以下のファイルをご覧ください.
[PDF 形式][PPT 形式]
課題(1)のヒント
課題(2)のヒント

課題(2)-1の答え 実行は "a.out 1 2 3 4 5" など
課題(2)-2の答え 実行は "a.out pe.txt PE.txt" など
課題(2)-3の答え 実行は "a.out pe.txt pe-odd.txt pe-even.txt" など
課題(2)-4の答え 実行は "a.out pe-odd.txt pe-even.txt pe-copy.txt" など

第10回(1/18)

構造体について学びます.
講義内容と課題は以下のファイルをご覧ください.
[PDF 形式]
課題@のヒント

既にC言語をマスターしている人への課題

最終レポート

report
締め切り2010年2月22日厳守

質問など:大竹 yu-ohtake[at]den.rcast.u-tokyo.ac.jp ([at]は@に変更)