I117 プログラミング演習II

Size: px
Start display at page:

Download "I117 プログラミング演習II"

Transcription

1 I117 プログラミング演習 II I117 PROGRAMMING PRACTICE II メモリ管理 1 MEMORY MANAGEMENT 1 情報社会基盤研究センター Research Center for Advanced Computing Infrastructure (RCACI) 小原泰弘 / Yasuhiro Ohara [email protected]

2 スケジュール / SCHEDULE /06/07(Tue): プログラミングの基礎 / Basic of Programming /06/09(Thu): 基本データ構造 / Fundamental data structures /06/14(Tue): メモリ管理 1 / Memory Management /06/16(Thu): メモリ管理 2 / Memory Management /06/21(Tue): デバッグ / Debugging /06/23(Thu): ソフトウェア開発環境 1 / Software Development Env /06/28(Tue): ソフトウェア開発環境 2 / Software Development Env /06/30(Thu): 木 / Data Structure : Tree /07/05(Tue): ハッシュ / Data Structure: Hash /07/07(Thu): プログラム理解 1 / Understanding Programs /07/12(Tue): プログラム理解 2 / Understanding Programs /07/14(Thu): スクリプト言語 1 / Script Language /07/19(Tue): スクリプト言語 2 / Script Language /07/21(Thu): その他の言語 / Other Languages /07/26(Tue): 試験 / Examination

3 今日の目次 C 言語の基礎 構造体 メモリ管理 malloc () 基本データ構造 配列と連結リスト 木 スタック キュー 演習 プログラミング環境の整備 マルコフ連鎖プログラムの解説

