C言語入門
|
|
|
- みひな かに
- 8 years ago
- Views:
Transcription
1 1 C 言語入門 第 11 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む )
2 2 コンパイル時のエラーのパターン 復習
3 3 gcc のエラーメッセージ 環境変数 LANG を設定すると言語が変わる mintty + bash + GNU C $ LANG=C gcc error1.c error1.c: In function 'main': error1.c:7:3: error: expected ';' before 'printf' printf("world n"); ^ mintty + bash + GNU C $ LANG=ja_JP.UTF-8 gcc error1.c error1.c: 関数 main 内 : error1.c:7:3: エラー : expected ; before printf printf("world n"); ^ ロケール (locale) と呼ばれる多言語化の仕組み JM: locale (7)
4 4 mintty の locale の設定 mintty 左上のアイコンから option Text ここに Locale: ja_jp Cahaacter set: UTF-8 を設定して OK しておく
5 5 文末の ; 忘れ 文末に ; を忘れると次の文字でエラーに error1.c int main() printf("hello, ") printf("world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error1.c error1.c: 関数 main 内 : error1.c:7:3: エラー : expected ; before printf printf("world n"); ^ エラーが生じたのは 7 行目の 3 文字目だが エラーの原因は 6 行目の行末 C 言語では スペースや改行は人間に読み易くするための位置調整に過ぎないので printf("hello, ") printf("world n"); は printf("hello, ")printf("world n"); と同じ意味 ここに ; があるべきだが ; の前に p が現れたことがエラーの原因
6 6 ブロック開始終端の不整合 が 1 つ多い error2_1.c int main() printf("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error2_1.c error2_1.c: 関数 main 内 : error2_1.c:10:1: エラー : expected declaration or statement at end of input ^ が 1 つ足らない状態で ファイルの終端 ( 入力の終端 ) に達している
7 7 ブロック開始終端の不整合 が 1 つ多い error2_2.c int main() printf("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error2_2.c error2_2.c:8:3: エラー : expected identifier or ( before return return EXIT_SUCCESS; ^ error2_2.c:9:1: エラー : expected identifier or ( before token ^ エラーが生じたのは 8 行目の 3 文字目だが エラーの原因は 7 行目 が 1 つ多いので main 関数の定義が 7 行目で終わっている つまり 8~9 行目は 何もないところにいきなり以下のように書いたのと同じ 8 9 return EXIT_SUCCESS;
8 8 ブロック開始終端の不整合 関数名のミススペル error3.c int main() print("hello, world n"); return EXIT_SUCCESS; mintty + bash + GNU C $ gcc error3.c /tmp/ccopikhp.o:error3.c:(.text+0x15): `print' に対する定義されていない参照です /tmp/ccopikhp.o:error3.c:(.text+0x15): 再配置がオーバーフローしないように切り詰められました : R_X86_64_PC32 ( 未定義シンボル `print' に対して ) /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccopikhp.o: 誤った再配置アドレス 0x0 がセクション `.pdata' 内にあります /usr/lib/gcc/x86_64-pc-cygwin/4.8.2/../../../../x86_64-pc-cygwin/bin/ld: 最終リンクに失敗しました : 無効な操作です collect2: エラー : ld はステータス 1 で終了しました コンパイルではなくリンクに失敗したと言われている 分割コンパイルによる 外部関数のリンクの際 print が見つからなかった printf のつもりが print とミススペルしている 標準ライブラリに print 関数は用意されていない
9 ポインタ 9
10 講義資料第 4 週 pp , 第 9 週 p.6., 教科書 p call by pointer ( ポインタ渡し ) 呼び出し元の変数の内容を変更したい場合 swapi.c 訂正 誤 :swap 正 :swapi void swapi(int *a, int *b) int c; c = *a; *a = *b; *b = c; void swapi(int *a, int *b); 関数 *a と *b の値を入れ替える swapi_test.c int a, b; fprintf(stderr, "a =? "); scanf("%d", &a); fprintf(stderr, "b =? "); scanf("%d", &b); swapi(&a, &b); printf("a = %d n", a); printf("b = %d n", b);
11 講義資料第 4 週 pp , 第 9 週 p.6., 教科書 p call by pointer ( ポインタ渡し ) 2 つ以上の値を返したい場合 modf.c 戻り値は 1 つしかないので 関数の引数にポインタを渡して 値を返す double modf(double x, double *iptr) *iptr = x < 0? ceil(x) : floor(x); return x < 0? *iptr - x : x - *iptr; double modf(double x, double *iptr); 関数戻り値 : x の小数部を戻り値に x の整数部を *iptr に返す戻り値は共に x と同じ符号を持つ JM: modf (3)
12 講義資料第 4 週 pp , 第 9 週 p.6., 教科書 p call by pointer ( ポインタ渡し ) 任意の長さの配列を渡したい場合 例えば文字列等 strlen.c strlen_test.c size_t strlen(const char *s) size_t len = 0; while(s[len]!= ' 0') len++; return len; size_t strlen(const char *s); 関数 ' 0' で終端された文字列の長さを返す char s[1024] = ""; fprintf(stderr, "s =? "); scanf("%1023[^ n]", &s); printf("strlen(s) = %d n", strlen(s)); 値が書き変えられては困る場合 const char への * ( ポインタ ) にしておくと この関数を使っても与えた内容が変更されないことをある程度保証することが出来る
13 教科書 p.308,310,314., [1] pp.240,257, const 修飾子 const 型 : 変数の値を変更出来なくなる const_test1.c const int i = 0; // 初期化は出来る int const j = 0; // const int も int const も同じ意味 i = 1; // const を付けた変数には代入出来ない j = 1; // const を付けた変数には代入出来ない const 修飾子は型修飾子 (type-qualifier) の一種型修飾子は型名の前後どちらにつけても良い mintty + bash + GNU C $ gcc const_test1.c const_test1.c: 関数 main 内 : const_test1.c:8:3: エラー : 読み取り専用変数 i への代入です i = 1; // Error: i is const ^ const_test1.c:9:3: エラー : 読み取り専用変数 j への代入です j = 1; // Error: j is const ^ 変更しようとするとコンパイル時にエラーになるので本来書き変えてはいけない値を書き変えてしまうことで生じるバグを未然に防げる
14 教科書 p.308,310,314., [1] pp.240,257, const 修飾子 const char 型へのポインタ const_test2.c char s[] = "hello, world"; const char *p; // ポインタの場合 *p が const になる p = s; // ポインタへは代入出来る *p = 'H'; // ポインタ指し示す先の変数には代入出来ない p[7] = 'W'; // ポインタ指し示す先の変数には代入出来ない *(char *) p = 'H'; // const のない型へ cast してやると代入出来る char const * 型 const char * 型 mintty + bash + GNU C $ gcc const_test2.c const_test2.c: 関数 main 内 : const_test2.c:9:3: エラー : 読み取り専用位置 *p への代入です *p = 'H'; // Errpr: *p is const ^ const_test2.c:10:3: エラー : 読み取り専用位置 *(p + 7u) への代入です p[7] = 'W'; // Errpr: p[x] is const ^ ただし わざわざ const を付けているということは変更してはいけない または変更しないことを前提としているのであるから普通は 特別に理由がない限り無理矢理書き変えてはいけない
15 教科書 p.308,310,314., [1] pp.240,257, const 修飾子 char 型への const ポインタ const_test3.c char s[] = "hello, world"; char *const p = s; // p が const で *p が char になる p = s; // p が const なのでポインタへは代入出来ない *p = 'H'; // ポインタ指し示す先の変数には代入出来る p[7] = 'W'; // ポインタ指し示す先の変数には代入出来る mintty + bash + GNU C $ gcc const_test3.c const_test3.c: 関数 main 内 : const_test3.c:8:3: エラー : 読み取り専用変数 p への代入です p = s; // Error: p is const ^ char * const 型 const char *p と char const *p は同じだが char * const p は意味が異なる前者は *p が const char つまり p は変数で *p が定数後者は *const p が char つまり p は定数で *p は変数である * がどこに係っているかよく考えるましょう
16 16 標準ライブラリ関数を例にした実例 文字列操作とポインタ操作
17 17 ポインタを用いた文字列操作の例 strlen 関数の大まかな仕組み strlen_with_idx.c size_t strlen(const char *s) size_t len = 0; while (s[len]!= ' 0') len++; return len; 文字列の長さは先頭から終端文字 (' 0') の手前までの文字数 strlen_with_ptr1.c size_t strlen(const char *s) const char *s0 = s; while (*s!= ' 0') s++; return s - s0; strlen_with_ptr2.c size_t strlen(const char *s) const char *s0 = s; while (*(s++)!= ' 0') ; return s - s0-1;
18 18 ポインタを用いた文字列のコピーの例 strcpy 関数の大まかな仕組み strcpy_with_idx.c char *strcpy(char *dst, const char *src) int i; for (i = 0; (dst[i] = src[i])!= ' 0'; i++) ; return dst; 文字列のコピーは先頭から終端文字 (' 0') までをコピーすれば良い strcpy_with_ptr.c char *strcpy(char *dst, const char *src) char *dst0 = dst; while ((*(dst++) = *(src++))!= ' 0') ; return dst0; 訂正 誤 :'0' 正 :' 0'
19 19 ポインタを用いた文字列のコピーの例 strncpy 関数の大まかな仕組み strncpy_with_idx.c char *strncpy(char *dst, const char *src, size_t n) size_t i = 0; for (; i < n && (dst[i] = src[i])!= ' 0'; i++) ; for (; i < n; i++) dst[i] = ' 0'; return dst; strncpy_with_ptr.c char *strncpy(char *dst, const char *src, size_t n) char *dst0 = dst; while(0 < n-- && (*(dst++) = *(src++))!= ' 0') ; while(0 < n--) *(dst++) = ' 0'; return dst0; strncpy は strcpy に加えて終端文字 (' 0') 以降を ' 0' で埋める 論理演算は左から右に評価され 真偽値が確定すると評価を終了する つまり i < n や dst < dst0 + n が偽なら そこで真偽値が確定するのでそれより右にある (dst[i] = src[i])!= ' 0' や (*(dst++) = *(src++))!= ' 0' は実行されない
20 20 ポインタを用いた文字列の比較の例 strcmp 関数の大まかな仕組み strcmp_with_idx.c int strcmp(const char *s1, const char *s2) size_t i; for (i = 0; s1[i]!= ' 0' && s2[i]!= ' 0' && s1[i] == s2[i]; i++) ; return s1[i] - s2[i]; どちらかが終端文字 (' 0') になるか異なる値が出てくるまで比較し終了位置を比較すれば良い strcmp_with_ptr.c int strcmp(const char *s1, const char *s2) while (*s1!= ' 0' && *s2!= ' 0' && *s1 == *s2) s1++; s2++; return *s1 - *s2;
21 21 ポインタを用いた文字列の比較の例 strncmp 関数の大まかな仕組み strncmp_with_idx.c int strncmp(const char *s1, const char *s2, size_t n) size_t i; if (n <= 0) return 0; for (i = 0; i < n - 1 && s1[i]!= ' 0' && s2[i]!= ' 0' && s1[i] == s2[i]; i++) ; return s1[i] - s2[i]; strncmp は strcmp の比較文字数を最大 n 文字に限定する strncmp_with_ptr.c int strncmp(const char *s1, const char *s2, size_t n) if (n <= 0) return 0; while (0 < --n && *s1!= ' 0' && *s2!= ' 0' && *s1 == *s2) s1++; s2++; return *s1 - *s2;
22 22 ポインタを用いた文字列の連結の例 strcat 関数の大まかな仕組み strcat_with_idx.c char *strcat(char *dst, const char *src) int i, len = strlen(dst); for (i = 0; (dst[len + i] = src[i])!= ' 0'; i++) ; return dst; dst の終端位置に src をコピーする strcat_with_ptr.c char *strcat(char *dst, const char *src) char *dst0 = dst; dst += strlen(dst); while ((*(dst++) = *(src++))!= ' 0') ; return dst0;
23 23 ポインタを用いた文字列の連結の例 strncat 関数の大まかな仕組み strncat_with_idx.c char *strncat(char *dst, const char *src, size_t n) int i, len = strlen(dst); for (i = 0; i < n && src[i]!= ' 0'; i++) dst[len + i] = src[i]; dst[len + i] = ' 0'; return dst; strncat は strcat の連結文字を最大 n 文字に限定するただし src が n 文字以上の場合終端文字が +1 文字され合計 n+1 バイト追記される strncat_with_ptr.c char *strncat(char *dst, const char *src, size_t n) char *dst0 = dst; dst += strlen(dst); while (0 < n-- && *src!= ' 0') *(dst++) = *(src++); *dst = ' 0'; return dst0;
24 教科書.pp , [1]pp 複雑なポインタの宣言 * を付けると何になるか? pointertest5.c int *(p1[7]); // int *p1[7]; と同義 int (*p2)[7]; printf("sizeof( p1)=%2d n", sizeof( p1)); printf("sizeof( p2)=%2d n", sizeof( p2)); printf("sizeof(*p1)=%2d n", sizeof(*p1)); printf("sizeof(*p2)=%2d n", sizeof(*p2)); mintty + bash + GNU C $ gcc pointertest5.c &&./a sizeof( p1)=56 sizeof( p2)= 8 sizeof(*p1)= 8 sizeof(*p2)=28 [] は * よりも優先順位の高い演算子 p1[x] に * が付く つまり *p1[x] が int 型になる従って p1[x] は int* 型 つまり p1 は要素数 7 の int* 型配列 p2 に * が付く つまり *p2 が要素数 7 の int 型配列になる従って p2 は 要素数 7 の int 型配列 へのポインタ 宣言の読み方 int *(p1[7]); *(p1[x]) が int int (*p2)[7]; *p2 が int[7] 要注意
25 教科書.pp , [1]pp ポインタ配列の初期化 char * の配列の初期化 メモリ上のどこかに配置された文字列 char *s[] = "one", "two", "three"; 0x~ x~00 o s は char* 型で要素数 3の配列 s[x] は char* 型 *s[x] は char 型 s[0] 0x~01 ~ 0x~02 ~ 0x~03 ~ 0x~ x~01 n 0x~02 e 0x~03 0 0x~04 t s[0] は "one" s[1] は "two" s[1] 0x~05 0x~06 0x~07 ~ ~ ~ 0x~05 w 0x~06 o 0x~07 0 s[0][0] は 'o' s[0][1] は 'n' s[0][2] は 'e' s[0][3] は ' 0' s[2] 0x~ x~09 ~ 0x~0a ~ 0x~0b ~ 0x~08 0x~09 0x~0a 0x~0b 0x~0c t h r e e 0x~0d 0
26 教科書.pp , [1]pp 配列とポインタの初期値と文字列 配列とポインタで扱いが異なることに注意 pointertest6.c void sub() char s[] = "hello"; char *p = "world";... objdump の結果 セクション.rdata の内容 : f726c d a00 world.s = "%s"..... void sub(void)... char s[] = "hello"; : c7 45 ee c 6c movl $0x6c6c6568,-0x12(%ebp) 40119d: 66 c7 45 f2 6f 00 movw $0x6f,-0xe(%ebp) char *p = "world"; 4011a3: c7 45 f movl $0x403060,-0xc(%ebp)... 一般にポインタに初期値として与えた文字列定数は書き変えてはいけない.rdata セクションに用意されたデータは書き変えてはいけない s へは "hello" の文字コード 68,65,6c,6c,6f が代入されているが p へは.rdata セクションに予め用意してある文字列 "world" のアドレス が代入されている
27 教科書.pp , [1]pp 配列とポインタの初期値と文字列 配列とポインタで扱いが異なることに注意 pointertest6.c void sub(void) char s[] = "hello"; char *p = "world"; printf("s = "%s " n", s); printf("p = "%s " n", p); s[0] = 'H'; p[0] = 'W'; int main() sub(); sub(); return EXIT_SUCCESS; Cygwin + GNU C $ gcc pointertest6.c &&./a s = "hello" p = "world" Segmentation fault ( コアダンプ ) Borland C++ >bcc32 pointertest6.c && pointertest6 Borland C for Win32 Copyright (c) 1993, 2000 Borland pointertest6.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland s = "hello" p = "world" s = "hello" p = "World" sub() が実行された際 s は毎回 "hello" だが p は 2 回目以降 "World" になってしまうもしくは.rdata への不正な書き込みで異常終了してしまう
28 28 演習 : print_str_with_ptr.c char 型へのポインタ変数 pを用いて char 型配列 sに保存された文字列を表示せよ 文字列末尾で改行すること 用いて良い変数はpのみとする 表示にはputchar 関数を使用すること printf 関数は使用しないこと 用いて良いループ構造はwhile 文のみとする print_str_with_ptr_tmp.c を元に指定箇所に作成せよ mintty + bash + GNU C $ gcc print_str_with_ptr.c &&./a s =? hello, world hello, world JM: putchar (3)
29 29 演習 : print_str.c 文字列を表示する関数 print_str(s) を実装せよ 与えられた文字列末尾で改行すること 関数のプロトタイプ宣言は myfunc_week11.h に作成せよ print_str_test.c と共にコンパイルして動作を確認すること 引数 const char *s : 文字列へのポインタ 戻り値 なし (void) mintty + bash + GNU C ヒント : print_str_with_ptr.c から切り出して関数化すれば良い $ gcc print_str_test.c print_str.c &&./a s =? hello, world hello, world
30 30 演習 : base36toint.c 36 進数で用いられる 0~9,A~Z,a~z までの文字を int 型の数値 0~35 に変換する関数 base36toint(c) を実装せよ 関数のプロトタイプ宣言は myfunc_week11.h に作成せよ エラーの際 DEBUG マクロが定義されていたら 標準エラー出力に警告メッセージを表示せよ base36toint_test.c と共にコンパイルして動作を確認する事 引数 int c : 0~9,A~Z,a~z までの文字コード (0x30~0x39,0x41~0x5a,0x61~0x7a) 戻り値 c で与えられた文字コードに対応する数値 0~35 を int 型で返す エラーの場合は -1 を返す mintty + bash + GNU C $ gcc base36toint_test.c base36toint.c &&./a c =? z 第 週へ移動 + 改訂
31 31 演習 : basetoint.c 0~9,A~Z,a~z の文字を N 進数表現の 1 桁として int 型の数値に変換する関数 basetoint(c,base) を実装せよ 関数のプロトタイプ宣言は myfunc_week11.h に作成せよ エラーの際 DEBUG マクロが定義されていたら 標準エラー出力に警告メッセージを表示せよ basetoint_test.c と共にコンパイルして動作を確認する事 引数 int c : N 進数表現の 1 桁を表す文字 0~9,A~Z,a~z の文字コード (0x30~0x39,0x41~0x5a,0x61~0x7a) int base : N 進数表現の基数 ( つまり base 進数 ) 最大 36 戻り値 c で与えられた文字コードに対応する数値 0~ 最大 35 を int 型で返す エラーの場合は -1 を返す mintty + bash + GNU C $ gcc basetoint_test.c basetoint.c &&./a c =? z base =? 10 第 週へ移動 + 改訂
32 教科書 pp ポインタへのポインタ 関数の引数でポインタを返したい場合はポインタ変数へのポインタを用いる strtoui.c unsigned int strtoui(const char *s, char **endp, int base) int v; unsigned int r = 0; while (0 <= (v = basetoint(*(s++), base))) r = r * base + v; if (endp!= NULL) *endp = (char *) s; return r; main.c char s[] = "ffz"; char *endp; この例だと endp に "z" へのポインタつまり &s[2] が返ってくる printf("strtoui(s, &endp, 16);
33 33 参考文献 [1] B.W. カーニハン /D.M. リッチー著石田晴久訳 プログラミング言語 C 第 2 版 ANSI 規格準拠 共立出版 (1989)
C言語入門
1 C 言語入門 第 10 週 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) 基本型 2 3 標準ヘッダ : 整数型の最小値 最大値は以下のマクロで定義されている unsigned signed 最小値最大値最小値最大値 char 0 UCHAR_MAX SCHAR_MIN SCHAR_MAX short
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
Microsoft PowerPoint - CproNt02.ppt [互換モード]
第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント
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
プログラミング実習I
プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.
02: 変数と標準入出力
C プログラミング入門 基幹 2 ( 月 4) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ
02: 変数と標準入出力
C プログラミング入門 総機 1 ( 月 1) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ
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) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項
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
PowerPoint プレゼンテーション
2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd
Microsoft PowerPoint - 09.pptx
情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
ファイル入出力
C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(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
C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は
C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )
情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 入 p.109 2 関数 (Function)
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 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
/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){
ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す
Microsoft Word - Cプログラミング演習(11)
第 11 回 (7/2) 4. いくつかのトピック (1) ビットごとの演算子 C 言語には, 次のようなビット単位で演算を行う特別な演算子が用意されている & ビットごとの AND ビットごとの OR ^ ビットごとの XOR( 排他的論理和 ) ~ 1 の補数これらの演算子は文字型と整数型で機能し, 浮動小数点数型では使用できない AND, OR, XOR は, それぞれのオペランドの対応するビットを比較して結果を返す
Taro-ファイル処理(公開版).jtd
ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
PowerPoint プレゼンテーション
講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる
プログラミング基礎
C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス
PowerPoint プレゼンテーション
プログラミング初級 第 7 回 2017 年 5 月 29 日 配列 ( 復習 )~ 文字列 1 配列とは 2 配列 : 複数の変数をグループとしてまとめて扱うもの 配列 変数 int data[10]; 整数型の配列 同種のデータ型を連続して確保したものを配列とよぶ = 整数がそれぞれにひとつずつ入る箱を 10 個用意したようなもの int data; 整数型の変数 = 整数がひとつ入る dataという名前の箱を用意したようなもの
問 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
JavaプログラミングⅠ
Java プログラミング Ⅰ 2 回目 ようこそ Java へ 今日の講義で学ぶ内容 画面へのメッセージの表示 文字や文字列 数値を表現するリテラル 制御コードを表すエスケープシーケンス 画面出力の基本形 ソースファイル名 : クラス名.java class クラス名 System.out.println(" ここに出力したい文字列 1 行目 "); System.out.println(" ここに出力したい文字列
Cプログラミング1(再) 第2回
C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において
PowerPoint Presentation
プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include
Microsoft PowerPoint pptx[読み取り専用]
情報処理 Ⅱ 第 8 回 2009 年 12 月 7 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと 問題 main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 多項式関数 f(x)
Java講座
~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト
PowerPoint プレゼンテーション
講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える
第1回 プログラミング演習3 センサーアプリケーション
C プログラミング - ポインタなんて恐くない! - 藤田悟 [email protected] 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir
PowerPoint プレゼンテーション
プログラミング応用演習 第 2 回文字列とポインタ 再掲 プログラミング上達のために 何度か言っていますが 単純な方法があります : 毎日プログラムを書いていれば そのうち慣れます 中身はなんでも構いません 逆にしばらくプログラムを書かずにいると忘れます レポート以降プログラムを書いていないという人は そろそろ忘れている頃かも知れませんね 今後もプログラミングの授業があり 基礎演習の内容が前提となりますので
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>
C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う
C言語入門
1 C 言語入門 プログラミング言語 Ⅰ( 実習を含む ), 計算機言語 Ⅰ 計算機言語演習 Ⅰ, 情報処理言語 Ⅰ( 実習を含む ) 2 本日の内容 授業予定日の確認 授業教材の指示 C 言語用プログラミング環境の整備 C 言語プログラミングの導入部分 3 授業予定日の確認 授業予定日の変更があります 本来の授業予定日 : 毎週金曜日 7,8,9,10 時限 4/10 4/17 4/24 5/1
PowerPoint プレゼンテーション
プログラミング応用演習 第 2 回文字列とポインタ 先週のパズルの解説 答え : 全部 p a 1 図の書き方 : p+1 は式であって その値を格納する記憶場所を考えないので 四角で囲まない 2 p+1 同じものを表すいろいろな書き方をしてみましたが パズル以上の意味はありません プログラム中に書くときは p+1 が短くていいんじゃないかな p+1 は 2 の記憶場所 p[1] は 2 に格納されている値
プログラミングI第10回
プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
Microsoft PowerPoint - prog04.ppt
プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容
ガイダンス
情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック
