プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第2章 数値の入力と変数 scanfと変数をやります.
第13回構造体.
データ構造とアルゴリズム 第10回 mallocとfree
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング演習(2組) 第12回
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
関数 関数とスタック.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
プログラミング論 関数ポインタ と 応用(qsort)
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
プログラミング論 ファイル入出力
関数の定義.
プログラミング応用 printfと変数.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング 4 記憶の割り付け.
プログラミング序論 2. n人のインディアン.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第11回 情報工学科 篠埜 功.
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
高度プログラミング演習 (02).
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
プログラミング論 ファイル入出力
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
vc-1. Visual Studio C++ の基本操作 (Visual Studio C++ の実用知識を学ぶシリーズ)
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
モジュール分割.
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
11: 動的メモリ確保 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プログラミング演習Ⅰ 課題2 10進数と2進数 2回目

目的 題材 課題は5つ プログラミング演習Ⅰ 課題2 10進数と2進数 関数の定義の仕方や使い方,標準関数を利用する仕組みを学ぶ プログラミング演習Ⅰ 課題2 10進数と2進数 目的 関数の定義の仕方や使い方,標準関数を利用する仕組みを学ぶ 題材 (1回目)整数⇔10進数の変換 (1回目)学籍番号のチェックディジット生成法 (2回目)整数⇔2進数の変換 (3回目)2進数での加算 課題は5つ

課題概要 課題(2-1) 課題(2-2) 課題(2-3) 課題(2-4) 課題(2-5) 2回目 1回目 課題(2-1) 学籍番号(整数)の10進6桁の各桁の数を取り出す 課題(2-2) 学籍番号(整数)の10進6桁の各桁の数からチェックディジット生成 課題(2-3) 0~255の整数の2進8桁の各桁の数を取り出す 課題(2-4) 8桁の2進数から,それが表す整数を求める 課題(2-5) 2つの8桁の2進数の和を計算する. 3回目

5つの課題のプログラムはそれぞれ保存しておく (例)課題(2-1)のソースコードを課題(2-3)のソースコードにコピーする単純な一手法 Microsoft Visual C++ 6.0を2つ開く 一方は,既に作成済みの課題(2-1)のワークスペースを開いておく もう一方で,課題(2-3)用の新規プロジェクトを作成する. 課題(2-1)のCのソースコード全体を選択し,[コピー] 課題(2-3)のCの空のソースファイルに[貼り付け]

課題(2-1) 学籍番号(整数)の入力に対し,1の位~ 100,000の位の数(10進数1桁目~6桁目の 数)を求め,出力せよ. キーボードから学籍番号を入力し,int型変数に格納 1の位~100,000の位について,各桁の数を求め,それぞれ,int型変数に格納 各桁の数を出力

課題(2-3) 0~255の整数の入力に対し, その2進数表現を求め出力せよ. キーボードから0~255の整数を入力し,int型変数に格納 各桁の数を出力

課題(2-3) ni = (n / 2i) % 2 n0 = (n / 20) % 2 = n % 2 n1 = (n / 21) % 2 プログラムの構造は,課題(2-1)と同じ 課題(2-1) 10進 6桁       ↓ ↓ 課題(2-3)  2進 8桁 ni = (n / 2i) % 2 n0 = (n / 20) % 2 = n % 2 n1 = (n / 21) % 2 ・・・・・

課題(2-4) 0 / 1による8桁の2進数入力に対して,それが表す整数値を出力せよ(10進数で).このとき8桁の2進数からそれが表す整数を求める関数を作成・利用すること. キーボードから8桁の2進数を入力し,8個のint型変数に格納 8個の変数で表されている8桁の2進数を整数に変換する関数を呼び出し,返ってきた値をint型変数に格納する. 整数を出力する(10進数で)

課題(2-4) プログラムの構造 関数bin_to_intとmain関数 配布資料を見て 作成のこと. 課題(2-4)のソースコード #include <stdio.h> 関数bin_to_intの定義 int main(void) {   ・・・・ } 配布資料を見て 作成のこと.

出席 課題(2-4)のプログラムを実行し,TAが出題した2進数を入力し,正しい10進表現が表示されれば出席とします.

'A'はAの文字コード "A"は1文字の文字列(2文字目が0の配列) 解説:char型 1文字を格納するための変数を宣言するときに指定する型 1バイト(8ビット)の符号付き整数型(通常, 2の補数表現)で-128~127の値をとる 文字を代入するときは,c = 'A'; のように. 'A'はAの文字コード "A"は1文字の文字列(2文字目が0の配列)

