目次
はじめに
はじめに
Visual C++ 2010 Expressのインストール
プログラムの作成
hello.c
コンパイルと実行
C言語プログラミングの学習環境
終了ステータスって?
整数値を3桁区切りで表示するプログラム
課題1 「整数値を3桁区切りで表示する」
ソースコードの雛形
h20a6.c
ソースコードの解説
配列の要素を反転する
課題2 「整数型の最大値と最小値を表示する」
h20a6_min.c
ソースコードの解説
課題3 「64ビットの整数値を表示する」
h20a6_x64.c
ソースコードの解説
他の言語のlong型
課題4 「整数値を4桁区切りの16進数で表示する」
h20a6_hex.c
ソースコードの解説
多倍長整数の加算を行うプログラム
課題1 「多倍長整数型を作る」
ソースコードの雛形
h21a9_set.c
ソースコードの解説
課題2 「多倍長整数の比較を行う」
h21a9_cmp.c
ソースコードの解説
課題3 「多倍長整数の加算を行う」
h21a9_add.c
ソースコードの解説
条件演算子を使用する
課題4 「多倍長整数の減算を行う」
h21a9_sub.c
ソースコードの解説
課題5 「多倍長整数型に符号を追加する」
h21a9_ssub.c
ソースコードの解説
課題6 「符号付き多倍長整数の加減算を行う」
h21a9_sign.c
h21a9_sign.c - part2
ソースコードの解説
数当てゲームを行うプログラム
課題1 「重複のない4桁の乱数を生成する」
ソースコードの雛形
h18a6_prev.c
ソースコードの解説
擬似乱数って?
課題2 「マスターマインドを作成する」
ソースコードの雛形
h18a6.c
ソースコードの解説
課題3 「平均推測回数を表示する」
h18a6_average.c
ソースコードの解説
課題4 「組合せを用いてマスターマインドを解くAIを作成する」
h18a6_ai.h
h18a6_ai.c
h18a6_ai_comb.c
ソースコードの解説
課題5 「順列を用いてマスターマインドを解くAIを作成する」
h18a6_ai_perm.c
ソースコードの解説
課題6 「順列のみを用いてマスターマインドを解くAIを作成する」
h18a6_ai_perm10.c
ソースコードの解説
ソースコードの分割
文字列のURLエンコードを行うプログラム
課題1 「URLエンコードを行う」
ソースコードの雛形
h16a6.c
ソースコードの解説
ポインタを扱うときの注意
課題2 「空白文字を+記号に置換する」
h16a6_space.c
ソースコードの解説
課題3 「URLデコードを行う」
h16a6_decode.c
ソースコードの解説
相対パスを絶対パスに変換するプログラム
課題1 「UNIX形式のパスを変換する」
ソースコードの雛形
h21h9.c
ソースコードの解説
課題2 「Windows形式のパスを変換する」
h21h9_win.c
ソースコードの解説
課題3 「両方の形式を変換する」
h21h9_both.c
ソースコードの解説
WindowsでもUNIXでもコンパイルできるソースコード
課題4 「ファイルの有無を確認する」
h21h9_exists.c
ソースコードの解説
標準ライブラリ関数の調べ方
単語幅でワードラップを行うプログラム
課題1 「単語幅でワードラップする」
ソースコードの雛形
h17h6.c
ソースコードの解説
課題2 「文字列をトークン分割する」
h17h6_token.c
ソースコードの解説
課題3 「改行文字に対応する」
h17h6_newline.c
ソースコードの解説
Windowsのフォントから文字幅を取得してみる
文字数でワードラップを行うプログラム
課題1 「文字数でワードラップする」
ソースコードの雛形
h22h9.c
ソースコードの解説
ファイル記述子って?
課題2 「タブ文字に対応する」
h22h9_tab.c
ソースコードの解説
課題3 「定義済みのキーワードを参照する」
ソースコードの雛形
h22h9_keyword1.c
ソースコードの解説
課題4 「キーワードを定義する」
h22h9_keyword2.c
ソースコードの解説
奥付
奥付

閉じる


<<最初から読む

24 / 120ページ

試し読みできます

ソースコードの雛形

  1. #include <stdio.h>
  2. #include <string.h>


  3. /** 内部整数の最大桁数 (9桁) */
  4. #define NUM_DIGIT 9
  5. /** 内部整数の桁上がり (10^9) */
  6. #define NUM_DIGIT_TH_POWER_OF_TEN 1000000000
  7. /** 内部整数配列のサイズ (9*7=63桁) */
  8. #define ARRAY_MAX 7


  9. /**
  10. * @brief 多倍長整数型
  11. */
  12. typedef struct {
  13. int length; /**< 内部整数配列の長さ */
  14. long data[ARRAY_MAX]; /**< 内部整数配列 (9桁区切り) */
  15. } MP;


  16. void print(const MP *num);
  17. void set(MP *num, const char str[]);


  18. /**
  19. * @brief 多倍長整数値を出力する。
  20. *
  21. * @param [in] num 多倍長整数値
  22. * @return なし
  23. */
  24. void print(const MP *num)
  25. {
  26. /** @todo 実装してください。 */
  27. }


  28. /**
  29. * @brief 数字列から多倍長整数値に変換する。
  30. *
  31. * @param [out] num 変換された多倍長整数値
  32. * @param [in] str 数字列
  33. * @return なし
  34. */
  35. void set(MP *num, const char str[])
  36. {
  37. /** @todo 実装してください。 */
  38. }


  39. int main(int argc, char *argv[])
  40. {
  41. MP num;
  42. /* テストデータでset()、print()を実行する。 */
  43. set(&num, "46284059827463859201283844157134007652918723147641");
  44. print(&num);
  45. return 0;
  46. }

