Cやってみよう #2
昨日の続き
引数をとって何かを出力する
何作る・・・?
- 無駄なやつ作る
- ググッてビビッときたのが、素数checker
ひとまず、引数をとって出力するだけのやつを作ってみる
- 引数は何個でもOK
int count;
が無いとコンパイルエラーになった。丁寧。
chk-prime.c: 関数 ‘main’ 内: chk-prime.c:16:10: エラー: ‘count’ が宣言されていません (この関数内での最初の使用) for (count = 1; count < argc; count++){ ^ chk-prime.c:16:10: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます
ひとまず引数をprintするだけの動くもの。
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int count; for (count = 1; count < argc; count++){ printf("argv[%d] = %s\n", count, argv[count]); } }
argc
・・・argcはargument countの略です。
printf
を使ってcount
を添字として配列から出力している
ふむふむ。
ここまではOK。
では引数が素数か否か判定するロジックを入れてみる
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int count; int divisor; int i; int x; for (count = 1; count < argc; count++){ divisor = 0; /* 約数のcount用 */ x = atoi(argv[count]); /* 引数を数値にキャストして変数に入れる */ for (i = 1; i <= x; i++){ /* 引数(int:x)回分処理をする */ if( x % i == 0 ){ divisor++; /* 割り切れた場合、約数をカウントアップ */ } } if ( divisor == 2 ){ /* 1と引数自身で割り切れた場合、(2の時)素数 */ printf("%s is prime\n", argv[count]); /* } else { printf("%s is not prime\n", argv[count]); */ } } }
gcc chk-prime.c -o chk-prime.o
できた
[vagrant@CentOS-71 ctest]$ for i in $(seq 1 100);do ./chk-prime.o $i; done 2 is prime 3 is prime 5 is prime 7 is prime 11 is prime 13 is prime 17 is prime 19 is prime 23 is prime 29 is prime 31 is prime 37 is prime 41 is prime 43 is prime 47 is prime 53 is prime 59 is prime 61 is prime 67 is prime 71 is prime 73 is prime 79 is prime 83 is prime 89 is prime 97 is prime
よさそう