宣言と定義 宣言:対象の性質をコンパイラに指示 定義:宣言とメモリへの割り付けを指示 例: 「こういうものを使うのでよろしく」 「こういうものをメモリに配置せよ」 例: 変数宣言 グローバル変数定義 関数定義 関数プロトタイプ宣言

C言語における関数 C言語の関数:名前をつけた「ひとまとまりの手順」 (例)数学関数sqrt:sqrtと名付けた平方根を計算する手順 その名前を呼ぶと,「ひとまとまりの手順」を実行できる 「ひとまとまりの手順」は入力をもつことができる 「ひとまとまりの手順」は値を返すことができる (例)数学関数sqrt:sqrtと名付けた平方根を計算する手順 関数呼び出し「sqrtさん.値3をよろしく」 関数からの返答「1.7320508・・・だったよ」 y = sqrt(3);

関数定義(関数を作ること) 値を返すのであればその型を指定する 名前を付ける 入力があれば,その個数だけ,型を指定する 個々の入力値に名前をつける ひとまとまりの手順を書く 戻り値の型 関数名(パラメータ宣言) { 変数宣言等 文 } 定義しただけでは何も実行されない

関数呼び出し(関数を使うこと) 関数名(入力値,入力値,入力値,・・・) 例 「入力値,入力値,入力値,・・・」は,関数定義によってはない場合もある. 「入力値,入力値,入力値,・・・」の個数と型は関数定義と一致 値をもつ(関数定義によっては値をもたないこともある) 例 y = sqrt(3); // 3の平方根をyに代入 sqrt(y); // yの平方根を計算させるが,          その結果は捨てている

関数定義を記述する位置 関数プロトタイプ宣言 呼び出す場所より前 #include <stdio.h> int mul(int a,int b) { return a*b; } int main(void) printf("%d\n",mul(10,20)); return 0; 呼び出す場所より後 #include <stdio.h> int mul(int a,int b); int main(void) { printf("%d\n",mul(10,20)); return 0; } int mul(int a,int b) return a*b;

関数の定義の仕方 戻り値の型 関数名(パラメータ宣言) { 変数宣言等 文 } int add(int a,int b) int c; 戻り値の型 関数名(パラメータ宣言) { 変数宣言等 文 } int add(int a,int b) int c; c = a + b; return c; パラメータ宣言:2つのint型の値を呼び出し側から受け取る. それぞれの名前をa,bとして,関数定義のブロック内から参照する 処理結果を関数値としてセットし,関数を終える文

関数定義の仕方 戻り値のない関数の場合 void add(int a,int b) { g_result = a + b; } return文はなくてもよい 途中で終わりたいときは, return; g_resultはグローバル変数

関数の定義の仕方 パラメータ宣言がない場合 void add(void) { g_result = g_operand1 + g_operand2; } パラメータ宣言はvoid g_result,g_operand1, g_operand2 はグローバル変数 呼び出すときは add(); 「add;」ではない.

変数の種類 グローバル変数:関数の外で定義した変数 ローカル変数:ブロック内で宣言した変数 関数のパラメータ 定義・宣言以後はどこからでもアクセス可能 ローカル変数:ブロック内で宣言した変数 そのブロック内でのみアクセス可能 関数のパラメータ 呼び出し元が初期値を設定したローカル変数と考える グローバル変数とローカル変数に同じ変数名は使わないこと. グローバル変数→g_xxxx等の命名規則で

ローカル・グローバル変数の例 /* リスト10 */ int main(void) #include <stdio.h> { int g_base; int base_to_power(int n) { int p; p = 1; while (n > 0) { p = p * g_base; n = n - 1; } return p; int main(void) { int n; g_base = 2; n = 16; printf("%d to power %d = %d\n", g_base,n,base_to_power(n)); return 0; } ←グローバル変数

ローカル変数間の関係 無関係(異なる名前 でもよい) 無関係(異なる名前 でもよい) #include <stdio.h> char check_digit(int n5,int n4,int n3,int n2,int n1,int n0) { int m; char cd; ・・・・・・ return cd; } int main(void) int n,n0,n1,n2,n3,n4,n5; return 0; 無関係(異なる名前 でもよい) 無関係(異なる名前 でもよい)

C言語のメモリ領域 ←機械コード コード 静的変数 ←グローバル変数など データ ヒープ ←動的データ (関数malloc等で確保) スタック ←主に関数呼び出しで使用(ローカル変数等)

スタックフレームに ローカル変数    ↓ 関数を抜けると ローカル変数は なくなる スタックフレーム