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と同様の間隔で扱える範囲については、思ったより学習は早く進められるかもしれない。