2016年9月13日火曜日

C言語基礎その3



日本語の文字化けは保存時に(ファイル名.C) 
「文字コード」⇒UTF-8 で保存してください。



◆ C言語の基礎
自分の名前を印刷してみよう

#include <stdio.h> /* 名前を印刷する */
int main(void)
{
    printf("吾輩は猫である \n");
    return 0;
}

保存してコンパイル実行してみよう


◆加減乗除の計算

#include <stdio.h> /* 加減乗除 */
int main(void)
{
int a,b,wa,sa,seki,syo;
printf("a,bの数値を入力 \n");
scanf("%d%d", &a , &b ); /*数値の入力*/

wa=a+b; /*和*/
sa=a-b;
seki=a*b;
syo=a/b;

printf("加算 a+b= %d\n", wa ); /*結果の出力*/
printf("減算 a-b= %d\n", sa );
printf("積算 a*b= %d\n", seki );
printf("除算 a/b= %d\n", syo );

return 0;
}

保存、コンパイル、実行すると何故か?表示がおかしいね
それを直してください。

小数点が表示されませんね?

◆そこで訂正するのだ

#include <stdio.h> /* 加減乗除 */
int main(void)
{
float a,b,wa,sa,seki,syo;
printf("a,bの数値を入力 \n");
scanf("%f%f", &a , &b ); /*数値の入力*/

wa=a+b; /*和*/
sa=a-b;
seki=a*b;
syo=a/b;


printf("加算 a+b= %f\n", wa ); /*結果の出力*/
printf("減算 a-b= %f\n", sa );
printf("積算 a*b= %f\n", seki );
printf("除算 a/b= %f\n", syo );


return 0;
}

保存、コンパイル、実行してみます、どうでしょう小数点以下が表示されます。
ここでさらに疑問がわき調べるほどに奥深く面白くなるか?うーーんあきらめるか分かれ道!

▼疑問

整数部の10進数を2進数に変換する場合は、変換する数値を2で割り商と余りを求めれば2進数に変換できる。 しかし、小数の10進数を2進数に変換するとき、数値によっては小数部が0にならない場合がある。例えば10進数の0.4を2進数に変換すると0011が繰り返され整数部が0にならない。 

10進数の0.2を2進数に変換する これを無限小数といい同じパターンが繰り返し出現する場合を循環小数という。 無限小数に対して、小数部が0になるものを有限小数という。 無限小数が発生した場合は、コンピューターの内部では数値の近似値で数値を表す。

▼参考


10進数の60は、2進数では111100である。8ビットで表現するときは、足りないけた数分、上位(左側)に0を補充する。



小数の10進数を2進数に変換するには、変換したい10進数の小数部を小数が0になるまで2倍する。これで求めた整数部が2進数への変換結果である。


10進数0.625は、2進数では0.101である。




整数部の10進数を2進数に変換する場合は、変換する数値を2で割り商と余りを求めれば2進数に変換できる。
しかし、小数の10進数を2進数に変換するとき、数値によっては小数部が0にならない場合がある。例えば10進数の0.4を2進数に変換すると0011が繰り返され整数部が0にならない。


■例題:配列の合計

/* 例題1 配列の合計 */

#include<stdio.h>
int main(void)
{
int i,sum=0;
int dat[10]={6,9,0,3,2,4,8,7,1,5};
for(i=0;i<10;i=i+1)
{
sum=sum+dat[i];
}
printf("合計 %d\n",sum);
return 0;
}


$ dir
 hairetsu.c

$ gcc -o hairetsu hairetsu.c

$ dir
 hairetsu.c     hairetsu.exe

$ ./hairetsu.exe
合計 45




■三角形の面積の計算

/* 三角形の面積 */
#include <stdio.h>
int main(void)
{
    float r, h, x;                      /*変数の宣言*/

    printf("三角形の底辺と高さを入力してください。\n");
    scanf("%f%f", &r , &h ); /*数値の入力*/

    x = r * h / 2.0;                    /*面積の計算*/
    printf("面積 = %f\n", x );          /*結果の出力*/
    return 0;
}


1からnまでの和

/* 1からnまでの和 */
#include <stdio.h>
    int main(void)
 {
    int i, n, sum = 0;
    printf("2以上の整数を入力:");
    scanf("%d", &n);
    for(i = 1; i <= n ;i= i+1)
        sum=sum+ i ;
    printf("答えは %d です\n", sum);
    return 0;
}




$ dir
 goukei.c  sankaku.c

$ gcc -o sankaku sankaku.c

$ gcc -o goukei goukei.c

$ dir
 goukei.exe  goukei.c  sankaku.exe  sankaku.c

$ ./goukei.exe

底辺と高さを入力すると合計が出ればOK

$  ./sankaku.exe




/* 円柱の体積 */

#include <stdio.h>
int main(void)
{
    float r, h, x, p=3.14157; /*変数の宣言*/

    printf("円錐の半径と高さを入力してください。\n");
    scanf("%f%f", &r , &h ); /*数値の入力*/

    x = r * h * p ; /*体積の計算*/
    printf("円柱の体積 = %f\n", x ); /*結果の出力*/
    return 0;
}




0 件のコメント:

コメントを投稿