2017-10-01から1ヶ月間の記事一覧

K&R演習[1-20]

課題 入力されたタブを、次のタブ・ストップまでのスペースを埋める適当な数のブランク(空白)で置き換えるプログラムdetabを書け。 回答 #include <stdio.h> #include <string.h> typedef unsigned long int u8; const int TAB_WIDTH = 4; // タブ幅 void detab(u8 n, char *rsl</string.h></stdio.h>…

K&R演習[1-19]

課題 文字列Sを逆に並べる関数reverse(s)を書け。さらに、この関数を使って、入力を一時に1行ずつ逆転するプログラムを書け。 回答 #include <stdio.h> #include <limits.h> #include <string.h> #define MAX_LINE_NUM 1000 /* 入力行数の最大値 */ #define MAX_LENGTH 1000 /* 入力文字</string.h></limits.h></stdio.h>…

K&R演習[1-18]

課題 各入力行から、行の後ろのブランクやタブを取り除き、かつ空白行は全て削除するようなプログラムを書け。 回答 #include <stdio.h> #include <limits.h> #include <string.h> #define MAX_LINE_NUM 1000 /* 入力行数の最大値 */ #define MAX_LENGTH 1000 /* 入力文字列長の最大値 */ </string.h></limits.h></stdio.h>…

K&R演習[1-17]

課題 80字より長い行を全て印字するプログラムを書け。 回答 /** * @file プログラミング言語C 1-17 * @brief * @author hiroyuki murai * @date 20171008 * @note */ #include <stdio.h> #include <limits.h> #include <string.h> #define MAX_LINE_NUM 1000 /* 入力行数の最大値 */ #def</string.h></limits.h></stdio.h>…

K&R演習[1-17]

課題 一番長い行を印字するプログラムのmainルーチンを書き直して、任意の行の長さの入力行群の長さ、およびテキストの出来るだけ多くの部分を正しく印字するようにせよ。 回答 #include <stdio.h> #include <limits.h> #define MAX_LINE_NUM 1000 /* 入力行数の最大値 */ #defi</limits.h></stdio.h>…

K&R演習[1-16]

課題 一番長い行を印字するプログラムのmainルーチンを書き直して、任意の行の長さの入力行群の長さ、およびテキストの出来るだけ多くの部分を正しく印字するようにせよ。 回答 #include <stdio.h> #include <limits.h> #define MAX_LINE_NUM 1000 /* 入力行数の最大値 */ #defi</limits.h></stdio.h>…

K&R演習[1-15]

課題 1.2節の温度換算プログラムを、変換の為の関数を使うように書き直せ。 回答 #include <stdio.h> // 華氏を摂氏に変換 float conversion_fahrenheit2celsius(float f); /** * @fn Main * @brief * @param * @return * @detail */ int main(void) { float fahr, ce</stdio.h>…

K&R演習[1-14]

課題 入力中の異なる文字の頻度をヒストグラムにプリントするプログラムを書け。 方針 「入力中の異なる文字の頻度をヒストグラムにプリントする」と解釈する。 回答 #include <stdio.h> const int CNT = 10; // 出現回数 const int N_CHAR = 26; // アルファベット数</stdio.h>…

K&R演習[1-13]

課題 入力した単語の長さをヒストグラムにしてプリントするプログラムを書け。 解答 #include <stdio.h> const int CNT = 10; // 出現回数 const int LENGTH = 20; // 文字列長 void print_histogram(int *cnt); // ヒストグラム表示 /** * @fn main * @brief 単語の</stdio.h>…

K&R演習[1-12]

課題 入力した単語を1行に一つずつ印字するプログラムを書け 解答 #include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) { // ファイル終端まで if ((c == ' ') || (c == '\t')) { // タブかバックスペースを printf("\n"); // 改行に置換す</stdio.h>…

K&R演習[1-11]

課題 単語カウントプログラムのテストは、どのようにするか? 方針 複数条件網羅 同値分割で、state == OUTを'a'とする 解答 ・\n ・\b, 'a', \n ・\t, 'a', \n ・'a', '\n' 課題 もしバグがあるとしたら、それを暴き出すにはどんな入力をするのがよいか? …

