CとRの類似点
RはC言語で書かれているため、両者には共通点が多いようだ
#include <stdio.h> main () { int age; age = 22; if (age >= 20) { puts("You are an adult"); } else { puts("You are a child"); } }
基本的な構文、演算子等は酷似している。(そもそもどの言語も似通っているかもしれないが)
a == b : aとbの値が等しい
a != b :aとbの値が等しくない
a >= b, a <= b :aとbの大小
(a == b) && (c==d) : aとbが等しい かつ cとdが等しい ※Rでは&を使用
(a == b) || (c==d): aとbが等しい または cとdが等しい ※Rでは|を使用
a % b:aをbで割った余り ※Rでは a%%b
目立った違いは、冒頭の#include <stdio.h>, 変数の型の定義,main()の部分, あとはセミコロンくらいのように思える。なお、セミコロンをif文の後につけると、if文が機能しなくなるとのこと。(下記if文の条件は終了し、スキップしてしまう)
#include <stdio.h> main () { int age; age = 20; if (age = 20) ; //このセミコロンがあるとif文が無効となる { puts("Congratulations!"); } }
Rで扱ったswitch文もほぼ同様の感覚。
#include <stdio.h> main () { int result; result = 0; switch (result) { case 0: puts("Very Bad"); break; case 1: puts("Poor"); break; case 2: puts("As usual"); break; case 3: puts("Good"); break; case4: puts("Very Good"); break; default: puts("Error"); break; } }
for文、while文も同様。
#include <stdio.h> main () { int counter; for (counter=0; counter <=8; counter +=1) { printf("%d\n",counter); } long long num; num = 1; while (num <= 1000000000000) { printf("%d\n",num); num *= 2; } }
最後のwhile文はオーバーフローしたのか、途中で値が0となった。何故か。
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 -2147483648 ←突然負の値が登場し、以後0に。 0 0 0 0 0 0 0 0
Rと同様の間隔で扱える範囲については、思ったより学習は早く進められるかもしれない。