『明解C言語』サンプルコードと練習コード[第8章]

10410 ワード

第8章各種プログラムの作成に着手しよう
サンプルコード:
サンプルコード8-1
/*
                (  ) 
*/

#include 

// int       
 int sqr_int(int x)
 {
     return (x * x);    
 }
 
 // double         
 double sqr_double(double x)
 {
     return (x * x);       
 }
 
 int main(void)
 {
     int nx;
     double dx;
     
     printf("       :");
     scanf("%d", &nx);
     printf("      %d。
", sqr_int(nx)); printf(" :"); scanf("%lf", &dx); printf(" %f。
", sqr_double(dx)); return (0); }

サンプルコード8-2
/*
                (    ) 
*/

#include 

#define  sqr(x)((x) * (x))                  //   x   

int main(void)
{
    int nx;
    double dx;
    
    printf("       :");
    scanf("%d", &nx);
    printf("      %d。
", sqr(nx)); printf(" :"); scanf("%lf", &dx); printf(" %f。
", sqr(dx)); return (0); }

サンプルコード8-3
/*
             (  ) 
*/

#include 

#define putsa(str)  { putchar('\a'); puts(str); }

int main(void)
{
    int na;
    
    printf("       :");
    scanf("%d", &na);
    
    if (na)
        putsa("     0。"); 
    else
        putsa("    0。");
    
    return (0);   
}

サンプルコード8-4
/*
             (  ) 
*/

#include 

#define putsa(str)  ( putchar('\a'), puts(str) )

int main(void)
{
    int na;
    
    printf("       :");
    scanf("%d", &na);
    
    if (na)
        putsa("     0。"); 
    else
        putsa("    0。");

    return (0);   
}

サンプルコード8-5
/*
              
*/

#include 

enum animal { Dog, Cat, Monkey, Invalid };

//   
void dog(void)
{
    puts("  !");     
} 

//   
void cat(void)
{
    puts(" ~!");     
} 

//   
void monkey(void)
{
    puts("  !!");     
} 

//     
enum animal select(void)
{
    int tmp;
    
    do {
        printf("0...   1...   2...   3...  :");
        scanf("%d", &tmp);
    } while (tmp < Dog || tmp > Invalid);
    
    return (tmp);     
} 

int main(void)
{
    enum animal selected;
    
    do {
        switch (selected = select()) {
            case Dog : dog();  break;
            case Cat : cat();  break;
            case Monkey : monkey();  break;
        }   
    } while (selected != Invalid);
    
    return (0);    
}

サンプルコード8-6
/*
         
*/

#include 

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

int main(void)
{
    int num;
    
    printf("       :");
    scanf("%d", &num);
    printf("\     :%d。
", factorial(num)); return (0); }

サンプルコード8-7
/*
            
*/

#include 

//   vx vy      (vx >= vy) 
int gcdf(int vx, int vy)
{
    return (vy == 0 ? vx : gcdf(vy, vx % vy));    
}

//   va vb      
int gcd(int va, int vb)
{
    return (va > vb ? gcdf(va, vb) : gcdf(vb, va)) ;   
} 

int main(void)
{
    int n1, n2;
    
    puts("       。");
    printf("  1:");    scanf("%d", &n1);
    printf("  2:");    scanf("%d", &n2);
    
    printf("      %d。
", gcd(n1, n2)); return (0); }

サンプルコード8-8
/*
                     
*/

#include 

int main(void)
{
    int i, ch;
    int cnt[10] = {0};        //          
    
    while (1) {               //     
        ch = getchar();
        if (ch == EOF) break;
        
        switch (ch) {
            case '0' : cnt[0]++; break;
            case '1' : cnt[1]++; break;
            case '2' : cnt[2]++; break;
            case '3' : cnt[3]++; break;
            case '4' : cnt[4]++; break;
            case '5' : cnt[5]++; break;
            case '6' : cnt[6]++; break;
            case '7' : cnt[7]++; break;
            case '8' : cnt[8]++; break;
            case '9' : cnt[9]++; break;
        }
    } 
    
    puts("         ");
    for (i = 0; i < 10; i++)
        printf("'%d' : %d
", i, cnt[i]); return(0); }

サンプルコード8-9
/*
                    ( 2 ) 
*/ 

#include 

int main(void)
{
    int i, ch;
    int cnt[10] = {0};                          //          
    
    while (1) {                                 //    
        ch = getchar();
        if (ch == EOF) break;
        
        if (ch >= '0' && ch <= '9')
            cnt[ch - '0']++;
    }    
    
    puts("         ");
    for (i = 0; i < 10; i++)
        printf("'%d' : %d
", i, cnt[i]); return(0); }

サンプルコード8-10
/*
      EOF        
*/

#include 

int main(void)
{
    int i;
    
    printf("EOF = %d
", EOF); for (i = 0; i < 10; i++) printf("'%d' = %d
", i, '0' + i); return (0); }

サンプルコード8-11
/*
                   
*/

#include 

int main(void)
{
    int ch;
    
    while ((ch = getchar()) != EOF)
        putchar(ch);

    return (0);    
}

練習コード:
練習コードe 8-1
/*
            diff(x, y),  x、y     
*/

#include 

#define diff(x, y) x - y

int main(void)
{
    int n1, n2;
    
    printf("       :");
    scanf("%d%d", &n1, &n2);
    printf("     %d。
", diff(n1, n2)); system("pause"); return (0); }

練習コードe 8-2
/*
        x、y          
*/

#include 

#define max(x, y) (((x) > (y) ? (x) : (y))) 

int main(void)
{
    int a, b, c, d;
    
    printf("       :");
    scanf("%d%d%d%d", &a, &b, &c, &d);
    printf("max(max(a, b), max(c, d))    %d。
", max(max(a, b), max(c, d))); printf("max(max(max(a, b), c), d) %d。
", max(max(max(a, b), c), d)); system("pause"); return (0); }

練習コードe 8-3
/*
            swap(type, a, b)  type       
*/

#include 

#define swap(type, a, b) type t; t = a; a = b; b = t;

int main(void)
{
    int a, b;
    double c, d;
     
    printf("       :");
    scanf("%d%d", &a, &b);
    printf("
:a = %d, b = %d
", a, b); swap(int, a, b) printf("
:a = %d, b = %d
", a, b); /* printf(" :"); scanf("%lf%lf", &c, &d); printf("
:c = %f, d = %f
"); swap(double, c, d) printf("
:c = %f, d = %f
"); */ return (0); }

練習コードe 8-4
/*
              、        ,        
*/

#include 

enum sex {male, female};
enum season {spring, summer, fall, winter};

//      
enum sex select_s(void)
{
    int tmp;
    
    do {
        printf("0...   1... ");
        scanf("%d", &tmp);
    } while (tmp < male || tmp > female);
    
    return (tmp);     
}

//      
enum season select_ss(void)
{
    int tmp;
    
    do {
        printf("0...    1...    2...    3...  ");
        scanf("%d", &tmp);
    } while (tmp < spring || tmp > winter);
    
    return (tmp);     
}

int main(void)
{
    enum sex s;
    enum season ss;
    
    s = select_s();
    ss = select_ss();
    
    if (s)
        printf("      :  
"); else printf(" :
"); switch (ss) { case 0 : printf(" :
"); break; case 1 : printf(" :
"); break; case 2 : printf(" :
"); break; case 3 : printf(" :
"); break; } return (0); }

練習コードe 8-5
/*
         ,      ,      n    
*/

#include 

int fact(int n)
{
    int f = 1;
    
    while (n)
        f *= n--; 
        
    return f; 
} 

int main(void)
{
    int num;
    
    printf("       :");
    scanf("%d", &num);
    printf("\     :%d。
", fact(num)); return (0); }

練習コードe 8-6
/*
       n        r        
*/

#include 

int combination(int n, int r)
{
    int c;
   
    if (r == 0 || n == r)
        c = 1;
    else if (r == 1)
        c = n;
    else
        c = combination(n - 1, r - 1) + combination(n - 1, r);
    
    return (c);
}

int main(void)
{
    int n, r;
    printf("     :");    scanf("%d", &n);
    printf("     :");    scanf("%d", &r);
    
    printf("%d %d     :%d。
", n, r, combination(n, r)); return (0); }

練習コードe 8-7
/*
                    (     *  ) 
*/ 

#include 

int main(void)
{
    int i, ch;
    int cnt[10] = {0};                          //          
    
    while (1) {                                 //    
        ch = getchar();
        if (ch == EOF) break;
        
        if (ch >= '0' && ch <= '9')
            cnt[ch - '0']++;
    }    
    
    puts("         ");
    for (i = 0; i < 10; i++) { 
        printf("'%d' : ", i);
        
        while (cnt[i]--)
            printf("*");
        
        putchar('
'); } return(0); }

練習コードe 8-8
/*
                  
*/

#include 

int main(void)
{
    int ch;
    int n = 0;
    
    while ((ch = getchar()) != EOF) {
        putchar(ch);
        
        if (ch == '
') n++; } printf(" %d 。
", n); return (0); }