C0言語サンプルコードです。

サンプル1
//C0言語インタプリタは次のようなソースコードを読み取って、プログラムを実行します

//関数の外でグローバル変数を宣言できます
//変数として使用できるデータ型はint型とboolean型です
int a = 20;
boolean bool = true;

int main() {

	//複合文の先頭で、ローカル変数を宣言できます
	int i = 5;

	i = i + 10;

	//標準関数printを使って、変数や定数を表示できます
	print("i = %d%n", i); //int型の整数を表示
	print("%d%n", a); //グローバル変数を表示
	print("%b%n", bool); //boolean型の整数を表示
	
	//10進定数の表示
	print(100);
	print("%n");
	
	//真偽値定数の表示
	print(true);
	print("%n");
	print(false);
	print("%n");
	
	//文字列定数の表示
	print("文字列定数");
	
	return 0;
}

サンプル2
//10進定数の表示

int main() {
	print(100);
	return 0;
}

サンプル3
//文字列定数

int main () {
	print("文字列定数");
	return 0;
}

サンプル4
//真偽値定数

int main() {
	print(true);
	print("%n");
	print(false);
	return 0;
}

サンプル5
//加算式, 減算式, 乗算, 除算式, 剰余式

int main() {
	
	int i = 10;
	
	//加算式
	i = i + 1;
	print("%d%n", i);
	
	//減算式
	i = i - 3;
	print("%d%n", i);
	
	//乗算
	i = i * 2;
	print("%d%n", i);
	
	//除算式
	i = i / 2;
	print("%d%n", i);
	
	//剰余式
	i = i % 2;
	print("%d%n", i);
	
	return 0;
}

サンプル6
//関係演算子

int main() {
	boolean bool = false;
	
	bool = 1 < 3;
	print("%b%n", bool);
	
	bool = 1 > 3;
	print("%b%n", bool);
	
	bool = 5 >= 1;
	print("%b%n", bool);
	
	bool = 5 <= 1;
	print("%b%n", bool);
	
	return 0;
}

サンプル7
//同等演算子, 不等演算子

int main() {
	boolean bool = false;
	
	bool = 1 == 1;
	print("%b%n", bool);
	
	bool = 1 != 1;
	print("%b%n", bool);
	
	return 0;
}

サンプル8
//条件積演算子, 条件和演算子

int main() {
	
	boolean bool;
	
	bool = true && true;
	print("%b%n", bool);
	
	bool = true && false;
	print("%b%n", bool);
	
	bool = false && true;
	print("%b%n", bool);
	
	bool = false && false;
	print("%b%n", bool);
	
	bool = true || true;
	print("%b%n", bool);
	
	bool = true || false;
	print("%b%n", bool);
	
	bool = false || true;
	print("%b%n", bool);
	
	bool = false || false;
	print("%b%n", bool);
	
	return 0;
}

サンプル9
//単項マイナス式, 前置増分, 前置減分, 後置増分, 後置減分

int main() {
	
	int i = 10;
	
	//単項マイナス式
	print("単項マイナス式%n");
	print("i = %d%n%n", -i);
	
	//前置増分
	print("前置増分%n");
	print("i = %d%n", ++i);
	print("i = %d%n%n", i);
	
	//前置減分
	print("前置減分%n");
	print("i = %d%n", --i);
	print("i = %d%n%n", i);
	
	//後置増分
	print("後置増分%n");
	print("i = %d%n", i++);
	print("i = %d%n%n", i);
	
	//後置減分
	print("後置減分%n");
	print("i = %d%n", i--);
	print("i = %d%n%n", i);
	
	return 0;
}

サンプル10
//論理否定演算子

int main() {
	
	print(!true);
	print("%n");
	print(!false);
	
	return 0;
}

サンプル11
//添字式

int main() {
	
	int[10] array; //C0言語の配列の宣言。データ型の後ろに配列のサイズを書く
	int i = 0;
	
	for (i = 0; i < 10; i++) {
		array[i] = i;
	}
	
	print("配列の要素の出力%n");
	for (i = 0; i < 10; i++) {
		print("array[%d", i);
		print("] = %d%n", array[i]);
	}
	
	return 0;
}

サンプル12
//関数呼び出し

int main() {
	
	int i = 0;
	
	user_print(); //戻り値のない関数
	i = add(100, 1000); //戻り値のある関数
	print("%d%n", i); //標準関数print
	i = rand(); //標準関数rand。整数型の乱数を生成する
	print("%d%n", i);
	
	return 0;
}

void user_print() {
	print("user_print%n");
}

int add(int i, int j) {
	return i + j;
}

サンプル13
//if文

