#include <stdio.h> #include <stdlib.h> int main(void); int main(void) { char buffer[256]; int x; gets(buffer); x = atoi(buffer); if(x >= 80){ printf("A\n"); } else if(x >= 70){ printf("B\n"); } else if(x >= 60){ printf("C\n"); } else { printf("D\n"); } return(0); }
gets(buffer); a = atoi(buffer); gets(buffer); r = atoi(buffer); gets(buffer); e = atoi(buffer); x = a * 2 + r * 10 + e;
では除算が端数切り捨てだから1年が0世紀になったりしてダメ. そこで, 1世紀ゲタをはかせて,c = x / 100;
とすると, ほとんどの場合はうまくいくが, ちょうど100年の倍数のときに 1世紀ずれてしまう (たとえば, 2000年が21世紀になってしまう). そこで, if文を使って, 100年の倍数のときだけ特別扱いしてc = (x / 100) + 1;
とすれば大丈夫.if((x % 100) == 0){ c = (x / 100); } else { c = (x / 100) + 1; }
ただ, この問題ではもっと簡潔なやり方があって, 上の「ゲタをはかせる」ところで100年(1世紀)を加えたせいで 2000年が一つ先の世紀になってしまったのだから, ゲタを1年へらして99年にするとうまくいく. つまり, こんな感じ:
一般に, 区分けの境目をずらす必要がある場合には, この方法がわりあい役に立つ.c = (x + 99) / 100;
if(x == y){ printf("SAME\n"); } else if(x == y-1){ printf("UP\n"); } else if(x == y+1){ printf("DOWN\n"); }
(考えてみよう) 三つの数字 x, y, z が 5, 6, 7 のように昇順にならんでいるか, の判定はどうすればよいだろうか?