第3章 コンピュータとの対話

1 ディスプレイにデータを出力する

1-1 文字列をCRTに出力する

CRTに文字や数字を出力するには書式付標準出力関数「printf」を使用する。 文字列の場合、printfの括弧の間に表示したい文字列をダブルクォーテーション「”」で囲んで記述する。

例)、CRTに「Hello! Everybody!!」と出力するプログラム

/* 文字列を出力するプログラム */
#include <stdio.h>

main()
{
    printf("Hello! Everybody!!\n");
}

1-2 変数の内容をCRTに出力する

変数の内容を出力するには変換文字を使ってprintfを記述する。

例)、CRTに変数age(int型)の内容を出力するプログラム

/* 変数の内容を出力するプログラム */
#include <stdio.h>

main()
{
    int age = 29;

    printf("%d\n", age);
}

例)、応用

/* 変数の内容を出力するプログラム */
#include <stdio.h>

main()
{
    int age = 29;

    printf("I am %d years old.\n", age);
}

この場合、%dの所にageの内容「29」が入る。

変換文字の種類
変換文字変換の内容引数の型プログラム例
%d引数を符号付き10進数に変換する整数型
%o引数を符号なし8進数に変換する整数型
%x , %X引数を符号なし16進数に変換する整数型
%u引数を符号なし10進数に変換する整数型
%s引数によって指し示される文字列を出力する。出力されるのはNULL文字の前の文字まで、または指定された最大の文字数分。文字列ポインタ
%f引数をfloatまたはdoubleとして受け取り、[-]○○○.○○○○○○の形の10進数に変換する不動小数点型
%e , %E引数をfloatまたはdoubleとして受け取り、[-]○○○.○○○○○○E[+-]○○の形の10進数に変換する不動小数点型
%g , %G%eまたは%fによる変換の文字数の少ないほうの変換をする不動小数点型

例)、変換例

/* 変換例 */
#include <stdio.h>

main()
{
    int i = 12345;
    char moji = 'C';
    char str[80] = "C Language";
    double x = 123.456;

    printf("i = %d\n", i);     ・・・・・・1
    printf("i = %o\n", i);     ・・・・・・2
    printf("i = %x\n\n", i);   ・・・・・・3

    printf("%c Programming\n", moji);・・・4
    printf("%s\n\n", str);     ・・・・・・5

    printf("x = %f\n", x);     ・・・・・・6
    printf("x = %e\n", x);     ・・・・・・7

}

練習)、教科書32ページ「例題1」および「練習問題1」

1-3 変数が複数ある場合

出力したい変数が複数ある場合、引数をカンマ「,」で区切る。

例)、複数の変数の内容を出力する

/* 複数の変数の内容を出力するプログラム */
#include <stdio.h>

main()
{
    int year = 1972, month = 3, day = 28;

    printf("My Birthday\n");
    printf("%d 年 %d 月 %d日\n", year, month, day);

}

1-4 出力桁数の指定

整数や実数のデータを桁数を指定して出力する。整数の場合は%とdの間に出力桁数(フィールド幅)を示す値を記述する。実数は%とfの間に「全体の桁、小数部の桁」を示す値を記述する。

練習)、教科書35ページの例題2及び練習問題2

1-5 更に細かい書式制御

printfの中の%と変換文字との間に次のオプション指示子を入れると、 さらに細かい書式制御ができるようになる。

printf("%_f・・・\n", a);
     ↑
「-」「[0]m」「.」「n」「l」

オプション意味プログラム例

(マイナス符号)
変換された引数を左詰で出力。空いたところにはブランク(空白)が入る。

(桁数記入)
データの確保すべき領域幅(フィールド幅)を最小でもm字の広さに取る。余った領域にはブランクが入る。桁数の先頭に0を付けるとブランクではなく0が入る。

(ピリオド)
フィールド幅と文字数または小数点以下の桁数との区切り

(桁数記入)
数値の場合は小数点以下の桁数。文字列の場合はその取り幅(文字の頭から)7,8,9
対応する引数をlong型にする

例)、さらに細かい書式制御

/* さらに細かい書式制御の例 */
#include <stdio.h>

main()
{
    int i = 12345;
    long j = 123456789;
    double x = 123.456;
    char str[80] = "ABCDEFGHIJ";

    printf("%20d\n", i);       ・・・・・1
    printf("%-20d\n", i);      ・・・・・2
    printf("%020d\n\n", i);    ・・・・・3

    printf("%10d\n", i);       ・・・・・4
    printf("%15d\n", i);       ・・・・・4
    printf("%20d\n\n", i);     ・・・・・4

    printf("%d\n", j);         ・・・・・5
    printf("%ld\n\n", j);      ・・・・・6

    printf("%f\n", x);
    printf("%20.1f\n", x);     ・・・・・7
    printf("%20.3f\n", x);     ・・・・・8
    printf("%20.5s\n", str);   ・・・・・9

}
  1. フィールド幅20字・右詰
  2. フィールド幅20字・左詰
  3. フィールド幅20字・右詰・0埋め
  4. フィールド幅を変えた場合
  5. 単に%dなら、jの内容を正しく表示できない
  6. long型表示にすればOK
  7. フィールド幅20字・小数点以下1桁
  8. フィールド幅20字・小数点以下3桁
  9. フィールド幅20字・右詰・Aから5文字を表示

2 キーボードからデータを入力する

キーボードから値を入力させるにはいろいろな方法があるが、 ここでは書式付標準入力関数(scanf)を使った入力方法を紹介する。

2-1 整数データの入力

キーボードから入力した数字(整数)を、int型変数aに代入するプログラム。

/* 整数を入力するプログラム */
#include <stdio.h>

