まず、もらった番号を、初めの位は10倍して、 次は、9倍して・・・最後の位は1倍して 合計を求めましょう。
ピン、ポーン!正解です。
で、str[0]は'a'を、str[1]は'b'を、str[2]は'c' を表していると考えました。そして実際には その文字のアスキーコード(番号)が入っていました。 そして'0'のアスキーコードは48(10進法)です。 '1'以降順番にアスキーコードは1ずつ増えていきます。 (嘘だと思ったらアスキーコード表を見ること!)
ifのあとのカッコの中が正しければ、 次の{xxx;}を実行し、正しくなければelse以下の {xxx;}を実行しなさいという意味です。 「もしiが3ならば」if(ここが真なら){ これを実行; }else{ だめならここを実行; }
次は、switch文です。 式(int型の値を取る物に限る!)の値により、する事をいろいろ 区別します。次の例は、式の値が、1か2になることにより、 実行する内容を変えることができます。そのあと、忘れず break文をつけてください。これを忘れると、悲惨な目に遭います。 それ以外の物が出てきたときは、defaultのところを実行します。 switch文は、if文で書き直すことができますが、 複雑になり間違いを生じやすくなります。
繰り返し処理のための、for文というのもあります。switch(式){ case 1:ああしろ、こうしろ; break; case 2:あれもしろ、これもやれ; break; default:例外処理; }
例:for(i=1; i <= 10; i++)for(ここから;ここが正しい間;変化させろ){ 実行内容; }
という場合、iが1から始めて、iが10以下の時は、次のことをしなさい。 そして、1回やったらiを1増やしなさい。という意味です。i<=10は、iが 10以下ならば、式の値1(真)そうでなければ0(偽)を持ちます。 ==から想像できますね。i++は、iを1ずつ増やせという意味です。 ++iというのもあるので間違えないでください。いずれも、演算子の章で 詳しく解説しますので、今は「あー、こういうもんだ」程度で充分です。 さらに、||は「または」と読みましょう。ついでに、&&は「かつ」です。 !=は、左右が等しくなければ真を等しければ偽を式の値に持ちます。 「等しくない」と読みましょう。%は、パーセントではなく、 わり算のあまりです。10%3は「10割る3は、3余り1」なので、1を表します。
x=x+3;これは、どういう意味でしょう。
#include <stdio.h> #include <string.h> #include <conio.h>//どうしてinclude文が増えたか //考えてみてください。 int input_isbn(void); int check_isbn(char *); //今回作成した関数 int main() { input_isbn(); getch(); printf("終わりだよ!"); return 0; } int input_isbn(void) { char isbn[64]; int ret; printf("ISBNを入力してください。\n"); scanf("%s", isbn); //文字列は、%sで ret = check_isbn(isbn); switch (ret) { case -2:printf("入力ミスです\n"); break; case -1:printf("不正番号です\n"); break; case 0:printf("正しい番号です。\n"); break; } return 0; } int check_isbn(char *bango) //intをかえす関数です //これを呼んだ側の関数で //返されたintを使っています。 { int gokei, suuchi[10], i; if (strlen(bango) != 10) //文字列の長さチェック return -2; //10文字でなければ-2をかえす gokei = 0; //合計用変数の初期化 for (i = 0; i <= 8; i++) { suuchi[i] = bango[i] - 48; //これがミソ!!!! } for (i = 0; i <= 8; i++) gokei = gokei + suuchi[i] * (10-i); //最後がXのこともあるのだよ! if (bango[9] == 'X' || bango[9] == 'x') gokei = gokei + 10; else gokei = gokei + bango[9] - 48; printf("gokei = %d\n", gokei); if (gokei % 11 == 0) //合計が11の倍数なら0 return 0; else return -1; //そうでなければ−1をかえす }
Update Oct/24/1996 By Y.Kumei