gengo1-11
|
|
|
- ひろみ かつもと
- 7 years ago
- Views:
Transcription
1 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i<=n; i++) tmp *= i; else if( n==0 ) tmp = 1; else tmp = -1; return tmp; n > 0 の時 for 文を使って 1*2*... *(n-1)*n を計算 0! は 1 である 負の値に対してはエラーの意味で 1 を返す 再帰定義 n! = n*(n 1)! でもある n! は n に (n 1)! をかけたものに等しい これを再帰定義という C では関数の再帰定義が可能 int factorial(int n) if( n > 0 ) tmp = n*factorial(n-1); else if( n==0 ) tmp = 1; else tmp = -1; return tmp; 再帰呼び出し 自分自身の定義に自分自身をを呼び出している factorial(n) の計算に factorial(n-1) を用いる 実引数を 1 だけ減らして呼び出しているので 最後の処理を適切に行わないと無限ループ ( 実際は途中でメモリが不足してエラー ) 正しい再帰関数定義はプログラマの責任
2 int factorial(int); int n=3, fact; fact = factorial(n); printf("%d! is %d\n", n, fact); int factorial(int n) if( n > 0 ) tmp = n*factorial(n-1); else if( n==0 ) tmp = 1; else tmp = -1; return tmp; 実引数 n = 3 で関数 factorial を呼び出す 仮引数 n は 3 で初期化 3 > 0 なので 3*factorial(2) 2 > 0 なので factorial(2) = 2*factorial(1) 1 > 0 なので factorial(1) = 1*factorial(0) factorial(0) は 1 である 結局 1*2*3 = 6 が返却される 関数への値の受け渡し再考 関数へ値を受け渡すには 引数を用いる 関数を呼び出す側で指定する引数を 実引数 ( 値が確定 ) 関数定義部側の引数を 仮引数 ( 値は未定 ) という C 言語では 関数への値の受け渡しに際しては 仮引数は実引数で初期化される これを値渡しという 受け取った 2 つの整数値を関数内部で入れ替える関数 swap a b swap a と b の値を入れ替える void swap(int a, int b) tmp = a; a = b; b = tmp;
3 値渡しの例 void swap(int, int); int x=1, y=2; printf( %d %d\n, x, y); swap(x, y); printf( %d %d\n, x, y); void swap(int a, int b) tmp = a; a = b; b = tmp; 入力出力 実行結果は左のとおり 変数 x と y の値は入れ替わ っていない! 関数 swap には x の値 1 と y の値 2 が受け渡され 局所変数 a は 1 b は 2 で初期化される 関数 swap 内部では変数 a と b の値は入れ替わっているが main 文の変数 x, y は不変 関数 swap は実引数の値のコピーを受け取り コピーを入れ替えるだけ 値渡しでは 実引数の値は変化しない 値渡しのイメージ int x, y; 関数呼び出し側 scanf("%d %d", &x, &y); swap(x, y); printf("%d %d\n", x, y); 値 ( 実引数 ) 返却値なし void swap(int a, int b) 関数側 tmp = a; a = b; b = tmp; 仮引数 実引数 仮引数 a, b は実引数 x, y の値で初期化 関数 swap は 実引数 x, y の値 (x, y 自身ではない!) を仮引数 a, b を通じて受け取る 受け取った値を関数内でいじっても 関数呼び出し側の実引数は影響を受けない 値渡しでは データの流れは一方通行 値渡しでは 関数呼出側の実引数を 関数の側で操作することができない! 実引数を操作する為には 関数側でポインタを用いる必要がある
4 実引数の操作 関数による実引数 ( 関数呼び出し側で指定する値 ) の操作をするには 関数に 操作したい変数の格納場所を伝えれば良い 変数の格納場所 ( アドレス ) を指定する変数をポインタ pointerと言う 仮引数は 変数の 関数呼び出し側 関数側 アドレスを格納する ポインタ int x, y; scanf("%d %d", &x, &y); swap(&x, &y); printf("%d %d\n", x, y); 変数 x, y の アドレス 返却値なし void swap(int *a, int *b) tmp = *a; *a = *b; *b = tmp; 実引数は 操作したい変数のアドレス 指定されたアドレス a, b に格納 されている値を入れ替える 関数呼び出し後 x, y の値は入れ替わっている ポインタ これまでは変数がメモリ上のどこに配置されるかは処理系に任せてきた int a = 1; double x = 1.234; char c = 'A'; いずれの変数もメモリ上のどこかに配置される ( 処理系が自動的に処理 ) 変数が格納されている場所 ( アドレス ) を指定する変数をポインタ変数という ( 単にポインタともいう ) ポインタを用いて 変数の値を取り出したり操作することを参照という ポインタ変数の宣言は 参照する変数の型に引き続き 変数名の前に * を付ける int *ptr; 整数型の変数へのポインタ変数 ptr を宣言 ポインタ変数 ptr は int 値が格納されるアドレスを格納 宣言しただけでは どの int 型変数を指すかは未定
5 ポインタの使い方の例 int a, b; int *ptr; a = 1; ptr = &a; b = *ptr; printf( %d\n, b); 変数宣言により 変数 a, b はメモリ上のどこかに配置される ( 値は不確定 ) 整数型変数へのポインタ変数 ptr を宣言 ポインタ変数 ptr に変数 a のアドレスを代入 & は変数のアドレス ( 格納場所 ) を返すアドレス演算子 ポインタ変数 ptr が指すアドレスに格納されたデータを参照するには ポインタ変数の前に * をつける 参照した値を変数 b に代入 * は間接演算子 ポインタ変数が指す変数の内容を取り出す この例では b = a; とすれば済むことを ポインタ変数 ptr を用いてわざわざ ptr = &a; b = *ptr; としている 処理内容 int a, b; int *ptr; a = 1 が終了直後のメモリの状態 a = 1; 変数 a の値 変数 b の値 変数 ptr の値 ptr = &a; 1 不定... 不定 b = *ptr; printf( %d\n, b); &a ffff0010 &b ffff byte アドレス ( 処理系が適当に割振る ) ptr = &a の実行でポインタ変数 ptr の値は変数 a のアドレス ffff0010 となる b = *ptr の実行で変数 b の値は ポインタ変数 ptr が指すアドレス ffff0010 に格納されている値 int 1 になる ( 参照 )
6 ポインタの使い方の例 2 int a, b; int *ptr; ptr = &a; *ptr = 100; b = *ptr; 変数 a のアドレスをポインタ変数 ptr に代入 ptr には変数 a の格納場所が格納されている ptr が指す変数の内容に 100 を代入 a=100 とするのと同じ 変数 b に ptr が参照する値 100 を代入 printf( %d %d\n, a, b); 変数 a, b 共に 100 という値が格納される a=100; b=100; とするのと同じ ポインタは 変数のアドレスを格納する変数 処理内容 2 int a, b; int *ptr; ptr = &a が終了直後のメモリの状態 ptr = &a; 変数 a の値 変数 b の値 変数 ptr の値 *ptr = 100; 不定 不定... ffff0010 b = *ptr; printf("%d\n", a); printf("%d\n", b); &a ffff0010 &b ffff byte アドレス ( 処理系が適当に割振る ) *ptr = 100 の実行でポインタ変数 ptr が指すアドレス ffff0010 に int 100 が格納される ( 参照 ) ( 変数 a に 100 を代入するのと同じ ) b = *ptr の実行で変数 b の値は ポインタ変数 ptr が指すアドレス ffff0010 に格納されている値 int 100 になる ( 参照 )
7 なぜポインタを使うのか? 1) データの柔軟な取り扱いが容易になる 2) 値渡しでは不可能な 実引数の操作が可能になる int a=1, b=2; printf( a = %d, b = %d\n, a, b); swap(&a, &b); printf( a = %d, b = %d\n, a, b); 関数 swap を呼び出すと 実引数 a, b の値が入れ替わっているようにしたい! ポインタを用いた参照渡し call by reference をすると実引数の操作が可能になる 参照渡し void swap(int*, int*); int x=1, y=2; printf( %d %d\n, x, y); 関数 swap のプロトタイプ宣言 引数は整数型へのポインタ 2 つ swap(&x, &y); printf( %d %d\n, x, y); 関数 swap に変数 x, y のアドレスを実引数として受け 渡す これを参照渡しという 関数呼び出し後は x, y の値は入れ替わっている void swap(int *a, int *b) tmp = *a; *a = *b; *b = tmp; 仮引数 a, b を整数値へのポインタとして宣言アドレス a に格納されている値を tmp に代入 アドレス a に アドレス b に格納されている値を代入 アドレス b に tmp の値を代入
8 関数呼び出し側 参照渡しのイメージ 関数側 仮引数は 変数の アドレスを格納する ポインタ int x, y; scanf("%d %d", &x, &y); swap(&x, &y); printf("%d %d\n", x, y); 変数 x, y の アドレス 返却値なし void swap(int *a, int *b) tmp = *a; *a = *b; *b = tmp; 操作したい変数のアドレスを実引数として関数呼び出し 関数 swap は 変数の格納場所 ( アドレス ) を引数として受け取り そのアドレスに格納されている値を操作する 関数呼び出し後 x, y の値は入れ替わっている 値渡しと参照渡し 値渡し 値のコピーを受け渡す あとは関数に任せた 関数呼び出し側 関数側 実引数の値をコピーして 関数に引き渡す 関数側で実引数の値を操作することはできない 関数呼び出しの結果を引数を介して得ることはできない 参照渡し 関数呼び出し側 値の格納場所 ( アドレス ) を受け渡す あとは関数に任せた 関数側 実引数のアドレスをポインタとして 関数に引き渡す 関数側で実引数の値を操作することが可能 関数呼び出しの結果を引数を介して得ることが可能
9 関数への配列の受け渡し 配列名は その配列が格納されている場所 ( アドレス ) に等しい int a[5]; 配列 a a = &a[0] 4 byte 配列を関数に受け渡すには 配列名 および要素数 の 2 つの情報が必要 1 次元配列を受け取り 各要素の和を求める関数の例 double fn(double x[], int size) int i; double sum=0; for(i=0; i<size; i++) sum += x[i]; return sum; 関数頭部の仮引数宣言は 配列である事を示すために [] を付ける 配列添え字の範囲はプログラマの責任 この例では 引数 size のチェックをしていない double fn(double[], int); double vector[]=0.0, 1.1, 3.2, sum; int size = sizeof(vector)/sizeof(double); sum = fn(vector, size); printf("%f\n", sum); double fn(double x[], int size) int i; double sum=0; for(i=0; i<size; i++) sum += x[i]; return sum; 配列要素の合計を返却する関数
10 参照渡しの例 2 つの 1 次元配列 ( ベクトル ) の和を計算し その結果を実引き数を介して関数呼び出し側に返す関数を考える 配列名は その配列へのポインタに等しい 参照渡しにより 実引数 ( 配列の内容 ) を操作することが可能 double x[] = 1,2,3,4,5, y[] = 5,4,3,2,1; int i, size = sizeof(x)/sizeof(double); for(i=0; i<size; i++) printf("%f ", x[i]); printf("\n"); vector_add(x, y, size); for(i=0; i<size; i++) printf("%f ", x[i]); printf("\n"); 2 つのベクトルの和を計算する 関数 vector_add を呼び出す 関数の返却値として 1 次元配列を返すことはできない 1 次元配列の先頭要素へのポインタを返却する関数は定義可能 ( 本講義ではやらない ) ここでは 参照渡しにより実引数を操作することを考える void vector_add(double x[], double y[], int size) int i; for(i=0; i<size; i++) x[i] += y[i]; 関数 vector_add は 2 つの配列の先頭要素のアドレスと 配列サイズを受け取り 配列要素の内容を操作する
11 関数呼び出し側 関数 vector_add に 配列 x と y のアドレスを引き渡す 配列名は 配列の第 0 要素へのポインタである x y 関数側 アドレス x から格納されている配列要素それぞれにアドレス y から始まる配列要素を足す 関数呼び出し後 配列 x には 配列 x と y の和が格納されている フィボナッチ数列 x n は次で定義される 問題 以下のフィボナッチ数を全て表示するプログラムを作れ n 番目のフィボナッチ数を返す関数 int fibonacci(int n) を定義して用いよ int fibonacci(int); int i=1, f; while( (f=fibobacci(i)) < 1000 ) printf("%d\n", f); i++;
12 問題 2 n 個の中から r 個を取り出す組み合わせの数 n C r を計算する関数を作れ 組合わせ数 n C r を階乗を用いて定義すると 階乗を計算する際 桁あふれが起こりうる int combinatorial(int, int) を再帰定義してプログラムを作れ int combinatorial(int, int); int n, r, c; main 文は完成している 関数 combinatorial を定義せよ scanf( %d %d, &n, &r); c = combinatorial(n, r); printf("%d\n", c); 問題 3 10 名分の成績 (100 点満点の整数値 ) を配列に収め この配列を受け取って平均点を計算するユーザ関数 heikin を定義せよ main 文の骨格はすでに完成している double heikin(int[10], int); int score[10]; double average; /* 成績の入力部分 */ average = heikin(score, 10); printf( 平均点は %f \n, average);
13 問題 行列の行列式を計算する関数 det を作れ double det(double[2][2]); プロトタイプ宣言 double a[2][2]=1.0,2.0,3.0,4.0, x; x = det(a); 引数は配列名のみ printf( 行列式は %f\n, x); double det(double x[2][2]) double tmp;... 配列名 x は仮引数 問題 5 2 つの行列の積を計算する関数を作れ main 文は既に完成している double A[4][4], B[4][4]; 行列は 4 4 行列とする display_matrix(a, 4); display_matrix(b, 4); multiply_matrix(a, B, 4); display_matrix(a, 4); 関数呼びだし後 実引数 A は行列の積 AB で 上書きされる 関数 display_matrix は 2 次元配列と行数を受け取りその内容を表示する関数 void display_matrix(double x[4][4], int dim); 関数 multiply_matrix は 2 次元配列を 2 つ受け取り 積を第一引数として返す関数 void multiply_matrix(double x[4][4], double y[4][4], int dim);
14 問題 6 次のプログラムを実行せよ 変換指定 %x は整数値の 16 進数表記 アドレス表記に用いる int a,b; int *ptr, a=1; b=7;! ptr = &a; printf( a = %d, address of a = %x\n, a, ptr); printf( a = %d, address of a = %x\n, *ptr, ptr); ptr = &b; printf( b = %d, address of b = %x\n, b, ptr); printf( b = %d, address of b = %x\n, *prt, ptr); 変数 a と b が格納されているアドレスはどうなっているか? それぞれの変数を指すポインタを参照せよ
Microsoft PowerPoint - 09.pptx
情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源
PowerPoint プレゼンテーション
講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる
/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){
ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]
if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
Microsoft PowerPoint ppt
基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte
main
14 1. 12 5 main 1.23 3 1.230000 3 1.860867 1 2. 1988 1925 1911 1867 void JPcalendar(int x) 1987 1 64 1 1 1 while(1) Ctrl C void JPcalendar(int x){ if (x > 1988) printf(" %d %d \n", x, x-1988); else if(x
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>
C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う
Microsoft Word - Cプログラミング演習(12)
第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char
プログラミング実習I
プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.
(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド
メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが
Microsoft Word - Cプログラミング演習(11)
第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
Microsoft PowerPoint pptx[読み取り専用]
情報処理 Ⅱ 第 8 回 2009 年 12 月 7 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと 問題 main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 多項式関数 f(x)
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char
PowerPoint プレゼンテーション
プログラミング初級 第 7 回 2017 年 5 月 29 日 配列 ( 復習 )~ 文字列 1 配列とは 2 配列 : 複数の変数をグループとしてまとめて扱うもの 配列 変数 int data[10]; 整数型の配列 同種のデータ型を連続して確保したものを配列とよぶ = 整数がそれぞれにひとつずつ入る箱を 10 個用意したようなもの int data; 整数型の変数 = 整数がひとつ入る dataという名前の箱を用意したようなもの
プログラミング及び演習 第1回 講義概容・実行制御
プログラミング及び演習 第 7 回ポインタ ( 教科書第 10 章 ) (2014/05/23) 講義担当情報連携統轄本部情報戦略室大学院情報科学研究科メディア科学専攻教授森健策 本日の講義 演習の内容 ポインタ ポインタ第 10 章 講義 演習ホームページ http://www.newves.org/~mori/14programming ところで, さあ いよいよポインタです コツさえわかれば難しくないので安心してください
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
Microsoft PowerPoint - 5Chap15.ppt
第 15 章文字列処理 今日のポイント 15.1 文字列処理の基本 strcpy strcat strlen strchr などの使い方をマスターする strcpy はなんて読むの? 普通はストリングコピー C のキーワードの読み方に悩んだら下記サイトを参考 ( 前回紹介とは別サイト ) http://www.okakogi.go.jp/people/miwa/program/c_lang/c_furoku.html
/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v
1 http://www7.bpe.es.osaka-u.ac.jp/~kota/classes/jse.html [email protected] /* do-while */ #include #include int main(void) double val1, val2, arith_mean, geo_mean; printf( \n );
C言語講座 後半
これまではあまり気にしてきませんでしたが それぞれ変数の型が持つ特性を気にかけていないと困る場合があります 例えば double 型と int 型を混ぜて使う場合を考えてみましょう int a; double b; a = 5; b = a/2.0; printf("b : %lf",b); int 型の a に整数 5 を代入し double 型の b には それを 2 で割った 2.5 を代入したいとします
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )
情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 入 p.109 2 関数 (Function)
初歩のC言語ターミナル_2014_May.pages
C Mac OS X ( Vi Mi) Xcode CD >cd C:\Users\\Desktop gcc first.c C:\Users\\Desktop>gcc -o first first.c gcc first.c C:\Users\\Desktop>first Windows OS VisualStudio VisualStudio VS2012 CD C:\ >cd C:\Users\
第1回 プログラミング演習3 センサーアプリケーション
C プログラミング - ポインタなんて恐くない! - 藤田悟 [email protected] 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir
Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx
情報ネットワーク導入ユニット Ⅰ C 言語 演算と型 演算 代入 演算と型 +,-,*,/,% = C 言語では 代入 の意味 vx = a + b; //a+b の結果を vx に代入 型 : int 型 ( 整数 ) double 型 ( 実数 ) 演算での型変換 ( 整数, 実数の混在 ) キャスト演算子 型を一時的に変更 書式指定 :printf("%6d n", a); 加減, 剰余演算
02: 変数と標準入出力
C プログラミング入門 基幹 7 ( 水 5) 13: 構造体 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-07-06 1 例題 : 多角形の面積 n = 5 (5 角形 ) の例 n 1 n 1 1 p 1 T 0 S = i=0 p 0 T i = i=0 2
Cプログラミング1(再) 第2回
C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項
問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =
問 1 配列の宣言整数型配列 data1 にデータが初期設定されている この配列 data1 のデータを下図のように 整数型配列 data2 に代入しなさい また data2 の内容を printf( "data2[0] = %d\n", data2[0] ); printf( "data2[5] = %d\n", data2[5] ); を用いて出力しなさい 実行結果 data2[0] = 76
PowerPoint Presentation
工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない
Microsoft Word - no15.docx
7. ファイルいままでは プログラムを実行したとき その結果を画面で確認していました 簡単なものならそれでもいいのですか 複雑な結果は画面で見るだけでなく ファイルに保存できればよいでしょう ここでは このファイルについて説明します 使う関数のプロトタイプは次のとおりです FILE *fopen(const char *filename, const char *mode); ファイルを読み書きできるようにする
第9回 配列(array)型の変数
第 12 回 配列型の変数 情報処理演習 ( テキスト : 第 4 章, 第 8 章 ) 今日の内容 1. 配列の必要性 2. 配列の宣言 3. 配列変数のイメージ 4. 配列変数を使用した例 5. 範囲を超えた添字を使うと? 6. 多次元配列変数 7. 多次元配列変数を使用した例 8. データのソーティング 9. 今日の練習問題 多数のデータ処理 1. 配列の必要性 ( テキスト 31 ページ )
