Code021: Cプログラミング 〜あなたの体型を科学する!?〜

この記事は2002年に書かれたものです。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
【 Webプログラミング Code Sample 】                          Since2001/11/23

         Code021: Cプログラミング 〜あなたの体型を科学する!?〜

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                                                    Produced by ichikoro.com

           ▼毎週月曜日と金曜日に配信しています。
           ▼等幅フォントでご覧いただくとキレイに見えます。
           ▼登録・解除はこちらから可能です。
               < http://www.ichikoro.com/webp/ >
                  ※バックナンバーへのリンクもあります。
                  ※お友達にもぜひお勧めください(^^)/

─【Contents】───────────────────────────────
    01.Review ................... 前回のおさらい
    02.Guide .................... コメント
    03.Sample ................... あなたの体型を科学する!?<BMI算出
    04.Sample ................... 消費税を計算してみる
    05.Sample ................... エラーとワーニングを見極める
    06.Question ................. 今週の問題
    07.From Editor .............. 編集後記


                   【 Webプログラミングは毎週2本立て! 】

             ・月曜日版はWebの実際の活用方法などを特集します。
             ・金曜日版はHTMLやCGIなど一つの分野について最初から
              解説する講座になっています。現在はC言語入門です。


こんにちは、編集者の勝部です。

昨年の11月末に配信を始めたこのメルマガも前回ついに20回を迎え、1700名以上の方に
ご登録していただくまでになりました。みなさん本当にありがとうございます。毎週、
色々と叱咤激励していただき、非常に励みなっております。みなさんあってのWebプロ
グラミングです。色々と寄せられたご意見やご要望を参考にし、このメルマガは日々進
化していきます。

至らない点など多々あるかと思いますが、これからもなにとぞ、Webプログラミングを
よろしくお願いいたします( ^.^)( -.-)( _ _)


と言った矢先に、二つニュースがあります。

 ・次回の月曜日版より下記の講座が始まります
   「ちょっとがんばれば分かる Q&A式 CGI入門(Perl編)」

 ・CGIプログラミングメーリングリストと共同で下記のプロジェクトが始まります。
   「究極の日本語版 CGI FAQ 作成プロジェクト」

詳しくは編集後記を!


ではでは、今週もいってみましょう!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  01.Review  「前回のおさらい」
──────────────────────────────────────

前回(Code19)は変数と型について解説しました。
みなさんスワップ(入れ替え)の問題はできましたか?

    /*
     * スワッププログラム
     *
     */

    #include<stdio.h>

    int main(void)
    {
        int a = 100;        /* 変数aに100を代入 */
        int b = 200;        /* 変数bに200を代入 */
        int temp;
    
        /* 変数aと変数bの値を入れ替え */
        temp = a;
        a = b;
        b = temp;
    
        /* 変数aと変数bの値を表示 */
        printf("a ->     %d \n", a);
        printf("b ->     %d \n", b);
    
        return(0);
    }

    ・前回のメルマガはこちら
       Cプログラミング
                〜しっかり基礎を固めようシリーズ 変数編〜
         < http://www.ichikoro.com/webp/back_list/?cd=00019 >


ん?見たことのないものが出てきましたね。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  02.Guide  「コメント」
──────────────────────────────────────

/* と */ の間に囲まれたものはコメントとして扱われます。
実際の処理とは何も関係のない、メモ書きのような役目を果たします。


これは複数行に及んでも大丈夫です。

    /*
         こんなのも大丈夫
                            */
プログラムの先頭に

    /*
     * スワッププログラム
     *
     */

といった具合に何のプログラムか記述したり
下記のように

    int a = 100;        /* 変数aに100を代入 */

プログラムの横に書くのもOKです。
ただし、コメントの中にコメントを入れることはできません。

    /*  コメントは/*と*/の間に書きます   */

というのは、エラーになります。
    ※コンパイラによっては上手いこと解釈してくれる場合があるようですが、
     本来は禁止事項です。


HTMLでいう <!-- --> と意味的には同じですね。ただHTMLと違いプログラミングでの
コメントはかなりシビアです。慣れてくると処理の流れを大体コメントで追うように
なるんですが、そこに嘘が書いてあると(故意じゃなくても)読んでる方は混乱してし
まいます。

