演習5-2 K&R プログラミング言語C
演習5-2 #include <stdio.h> #include <ctype.h> #define SIZE 100 #define BUFSIZE 100 int getch(void); void ungetch(int); int main(void) { double array[SIZE]; int n, m, getfloat(double *); int …続きを読む
演習5-2 #include <stdio.h> #include <ctype.h> #define SIZE 100 #define BUFSIZE 100 int getch(void); void ungetch(int); int main(void) { double array[SIZE]; int n, m, getfloat(double *); int …続きを読む
演習5-1 問題文の意味がいまいちわかりにくかったが、 +/- と数字の間に空白があっても +/- 記号が機能するように変更すると解釈した。 +/- 記号があれば sign_c に一時保存して次の文字を読みにいく。 次の文字が数字でなければ(スペースなどの場合)sign_c に一時保存した +/- 記号を ungetch() で入力に戻し、入力が数でないという印の 0 を返す。 #include …続きを読む
5.1 ポインタとアドレス ポインタの算術演算例 #include <stdio.h> int main(void) { int x = 5; int *ip; ip = &x; printf("*ip => %d\n", *ip); printf("ip => %p\n", ip); *ip = *ip + 10; prin…続きを読む
演習4-14 最初に考えた答え。 #include <stdio.h> #define swap(t, x, y) { t tmp; tmp = y; y = x; x = tmp; } int main(void) { int x = 20; int y = 50; printf("x => %d, y => %d\n", x, y); swap(in…続きを読む
演習4-13 こちらの再帰は簡単に解けた。SICP 効果? #include <stdio.h> #include <string.h> void reverse(char str[]); void reverse_iter(char str[], int start, int end); int main(void) { char str[] = "hello,…続きを読む
4.10 再帰(Recursion) printd の再帰のようす。 演習4-12 最初、再帰は SICP でさんざんやったので『楽勝』と思ったら、配列へ代入するタイミングの問題で文字列が逆転してしまった。 以下は修正したコード。 #include <stdio.h> #define MAX 1024 int itoa(int num, char str[]); int main(vo…続きを読む
4.6 静的変数 static 宣言した変数・関数のスコープ 外部変数や関数を static 宣言すると、そのスコープはソース・ファイルの宣言以下の部分に限定される。 以下に示す3つのファイルをコンパイルすると static 宣言した同名の変数 i のスコープはそれぞれのソース・ファイル内に限定される。 main.c #include <stdio.h> void print1(voi…続きを読む
4.4 通用範囲に関する規則 外部変数の宣言と定義について 内容 宣言 定義 働き 変数の性質(型)を指示する 記憶への割り付けを行う 数 各ファイル毎に含むことが可能(定義を含むファイルも) すべてのファイルの中に一つのみ 配列サイズ 省略可 省略不可 4.5 ヘッダ・ファイル ファイル間で共用される定義と宣言をヘッダ・ファイルにまとめて集中管理する。 プログラミング言語C 第2版 ANSI規格…続きを読む
4.3 の電卓プログラムを修正する。 演習4-10 getch, ungetch での処理を読込行文字配列のインデックスのインクリメント・デクリメントで行う。 読み込み行を外部変数 line に、読み込み文字位置を line_pos に保持する。 /* 省略 */ #define MAXLINE 1024 /* 省略 */ static char line[MAXLINE]; static int…続きを読む
演習4-9 #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFSIZE 100 static int buf[BUFSIZE]; /* ungetch 用のバッファ */ static int bufp = 0; /* buf 中の次の空き位置 */ static int …続きを読む