main()
{
    int a;

    scanf("%d", &a);
    printf("a = %d\n", a);

}

[解説]

  1. %dはprintfと同じ書式制御記号であり、整数を表す。
  2. 引数である変数aには、を付ける。
  3. 引数に指定した変数の中に、キーボードから入力した整数が代入される。
    (10と入力した場合、scanf("%d", &a);はa = 10;と同じ意味になる)

[応用1]

複数の変数にそれぞれ値を入れるプログラム。

/* 2つの整数を入力するプログラム */
#include <stdio.h>

main()
{
    int a, b;

    scanf("%d", &a);
    scanf("%d", &b);

    printf("a = %d b = %d\n", a, b);

}
1つ目の数字を入力してリターンキーを押し、その後2つ目の数字を入力する。

[応用2]

複数の変数に同時に値を入れるプログラム。

/* 2つの整数を同時に入力するプログラム */
#include <stdio.h>

main()
{
    int a, b;

    scanf("%d %d", &a, &b);
    printf("a = %d b = %d\n", a, b);

}
1つ目の数字と2つ目の数字を同時に入力する。
数字の間には空白を入れる。

[補足]

区切り文字は「半角空白」または「カンマ(,)」を使用する。 キーボードでの入力の際、scanf内で空白を指定した場合は空白を、 カンマを使った場合はカンマを使って数値を区切る。

練習問題

教科書37ページ例題3

2-2実数データの入力

キーボードから入力した実数を、double型変数aに代入するプログラム。

/* 実数を入力するプログラム */
#include <stdio.h>

main()
{
    double a;

    scanf("%lf", &a);
    printf("a = %f\n", a);

}

[解説]

  1. %lfはprintfと同じ書式制御記号であり、実数を表す。(%fでは無い。ただしprintfの時は%fでもいいことに注意!)
  2. 引数である変数aには、を付ける。
  3. 入力データに整数を使ってもエラーとはならないし、正しく格納されるが、自動的に型変換が行われるため、実数を使うべきである。

練習問題

教科書37ページ練習問題3

2-3 文字(1文字)の入力

キーボードから入力した文字(1文字のみ)を、char型変数aに代入するプログラム。

/* 文字(1文字)を入力するプログラム */
#include <stdio.h>

main()
{
    char a;

    scanf("%c", &a);
    printf("a = %c\n", a);

}

[解説]

  1. %cはprintfと同じ書式制御記号であり、1文字を表す。
  2. 引数である変数aには、を付ける。
  3. 文字変数aにプログラム内で文字を代入する場合は、文字をシングルクォーテーションで囲む必要がある(a = 'C';)が、キーボードから入力する場合はシングルクォーテーションを付けずに入力する。

2-4 文字列の入力

C言語には、文字列("KOGAKUIN"など)を格納する変数の型は存在しない。そのため、1文字を格納(char)する変数を配列にして、その配列の中に文字列を格納する。

[文字配列宣言方法]

例えば名前(最大20文字)を格納する変数を宣言するには,次のように指定する。

char name[21];

文字列には、文字列の終わりを示す文字(ヌル「\0」)が1文字入るため、最大文字数よりも1文字多く取る必要がある。

[文字列入出力サンプル]

/* 名前を入力し、表示するプログラム */
#include <stdio.h>

main()
{
    char name[80];

    printf("INPUT NAME : ");
    scanf("%s", name);

    printf("Your name is %s.\n", name);

}

[解説]

  1. %sはprintfと同じ書式制御記号であり、文字列を表す。
  2. 引数である変数nameには、「&」は付かない
  3. 入力された文字列の最後にはヌル('\0')が自動的に付けられる

[補足]

文字列入力時、区切り記号を入れるとその文字よりも前までのデータしか格納されない。例えば上記のプログラム実行時、「Taku Ando」と入力してリターンキーを押すと、区切り記号である半角空白よりも前までしか変数に格納されない。よって、printfで出力されるのはTakuだけである。

注意!!

文字配列宣言時に初期値として文字列を代入することはできるが、 プログラム内で代入することはできない。

char name[80] = "Taku Ando";
×name = "Taku Ando";

練習問題

教科書41ページ例題4及び練習問題4

3 文字(アスキー)コード

第3章1,2で、1文字を入力・出力する方法を学んだ。 ここでは文字についてもう少し詳しく解説する。

3-1 文字コードについて

コンピュータで扱う文字は、文字コード(アスキーコード)という整数値(0〜127)に対応付けられている。C言語では、文字をシングルクォーテーションで囲んで表現する。例えばchar型変数cに「A」という文字を打乳する場合、c = 'A';と記述するが、これは、文字「A」のアスキーコード「65」を代入するという意味である。

[文字コードの例]

/* 入力した文字と、文字コードを表示するプログラム */
#include <stdio.h>

main()
{
    char a;

    scanf("%c", &a);
    printf("入力文字「%c」 アスキーコード「%d」\n", a, a);

}

[文字コード表を出力するプログラム]

/* 文字コード表 */
#include <stdio.h>

main()
{
    char c;

    for (c=32 ; c<=127 ; c++)
        printf("文字:%c コード:%d\n", c, c);

}

確認問題

  1. 書式付標準出力関数は?
  2. 書式付標準入力関数は?
  3. 文字列の最後には何がつく?
  4. 製品の定価と個数を入力し、合計金額を表示するプログラムは?
  5. 製品の定価と個数を入力し、合計金額及び消費税、税込価格を表示するプログラムは?
  6. 文字'Z'の文字コードを表示するプログラムは?
  7. "簡単"または"難しい"という文字列を入力し、 "C言語は簡単です!"または"C言語は難しいです!"と表示するプログラムは?

[ TOP ]