10月7日(第1回) 授業の背景とねらい、進め方など 10月14日 体育の日 10月21日(第2回) 1.メールで出欠確認 2.ログイン(tera term pro使用)とログアウト(exitかlogout)の確認 3.プロンプト(入力要求)のあとに   pwd と入力し、Enterキーを押すと反応が起こることを確認。 同様に、 ls -al と入力し、Enterキーを押すと反応が起こることを確認。 その後、以下の@、Aをアナウンス  @(UNIXの特徴1:)UNIXでは、     プロンプト(入力要求)が出る→コマンド(命令)を入力してEnter     →コマンドに応じて実行→プロンプトが出る→    というサイクルで操作する。  A(UNIXの特徴2:)UNIXシステムはTSSでマルチタスク 4.さらにUNIXの特徴として、 ファイルとディレクトリおよびtree構造、カレントワーキングディレ クトリ(CWD、以下同様)、ホームディレクトリについて解説した。 5.(UNIXの簡単なコマンド)  ペアレントディレクトリの紹介と   cd ..   cd tree図におけるCWDの一つ下のディレクトリ名  の解説と演習・確認 10月28日(第3回) 1.メールで出欠 2.ログイン 3.前回の確認 4.コマンドによる命令のパターン(3つ) 5.絶対パスと相対パス(tree図を用い、具体例により示した) 11月4日 大学祭 11月11日(第4回) 1.第1回から第3回までの講義内容を概観 2.コマンドの紹介(< >は、絶対パスか相対パスを表す): 1. ls  @の場合:そのファイルがあればファイル名を返しなさい。  Aの場合:そのディレクトリの一覧表示(ディレクトリの下にあるファイルおよびディレクトリ一覧の表示)をしなさい。 2.cd カレントディレクトリをdirectoryに移す。 3.cd カレントディレクトリをホームディレクトリにする。 実習 cd / pwd ls 4.mkdir にディレクトリを作成する。 5.rmdir の削除 6.vi ESCキーを押す → : → wq 7.cat ファイルの中を表示 8.more ファイルの中を1画面ずつ表示 9.cp にコピー 10.rm を削除 11. mv に移動 来週: cp,mvについてもう一度確認。cp、mvで2番目の引数もの場合もアナウンス。 11月18日(第5回) 1.cp にコピー 2.mv に移動 3. 41 ls 42 ls c 43 cp c/ff . 44 ls 45 rm ff 46 ls 47 ls c 48 mv c/ff . 49 ls 50 ls c 51 cd c 52 vi js1.c #include main() { printf("C program\n"); } 59 gcc js1.c -o js1 60 ls 61 js1 11月25日(第6回) 1.cd c 2.vi js2.c viの使い方 1 vi は、指定されたファイルを編集できるように しなさいという命令。指定されたファイルが なければ、新たに作成できる状態にする。 2 1で、vi画面が開き、編集できる状態に なるが、最初はコマンドモード 3.コマンドモードは、コマンドを入力する モード。viにはその他、テキスト入力モード (挿入モード)、コロンモードがある。 コマンドモードから挿入モード・・・・iキー 挿入モードからコマンドモード・・・・ESCキー コマンドモードからコロンモード・・・:キー コロンモードからコマンドモード・・・ESCキー 4.挿入モードで、カーソルの下に、テキストを キー入力で挿入できる。 5.コマンドモードでxをうつとカーソルの下 の文字が消える。 6.コロンモードで、 w とすると編集した内容が指定されたファイルに 保存される。 もし、1のように開いたのなら、単にwで最初に 指定されたファイルに保存される。 7.コロンモードで、保存後編集していない状態 であれば、qでviが終了される。 編集した後、まだ保存していない状態であれば q!でviが終了される。 8.もし、1のように開いたのなら、コロンモード でwqで、最初に指定したファイルに保存され、viが 終了される。 9.カーソルの移動は、コマンドモードでh、j、k、 lの各キーを使用する。それぞれ左、下、上、右に 移動。ただし、移動は文字列がある範囲内のみ。 48 vi js2.c 49 ls 50 gcc js2.c -o js2 51 ls #include main() { printf("Yozo Nakahara\n"); } 12.2(第7回) 1.前回の確認 2.cディレクトリで vi js3.c として以下を入力 /* 1+2+3+ +10= */ main() { int sum, i; sum=0; i=1; while(i <= 10){ sum = sum + i; i = i + 1; } printf("total = %2d\n",sum); } 3.gcc js3.c -o js3 js3.cファイルの中に入っているcプログラム(コンピュ ータの処理を指定する文字列のうち、ある種のもの)から コンピュータが直接わかるプログラムを作成し、それを js3というファイルの中に入れなさいという命令 4.js3 で実行確認 5.viの確認、機能の追加説明(r,dd,nyy,dd) 6.プログラムの説明 @Cプログラムでは基本的にひとつの処理を1行で表現する ACプログラムでは、処理の順番を基本的に処理を表現する 単位の上下関係で表す(上が先)が例外もある。(授業:基本的に Cプログラムは上に書かれた処理から下に向かって順番にな される処理を表すが、例外もある。その例がWHILE) 7.11から20までを足すプログラムを作る js3におけるsumとiの中の数値変化を確認した sum 0 1 3 6 10 15 21 28 36 45 55 i 1 2 3 4 5 6 7 8 9 10 11 Cプログラムを作成するときのポイントは、次のような点(Cプログラムを 作成できるようになるとは、次のような状態になること) @Cプログラムの言葉遣い(表現法)を知っている A処理を追える B基本的な処理の手順(アルゴリズム)を知っている ヒントを与えた後、以下のプログラムを解答として示し、 実際に動くことを示した(教卓でデモンストレーションのみ)。 /* 11+12+13+ +20= */ main() { int sum, i; sum=0; i=11; while(i <= 20){ sum = sum + i; i = i + 1; } printf("total = %2d\n",sum); } 12.9(第8回) 1.前回の確認 2.cd c でディレクトリを移動し、 vi js4.c でjs4.cを編集 /* 11+12+13+ +20= */ main() { int sum, i; sum=0; i=11; while(i <= 20){ sum = sum + i; i = i + 1; } printf("total = %2d\n",sum); } 3.次のjs4s.cを作成し、実行して見せて、 js4.cの説明に使用した: /* 11+12+13+ +20= */ main() { int sum, i; sum=0; i=11; while(i <= 20){ sum = sum + i; printf("sum = %2d\n",sum); i = i + 1; printf("i = %2d\n",i); printf("\n"); } printf("total = %2d\n",sum); } なお、js4s.cの実行結果は以下のとおり: snis{nakahara}75: js4s sum = 11 i = 12 sum = 23 i = 13 sum = 36 i = 14 sum = 50 i = 15 sum = 65 i = 16 sum = 81 i = 17 sum = 98 i = 18 sum = 116 i = 19 sum = 135 i = 20 sum = 155 i = 21 total = 155 4.今やっていることの確認 5.次のjs5.cを作成し、コンパイルし実行して確認 main() { int n; printf("Input an Integer:"); scanf("%d", &n); if(n > 0) printf("Positive \n"); else if(n==0) printf("Zero \n"); else printf("Negative \n"); } 6.上記Cプログラムの意味(どういう処理を指定して いるのか)を解説 7.これまでの授業を振り返りこれからの進め方を説明 2003.1.20(第9回) 1.メールで出欠 2.これまでの授業の概観 3.ログイン後、cd cでディレクトリ移動、lsでファイル等を確認 4.(do〜whileによる処理の指定)   cp js3.c js3dowhile.c でコピーし、   vi js3dowhile.c で以下のように編集: /* 1+2+3+ +10= */ main() { int sum, i; sum=0; i=1; do{ sum = sum + i; i = i + 1; }while(i <= 10); printf("total = %2d\n",sum); } 5.(do〜whileによる処理の指定)   保存後、   gcc js3dowhile.c -o js3dowhile でコンパイルし   js3dowhile で実行、確認 6.(for文による処理の指定) cp js3.c js3for.c でコピーし、   vi js3for.c で以下のように編集: /* 1+2+3+ +10= */ main() { int sum, i; sum=0; for(i=1 ; i <=10 ; i++){ sum = sum + i; } printf("total = %2d\n",sum); } 7.(for文による処理の指定)   保存後、   gcc js3for.c -o js3for でコンパイルし   js3for で実行、確認 8.レポートの表紙の書き方と、レポート課題の一部(下を参照)を 示した(提出については来週アナウンスか、あるいは掲示する。来 週提出ではない。):    1. UNIXの特徴を3つ挙げなさい。 2. 絶対パスと相対パスについて説明しなさい。 3. viの使い方を簡単にまとめなさい。 4. js1.cというCプログラムがあるとき、gccを用いてこれをコンパイルする方法と、コンパイル後実行する方法を示しなさい。 5. 16から28までの合計を求めるプログラムを3種類(whileを用いるプログラム, do whileを用いるプログラム, および、forを用いるプログラム)作成しなさい(レポートにプログラムリストを入れる)。 2003.1.27(第10回) 1.メールで出欠 2.先週の内容の確認 3.ログイン後、cd cでディレクトリ移動 4.cp /export/home1/pro/nakahara/c/kansu1.c ./kansu1copy.c 5.vi kansu1copy.cで内容確認: main() { int multi(); int i,j; for(i=1; i<=9; i++){ for(j=1; j<=9; j++){ printf("%d*%d=%2d\t",i,j,multi(i,j)); } printf("\n"); } } int multi(m,n) int m,n; { int a; a = m*n; return(a); } @いままで、 main() { } という形のプログラムのみを紹介してきた。   上記プログラムは、このほかに     int multi(m,n) int m,n; { } という部分がある。これは、与えれらた整数m、nと、それに対応して決まる一連の処理の手順   との対応関係(関数)と、その対応関係の名前(関数名)を定義する部分である。今の場合、   mulitiという名前の関数を定義している。     main()   { } の部分も、一連の処理の手順を定義する部分であり、mainという名前の関数を定義していると   見なせる。実はCプログラムの一般形は、上記のように、main関数の定義とその他の関数の定義   からなる。    A関数は、     関数名( );   で呼ばれる。   関数の定義の中に、      return(式); とあると、この式の値が戻り値として呼出した「関数名( )」に返される。 6.コンパイルして実行、確認 コンパイル gcc kansu1copy.c -o kansu1copy 実行結果の確認 snis{nakahara}46: kansu1copy 1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9 2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 7.pointa.cをコピー cp /export/home1/pro/nakahara/c/pointa.c . 8.vi pointa.c で内容確認: main() { int a; int *pi; a=123; pi = &a; printf("%d\n",a); printf("%d\n",*pi); } @int *pi; piは整数変数のアドレスを入れる変数。ただし、整数変数とは、       整数を入れる箱のようなもの。(アドレス(ポインタ値)を入れ       る変数をポインタ変数と呼ぶ) A&a aという変数(整数変数)のアドレス B*pi piにはいっているアドレスを、アドレスとして持つ変数 8.コンパイルして実行、確認 コンパイル gcc pointa.c -o pointa 実行結果の確認 pointa 123 123 9.pointatokansu.cをコピー cp /export/home1/pro/nakahara/c/pointatokansu.c . 10.vi pointatokansu.c で内容確認: main() { int a, b; a=6872; b=9432; printf("a=%d\tb=%d\n",a,b); swap(&a, &b); printf("a=%d\tb=%d\n",a,b); } swap(m,n) int *m,*n; { int w; w=*m; *m=*n; *n=w; } 11.コンパイルして実行、確認 コンパイル gcc pointatokansu.c -o pointatokansu 実行結果の確認 pointatokansu a=6872 b=9432 a=9432 b=6872 2003.2.3(第11回) 1.メールで出欠 2.各自http://www.shizuoka-eiwa.ac.jp/~nakahara/jands.txtで先週の内容の確認 3.ログイン後、cd cでディレクトリ移動 4.cp /export/home1/pro/nakahara/c/saiki.c . あるいはviで以下のsaiki.cを作成: main() { int n; long kaijyo(); scanf("%d",&n); printf("%d! = %ld\n",n,kaijyo(n)); } long kaijyo(i) int i; { if(i ==0) return(1); else return(i*kaijyo(i-1)); } 5.コンパイルして実行、確認 コンパイル gcc saiki.c -o saiki 実行結果の確認 snis{nakahara}49: saiki 6 6! = 720 6.プログラムの解説 7.レポート内容の追加(表紙の書き方や、1から5などについては1月20日に示した) 6. Cプログラムにおいてポインタ変数とは何か。 7. Cプログラムにおける関数について解説しなさい。 8. 再帰関数が用いられているプログラムリストとその実行結果をあげ、処理内容を具体例(n=4のとき)について解説しなさい。 9. 授業の感想を自由に述べてください。 8.レポート内容について解説 9.プログラムリストや実行結果などのWordへのコピーの仕方をアナウンス:    @ドラッグ&ドロップにより、コピーしたいプログラムリストなどを反転    AWordを開き、マウス右クリック→貼付け 10.評価方法と以下をアナウンス(ホチキスのことはアナウンスしていないが、必ずレポートの左上をとめて提出すること):     レポート提出日期限:2月10日(月)     提出場所:教務に用意された箱 11.授業全体を振返り、その内容とねらいを再確認した。また、UNIX上でCプログラミングを学ぶ利点を述べた。