プログラミング言語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度