int main() {
	
	int i = 1;
	
	//条件式がtrueの場合、ifに付いている文を実行する
	//条件式はboolean型を返す式でなければならない
	if (i < 10) {
		print("i < 10%n");
	} else if (i > 10) {
		print("i < 10%n");
	} else {
		print("else");
	}
	
	//ifに付く文は複合文でなくても良い
	if (i == 1) print("i = 1");
	
	return 0;
}

サンプル14
//while文

int main() {
	
	int i = 0;
	
	while(i < 3) {
		print("while body%n");
		i++;
	}
	
	return 0;
}

サンプル15
//for文

int main() {
	
	int i = 0;
	
	//C0言語では、for文の初期化式で変数を宣言できない
	for (i = 0; i < 3; i++) {
		print("for body%n");
	}
	
	return 0;
}

サンプル16
//break文

int main() {
	
	int i = 0;
	
	while (i < 3) {
		print("while body%n");
		i++;
		break;
	}
	
	for(i = 0; i < 3; i++) {
		print("for body%n");
		break;
	}
	
	i = 0;
	while (i < 20) {
		print("while body2%n");
		i++;
		if (true) {
			break;
		}
	}
	
	print("%d%n", i);
	
	return 0;
}

サンプル17
//return文

int main() {
	
	int i = 0;
	boolean bool = false;
	
	//戻り値のない関数
	user_func();
	
	//戻り値を返す関数
	i = add(100, 1000);
	print("%d%n", i);
	
	//戻り値として、boolean型も認めている
	bool = bool_func();
	print("%b%n", bool);
	
	return 0;
}

void user_func() {
	return;
}

int add(int i, int j) {
	return i + j; //式の計算結果を呼び出し元へ戻す
}

boolean bool_func() {
	return true; //boolean型も戻り値として、認めている
}

サンプル18
//空文

int main() {
	
	int i = 0;
	
	for(i = 0; i < 10; i++) {
		; //何もない';'は空文であり、何も実行しない
	}
	
	print("%d%n", i);
	
	return 0;
}

サンプル19
//複合文
int a = 200;

int main() {
	
	int i = 0;
	print("%d%n", i);
	print("%d%n", a);
	
	//複合文の中で、複合文を書ける
	{
		int i = 100;
		int a = 2000;
		print("%d%n", i); //複合文の中で宣言した変数が優先的に読まれる
		print("%d%n", a);
	}
	
	print("%d%n", i);
	print("%d%n", a);
	
	return 0;
}

サンプル20
//不完全配列型

int main() {
	
	int[] array; //不完全配列型を宣言できる
	int[3] array2;
	int[] array3;
	int i = 0;
	
	print("不完全配列型のテスト%n");
	
	for (i = 0; i < 3; i++) {
		array2[i] = i;
	}
	
	//不完全配列型に配列の参照を代入
	array = array2; //配列変数の識別子は配列の参照を返す
	
	//代入後は配列型変数として、値にアクセスできる
	for (i = 0; i < 3; i++) {
		print("%d%n", array[i]);
	}
	print("%n");
	
	//関数の引数、戻り値として、配列型を利用できる
	array3 = func(array2);
	
	for (i = 0; i < 3; i++) {
		print("%d%n", array3[i]);
	}
	print("%n");
	
	//関数内で配列の値を変更する
	func2(array2);
	
	//関数内での変更が反映されている
	for (i = 0; i < 3; i++) {
		print("%d%n", array2[i]);
	}
	
	return 0;
}

//関数の引数、戻り値として、配列型を利用できる
//引数で配列を受け取る場合、不完全配列型を使用する
int[] func(int[] a) {
	
	int i = 0;
	
	for (i = 0; i < 3; i++) {
		print("%d%n", a[i]);
	}
	print("%n");
	
	return a;
}

//関数内で配列の値を変更する
void func2(int[] a) {
	a[0] = 100;
}

サンプル21
//配列の要素数
int element_cnt = 10;

//ソートする配列
int[element_cnt] array;

/*main文*/
/*バブルソートを呼び出し、結果を表示して終了する*/
int main () {
	
	int i = 0;
	
	//配列の各要素にランダムな値を入力
	for (i = 0; i < element_cnt; i++) {
		array[i] = rand() % 100;
	}

	//ソート前の配列を表示
	print("ソート前の配列%n");
	for (i = 0; i < element_cnt; i++) {
		print("%d ",array[i]);
	}
	print("%n");

	//バブルソートの呼び出し
	bubble_sort(array, element_cnt);

	//結果の表示
	print("ソート後の配列%n");
	for (i = 0; i < element_cnt; i++) {
		print("%d ",array[i]);
	}
	print("%n");

	print("処理を終了します。%n");
	
	return 0;
}

