Microsoft PowerPoint - 計算機言語 第7回.ppt

Similar documents
プログラミング実習I

Microsoft PowerPoint - 09.pptx

gengo1-11

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

講習No.12

Microsoft PowerPoint ppt

情報処理Ⅰ演習

Microsoft Word - no11.docx

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

memo

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

Prog1_6th

Microsoft PowerPoint - 13.ppt [互換モード]

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft Word - Training10_プリプロセッサ.docx

PowerPoint プレゼンテーション

Microsoft PowerPoint - 12.ppt [互換モード]

PowerPoint プレゼンテーション

関数の中で宣言された変数の有効範囲はその関数の中だけです さっきの rectangle _s で宣言されている変数 s は他の関数では使用できません ( 別の関数で同じ名前の変数を宣言することはできますが 全く別の変数として扱われます このように ある関数の中で宣言されている変数のことをその関数の

memo

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

Microsoft PowerPoint pptx[読み取り専用]

gengo1-10

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

Microsoft PowerPoint - 10.ppt [互換モード]

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

CプログラミングI

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Microsoft Word - Cプログラミング演習(12)

02: 変数と標準入出力

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - 11.pptx

PowerPoint Presentation

memo

Microsoft Word - no202.docx

Microsoft Word - 3new.doc

02: 変数と標準入出力

Microsoft PowerPoint - prog06.ppt

Microsoft PowerPoint - kougi7.ppt

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

Prog1_10th

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft Word - 03

Microsoft Word - no12.doc

02: 変数と標準入出力

C言語講座

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

Microsoft PowerPoint - 11.ppt [互換モード]

数値計算

Microsoft PowerPoint - lec10.ppt

Microsoft Word - no15.docx

PowerPoint Presentation

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft PowerPoint - prog07.ppt

Microsoft PowerPoint - 12.ppt [互換モード]

ex04_2012.ppt

PowerPoint プレゼンテーション

PowerPoint Presentation

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

Microsoft PowerPoint L07-Imperative Programming Languages-4-students ( )

講習No.1

kiso2-03.key

Microsoft PowerPoint - prog03.ppt

プログラミング及び演習 第1回 講義概容・実行制御

第2回講義:まとめ

PowerPoint Presentation

PowerPoint プレゼンテーション

Microsoft PowerPoint - 11th.ppt [互換モード]

PowerPoint プレゼンテーション

< F2D837C E95CF CF68A4A94C5816A2E6A>

Microsoft PowerPoint - 4.ppt [互換モード]

02: 変数と標準入出力

第3回 配列とリスト

ポインタ変数

02: 変数と標準入出力

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

Microsoft PowerPoint pptx

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Prog1_15th

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

Microsoft Word - no13.docx

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

デジタル表現論・第6回

演算増幅器

PowerPoint プレゼンテーション

プログラミング演習3 - Cプログラミング -

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

プログラミング基礎

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

#include<math.h> 数学関係の関数群で sin() cos() tan() などの三角関数や累乗の pow() 平方根を求める sqrt() 対数 log() などがあります #include<string.h> 文字列を扱う関数群 コイツもまた後日に 4. 自作関数 実は 関数は自分

Microsoft PowerPoint - 第3回目.ppt [互換モード]

プログラミング入門1

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Cプログラミング1(再) 第2回

基礎プログラミング2015

Transcription:

計算機言語第 7 回 長宗高樹

目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X)

関数の例 関数の型 #include <stdio.h> int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y); int tasu(int a, int b) int c; c = a + b; return c; 仮引数 関数のプロトタイプ宣言メイン文既に定義されている関数関数の本体

関数の宣言の仕方 記憶クラスデータ型関数名 ( 仮引数の型と変数宣言の並び関数の型 ) 内部変数の宣言 ; 実行文 ; return 文 ;( プロトタイプの宣言で返り値がvoidの場合は省略 ) 例 1) 例 2) 関数の型 仮引数 int tasu(int a, int b) int c; c = a + b; return c; 返り値 void disp(int a) printf( a = %d,a);

関数のルール 1. 関数にはデータ型を宣言しなければならない. 例外として int 型の場合は, 省略可能. 2. 実引数と仮引数の型と数, 順序は一致していなければならない. 3. 引数がなくても, 引数をくくる括弧 () は必要である. 4. 関数の結果として値を返すには,return 文を用いる. 5. 関数の型は, 呼び出し側でも宣言しなければならない. これをプロトタイプ宣言と呼ぶ. 6. 分割コンパイルしたほかのソースファイル上の関数を使う場合は, 呼び出し側で外部の関数であることを宣言 (extern) しなければならない. #include <stdio.h> int tasu(int a, int b) int c; c = a + b; return c; main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); printf( %d + %d = %d, x1, x2, y);

コンパイラ 高水準言語コンパイラ機械語 (C 言語など ) プログラムが大きくなってくると, 一つのファイルだけで作成すると, 全体が見難くなり, バグが発生しやすく, 修正も困難. また, 同じ関数を使用するときに, 毎回, 同じ定義を宣言する事も賢い選択とは言えない. そこで, いくつかの機能毎にソースファイルを分割して作成し, メインのプログラムは他のファイルで定義されている関数を使用する. 呼び出し側メインのソースファイル数値演算関数ファイル表示用関数ファイル入力用関数ファイル コンパイラ 機械語

分割コンパイルの一例

演習 1 二つの引数を比較し, 大きい方を出力する関数 max を定義し, 標準入力から二つの整数値を入力し, 大きい方の値を出力するプログラムを作成せよ. また, 入力に 3 と 8 を代入してその出力を確認せよ.

演習 1( 回答例 ) 標準入力から整数値を入力し 0 が入力されるまでの数字を加算するプログラムを作成し 出力を確認せよ ( 横道 )max 関数は,stdlib.h ファイル内にて定義されている.

