C言語のサンプルコードです。C言語(1.基本)も参照のこと。
以下は自分の作ったロボットのコード。
その1:
#include <stdio.h> #include <stdlib.h> struct _obj { int o; int n; }; void action(int* p, struct _obj *obj){ if(*p==0){ printf("[1] テレビは、つまらない\n"); } else if(*p==1){ printf("[2] テレビは、面白い\n"); } else if(*p==2){ printf("[3] パソコンは、つまらない\n"); } else if(*p==3){ printf("[4] パソコンは、面白い\n"); } else if(*p==4){ printf("[5] テレビやパソコンは、機械だ。\n"); } else if(*p==5){ printf("[6] テレビやパソコンは、生き物ではない。\n"); } else if(*p==6){ printf("[7] テレビって何なのだろう。\n"); } else if(*p==7){ printf("[8] テレビとパソコンは好きだ。\n"); } else if(*p==8){ printf("[9] テレビとパソコンは嫌いだ。\n"); } else if(*p==9){ if(obj->n==0){ printf("[10] 比較すると、テレビの方が普通だ。\n"); } else if(obj->n==1){ printf("[11] 比較すると、パソコンの方が普通だ。\n"); } } else if(*p==10){ if(obj->n==0){ printf("[12] テレビよりパソコンの方が普通かな。\n"); obj->n=1; } else if(obj->n==1){ printf("[13] パソコンよりテレビの方が普通かな。\n"); obj->n=0; } } else if(*p==11){ if(obj->o==0){ printf("[14] リンゴが好きです。\n"); } else if(obj->o==1){ printf("[15] みかんが好きです。\n"); } } else if(*p==12){ if(obj->o==0){ printf("[16] リンゴより、みかんが好きになりました。\n"); obj->o=1; } else if(obj->o==1){ printf("[17] みかんより、リンゴが好きになりました。\n"); obj->o=0; } } } int main(void){ int p; struct _obj obj; p=0; obj.o=0; obj.n=0; while(1){ p=rand()%13; action(&p, &obj); } }
その2(Qiitaで、@shiracamusという方と共同で作りました。):
#include <stdio.h> struct _obj { int p; }; int check1 (struct _obj *obj) { if (obj->p == 0) { return 1; } return 0; } int check2 (struct _obj *obj) { if (obj->p == 1) { return 1; } return 0; } void action1 (struct _obj *obj) { printf("ここではアクション1をやります。\n"); } void action2 (struct _obj *obj) { printf("ここではアクション2をやります。\n"); } struct brain { int (*check)(struct _obj *obj); void (*action)(struct _obj *obj); } brain[] = { { check1, action1 }, { check2, action2 }, { NULL, NULL } }; void doing (struct _obj *obj) { struct brain *b; for (b = brain; b->check; b++) { if (b->check(obj)){ b->action(obj); } } } int main (void) { struct _obj obj = { .p = 0 }; struct _obj obj2 = { .p = 1 }; while(1){ doing(&obj); doing(&obj2); } }
自分で作った簡単なプログラムです。攻撃力が10のキャラと、攻撃力が1だが「1ターンごとに攻撃力が1上がっていく」キャラが戦って、いつ上がっていく方のキャラが上回るか、を計算する。
正確にいうと、「いつ上回るかを計算する」というより、その「上回っていく過程」を表示する。
Rustで書いたコードをCに移植しました。
#include <stdio.h> int main(void) { int x; int y; int i; x = 0; y = 0; for (i = 1; i <= 100; i++) { x += 10; y += i; printf("%d\t%d\t%d\n", x, y, i); } }
自分で作った指定された値段からお札の枚数を数えるプログラム。こういう小さなプログラムを書くのは楽しいです。みなさんにもプログラムの入門として、このようなプログラムを書いてみてはいかがでしょうか。
#include <stdio.h> int main(void){ int nedan = 98760; int x = nedan; int ichiman = 0; int gosen = 0; int sen = 0; int gohyaku = 0; int hyaku = 0; int amari = 0; while (x >= 10000) { x -= 10000; ichiman++; } while (x >= 5000) { x -= 5000; gosen++; } while (x >= 1000) { x -= 1000; sen++; } while (x >= 500) { x -= 500; gohyaku++; } while (x >= 100) { x -= 100; hyaku++; } amari = x; printf("%d円は一万円札%d枚、五千円札%d枚、千円札%d枚、五百円玉%dつ、百円玉%dつ、あまり%d円です。", nedan, ichiman, gosen, sen, gohyaku, hyaku, amari); }
オンラインでソースコードをコンパイル・実行できるPaiza.ioで開発しました。
以下はC言語で自分が書いたFizzBuzz。3の倍数の時はFizz、5の倍数の時はBuzz、3と5両方ともの倍数の時はFizzBuzz、そうでない時は数値を発言する。
#include <stdio.h> int main(void){ int i; for (i = 1; i <= 100; i++) { if (i % 15 == 0) { printf("FizzBuzz, "); } else if (i % 3 == 0) { printf("Fizz, "); } else if (i % 5 == 0) { printf("Buzz, "); } else { printf("%d, ", i); } } printf("終了.\n"); }
実行結果:
1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, 37, 38, Fizz, Buzz, 41, Fizz, 43, 44, FizzBuzz, 46, 47, Fizz, 49, Buzz, Fizz, 52, 53, Fizz, Buzz, 56, Fizz, 58, 59, FizzBuzz, 61, 62, Fizz, 64, Buzz, Fizz, 67, 68, Fizz, Buzz, 71, Fizz, 73, 74, FizzBuzz, 76, 77, Fizz, 79, Buzz, Fizz, 82, 83, Fizz, Buzz, 86, Fizz, 88, 89, FizzBuzz, 91, 92, Fizz, 94, Buzz, Fizz, 97, 98, Fizz, Buzz, 終了.
FizzBuzzはプログラマとしての最低限のスキルがあるかどうかを調べるための問題で、新しいプログラミング言語の入門コードにもよく使われる。
以下は参考リンク。
Javaサンプルコード、Pythonサンプルコード、Rubyサンプルコード、JavaScriptサンプルコードも参照のこと。
2023.05.17
coreutils(UNIXの汎用コマンド)のgitで基本的なコマンドのコードを読むことが出来ます。
サンプルコード集