自分一人で組んでいたとしても、コメンテーションをおろそかにした三ヵ月前に作っ
たプログラムを見ると、思わずひざを落としそうになります。紅茶を乗せたお盆を
持っていたら、ガシャーンと落としてしまうことでしょう(^-^;



という感じで始まりましたが、今週はこれまでの総復習号です。
色々なサンプルを掲載しますので、ご参考までに(^-^)/



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  03.Sample  「あなたの体型を科学する!?<BMI算出」
──────────────────────────────────────

うちの会社では健康保険組合(通称けんぽ)から毎月会報誌のような物が送られて
くるのですが、今回はBMIについて色々と書いてありました。

BMIとはBody Mass Indexの略で、自分は今肥満なのかやせすぎなのか判定できる指数
だそうです。またこの考えを利用した簡単な計算をすることで自分がもっともベスト
な体重を算出することができるそうです。その計算式が本当に簡単で、

    BMI = 体重/(身長(m) * 身長(m))

でOKです。注意するのは身長がメートルという部分です。
このBMIの値が

    17.6未満            やせすぎ
    17.6 〜 20未満        やせている
    20.0 〜 24未満        ふつう
    24.0 〜 26.5未満    肥満
    26.5以上            太りすぎ

だそうです。
ではでは早速これをCで書いてみることにしましょう。

    #include<stdio.h>

    int main(void)
    {
        double weight = 75.0;        /* 体重 */
        double height = 1.76;        /* 身長 */
        double bmi;                    /* BMI格納用 */
    
        /* BMI値を算出する */
        bmi = weight / ( height * height );            /* C言語でも括弧を使うことができます */
    
        /* 表示する */
        printf("身長:%1.2f\n", height);
        printf("体重:%2.1f\n", weight);
        printf("BMI :%2.1f\n", bmi);
    
        return(0);
    }

体重と身長の値をあなたの物に変えてみてください。
「じゃぁ一体自分のベスト体重はいくらなのだ?」ということを考えてみましょう。
これもそんなに難しくありません。


    ベスト体重(kg) = 身長(m) * 身長(m) * 22


だそうです。ところで、22ってどこから出てくるんでしょうねぇ?(^^;
知ってる方、ぜひ教えてくださいませ。

    #include<stdio.h>
    
    int main(void)
    {
        double height = 1.76;        /* 身長 */
        double best_weight;            /* ベスト体重 */
    
        /* ベスト体重を算出する */
        best_weight = height * height * 22;
    
        /* 表示する */
        printf("身長:%1.2f\n", height);
        printf("BMI :%2.1f\n", best_weight);
    
        return(0);
    }

ただ、世の中には“隠れ肥満”という物がありBMIだけでは実際のところは何
とも言えないそうです。知りたい方は体脂肪計を買いましょう(笑)


え?私ですか?(^-^;
わはははは.........はぁ。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  04.Sample  「消費税を計算してみる」
──────────────────────────────────────

先日プロジェクターを買いにいったんですが、会社に帰ってから箱を空けてみてビッ
クリ。電源ケーブルが無いんですよ奥さん。早速店に「どうなってるんですか?」と
威勢良く文句の電話をかけ「明日の昼までに必要なんで絶対にお願いします。...電話
番号は...××のかつべです。ガチャ。」と勢いよく切ったまではよかったんです。
周りの島で、「え?ホントに」「最近でもそんなことあるんだ」とざわめいている中、
そう、箱の横からポロッと出てくるまでは(^^;


なんて話はどうでもいいのですが、その時のレシートを見て愕然。消費税が万単位で
つくんですよね〜。馬鹿になりませんな、あなどりがたし消費税。そんなわけで、下
のようなプログラムを書いて見ました。おっと!まだ実行しないでくださいね。プロ
グラムからこの実行結果を予想してください(計算機の使用は可)。

    #include<stdio.h>
    
    int main(void)
    {
        int   price = 200000;
        float rate1 = 0.03;
        float rate2 = 0.05;
    
        printf("%d\n", price);
        printf("%10.2f\n", price * rate1);
        printf("%10.2f\n", price * rate2);
        printf("%10.2f\n", price + (price * rate1));
        printf("%10.2f\n", price + (price * rate2));
        printf("%10.2f\n", (price * rate2) - (price * rate1));
    
        return(0);
    }

ポイントは、それぞれのprintfが何を意味しているかです。
確かに、クルマを買いに急いだ人たちの気持ちが分かりますな(^^;


ちなみに、消費税つくった竹下首相は島根県出身。←私の実家
当時、島根ナンバーのクルマは他県でガソリンを入れてもらえなかったという噂を
聞いたことあります(^^; う〜ん、まぁ気持ちはわかるんですけど、何もそこまで
しなくても。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  05.Sample  「エラーとワーニングを見極める」
──────────────────────────────────────

さてさてこのサンプルはちょっと毛色が違います。
次のソースは

    (1)変数に32+15の結果を代入
    (2)“Hello! 32+15=”と表示
    (3)続けて(1)の変数を表示
    
というのが目的です。さて、エラーとワーニングはそれぞれどんなメッセージが出る
でしょうか。もちろんコンパイルしないで考えてみてくださいね。

    #include<stdio.h>
    
    int main(void)
    {
    int _abc;int _ABC;short _abc, abc;flot 1211;
    
        32 + 15 = _abc;
    
      print("Hello! 32+15=");print("%d", _abc);
    
        return(0);
    }

予想が的中したら、上記の目的が果たせるように書き直してみてください。



━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  06.Question  「今週の問題」
──────────────────────────────────────

    Q. 次のプログラムは、オセロのプログラムの一部分である。
       これのバグを見つけなさい。

            #include<stdio.h>
            #define TABLE_SIZE 8
            
            typedef enum {
                NULL,
                BLACK,
                WHITE
            } OTHE_BORD;
            
            
            /*
             * オセロ版表示関数
             */
            int disp_table(OTHE_BORD table[][TABLE_SIZE])
            {
              int i,j;
            
              for( i=0 ; i<TABLE_SIZE ; i++ ) printf("%2c", i + 'A' ); /*上の英字/
              printf("\n");
            
              for( i=0 ; i<TABLE_SIZE ; i++ ){         /*オセロ盤表示*/
                 printf("%d",i+1);
            
                 for( j=0 ; j<TABLE_SIZE ; j++ ){
                    switch( table[i][j] ) {
                     case NULL : printf("・");break;
                     case BLACK: printf("●");break;
                     case WHITE: printf("○");break;
                     default   : return(FALSE);
                    }
                 }
                 printf("\n");
              }
            
              return(0);
            }

私が学生の頃書いたやつを引っ張り出してきました。
あー、はずかしいプログラムですわ(笑)

ヒントは冷静に見ることでしょうか。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                           編    集    後    記
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

さてさて今週はいつもと毛色を変えて見ました。
たまにはこういうのもいいですよね?

さて冒頭でお話した件ですが、

 ・次回の月曜日版より下記の講座が始まります
   「ちょっとがんばれば分かる Q&A式 CGI入門(Perl編)」

        読者の方からのご要望を受けまして、現在お届けしている「入力チェックの
        極意」を先送りにし、この講座を開始します。一通りホームページの作成が
        出来る方が対象です。サクサク進みますが詳しいことはあまり解説しません。


 ・CGIプログラミングメーリングリストと共同で下記のプロジェクトが始まります。
   「究極の日本語版 CGI FAQ 作成プロジェクト」

        詳しくはコチラをご覧くださいませ。
        http://www.freeml.com/message/cgihelp@freeml.com/0000587


というわけです。


今週はなんだかんだで原稿を書く時間があまり取れなかったので、ちょっと尻つぼみ
のような感じですね。申し訳ないです。


ではでは、次回は月曜日にお会いしましょう (^-^)/~~


■Information 
 「Webプログラミングからのお知らせ」

    【相互広告募集のお知らせ】
      読者数を増やしたいメルマガ発行者さんを募集しています。お互いに一定期間(1〜
      3回程度)広告を掲載し合いませんか?詳細はご相談ください(無料)

         お問い合わせ: mm-webp@ichikoro.com

    【コラム募集のお知らせ】
      Webプログラミングでは、寄稿していただけるコラムやプログラムなどを募集して
      います。たくさんの読者の方にあなたをアピールする場にもなります。ぜひ有意義
      な情報やご意見をお送りください。

         お問い合わせ: mm-webp@ichikoro.com

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

                   【 Webプログラミング Code Sample 】

                    発  行 : ichikoro.com
                発行責任者 : 勝部 麻季人
                              < mailto:katsube@ichikoro.com >
                  発行部数 : 1748部(前回)
                 Webサイト : < http://www.ichikoro.com/webp/ >
            お問い合わせ先 : < mailto:mm-webp@ichikoro.com >

                            Powerd by まぐまぐ
    All Right Reserved, CopyRight(C) 2001 Webプログラミング Code Sample
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

コメント

コメントを入力. Wiki文法が有効です:
X F I P A