Subsections

2章 まず慣れよう

2.1 本日の課題

以下の2つのプログラムを作成する. 教科書などを写しただけでは身につかないので, 自ら実現したい機能を考え, それを実現するオリジナルのプログラムを作成すること.

()内は教科書の参考となるプログラム例.

  1. 整数 (int 型) を printf 関数により出力する. (List 1-1, List 1-2, List 1-3)

  2. int 型の変数に値を代入し printf 関数により出力する. (第1-2節 変数, List 1-8)

  3. int 型変数を用いて演算を行い, その結果を出力する. ここでは, 演算子として 和(+) 差(-) 積(*) 商(/) 剰余% を覚えましょう. (第2-1節 演算.)

  4. scanf 関数により int 型変数に入力を行い, その値や その値を用いて演算した結果を printf 関数により出力する. (List 1-9, List 1-10, List 1-12)

  5. 以下の点に注意し, 実数(double 型)について 上記4つと同じプログラムを作成する. (List 2-6, List 2-7)

以上で作成した8つのプログラム(.cが付くファイル)をメールで提出する. 本文に, 学籍番号, 氏名を明記すること.

2.2 新しい文法事項

プログラムの構造
#include <stdio.h>>
int main(void)
{
    printf("Hello\n");
    return 0;
}
main関数の次の{から対応する}の間のブロック内が 前から順に実行される.

1つの文は ; (セミコロン)で終わる.

コメント/注釈
/**/ で囲まれた部分および // からそのの終わりまでは, コメント.

エスケープシーケンス
文字列中では, $\backslash$ とそれに続く1文字は, 特殊な意味を持つようになる. \n: 改行, \a:警告(音), \t:タブ など.

さらに, printf などで用いる書式では, % とそれに続く文字は, 特殊な意味を持つようになる. %d: その位置に符号付き整数を10進数で出力. %x: その位置に整数を 16進数で出力.

このように文字列中に文字そのものではなく命令を埋め込むために, $\backslash$%のように, モードを変更する(エスケープ)文字が用いられる.

2.3 puts, printf, scanf

puts, printf 画面に出力を行う関数, scanf はキー ボードから入出力を行う関数である.

最後にfが付く関数 printf, scanf は書式 (format) に従って入出力を行う. putsは書式が無く引数として与えられた文字列をそのまま出力する. また, puts は文字列を出力した後, 自動的に改行を行う点で printf とは異なる.

puts
与えられた文字列を出力する.

printf
文章の中に数値や文字を埋め込んで出力する際に有用. %dのある位置に順に引数の値が埋め込まれる. %dの数と引数の数や型が一致するように注意すること.
#include <stdio.h>>
int main(void)
{
    int a, b;
    a = 4;
    b = 5;
    printf("%dと%dの和は%dです.\n", a, b, a+b);
    return 0;
}

数値や文字のみの出力も可能.

#include <stdio.h>>
int main(void)
{
    printf("%d\n", 4);
    return 0;
}

埋め込みを行わないで文章のみを出力することも可能.

#include <stdio.h>>
int main(void)
{
    printf("こんにちは.\n");
    return 0;
}

実数(double 型)は %d の代わりに %f を用いる.

#include <stdio.h>
int main(void)
{
    double x;

    x = 5.2;
    printf("x = %f\n", x);
    return 0;
}

scanf
整数を入力する時は %d, 実数を入力する時は %lf (パーセント エル エフ)を書式で指定する.
#include <stdio.h>

int main(void)
{
    int a;
    double b;

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

    return 0;
}
変数には, & をつけることに注意. これにより, a が保持する値ではなく, メモリ上の a のアドレスを scanf に渡すことになる. 詳細はポインタの所で学習します.

(c)1999-2013 Tetsuya Makimura