/*バブルソート*/
void bubble_sort(int[] array, int n)
{
    int sorting_element; //整列される要素を指す添え字
	int least_element; //未整列の配列にある最小値を指す添え字
	int tmp; //作業用の一時領域
	int i; //ループのカウンタ用

	//ソート全体を管理するループ
	//0から順に、配列の添え字sorting_elementが指す要素に、
	//ループが回る度に、未整列の配列から見つかった最小の値を代入していく
	//全体のループが一回転するごとに、整列済みの配列の範囲(添え字sorting_element-1の範囲)が一つ増える
	//整列済みの配列の範囲が配列の要素数に達したら、ソート全体が終了する
	for (sorting_element = 0; sorting_element < n - 1; sorting_element++) {
		
		//未整列の配列から、最小の要素を探し、整列済みの配列の一番後ろに付けるループ
    	//未整列の配列の要素を全てスキャンしながら、整列を行う
		//least_elementが指す配列の要素を、最小値として未整列の配列の一番左へ(添え字sorting_element)流す
		//配列の一番後ろから、未整列の配列にある最小値を、整列済みの配列の一番後ろに付けるまでループする
		//least_elementの初期値は、ソートする配列の一番後ろの要素を指す添え字
		//ソート全体を管理するforループの中にある為、外のループが終わる度、配列の一番後ろを指す
		for (least_element = n - 1; least_element > sorting_element; least_element --) {
			
			//least_element(ループ中で見つけた最小値)の添え字の要素より、least_element-1の添え字の要素が大きい場合(新たな最小値が見つかった場合)、
			//添え字least_elementの要素と添え字least_element-1の要素を入れ替える
			//入れ替えが終わると、新たに見つかった最小値を元にソートを続ける
			//least_elementは、その時点(一番最後の要素から)で見つかった配列の最小要素
			//sorting_element(整列される要素を指す添え字)よりもleast_element(現在処理中の添え字)が大きい限り、
			//ソートを繰り返す。
			
			//最小値が見つかった時の処理
			if (array[least_element-1] > array[least_element]) {
				
				//最小値を左右で交換
				tmp = array[least_element];
				array[least_element] = array[least_element-1]; 
				array[least_element-1] = tmp;

				//途中結果(ソート中の配列)の表示
				print("ソート中の配列 : %d番目の要素を%d番目の要素と入れ替えた%n", least_element, least_element - 1);
				for (i = 0; i < element_cnt; i++) {
					print("%d ",array[i]);
				}
				print("%n");
			}
		}

		//途中結果(ソートが1回終わった後)の表示
		print("ソート中の配列 : %d番目の要素まで、ソートが終了%n", sorting_element);
		for (i = 0; i < element_cnt; i++) {
			print("%d ",array[i]);
		}
		print("%n");

	}
}

サンプル22
//配列の要素数
int element_cnt = 10;

//ソートする配列
int[element_cnt] array;

/*main文*/
/*シェルソートを呼び出し、結果を表示して終了する*/
int main () {
	
	int i = 0;
	
	//配列の各要素にランダムな値を入力
	for (i = 0; i < element_cnt; i++) {
		array[i] = rand() % 100;
	}

	//ソート前の配列を表示
	print("ソート前の配列%n");
	for (i = 0; i < element_cnt; i++) {
		print("%d ",array[i]);
	}
	print("%n");

	//シェルソートの呼び出し
	shell_sort(array, element_cnt);

	//結果の表示
	print("ソート後の配列%n");
	for (i = 0; i < element_cnt; i++) {
		print("%d ",array[i]);
	}
	print("%n");

	print("処理を終了します。%n");
	
	return 0;
}

/* シェルソート */

