---4.1--- #include #include #include int main(void) { int a[100], n, i, s; printf("1以上100以下の整数を入力して下さい:\n"); scanf("%d", &n); assert(1 <= n && n <= 100); for (i = 0; i < n; i++) a[i] = rand() % 100; for (i = 0; i < n; i++) { printf("%5d", a[i]); if ((i + 1) % 10 == 0) /* 10個出力したら */ printf("\n"); /* 改行する */ } printf("\n"); s = 0; for (i = 0; i < n; i++) s += a[i]; printf("合計:%d, 平均:%.1f\n", s, (double)s / n); return EXIT_SUCCESS; } ---4.2--- #include #include #include int main(void) { int a[100], n, i, max, min; printf("1以上100以下の整数を入力して下さい:\n"); scanf("%d", &n); assert(1 <= n && n <= 100); for (i = 0; i < n; i++) a[i] = rand(); for (i = 0; i < n; i++) { printf("%6d", a[i]); if ((i + 1) % 10 == 0) printf("\n"); } printf("\n"); max = min = a[0]; for (i = 1; i < n; i++) if (a[i] > max) max = a[i]; else if (a[i] < min) min = a[i]; printf("最大値:%d, 最小値:%d\n", max, min); return EXIT_SUCCESS; } ---4.3--- #include #include #include int main(void) { int a[100], n, i, j, min, w; printf("1以上100以下の整数を入力して下さい:\n"); scanf("%d", &n); assert(1 <= n && n <= 100); for (i = 0; i < n; i++) a[i] = rand(); for (i = 0; i < n; i++) { /* 原データの出力 */ printf("%6d", a[i]); if ((i + 1) % 10 == 0) printf("\n"); } printf("\n"); for (i = 0; i < n; i++) { min = i; /* 最小値の位置 */ for (j = i + 1; j < n; j++) if (a[j] < a[min]) min = j; w = a[i]; a[i] = a[min]; a[min] = w; } for (i = 0; i < n; i++) { /* 整列結果の出力 */ printf("%6d", a[i]); if ((i + 1) % 10 == 0) printf("\n"); } printf("\n"); return EXIT_SUCCESS; } ---4.4--- #include #include #include #define SIZE (sizeof money / sizeof(int)) int main(void) { static int money[] = {10000, 5000, 1000, 500, 100, 50, 10, 5, 1}; long pay; int i, m, c; printf("金額を入力して下さい:\n"); scanf("%ld", &pay); assert(pay > 0); for (i = 0; i < SIZE; i++) { m = money[i]; c = pay / m; pay %= m; if (c) printf("%d円%d枚\n", m, c); } return EXIT_SUCCESS; } ---4.5--- #include #include #define MAX 1000 #define NOB 8 #define SIZE (MAX / NOB + 1) #define POS(x) (x / NOB) /* 配列要素の位置 */ #define MASK(x) (1 << (x % NOB)) /* マスク */ int main(void) { char sieve[SIZE]; int i, j, c; for (i = 0; i < SIZE; i++) /* 2〜1000を書く */ sieve[i] = 0xFF; for (i = 2; i * i <= MAX; i++) { if (sieve[POS(i)] & MASK(i)) /* まだ残っている−−素数 */ for (j = 2 * i; j <= MAX; j += i) sieve[POS(j)] &= ~MASK(j); /* 倍数を消す */ } for (c = 0,i = 2; i <= MAX; i++) /* 素数の出力 */ if (sieve[POS(i)] & MASK(i)) { printf("%5d", i); if ((++c % 10) == 0) /* 10個で改行 */ printf("\n"); } printf("\n"); return EXIT_SUCCESS; } ---4.6--- #include #include #define M 2 #define N 4 #define P 3 #define VAL rand() % 101 - 50 #define PRINT(x, s, t) for (i = 0; i < s; i++) {\ for (j = 0; j < t; j++)\ printf("%5d", x[i][j]);\ printf("\n");\ }\ printf("\n"); int main(void) { int a[M][N], b[N][P], c[M][P]; int i, j, k; for (i = 0; i < M; i++) for (j = 0; j < N; j++) a[i][j] = VAL; for (i = 0; i < N; i++) for (j = 0; j < P; j++) b[i][j] = VAL; for (i = 0; i < M; i++) for (j = 0; j < P; j++) { c[i][j] = 0; for (k = 0; k < N; k++) c[i][j] += a[i][k] * b[k][j]; } PRINT(a, M, N) PRINT(b, N, P) PRINT(c, M, P) return EXIT_SUCCESS; }