プログラミング言語C
以降、K & Rと略記します。
$ emacs file1.c &
$ g++ file1.c
$ ./a.out
// sansu2.c
#include <stdio.h>
int main() {
int a, b, c;
printf("Enter an integer a: ");
scanf("%d", &a);
printf("Enter an integer b: ");
scanf("%d", &b);
c = a + b;
printf("a + b = %d\n", c);
c = a - b;
printf("a - b = %d\n", c);
c = a * b;
printf("a * b = %d\n", c);
c = a / b;
printf("a / b = %d\n", c);
return 0;
}
実行結果
Cのプログラムには主関数(main)がただひとつ存在します。 プログラムは主関数から始まります。波括弧「{, }」 のなかがその定義となります。
変数はメモリ内の位置を 部屋のようなものとかんがえればよいでしょう。 宣言は変数の型の名前と変数のリストから成ります。 Cでは、ふつうは関数の初めに変数の宣言を します。
float upper, lower; (単精度実数型) double x, y; (倍精度実数型) int fahr, celsius; (整数型)
lower = 0; upper = 300;
右辺を左辺に代入する。
a = b; a = a + 1;算術演算子「+, -, *, /, %」
「✕」、「÷」は、それぞれ、「*」、「/」で表わします。 整数型どうしの時は、「/」では切り捨てが行われることに 注意が必要です。「%」は整数どうしの演算で余りを 計算します。
celsius = 5 * (fahr - 32) / 9; q = a / b; r = a % b;標準出力
printf("a + b = %d\n", c);
%dのところに変数cの内容を10進整数で出力する。
標準入力
scanf("%d", &a);
キーボードから10進整数を読み込み、
変数aの箱に入れる。
そこで、
単精度実数型で四則演算を行なうと
// sansu2a.c
#include <stdio.h>
int main() {
float a, b, c;
printf("Enter a real number a: ");
scanf("%f", &a);
printf("Enter a real number b: ");
scanf("%f", &b);
c = a + b;
printf("a + b = %f\n", c);
c = a - b;
printf("a - b = %f\n", c);
c = a * b;
printf("a * b = %f\n", c);
c = a / b;
printf("a / b = %f\n", c);
return 0;
}
課題1
| 演算子と用例 | 意味 |
|---|---|
| a > b | aはbより大 |
| a >= b | aはb以上 |
| a < b | aはbより小 |
| a <= b | aはb以下 |
| a == b | aとbは等しい(論理的等価) |
| a != b | aとbは等しくない |
論理演算子
| 演算子と用例 | 用例 | 意味 |
|---|---|---|
| ! | !a | 論理的否定。真偽を反転させる。 |
| && | (a == b) && (c == d) | かつ。論理積を取る。 |
| || | (a == b) || (c == d) | または。論理和を取る。 |
#include <stdio.h>と書くのでした。
| 演算子と用例 | 意味 |
|---|---|
| printf("%d + %d = %d\n", a, b, c); | a, b, cを順に%dの箇所に 10進整数で出力する。 |
| printf("%3.0f %6.1f\n", fahr, celsius); | fahr, celsiucを順に%fの箇所に 実数で出力する。fahrは、すくなくとも3文字幅 (小数点を込める)、小数点以下なし。celsiusは、 すくなくとも6文字幅、小数点以下3桁。 |
| printf("%c", c); | cを半角文字として出力する。 | putchar(c); | cを半角文字として出力する。 |
| 演算子と用例 | 意味 |
|---|---|
| scanf("%d", &a); | キーボードから読み込んだ10進整数を変数aに入れる。 |
| scanf("%d %d", &a, &b); | キーボードから10進整数をふたつ、空白を置いて 読み込む。 |
| scanf("%d", &a); | キーボードから読み込んだ10進整数を変数aに入れる。 |
| scanf("%f", &a); | キーボードから(10進の)単精度実数を読み込む。 |
| scanf("%lf", & a); | キーボードから(10進の)倍精度実数を読み込む。 「%lf」は「エル・エフ」である。 |
| scanf("%lf", &a); | キーボードから(10進の)倍精度実数を読み込む。 「%lf」は「エル・エフ」である。 |
| scanf("%c", &c); | cを半角文字として入力する。 | getchar( ); | cを半角文字として入力する。 |
いかなるプログラムも、上記の(i)連続 (ii)分岐・選択 (iii)繰り返し(ループ)の3種類をつかって構成することができます。
実際のプログラムでは、 (i)連続 (ii) 分岐・選択 (iii) 繰り返し(ループ)の3種類を 組み合わせて用いることになります。いくつかの例を、 以下に、 模式的に挙げてみることにします。
if (式1) {
文 1;
}
else {
文 2;
}
if 文では、括弧『(』、『)』のなかの「式 1」が真(true)のときに、「文 1」が実行される。
「式 1」が偽(false)のときには、if ブロックには入らず、elseブロックのほ
うに進み、「文 2」を実行します。
ここで、真というのは、「式 1」の値が0以外のときで、偽は「式 1」の値が0に
なるときです。elseブロックは省略することができます。
/* saikoro1.c */
/* 丁か半か? */
#include <stdio.h>
int main() {
int a, b, c;
printf("サイコロの目をふたつ(a, b)入力してください。\n ");
printf("a: ");
scanf("%d", &a); /* ひとつめのサイコロの目の数 */
printf("\nb: ");
scanf("%d", &b); /* ふたつめのサイコロの目の数 */
c = a + b; /* サイコロの目の数の和 */
if ((c % 2) == 0) /* 目の数の和が偶数のとき*/ {
printf("%d, %d の「丁」\n", a, b);
}
else /* 目の数の和が奇数のとき*/ {
printf("%d, %d の「半」\n", a, b);
}
return 0;
}
サイコロ賭博でよくある風景です。
ほんらい乱数などでサイの目をきめるべきです。
しかし、ここでは、いかさまの意図はありませんが、
、手動にしてあります。
また、丁・半の分類だけで、「ぞろ目」の場合をとくに区別はしていません。
摂氏温度と華氏温度の変換は、つぎのようになっている。
(華氏温度) = (摂氏温度) * 9 / 5
+32
となっている。
いま、摂氏温度、あるいは華氏温度がわかっているとき、
もう一方の表示での温度を計算し、両者を端末に出力せよ。
適当な標準入力により2つのコースを選択するように
設定することが必要である。
◎実行例◎ [matsu@localhost Documents]$ g++ ondo1.c [matsu@localhost Documents]$ ./a.out 摂氏・華氏の温度変換をします。 摂氏→華氏のときは、0を入力してください。 華氏→摂氏のときは、1を入力してください。 0 摂氏温度をあたえてください。 100 摂氏: 100.00度, 華氏: 212.00度 [matsu@localhost Documents]$ ./a.out 摂氏・華氏の温度変換をします。 摂氏→華氏のときは、0を入力してください。 華氏→摂氏のときは、1を入力してください。 1 華氏温度をあたえてください。 212 摂氏: 100.00度, 華氏: 212.00度 [matsu@localhost Documents]$ ./a.out 摂氏・華氏の温度変換をします。 摂氏→華氏のときは、0を入力してください。 華氏→摂氏のときは、1を入力してください。 0 摂氏温度をあたえてください。 0 摂氏: 0.00度, 華氏: 32.00度 [matsu@localhost Documents]$ ./a.out 摂氏・華氏の温度変換をします。 摂氏→華氏のときは、0を入力してください。 華氏→摂氏のときは、1を入力してください。 1 華氏温度をあたえてください。 0 摂氏: -17.78度, 華氏: 0.00度