関数の再起呼び出し 関数は自分自身を呼び出すことができ, このことを再起呼び出しという. 再起関数内で注意する事は次の二点 1 関数内で使う変数の記憶クラスは自動変数にする. 自動変数 (auto) 静的変数 (static) 2 無限ループにならないように終了条件を必ずいれる.

再起関数の例 #include <stdio.h> int SLeng(char *s); main(void) char str[50]; int SLeng(char *); while(1) scanf( %s,str); printf( [%s] --> %d n n, str, SLeng(str)); int SLeng(char *s) if(!*s) return 0; return(sleng(++s)+1); SLen abc SLen SLen abc SLen SLen SLen abc SLen SLen SLen SLen SLen abc SLen SLen 0 SLen SLen 1 0 SLen 1 1 0 1 1 1 0

演習 2 引数に n が入力された時に,1 から始まる奇数の数列の n 番目の値を出力する再起関数を作成し, 標準入力から n を代入し,n 番目の奇数を表示するプログラムを作成せよ. また,6 を代入し, その出力を確認せよ. 奇数の数列 1,3,5,7,9,11,13,15

置換マクロ プリプロセッサの #define は, 見かけ上は関数の働きをする. この関数のような働きをするマクロを引数付置換マクロという. 高水準言語コンパイラ機械語 (C 言語など ) 高水準言語プリプロセッサ展開された高水準言語コンパイラ機械語 1 ファイルの読み込み (#include) 2 マクロの展開 (#define) 3 定数の数値への置き換え ( FILE, LINE ) 4 コンパイル条件によるソースコードの部分的選択 (-lm)

置換マクロの例 普通の置換マクロ引数付置換マクロ引数 #include <stdio.h> #include <stdring.h> #define MAX_LEN 10 #define MESSAGE hello, world!! main(void) int ilen; char str[20]; ilen = MAX_LEN; strcpy(str,message); printf( ilen = %d n,ilen); printf( %s n,str); #include <stdio.h> #define PrintMac(x) printf( %s n, x) void PrintfFnc(char *); main(void) PrintMac( C Program!! in #define ); PrintFnc( C Program!! in function ); void PrintFnc(char *str) printf( %s m,str);

関数間のデータの受け渡し 関数を実際に記述する際には, どのようにしてデータを渡すか? が重要になってくる. 1 値による呼び出し (Call by value) 一般的 2 アドレスによる呼び出し 例外外部変数による受け渡し 複数個の値を変化させる場合特に配列のデータを渡す場合上記二例で都合が悪い場合そのような場合はほとんどない.

アドレスによる呼び出し (1/2) 値渡し #include <stdio.h> int hiku(int x)return x-5; main(void) int a, b; a = 21; b = hiku(a); printf( ans = %d n, b); ポインタ渡し #include <stdio.h> void hiku(int *x)return *x = *x-5; main(void) int a, b; a = 21; hiku(&a); printf( ans = %d n, a); main 文 21 16 21 16 21? main 文 3 丁目 4 丁目 3 丁目 4 丁目 3 丁目 void 関数 F 関数 F 見えない!! 見える!!

アドレスによる呼び出し (2/2) #include <stdio.h> void hiku(int *x) return *x = *x-5; ポインタアドレスの参照ポインタによる代入 int n; int *p; p = &n; *p = 10; 数値が入るアドレスが入るアドレスの代入 main(void) int a, b; a = 21; hiku(&a); printf( ans = %d n, a); メモリ??? アドレス 1 丁目 2 丁目 3 丁目 メモリ?? n? 4 丁目? p(3 丁目 ) 5 丁目?? 6 丁目?

演習 3 二つの整数のアドレスが与えられた時に, アドレス内の二つの値を入れ替える関数 swap を作成し, 標準入力から与えられた二つの整数値を表示し, 関数 swap によって入れ替えた値を表示するプログラムを作成せよ. また, 入力に 3 と 5 を入力して, その出力を確認せよ.

外部変数による受け渡し #include <stdio.h> int sio1, sio2; void add(); main(void) int a=15, b=25; sio1 = a; sio2 = b; add(); printf( add (%d,%d) --> %d n, a, b, sio1); void add() sio1 = sio1+sio2;

配列の受け渡し 関数には配列を渡す事ができる. 配列を渡す時には, アドレスによる呼び出しを用いてデータを渡します. int dt[5]; アドレスメモリ 1 丁目 dt[0] 2 丁目 dt[1] 3 丁目 dt[2] 4 丁目 dt[3] 5 丁目 dt[4] 6 丁目? アドレス &dt[0] &dt[1] &dt[2] &dt[3] &dt[4] &dt[5] dt? どうやって, 関数は配列の終わりを知るか? #include <stdio.h> void wa(int dt[], int len, int *ans); main(void) int dt[3]; int ans; dt[0] = 2007, dt[1] = 11, dt[2]=14; wa(dt, 3, &ans); printf( ans = %d n,ans); void wa(int dt[], int len, int *ans) *ans = 0; for(int i=0;i<len;i++) *ans += dt[i];

演習 4 受け渡された 10 個の要素の配列の平均値を求める関数を作成し, 標準入力から 10 個の整数 ( 途中で止めれるようにしても良い ) を入力して, その関数によって平均値 ( 少数 ) を求めて出力するプログラムを作成せよ. また, 入力に 1 から 10 まで順番に入力して, その出力を確認せよ.

まとめ 関数を作成するときには, 引数の型と数を一致させなければならない. 関数はプロトタイプ宣言をしなくてはならない. 関数のような働きをするものに引数付置換マクロがある. 関数には, 値渡しと, ポインタ渡しと外部変数による渡しがある.