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

K&R演習[3-2]

課題 改行文字やタブのよな文字を、目で見えるエスケープ文字\nや\tに変換しながら、sをtにコピーするような関数escape(s, t)を書け。 逆に、エスケープ系列を実際の文字に変換する関数も書いてみよ。 回答 /* * @file 3-2 * @brief * @author * @date * @no…

K&R演習[2-10]

課題 if-elseの代わりに条件式を使って、大文字を小文字に変換する関数lowerを書き直せ。 回答 #include <stdio.h> int lower(int c); /* * @fn Main * @brief * @param * @return * @note */ int main(void) { int c, a; c = 'a'; a = lower(c); printf("%c, %c\n", </stdio.h>…

K&R演習[2-8]

課題 整数xの値を右にnビット回転する関数rightrot(x, n)を書け。 回答 #include <stdio.h> unsigned rightrot(unsigned x, int n); /* * @fn Main * @brief * @param * @return * @note */ int main(void) { unsigned ret, x, n; x = 65535; n = 0; ret = rightrot(x</stdio.h>…

K&R演習[2-7]

課題 xのビット位置pからnビットを反転し、他のビットはそのままにしたxをかえす関数invert(x,p,n)を書け。 回答 #include <stdio.h> unsigned invert(unsigned x, int p, int n); /* * @fn Main * @brief * @param * @return * @note */ int main(void) { unsigned x</stdio.h>…

K&R演習[2-6]

課題 位置pから始まるnビットをyの右端のnビットにセットし、他のビットはそのままにしたxを返す関数setbits(x, p, n, y)を書け。 回答 #include <stdio.h> unsigned setbits(unsigned x, int p, int n, unsigned y); /* * @fn Main * @brief * @param * @return * @n</stdio.h>…

K&R演習[2-5]

課題 文字列s2の任意の文字と等しい文字列s1の最初の文字位置を返す関数any(s1, s2)を書け。ただし、一致する文字がなければ-1を返す。 回答 /** * @file プログラミング言語C 2-5 * @brief * @author hiroyuki murai * @date 20171118 * note */ #include <stdio.h> </stdio.h>…

K&R演習[2-4]

課題 文字列s2中の任意の文字に等しい文字をs1から除去するような形のsqueeze(s1, s2)を書け。 回答 #include <stdio.h> #include <string.h> void squeeze(char s1[], char s2[]); const int OK = 1; const int NG = 0; /** * @fn Main * @brief * @param * @return * @detail </string.h></stdio.h>…

K&R演習[2-3]

課題 16進数の文字列(0xあるいは0Xが付いているものも含めて)をそれと同値な整数値へ変換するhtoi(s)を書け。 回答 #include <stdio.h> #include <string.h> int htoi(char *str); /** * @fn Main * @brief * @param * @return * @detail */ int main(void) { int i; char str[3</string.h></stdio.h>…

K&R演習[2-2]

前提 for (i = 0; i < lim - 1 && (c = getchar() != '\n' && c != EOF; i++) { s[i] = c; } 課題 forループに等価なループを、&&あるいは||を使用しないで書け 回答 i = 0; while ((c = getchar() != EOF) { if (c == '\n') { break; } if (i >= (lim - 1) …

K&R演習[2-1]

課題 char, short, int, long変数のsigned及びunsignedの両方の方について、それらの範囲を決めるプログラムを、標準ヘッダからの適当な値を印字することと、直接計算することの双方で書け。 回答 #include <stdio.h> #include <limits.h> #include <math.h> /** * @fn Main * @brief * </math.h></limits.h></stdio.h>…

K&R演習[1-24]

課題 括弧、中括弧、大括弧の釣り合いが取れていないといったプログラムの基本的な構文エラーのチェックを行なうプログラムを書け。引用符、二重引用符・コメントなどの処理も忘れないこと。 回答 /** * @file プログラミング言語C 1-24 * @brief 括弧、中括…

K&R演習[1-23]

課題 Cプログラムから全てのコメントを除去するプログラムを書け。 回答 #include <stdio.h> #include <string.h> typedef unsigned long int u8; /** * @fn Main * @brief * @param * @return * @detail */ int main(void) { int c; char str[1000]; u8 pos_str = 0, pos_start</string.h></stdio.h>…

K&R演習[1-22]

課題 入力行を入力のn文字目までにある最後の非ブランク文字の後で折りたたむプログラムを書け。 私見 「折りたたむ」の意味が分からない。 方針 「折りたたむ」はブランク文字の削除を解釈する。 回答 #include <stdio.h> #include <string.h> typedef unsigned long int u8; c</string.h></stdio.h>…

K&R演習[1-21]

課題 ブランクの列を同じスペーシングをお粉う最小の数のタブおよびブランクで置き換えるプログラムentabを書け。 回答 #include <stdio.h> #include <string.h> typedef unsigned long int u8; const int TAB_WIDTH = 8; // タブ幅 void detab(u8 n, char *rslt); void entab(c</string.h></stdio.h>…