void shell_sort(int[] a, int n) {
	
	int h; //hソート用の増分
	int sort_of_element; //ソートの対象になる要素
	int inserting_element; //挿入位置
	int tmp; //作業用一時領域
	int i; //ループ用変数

	//前処理として、幾つずつ離れた要素を整列するか、配列の大きさに応じた値を出す
	//配列の大きさに応じて、hずつ離れた要素を整列する
    for (h = 1; h < n/9; h = h * 3 + 1);

	//hが1になるまでループ
    for (; h > 0; h = h / 3) {
    	
    	//挿入ソートの処理
		for (sort_of_element = h; sort_of_element < n; sort_of_element ++) {
			
			//hの現在地の表示
    		print("hの現在値 : %d%n",h);
			
		    inserting_element = sort_of_element;
			
		    while (inserting_element >= h && (a[inserting_element-h] > a[inserting_element])) {
		    	
		    	//挿入位置と挿入位置-hの要素を交換する
				tmp = a[inserting_element];
		    	a[inserting_element] = a[inserting_element-h];
		    	a[inserting_element-h] = tmp;
		    	
		    	//挿入位置の値からhを引き、チェックする添え字を後ろへずらす
		    	//交換の度に挿入位置が、hの値分だけずれる
				inserting_element = inserting_element - h;
		    	
		    	//途中結果の表示
		    	print("↑ ソート中の配列 : %d番目の要素を%d番目を交換%n", inserting_element + h, inserting_element);
		    	
		    	//配列の添え字の表示
		    	print("配列の添え字%n");
		    	for(i = 0; i < n; i++) {
		    		print("%d",i);
		    		
		    		//空白の挿入
		    		if (i <= 10) {
		    			print("  ");
		    		}
		    		
		    		else if (i > 10) {
		    			print(" ");
		    		}
		    	}
		    	print("%n");
		    	
				for (i = 0; i < n; i++) {
					print("%d ",a[i]);
				}
				print("%n");
		    }
			//途中結果の表示
			print("ソート中の配列 : %d番目の要素まで、ソートが終了%n", sort_of_element);
			
			//配列の添え字の表示
			print("配列の添え字%n");
		    for(i = 0; i < n; i++) {
		    	print("%d",i);
		    	
		    	//空白の挿入
		    	if (i <= 10) {
		    		print("  ");
		    	}
		    	
		    	else if (i > 10) {
		    		print(" ");
		    	}
		    }
		    	print("%n");
			
			for (i = 0; i < n; i++) {
				print("%d ",a[i]);
			}
			print("%n");
		}
	}
}

サンプル23
//配列の要素数
int element_cnt = 10;

//ソートする配列
int[element_cnt] array;

/*main文*/
/*クイックソートを呼び出し、結果を表示して終了する*/
int main () {
	
	int i = 0;
	
	//配列の各要素にランダムな値を入力
	for (i = 0; i < element_cnt; i++) {
		array[i] = rand() % 100;
	}

	//ソート前の配列を表示
	print("ソート前の配列%n");
	for (i = 0; i < element_cnt; i++) {
		print("%d ",array[i]);
	}
	print("%n");

	//クイックソートの呼び出し
	quick_sort(array, element_cnt);

	//結果の表示
	print("ソート後の配列%n");
	for (i = 0; i < element_cnt; i++) {
		print("%d ",array[i]);
	}
	print("%n");

	print("処理を終了します。%n");
	
	return 0;
}

/* 再帰版クイックソート */

/*分割処理*/
/* 配列a[left]~a[r]を分割する。枢軸の添え字を返す */
int partition(int[] a, int left, int right)
{
    int i;
	int j;
	int pivot;
	int tmp;

    /* ポインタiとjを初期化する */
    i = left - 1;
    j = right;
	
    /* いちばん右端の要素を枢軸にする */
    pivot = a[right];
	
	//枢軸を基準に、配列を右側と左側に分ける処理
    /* ポインタiとjがぶつかるまで、値の交換とポインタの移動を繰り返す */
    while(true) {
		/* pivotより大きな要素が見つかるまで、ポインタiを左へ進める */
		while (a[++i] < pivot);
	    	
		/* pivotより小さな要素が見つかるまで、ポインタjを右へ進める */
		while (i < --j && pivot < a[j]);
	    	
		/* ポインタiとjがぶつかったらループを抜ける */
    	if (i >= j) {
		    break;
    	}
	    	
		/* 上記のwhile文で見つかった、iの指す要素とjの指す要素を交換する */
    	/*大きな要素を右側へ、小さな要素を左へ*/
		tmp = a[i];  
    	a[i] = a[j];
    	a[j] = tmp;
    }
	
	//ポインタの移動と値の交換が終わったら、
	//枢軸とポインタiが指す要素(枢軸よりも大きい)を交換する
    /* a[i]と枢軸を交換する */
    tmp = a[i];  
	a[i] = a[right];  
	a[right] = tmp;
	
    return i;
}


/* 実際にクイックソートを行う関数 */
void quick_sort_1(int[] a, int left, int right)
{
	//枢軸
    int v;

    /* 整列する要素が1つなら、何もしないでリターンする */
	//分割できなくなったら
	if (left >= right) {
		return;
	}

	/*分割処理を呼び出す*/
    /* 枢軸vを基準に分割する */
    v = partition(a, left, right);

    /* 左の部分配列a[left]~a[v-1]を整列する */
    quick_sort_1(a, left, v-1);

    /* 右の部分配列a[v+1]~a[right]を整列する */
    quick_sort_1(a, v+1, right);
}


/* クイックソート */
void quick_sort(int[] a, int n)
{
    quick_sort_1(a, 0, n - 1);
}

戻る