K&R演習[1-10]

課題 各タブを\tに、各バックスペースを\bに、各バックスラッシュを\\に置き換えながら、 入力を出力に複写するプログラムを書け。 ソースコード #include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) { if (c == '\t') { printf("\\t"); } el</stdio.h>…

K&R演習[1-9]

課題 二つ以上の空白を一つの空白に置き換えながら、入力を出力に複写するプログラムを書け。 ソースコード #include <stdio.h> int main(void) { int c1, c2, cnt; cnt = 0; while ((c1 = getchar()) != EOF) { if ((cnt >= 2) && // 2文字目以降で (c2 == c1) && //</stdio.h>…

K&R演習[1-8]

課題 空白、タブ、改行を数えるプログラムを書け。 ソースコード #include <stdio.h> int main(void) { int c, ns, nt, nl; ns = nt = nl = 0; while ((c = getchar()) != EOF) { if (c == '\n') ++nl; /* 改行 */ if (c == '\t') ++nt; /* タブ */ if (c == ' ') ++n</stdio.h>…

getchar()の機能

機能 キーボードからの入力を、Enter入力まで待つ。 Enter入力で待ちを解除して、以降は呼ばれる度に1文字ずつ入力された順に返す 例 ソースコード #include <stdio.h> int main(void) { int c; while (1) { c = getchar(); printf("getchar:%c\n", c); } } 実行内容</stdio.h>…

K&R演習[1-7]

課題 EOFの値を印字するプログラムを書け。 ソースコード #include <stdio.h> int main(void) { /* EOFの値を印字する */ printf("EOF:%d\n",EOF); } 実行結果 EOF:-1</stdio.h>

K&R演習[1-6]

課題 getchar() != EOFという式の値が0か1であることを確認せよ 方針 打ち込んだ文字と、getchar() != EOFの式の値を並べて表示する。 ソースコード #include <stdio.h> int main(void) { int c, d; while (1) { d = ((c = getchar()) != EOF); printf("%c, %d\n", c,</stdio.h>…

K&R演習[1-5]

課題 温度換算プログラムに手を加えて、表を逆順に、すなわち300度から0度へという順に印字するように直せ。 方針 課題の通り。 ソースコード #include <stdio.h> int main(void) { float fahr, celsius; int lower, upper, step; lower = 0; /* 温度表の下限 */ uppe</stdio.h>…

K&R演習[1-4]

課題 温度を摂氏から華氏に換算するプログラムを書け。 方針 課題の通り。 ソースコード #include <stdio.h> int main(void) { float fahr, celsius; int lower, upper, step; lower = -20; /* 温度表の下限 */ upper = 150; /* 温度表の上限 */ step = 10; /* きざみ</stdio.h>…

K&R演習[1-3]

課題 表の上に見出しを印字するように温度換算プログラムを変更せよ。 方針 見出しを印字する。 ソースコード #include <stdio.h> int main(void) { float fahr, celsius; int lower, upper, step; lower = 0; /* 温度表の下限 */ upper = 300; /* 温度表の上限 */ st</stdio.h>…

K&R演習[1-2]

課題 xが上に挙げなかったある文字であるとして、printfの引数に\xを含めるとどうなるか調べる実験を行なえ。 方針 タブ(\t)を挿入する。 ソースコード #include <stdio.h> int main(void) { printf("hello, \tworld\t\n"); } 実行結果 hello, world 所感 「上に挙げ</stdio.h>…

K&R演習[1-1]

課題(1) 手元のシステムでこのプログラムをランさせよ。 方針(1) 先に触れられているhello worldを印字する ソースコード(1) #include <stdio.h> int main(void) { printf("hello, world\n"); } コンパイル結果(1) Embarcadero C++ 7.20 for Win32 Copyright (c) 2012</stdio.h>…

開始

K&Rのプログラミング言語C 第二版を、改めて精読して問題を解いてみることにした。フリーのCコンパイラを探す必要がある。 さしあたって、BCC32Cコンパイラをインストールした。 https://www.embarcadero.com/jp/free-tools Visual Studio2017のC++ ConsoleA…