プログラミング実習(C言語) ハードウェアとソフトウェアとの関係 の理解のためのプログラミング体験 講師:坂口利裕 横浜市立大学・国際総合科学研究院 第2日の目標 第1日の復習 プログラミング作業全体の流れの確認 練習 sample3.c の拡張問題の解答例 繰り返しの表現 アルゴリズムによる表現 計算問題の作成 反復処理と配列表現 条件判断の使い方 アルゴリズム表現の重要性の認識 既存アルゴリズムによる例題 実用プログラム作りへのステップ データファイルの扱い方 文字列データの扱い方 プログラムの分業化 2008.08.07~08 (おおむねp.59まで-最低目標) プログラミング実習(C言語) 2 テキストp.39 プログラムの設計から実行までの流れ (設計段階) コーディング 設計書 ・計算の手順 プログラミング言語に よる表現 ・必要な答と 必要なデータ (ソースプログラム) 2008.08.07~08 プログラミング実習(C言語) 3 テキストp.39 プログラムの設計から実行までの流れ (ソース・プログラムの作成) プログラム入力・編集 プログラミング言語に よる表現 編集用ソフトウェア (エディタ) (ソースプログラム) データ・ファイルとして保管 2008.08.07~08 (電子化された) ソースプログラム プログラミング実習(C言語) 4 テキストp.39 プログラムの設計から実行までの流れ (ソース・プログラムの翻訳) コンパイルとリンク 翻訳用ソフトウェア (コンパイラ) (電子化された) ソースプログラム データ・ファイルとして保管 2008.08.07~08 実行可能 プログラム プログラミング実習(C言語) 5 テキストp.39 プログラムの設計から実行までの流れ (実行可能プログラムの実行) プログラムの実行 実行可能 プログラム CPU (マイクロプロセッサ) 2008.08.07~08 オペレーティング システム メインメモリ プログラミング実習(C言語) 周辺装置 6 テキストp.35~37 実習(2)-その4 プログラム sample3.c の実行と内容の観察 (再掲) 条件式の使い方・組合わせ方の確認 フローチャートの見方 改変 角度も考慮した種別判定へ 表4.1(p.36)をうまく埋める フローチャートを考えましょう 1度の判断で2つに区分できるのだから,7種の判定を行うに はいくつの判断(if構文)が必要か? 2008.08.07~08 プログラミング実習(C言語) 7 補足資料p.11,14~15 実習(3) 既存プロジェクトの呼出し手順 コマンドラインによるプログラミング手順 一度作成したプロジェクトを「開く」 プロジェクトに関連付けられたファイルはそのまま呼び出される コマンド(文字列入力による操作指示)によるプログラミング 古典的な(GUIのない時代の)環境 単独ファイルで完結している小規模プログラムの開発には十分 いずれかの手順にてsample3.cを完成 フローチャートの解答を確認 プログラムの文として表現 出来上がった人から一休み 2008.08.07~08 プログラミング実習(C言語) 8 (休憩) 休憩後に午前分の出欠をとります 2008.08.07~08 プログラミング実習(C言語) 9 テキストp.40 実習(4)-その1 練習 sample4.c 判断処理を利用したゲーム 実行した後,ifの使い方を確認 2008.08.07~08 プログラミング実習(C言語) 10 テキストp.40~41 実習(4)-その2 1日目の総復習 練習 sample5.c の完成 余力のある方は,改変問題にチャレンジ 結果の判定を追加 BMI指数も追加 標準体重の計算 2008.08.07~08 プログラミング実習(C言語) 11 テキストp.43~45,101~104 反復処理の表現(for構文) 構文の形式 for( 初期化 ; 継続条件 ; 再初期化 ) 文 ; またはブロック 条件式の成立している間,文を繰り返して実行 通常は,特定の変数を用いて,反復回数を表現 する for( n=1 ; n<=10 ; n=n+1 ) printf(“n=%d\n”, n) ; 変数nを,1から始めて1ずつ増加させながら10以下の間(10を 超えるまで) printf文を反復 2008.08.07~08 プログラミング実習(C言語) 12 テキストp.43~47 実習(5)-その1 補足資料p.12~13 ソースプログラムの新規作成手順 既存プログラムは[ソリューションを閉じる]で終了 [ファイル]メニューから[新規作成]でプロジェクトを作 成 [既存項目の追加]の代わりに[新規項目の追加]を選 択 ファイルの種類を[C++ソースファイル]に 保存場所([位置])を確認し,必要に応じて変更 [ファイル名]の指定にも注意(.cは省く) 2008.08.07~08 プログラミング実習(C言語) 13 テキストp.43~47 実習(5)-その2 C言語プログラム全体の構成の確認 補足資料p.12~13 プログラム全体の新規作成の体験 単純な反復処理の確認 構文 for() の基本形の理解と確認 改変問題を行うことで理解を深める 2008.08.07~08 プログラミング実習(C言語) 14 (休憩・昼食) ここまでくれば占めたモノ! 栄養を十分補給して午後に備えましょう 2008.08.07~08 プログラミング実習(C言語) 15 テキストp.49~50,105 データの構造化-配列型 数列,ベクトル,行列を扱うためのデータ表現 これまでの変数→単純変数と区別 3.1 4.5 変数x 3.1 4.5 3.1 単純変数の場合には,同じ変数には,同時 に二つ以上のデータを記憶できない! 2008.08.07~08 プログラミング実習(C言語) 16 テキストp.49~50,105 配列変数の構造 同じ名前の変数を区分け →それぞれに別のデータを記憶 float x[5] ; x という名前の5つに区分けされた変数 x[0] 2.5 x[1] 4.2 x[2] 3.5 x[3] 6.9 x[4] 2.5 それぞ れの区 画は単 純変数 と同じ 配列変数x (全体で) 2008.08.07~08 プログラミング実習(C言語) 17 テキストp.49~50,105 配列変数の表記 定義 型名(それぞれの区画の型) 名前[全体の区画数] ; 例) float x[5] ; データの記憶・参照-区画ごとに行なう 名前[区画の番号(添え字:subscript)] 添え字は0からの順序番号 添え字として,式を用いることが可能 例) x[0] = 3.2 ; x[1] = x[0]+3 ; x[n] = x[n-1]+x[n-2] ; 2008.08.07~08 プログラミング実習(C言語) 18 テキストp.50,75~76 反復処理における配列の利用 5つのデータを(それぞれ)読み取って記憶する 複数の単純変数を用いる場合 float a,b,c,d,e ; scanf(“%g”,&a) ; scanf(“%g”,&b) ; scanf(“%g”,&c) ; scanf(“%g”,&d) ; scanf(“%g”,&e) ; 配列変数を用いる場合 float x[5] ; int m ; for( m=0 ; m<5 ; m=m+1 ) mが変化することを 利用 scanf(“%g”,&x[m]) ; 2008.08.07~08 プログラミング実習(C言語) 19 テキストp.50 実習(6)-その1 配列表現の確認 練習 sample6.c と sample7.c の比較 それぞれ実行してみて,「結果は同じ」ことを 確認 2008.08.07~08 プログラミング実習(C言語) 20 テキストp.50 実習(6)-その2 練習 sample7.c を改良し,配列の特徴を 生かす 規則性をうまくとらえる(取り出す)ことがポイ ント データ数を増やすには? 2008.08.07~08 プログラミング実習(C言語) 21 テキストp.50 実習(6)-その3 最低限 sample7 の改良を終えたら休憩 練習 sample8 を実行 (余裕のある方) 「表引き」処理への配列表現の応用 限定された範囲の検索処理の基本 2008.08.07~08 プログラミング実習(C言語) 22 テキストp.51~56 複雑な問題の考え方 (人間にとっては簡単でも)コンピュータにとって は,理解できる言葉(プログラミング言語)でない と伝わらない 条件判断 if 反復処理 for (やwhile) 計算処理 変数 = 式(代入) データの入力 scanf メッセージやデータの表示 printf の組み合わせで表現し直すのが非常にやっかい 2008.08.07~08 プログラミング実習(C言語) 23 テキストp.51~56 アルゴリズム 計算手順(算法) 図式による表現 特定のプログラミング言語に依らない 判断基準や処理内容が明確である (答えがない時も含めて)必ず答を導ける 自然言語や数式による記述が中心 フローチャート 代表的なアルゴリズムとそのプログラム表現を学習 ユークリッドの互除法-最大公約数を求める 単純選択法-データを順序に応じて並べかえる 2008.08.07~08 プログラミング実習(C言語) 24 テキストp.51~56 実習(7)-その1 アルゴリズムを考える実習 ユークリッドの互除法 アルゴリズム表現とフローチャートの比較 プログラム例の入力と実行 2008.08.07~08 プログラミング実習(C言語) 25 テキストp.51~56 実習(7)-その2 アルゴリズムを考える実習 単純選択法 練習 sample9.c の実行 並べ替え機能を追加 フローチャートからプログラムへの読み替え 余力のある方は, 演習問題-金種計算に挑戦! 2008.08.07~08 プログラミング実習(C言語) 26 テキストp.53~56 単純選択法の動き x[0] x[1] x[2] x[3] x[4] 3 2 5 6 8 アルゴリズムAによる 探索範囲(i=1~n) アルゴリズムBによる 探索範囲(j=i+1~n) i imin j より小さい値の場所に更新 2008.08.07~08 本来の最小値の場所iと,実際の最小値の場所 iminとが異なった場合はデータを入れ替え プログラミング実習(C言語) 27 テキストp.57~62,109~111 実用プログラムの作成に向けて ファイル入出力 文字情報の扱い 大規模なプログラム→部品化(分業化)→ 独立した関数に分解して開発 2008.08.07~08 プログラミング実習(C言語) 28 テキストp.57~59,109~110 ファイル入出力 キーボードからのデータ入力 計算結果の画面表示 手軽にできる(特に大げさな準備は不要) 大量データに対する処理・同一データに対して 別のプログラムで処理→入力ミスの恐れ 情報量が少ない時は手軽に利用できる 直接ワープロなどに利用できない ファイルを直接利用する手段 2008.08.07~08 プログラミング実習(C言語) 29 テキストp.57~59,109~110 C言語におけるファイルの扱い方 “ファイル”を表す特別な型の変数:FILE型 FILE *f ; 実際のファイルを指定して“開く” f = fopen(ファイル名,ファイルモード) ; f = fopen(“ex13.txt”, “r”) ; ファイル入出力関数 fscanf, fprintfを使う fscanf(f, …) ; fprintf(f, …) ; “閉じる” fclose(f) ; 2008.08.07~08 プログラミング実習(C言語) 30 テキストp.106~107 文字情報の扱い C言語における文字型 char (<character)の配列 (最大)10文字分の文字情報→10個の要素を持つ char型配列変数 ただし,実際には余分に1文字分必要。 使い方 読み取り:scanf(“%s”,name); /*配列名のみ*/ 表示:printf(“%s”,name) ; 四則演算:不可能 許される演算:比較・複写(代入)・連結→標準ライブラ リ関数使用 2008.08.07~08 プログラミング実習(C言語) 31 テキストp.61,82~83 分業化のための表現 関数を自前で定義 一般的書き方 関数の型 関数名 (【引数の型 引数の名前【,…】 】 ) { 関数の処理 return 関数の処理結 果; } 2008.08.07~08 定義側 float sum( int n, float x[ ] ) { int k ; float s ; s=0 ; for( k=0 ; k<n ; k+=1 ) s += x[k] ; return s ; } 参照側 xmean = sum(n,x)/n ; プログラミング実習(C言語) 32 (総合実習) 消化不良の例題 自発的に復習してみましょう 質問ももちろんOK 余力のある方 演習問題(p.87~88)にも挑戦 2008.08.07~08 プログラミング実習(C言語) 33
© Copyright 2024 ExpyDoc