ラベル 演習 8 いろいろなプログラムを作ってみよう の投稿を表示しています。 すべての投稿を表示
ラベル 演習 8 いろいろなプログラムを作ってみよう の投稿を表示しています。 すべての投稿を表示

演習 8-10

#include <stdio.h>

int main(){

    int number_distribution[10] = {0};
    int number;

    do{
        printf("0~9の数字を入力してください:");
    }while(scanf("%d", &number) != EOF && ++number_distribution[number]);

    printf("\n-----分布-----\n");

    int i, j;
    for(i = 0; i < 10; i++){
        printf("%d :", i);
        for(j = 0; j < number_distribution[i]; j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

演習 8-9

#include <stdio.h>

int main(){

    int line_count = 0;
    char line[256];

    do{
        printf("入力してください. : ");
    }while(scanf("%s", line) != EOF && ++line_count);

    printf("\n入力された行数は%d行でした.", line_count);

    return 0;
}

演習 8-8

#include <stdio.h>

int gcd(int x, int y){

    if(x < y)   x ^= y ^= x ^= y;

    return !(x % y) ? y : gcd(y, x % y);
}

int main(){

    int x, y, n;

    printf("一つ目の整数を入力してください : ");   scanf("%d", &x);
    printf("二つ目の整数を入力してください : ");   scanf("%d", &y);

    n = gcd(x, y);

    printf(" %d と %d の最大公約数は %d です.", x, y, n);

    return 0;
}

演習 8-7

#include <stdio.h>

int factorial(int n){

if (n > 0){
return n*factorial(n - 1);
}
else{
return 1;
}
}

int combination(int n, int r){

if (n > r){
return factorial(n) / (factorial(n - r)*factorial(r));
}
else if (n == r){
return 1;
}
else{
return NULL;
}
}

int main(){

int n, r;

printf("異なるn個の整数からr個の整数を取り出す組み合わせの数のnCrを求めます\n");
printf("非負整数n:"); scanf("%d", &n);
printf("非負整数r:"); scanf("%d", &r);

printf("異なる%d個の整数から%d個の整数を取り出す組み合わせの数は%d個です\n", n, r, combination(n, r));

return 0;
}

演習 8-6

#include <stdio.h>

int main(){

int i, num, kaijo = 1;

printf("整数を入力して下さい:");
scanf("%d", &num);

for (i = 1; i <= num; i++){
kaijo *= i;
}

printf("%dの階乗は%dです\n", num, kaijo);

return 0;
}

演習 8-5

#include <stdio.h>

enum { Right, Left, Up, Down };

int main(){

int course;
int r = 0, l = 0, u = 0, d = 0;

printf("あなたは真っ暗な迷路に迷い込みました。\n");
printf("好きな方向に進んでください。\n");
printf("\n---- 右:0 -- 左:1 -- 上:2 -- 下:3 ----\n");

while(1){

scanf("%d", &course);

switch (course){
case Right:printf("右に進みました\n"); r++; l--; break;
case Left:printf("左に進みました\n"); l++; r--; break;
case Up:printf("上に進みました\n"); u++; d--; break;
case Down:printf("下に進みました\n"); d++; u--; break;
default:printf("0~3を入力してください。\n");
}
if (r == 2 && u == 2) break;
}

printf("\a\nおめでとうございます!!\n");
printf("迷路を抜けました!!\n");

return 0;
}

演習 8-4

#include <stdio.h>

#define NUMBER 5

void bsort(int a[], int n){

int i, j;

for (i = n - 1; i > 0; i--){
for (j = 0; j < i; j++){
if (a[j + 1] < a[j]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}

int main(){

int i;
int height[NUMBER];

printf("%d人の身長を入力してください\n",NUMBER);
for (i = 0; i < NUMBER; i++){
printf("%2d番:", i + 1);
scanf("%d", &height[i]);
}

bsort(height,NUMBER);

puts("昇順にソートしました。");
for (i = 0; i < NUMBER; i++){
printf("%2d番:%d\n", i + 1, height[i]);
}
return 0;
}

演習 8-3

#include <stdio.h>
#define swap(int, x, y) z = x; x = y; y = z;

int main(){

int x, y, z;

printf("整数x:"); scanf("%d", &x);
printf("整数y:"); scanf("%d", &y);

swap(int, x, y);

printf("x = %d, y = %d\n", x, y);

return 0;
}

演習 8-2

max(max(a, b), max(c, d))
max((a) > (b) ? (a) : (b), (c) > (d) ? (c) : (d))
max(((a) > (b) ? (a) : (b)) > ((c) > (d) ? (c) : (d)) ? ((a) > (b) ? (a) : (b)) : ((c) > (d) ? (c) : (d)))

1.aとbの大きいほうの値とcとdの大きいほうの値が求められる。
2.1の大きいほうの値のうち大きいほうの値が求められる。

max(max(max(a, b), c), d)
max(max((a) > (b) ? (a) : (b), c), d)
max(((a) > (b) ? (a) : (b)) > (c) ? ((a) > (b) ? (a) : (b)) : (c)), d)
((a) > (b) ? (a) : (b)) > (c) ? ((a) > (b) ? (a) : (b)) : (c)) > (d) ? ((a) > (b) ? (a) : (b)) > (c) ? ((a) > (b) ? (a) : (b)) : (c)) : (d)

1.aとbの大きいほうの値が求められる。
2.1の大きいほうの値とcとが比べられその大きいほうの値が求められる。
3.2の大きいほうの値とdとが比べられその大きいほうの値が求められる。

演習 8-1

#define diff(x,y) ((x)-(y))