4 VI の使い方 h j k l Ctrl-[ Esc で移動モード / 検索文字 : 検索文字までジャンプ Ctrl-G 状態表示 ':': コマンドモード u: Undo {: 前の空行へ : 次の空行へ編集モード i: 挿入モード a: 追加モード o: 次行挿入モード O: 前行挿入モード C: 後続行置き換え x: 一文字削除 dd: 一行削除 D: 後続行削除 J: 次の行を連結 1,$s/hoge/hage/g ( 置き換え ) 行数 : 行数へジャンプ r ファイル名 : ファイルを読み込み sp ファイル名 : 画面二分割で編集 e ファイル名 : 編集ファイルを変更 w: 保存 q: 終了 G: ファイルの最後まで t[ 文字 ]: 同行内次の文字の直前 f[ 文字 ]: 同行内次の文字 d[ 移動 ]: 移動先まで削除 c[ 移動 ]: 移動先まで置き換え c2f' ': 2 個先の空白まで置き換え 0: 行の先頭 $: 行の終わり

5 C 言語基礎

6 構造体

7 構造体 変数と配列の限界 同じ型のデータだけでは表現し切れない 異なる型の変数を一まとめにして使いたい 構造体

8 構造体の例 struct sockaddr_in { u_char sin_len; u_char sin_family; u_short sin_port; ; 構造体 struct in_addr sin_addr; char sin_zero[8]; 名前 struct xxx { ; ; 8bit 8bit 16bit 8bit x 4 8bit x 8 メンバー sin_len sin_family sin_port sin_addr sin_zero[0] sin_zero[4] sin_zero[1] sin_zero[5] sin_zero[2] sin_zero[6] sin_zero[3] sin_zero[7]

9 関数 関数 同じような処理を一まとめにしたもの 名前を付けられる 名前で呼び出すことができる 引数で呼び出した側からデータを渡すことができる { で囲まれている ( ブロック ) 処理の結果 あるいは処理中に発生したエラーを返り値で呼び出し側に伝えることができる ライブラリ関数 システムあるいは誰かが予め用意した関数群 printf(), str (), atoi() など 画像処理用の関数群 数学の関数群 データベース操作関数群

10 関数 (CONT'D) 関数の例 引数で渡された文字列の文字数を返す (strlen() と同じ ) int my_strlen(char *str) 関数名 引数 返り値 { 関数のはじまり char *cp; int nbyte = 0; for(cp = str; *cp!= 0; cp++) { 文字数を数える変数 nbyte++; return(nbyte); 文字を数える 文字配列走査のためのポインタ 関数の終わり 渡された文字列に 0 が現れない間繰り返す 数えた文字数を返り値として返す

11 関数 (CONT'D) main() { char buf[] = "this is test"; int nbyte; nbyte = my_strlen(buf); printf("buf: %s, length: %d n", buf, nbyte); 関数の呼び出し int my_strlen(char *str) {.

12 関数とポインタ 関数を呼び出す側の変数を関数の処理で変更したい時 upper(char *str) { while(*str!= NULL) { if(*str > 'a' && *str < 'z') { *str = *str - 26; str++; main() { char buf[256]; strcpy(buf, "This Is Test String."); upper(buf); printf("%s n", buf);

13 ポインタ VS 配列 巨大な配列があったときにどちらのアクセスが早いか? 個の配列 gettimeofday() delta_timeval(struct timeval *begin, struct timeval *end);

14 構造体 データをまとめて格納可能な型 C 言語での例 /* 日付を表す構造体を定義 */ struct date { int year; int month; int day; ; /* 構造体へのアクセスはメンバアクセス演算子 (.) を用いる */ Void func() { struct date today; /* 構造体宣言 */ today.year = 2010; /* today.month = 6; * 構造体のメンバ変数にアクセス today.day = 9; */

15 HOSTENT 構造体 struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses from name server */ #define h_addr h_addr_list[0] /* address, for backward compatiblity */ ;

16 HOSTENT 構造体 hostent h_name h_aliases h_addrtype h_length h_addr_list AF_INET 4 ホスト名 (NULL) (NULL) エイリアス名エイリアス名 in_addr IP address IP address IP address h_length = 4

17 メモリレイアウト a.out の例 プログラムの実行可能コードはテキストセグメントに配置される 初期化済みの静的変数はデータセグメントに配置される 未初期化の静的変数は bss セグメントに配置される 動的変数はヒープ上に確保される malloc などで確保する領域 ローカル変数はスタック上に確保される 関数の引数 ローカル変数 ( 関数内の変数 ) 戻り値 テキストセグメント ( 読み出し専用 ) データ bss ヒープ スタック 0x1000 higher address

18 ポインタとメモリレイアウトの関係 普通の変数もポインタ変数も同じメモリ上に配置される 普通の変数には値が入っている ポインタ変数にはアドレスが入っている スタック領域 Void func() { int var = 10; 0xff int *p = &var; int **pp = &p; pp p var 0xff xff xff xff000008

19 構造体のポインタ 構造体ポインタを用いて メンバ変数へアクセスするためには アロー演算子 (->) を用いる /* 構造体 dateのポインタを引数にとる関数 */ Void func(struct date *today) { today->year = 2010; /* アロー演算子を用いて today->month = 6; * 構造体のメンバ変数にアクセス today->day = 9; */

20 値渡しと参照渡し 値渡し データをまるごとコピーして 関数に渡す方法 渡したデータの内容が変更されない 渡すデータのサイズが大きいと オーバヘッドも大 参照渡し データの参照 (C 言語ではポインタ ) だけを関数に渡す方法 データのコピーは行われないのでオーバヘッド小 渡したデータの内容が変更される場合がある Void val_func(struct date today) { today.year = 2010; today.month = 6; today.day = 9; Void ref_func(struct date *today) { today->year = 2010; today->month = 6; today->day = 9; Void main(void) { struct date d1 = {0, 0, 0; struct date d2 = {0, 0, 0; val_func(d1); ref_func(&d2); d1 と d2 の値はどうなるか?

21 様々な言語の値渡しと参照渡し C++ 基本的にすべて値渡し ポインタ変数と参照変数がある JavaScript Java 数値や真偽値などの基本データ型は値渡し その他の リストやオブジェクトは値渡し Python Ruby すべて参照渡し

22 参照渡しに関する問題 ( 上級者向け ) 以下の C 言語のプログラムは 777 を出力する Void func(int *var) { *var = 777; Void main(void) { int n = 0; func(&n); printf( %d n, n); /* 777と出力される */ しかし 以下の Pythonプログラムは0が出力される 参照渡しなのに値が変更されないのは何故か? def func(var): var = 777 n = 0 func(n) print n # 0 が出力される

23 キャスト ある変数 構造体を無理やり違う型の変数や構造体として扱う方法 変数を使う時に扱いたい型をカッコで括る (int)no_int_variable; int 型にキャスト 関数の引数を一般化するのに便利 sockaddr の例 struct sockaddr_in sin; (struct sockaddr)sin; 型やサイズに依存せず 1 バイトずつ読みたいときにも使う long addr = ; char *cp = (char *)&addr; for(j = 0; j < 4; j++) { printf("%c ", *cp++);

24 メモリ管理

25 配列 (ARRAY) 連続した記憶領域 文字列等の記憶に利用 char array[ ] = program ; N 次元表記 配列の添え字が 2 次 P r o g r a m 0 char array[n][m]; N M

26 メモリ関数 malloc () free () strdup ()

27 新しく必要となるメモリの確保 #include <stdlib.h> void * malloc (size_t size); void free (void *ptr); malloc: Memory ALLOCate の略 size バイト分のメモリを確保し 帰り値として返す free: malloc () で確保したメモリを解放する * 注 ) いらなくなった malloc () メモリはちゃんと free すること 例 ) struct listnode *target = (struct listnode *) malloc (sizeof (struct listnode)); free (target);

28

29 2 次元配列の動的割り当て char * の配列ではなく 実体を持ったcharの2 次元配列にすること malloc() を2 度使うこと free() すること strdup() は利用禁止 strncpy() を使うこと #include <stdio.h> 2 3 main () 4 { 5 int i, j; 6 char *alpha[] = { "abc", "def", "ghi", "" ; 7 8 for (i = 0; alpha[i][0]; i++) 9 printf (" %s", alpha[i]); 10

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1 I117 II I117 PROGRAMMING PRACTICE II 2 MEMORY MANAGEMENT 2 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara [email protected] / SCHEDULE 1. 2011/06/07(Tue) / Basic of Programming

More information

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

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

Taro-ポインタ変数Ⅰ(公開版).j

Taro-ポインタ変数Ⅰ(公開版).j 0. 目次 1. ポインタ変数と変数 2. ポインタ変数と配列 3. ポインタ変数と構造体 4. ポインタ変数と線形リスト 5. 問題 問題 1 問題 2-1 - 1. ポインタ変数と変数 ポインタ変数には 記憶領域の番地が格納されている 通常の変数にはデータが格納されている 宣言 int *a; float *b; char *c; 意味ポインタ変数 aは 整数型データが保存されている番地を格納している

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体

More information

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) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

情報ネットワーク演習 2006年10月5日

情報ネットワーク演習 2006年10月5日 情報ネットワーク演習 村川猛彦 2006 年 10 月 12 日 ( 木 ) 1 本日の内容 課題 5 HTTP クライアントハイパーテキストへのアクセス 課題 4 HTTP サーバのビルド 課題 3 ソケットを用いたプロセス間通信 課題 1 低水準入出力 課題 2 名前解決 ( ホスト名 IP アドレス ) 2 第 2 回課題 実施内容と意図 IP アドレスとホスト名の相互変換をするプログラムを拡張する.

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec10.ppt 今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

More information

第1回 プログラミング演習3 センサーアプリケーション

第1回 プログラミング演習3 センサーアプリケーション C プログラミング - ポインタなんて恐くない! - 藤田悟 [email protected] 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

PowerPoint Template

PowerPoint Template プログラミング演習 Ⅲ Linked List P. Ravindra S. De Silva e-mail: [email protected], Room F-413 URL: www.icd.cs.tut.ac.jp/~ravi/prog3/index_j.html 連結リストとは? 一つひとつの要素がその前後の要素との参照関係をもつデータ構造 A B C D 連結リストを使用する利点 - 通常の配列はサイズが固定されている

More information

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

プログラミング及び演習 第1回 講義概容・実行制御 プログラミング及び演習 第 7 回ポインタ ( 教科書第 10 章 ) (2014/05/23) 講義担当情報連携統轄本部情報戦略室大学院情報科学研究科メディア科学専攻教授森健策 本日の講義 演習の内容 ポインタ ポインタ第 10 章 講義 演習ホームページ http://www.newves.org/~mori/14programming ところで, さあ いよいよポインタです コツさえわかれば難しくないので安心してください

More information

02: 変数と標準入出力

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

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

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

Microsoft Word - Cプログラミング演習(12) 第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

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

Microsoft Word - Cプログラミング演習(10) 第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅱ 演習 2-1(a) BMI による判定 文字列, 身長 height(double 型 ), 体重 weight (double 型 ) をメンバとする構造体 Data を定義し, それぞれのメンバの値をキーボードから入力した後, BMI を計算するプログラムを作成しなさい BMI の計算は関数化すること ( ) [ ] [ ] [ ] BMI = 体重 kg 身長 m 身長

More information

Microsoft PowerPoint - 5Chap15.ppt

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

More information

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

問 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

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

Microsoft Word - no15.docx

Microsoft Word - no15.docx 7. ファイルいままでは プログラムを実行したとき その結果を画面で確認していました 簡単なものならそれでもいいのですか 複雑な結果は画面で見るだけでなく ファイルに保存できればよいでしょう ここでは このファイルについて説明します 使う関数のプロトタイプは次のとおりです FILE *fopen(const char *filename, const char *mode); ファイルを読み書きできるようにする

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 3 回構造体, ファイル入出力 先週の出席確認へのコメント 暗号を破りたいが 平文の候補が多すぎる 人間の目で確認する代わりに どんなプログラムがあればよいか? 辞書を挙げた人が多かった 正しい着眼です 何億個もの平文候補が想定されるので 形態素解析や品詞判別を挙げた人もいます 辞書に近い回答で悪くはないのですが 平文候補ごとにあまり高機能なものを呼び出すと時間がかかる

More information

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

Microsoft Word - Cプログラミング演習(11) 第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte

More information

kiso2-03.key

kiso2-03.key 座席指定はありません Linux を起動して下さい 第3回 計算機基礎実習II 2018 のウェブページか ら 以下の課題に自力で取り組んで下さい 計算機基礎実習II 第2回の復習課題(rev02) 第3回の基本課題(base03) 第2回課題の回答例 ex02-2.c include int main { int l int v, s; /* 一辺の長さ */ /* 体積 v

More information

Taro-ファイル処理(公開版).jtd

Taro-ファイル処理(公開版).jtd ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 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

More information

情報処理演習 B8クラス

情報処理演習 B8クラス 予定スケジュール ( 全 15 回 ) 1 1. 終了 プログラミング言語の基礎 2. 終了 演算と型 3. 終了 プログラムの流れの分岐 (if 文,switch 文など ) 4. 終了 プログラムの流れの繰返し (do, while, for 文など ) 5. 終了 中間レポート1 6. 終了 配列 7. 終了 関数 8. 終了 文字列 ( 文字列の配列, 文字列の操作 ) 9. 終了 ポインタ

More information

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

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

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

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 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

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 2 回文字列とポインタ 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値

More information

I117 II I117 PROGRAMMING PRACTICE II SOFTWARE DEVELOPMENT ENV. 1 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara

I117 II I117 PROGRAMMING PRACTICE II SOFTWARE DEVELOPMENT ENV. 1 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara I117 II I117 PROGRAMMING PRACTICE II SOFTWARE DEVELOPMENT ENV. 1 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara [email protected] / SCHEDULE 1. 2011/06/07(Tue) / Basic of

More information

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

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.

More information

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

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 入 p.109 2 関数 (Function)

More information