#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;
#include// 標準入出力関数 (printf 等) を用いるので stdio.h が必要. int main(void); int main(void) { char buffer[256]; int a, b; // a の取り込み gets(buffer); // キーボードから入力される文字列を buffer に格納. a = atoi(buffer); // buffer に格納されている文字を整数型に変換し,a に格納する. // b の取り込み gets(buffer); // キーボードから入力される文字列を buffer に格納. b = atoi(buffer); // buffer に格納されている文字を整数型に変換し,b に格納する. if ( (1 <= a) && (a < 50) && (1 <= b) && (b < 50) ) { // case1 : 1 <= a <= b < 50 が入力された場合 printf("%d\n", b-a+1); } else if ( (50 < a) && (a <= 100) && (50 < b) && (b <= 100) ) { // case2 : 50 < a <= b <= 100 が入力された場合 printf("%d\n", b-a+1); } else if ( (1 <= a) && (a < 50) && (50 < b) && (b <= 100) ) { // case3 : 1 <= a < 50 < b <= 100 が入力された場合 printf("%d\n", b-a); } return(0); }