目次
はじめに
はじめに
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
ソースコードの解説
奥付
奥付

閉じる


<<最初から読む

6 / 120ページ

試し読みできます

C言語プログラミングの学習環境

 C言語プログラミングの学習を始めるための準備は以上で完了です。 今後は次のようにウィンドウを3つ並べたスタイルで演習課題のプログラムを作成していくと良いでしょう。
 Visual C++ 2010 ExpressはCソースファイルをダブルクリックして起動すると、ソースコードエディタのみのシンプルな状態で開きます。

C言語プログラミングの学習環境


Tips : コマンドプロンプトの画面をクリアする

 clsコマンド(Clear Screen)を実行すると、コマンドプロンプトに溜まったメッセージを消去できてスッキリします。
試し読みできます

終了ステータスって?

Column : 終了ステータスって?

 C言語のプログラムはmain関数から始まり、main関数の最後に書いてある「return 0;」を処理するとプログラムが終了します。 このときmain関数の戻り値がどうなってしまうのかというと、実はコマンドプロンプトが受け取っています。
 試しに「hello.exe Yamada」を実行した直後に「echo %ERRORLEVEL%」と入力してみてください。 main関数の戻り値である「0」が表示されるはずです。 さらに引数なしで「hello.exe」を実行した直後にもう一度「echo %ERRORLEVEL%」と入力してみてください。 今度はmain関数内のif文で返した「-1」が表示されるはずです。
 main関数から返したこの値(終了ステータス)は、バッチファイル(Linuxならシェルスクリプト)で複数のプログラムを続けて実行させるとき、途中のプログラムがエラーを起こしたらバッチ処理を中断させたい場合などに必要となります。 一般に0が正常終了で、0以外が異常終了と判断されます。
試し読みできます

課題1 「整数値を3桁区切りで表示する」

整数値を3桁区切りで
表示するプログラム

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

課題1 「整数値を3桁区切りで表示する」

 long型の整数値を3桁区切り形式の文字列に変換する関数convert()を実装してください。 変換ルールは次の通りとします。
  1. 負数の場合、先頭にマイナス符号を付ける。
  2. 数値の下位から3桁ごとにコンマを挿入する。
3桁区切り形式の変換例

試し読みできます

ソースコードの雛形

  1. #include <stdio.h>


  2. /** 数字列バッファサイズ */
  3. #define BUFSIZE 15


  4. void convert(long num, char str[]);


  5. /**
  6. * @brief 整数値から3桁区切りの数字列を生成する。
  7. *
  8. * @param [in] num 桁区切りしたい整数値
  9. * @param [out] str 桁区切りされた数字列
  10. * @return なし
  11. */
  12. void convert(long num, char str[])
  13. {
  14. /** @todo 実装してください。 */
  15. }


  16. int main(int argc, char *argv[])
  17. {
  18. char buffer[BUFSIZE];
  19. /* テストデータでconvert()を実行する。 */
  20. convert(1234567L, buffer);
  21. printf("%ld => %s\n", 1234567L, buffer);
  22. convert(-57482L, buffer);
  23. printf("%ld => %s\n", -57482L, buffer);
  24. return 0;
  25. }

試し読みできます

h20a6.c

  1. /** @file h20a6.c
  2. * @brief 整数値を3桁区切りで表示するプログラム
  3. *
  4. * - 負数の場合、先頭にマイナス符号を付ける。
  5. * - 数値の下位から3桁ごとにコンマを挿入する。
  6. *
  7. * @see 平成20年度秋期 午後試験 問6
  8. */
  9. #include <stdio.h>


  10. /** 数字列バッファサイズ */
  11. #define BUFSIZE 15


  12. void convert(long num, char str[]);


  13. /**
  14. * @brief 整数値から3桁区切りの数字列を生成する。
  15. *
  16. * @param [in] num 桁区切りしたい整数値
  17. * @param [out] str 桁区切りされた数字列
  18. * @return なし
  19. */
  20. void convert(long num, char str[])
  21. {
  22. const char table[] = "0123456789";
  23. int minus = 0;
  24. int i = 0, j = 0;
  25. char tmp;
  26. /* 負数の場合、フラグを立てておく。 */
  27. if( num < 0 )
  28. {
  29. minus = 1;
  30. num = -num;
  31. }
  32. do
  33. {
  34. /* 最下位桁を取り出し、1桁右シフトする。 */
  35. str[j++] = table[num % 10];
  36. num /= 10;
  37. /* 3桁ごとにコンマを挿入する。 */
  38. i++;
  39. if( i % 3 == 0 && num != 0 )
  40. {
  41. str[j++] = ',';
  42. }
  43. } while( num != 0 );
  44. /* 負数の場合、マイナス符号を付ける。 */
  45. if( minus != 0 )
  46. {
  47. str[j++] = '-';
  48. }
  49. str[j--] = '\0';
  50. /* 逆向きに出来上がった数字列を並べ直す。 */
  51. for( i = 0; i < j; i++, j-- )
  52. {
  53. tmp = str[i];
  54. str[i] = str[j];
  55. str[j] = tmp;
  56. }
  57. }


  58. /**
  59. * @brief エントリポイント
  60. *
  61. * @param [in] argc コマンドライン引数の数
  62. * @param [in] argv コマンドライン引数
  63. * @return 終了ステータス
  64. *
  65. * @par 実行方法:
  66. * cmd> h20a6.exe
  67. */
  68. int main(int argc, char *argv[])
  69. {
  70. char buffer[BUFSIZE];
  71. long test_data[] = {
  72. 1234567L,
  73. -57482L,
  74. 63L,
  75. -999999L,
  76. 0L
  77. };
  78. int t, tests = sizeof(test_data) / sizeof(*test_data);
  79. /* テストデータでconvert()を実行する。 */
  80. for( t = 0; t < tests; t++ )
  81. {
  82. convert(test_data[t], buffer);
  83. printf("%ld => %s\n", test_data[t], buffer);
  84. }
  85. return 0;
  86. }


読者登録

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