---3.1--- #include #include #include int main(void) { int n, i, s; printf("正整数を入力して下さい:"); scanf("%d", &n); assert(n > 0); s = 0; for (i = 1; i <= n; i++) s += i; assert(s == n * (n + 1) / 2); printf("1から%dまでの整数の和は%dです.\n", n, s); return EXIT_SUCCESS; } ---3.2--- #include #include int main(void) { int i, j; printf(" "); /* 上の見出し */ for (j = 0x20; j < 0x80; j += 0x10) printf("%4X", j); printf("\n"); printf(" "); /* 境界線 */ for (j = 0x20; j < 0x80; j += 0x10) printf("----"); printf("\n"); for (i = 0; i < 0x10; i++) { printf("%2X |", i); /* 左の見出し */ for (j = 0x20; j < 0x80; j += 0x10) printf("%4c", i + j); /* 文字 */ printf("\n"); } return EXIT_SUCCESS; } ---3.3--- #define PROB 1 #include #include int main(void) { int i, j; printf(" "); /* 上の見出し */ for (j = 0; j < 10; j++) printf("%4d", j); printf("\n"); printf(" "); /* 境界線 */ for (j = 0; j < 10; j++) printf("----"); printf("\n"); for (i = 0; i < 10; i++) { printf("%2X |", i); /* 左の見出し */ #if PROB == 1 for (j = 0; j < 10; j++) #endif #if PROB == 2 for (j = 0; j <= i; j++) #endif #if PROB == 3 for (j = 0; j < i; j++) printf(" "); /* ※: j = i */ for ( ; j < 10; j++) #endif printf("%4d", i * j); /* 積 */ printf("\n"); } return EXIT_SUCCESS; } ---3.4--- #include #include int main(void) { int c, i; c = getchar(); printf("文字 %c のビットパタンは,", c); for (i = 7; i >= 0; i--) if (c & (1 << i)) putchar('1'); else putchar('0'); printf(" です.\n"); return EXIT_SUCCESS; } ---3.5--- #include #include #include int main(void) { int n, c; printf("正整数を入力して下さい:"); scanf("%d", &n); assert(n > 0); c = 0; /* 繰り返し回数 */ while (n != 1) { if (n & 1) /* 奇数 */ n = 3 * n + 1; else /* 偶数 */ n >>= 1; /* n /= 2; に同じ */ c++; } printf("%d回で1になります.\n", c); return EXIT_SUCCESS; } ---3.6--- #include #include #include int main(void) { double x, pwr; int n; printf("xとnを入力して下さい:"); scanf("%lf%d", &x, &n); assert(n >= 0); printf("%fの%d乗は", x, n); pwr = 1.0; while (n) { if (n & 1) /* 奇数 */ pwr *= x; x *= x; n >>= 1; } printf("%fです.\n", pwr); return EXIT_SUCCESS; } ---3.7--- #include #include #include int main(void) { int n, f; printf("2以上の整数を入力して下さい:"); scanf("%d", &n); assert(n > 1); printf("%dの素因数は,", n); f = 2; while (f * f <= n) { while (n % f == 0) { printf("%d ", f); n /= f; } f++; } if (n != 1) printf("%d ", n); printf("です.\n"); return EXIT_SUCCESS; }