試し読みできます

課題1 「重複のない4桁の乱数を生成する」

数当てゲーム
を行うプログラム

[出典]平成18年度 秋期 午後試験 問6

課題1 「重複のない4桁の乱数を生成する」

 プログラムが生成した目標数をユーザーが推測する数当てゲームを作成します。 手始めに目標数をランダムに生成する関数createRandomNumber()と、ユーザーから入力された推測数がルールに違反していないかチェックする関数isValidNumber()を作成してください。

 目標数と推測数のルールは「各桁の数字がすべて異なる4桁の数字列」です。 プログラム内ではこれらの数字をint型でなくchar型の配列に格納します。

 

目標数と推測数のルール

試し読みできます

ソースコードの雛形

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. /** 目標数の桁数 */
  6. #define DIGITS  4
  7. #define TRUE    1
  8. #define FALSE   0
  9. void createRandomNumber(char target[]);
  10. int isValidNumber(char num[]);
  11. /**
  12. *  @brief 重複のない数字列をランダムに生成する。
  13. *
  14. *  @param [out] target 目標数
  15. *  @return なし
  16. */
  17. void createRandomNumber(char target[])
  18. {
  19.     /** @todo 実装してください。 */
  20. }
  21. /**
  22. *  @brief 重複のない数字列かチェックする。
  23. *
  24. *  @param [in] num 推測数
  25. *  @retval TRUE    すべて異なる数字の場合
  26. *  @retval FALSE   それ以外の場合
  27. */
  28. int isValidNumber(char num[])
  29. {
  30.     /** @todo 実装してください。 */
  31.     
  32.     return TRUE;
  33. }
  34. int main(int argc, char *argv[])
  35. {
  36.     char target[DIGITS + 1];
  37.     int valid;
  38.     
  39.     /* 擬似乱数を初期化する。 */
  40.     srand( (unsigned int)time(NULL) );
  41.     
  42.     createRandomNumber(target);
  43.     valid = isValidNumber(target);
  44.     printf("%s is %d\n", target, valid );
  45.     
  46.     valid = isValidNumber("3474");
  47.     printf("3474 is %d\n", valid );
  48.     
  49.     return 0;
  50. }

試し読みできます

課題1 「URLエンコードを行う」

文字列のURLエンコード
を行うプログラム

[出典] 平成16年度 秋期 午後試験 問6

課題1 「URLエンコードを行う」

 URLとして使用できる文字には制限があるため、CGIなどへGETメソッドでリクエストを送信する際には文字列パラメータを次のような規則に従って変換する必要があります。 文字列のURLエンコードを行う関数URLEncode()を作成してください。
  1. 英数字と'@'(0x40)、'*'(0x2A)、'-'(0x2D)、'.'(0x2E)、'_'(0x5F)の記号は変換しない。
  2. それ以外の文字は'%'の後に文字コードの16進表記(2桁)を続けた3文字に変換する。
URLエンコードの変換例

試し読みできます

ソースコードの雛形

  1. #include <stdio.h>
  2. #include <string.h>

  3. /** URLバッファサイズ */
  4. #define URLSIZE 256


  5. int replaceChar(unsigned char c);
  6. void URLEncode(unsigned char *input, unsigned char *output);


  7. /**
  8. * @brief 変換する必要のある文字かチェックする。
  9. *
  10. * @param [in] c 文字
  11. * @retval 0 無変換文字の場合
  12. * @retval 1 それ以外の場合
  13. */
  14. int replaceChar(unsigned char c)
  15. {
  16. if( '0' <= c && c <= '9' ) return 0;
  17. if( 'A' <= c && c <= 'Z' ) return 0;
  18. if( 'a' <= c && c <= 'z' ) return 0;
  19. if( '@' == c ) return 0;
  20. if( '*' == c ) return 0;
  21. if( '-' == c ) return 0;
  22. if( '.' == c ) return 0;
  23. if( '_' == c ) return 0;
  24. return 1;
  25. }


  26. /**
  27. * @brief 文字列をURLエンコードする。
  28. *
  29. * @param [in] input エンコード前の文字列
  30. * @param [out] output エンコード済み文字列
  31. * @return なし
  32. */
  33. void URLEncode(unsigned char *input, unsigned char *output)
  34. {
  35. /** @todo 実装してください。 */
  36. }


  37. int main(int argc, char *argv[])
  38. {
  39. char param[URLSIZE];
  40. /* テストデータでURLEncode()を実行する。 */
  41. URLEncode("Hi!", param);
  42. printf("Hi! => %s\n", param);
  43. return 0;
  44. }


読者登録

nakano.hさんの更新情報・新作情報をメールで受取りますか?(読者登録について