2009年10月21日水曜日

第17回 関数① 基礎

お題:
関数定義を行い、関数呼び出しによって3つの値の平均値を求めよ
①3つの数を入力させる
②関数呼び出しにより平均値を表示する

プログラム実行例:

image

必須事項:
・関数定義をし、平均値を返す
・関数呼びだしを行う

予備知識:関数定義と関数呼び出し
image 
関数定義と関数呼び出しを使ったプログラムの例です。
C言語のプログラムは
int main () {}
のmain関数が核となります。これがないと動きません。
関数定義は、プログラム例の
int kansu () {}
の部分です。ここでは関数kansu()を定義しています。
kansuはこちらが勝手に決めた名前で、自分で決められます。
return();
は、関数kansu()が吐き出す値です。イメージとしては
()に数字をつっこむ → 関数kansu()が計算 → 答えを吐き出す
といった感じです。
このように関数を利用する事を関数呼び出しといいます。
このプログラム例では、9行目でkansu()を使ってますが、kansu(2,3)の2,3は
3行目のkansu(int x , int y)のx,yに代入され、
return();の()内の計算結果の答えが吐き出されます。

関数は一つ答えを吐き出すのが基本です。
答えが一つ、つまり
return();が1つに定まれば、関数定義の中でif文で条件分けすることで
複数のreturn();を書く事が出来ます。

解答は10月24日夜に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。 チェックして返信します。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

2009年10月15日木曜日

第16回 配列② 配列の初期値と文字列 順序変え

お題:
恒星とその直径のデータを用いて、小さい星順に並び変える。
①用意してある恒星とその直系のデータを用いて並び替えをする
②1位から8位まで表示する

プログラム実行例:
image

必須事項:
・このページに用意してあるプログラムの一部を組み込む事
・並び変えるプログラムを作る事

ヒント:
・以下のプログラムの一部をコピー&ペーストして使ってください
char a[8][10]={"mercury","venus","earth","mars","jupiter","saturn","uranus","neptune"};
int  b[8]={4879,12103,12756,6794,142984,120536,51118,49572};

・配列の初期値は上のプログラムのようにして宣言する事が出来ます。
・数値の単位はkmです。
・並び変える方法はいろいろあります。
・順位を記憶するのための配列を作ると便利です。

重要:
上のプログラムについて、
charは文字型といい、intの文字版だと思ってください。charで宣言すると文字を変数に代入する事が出来ます。
この場合、a[8][10]はタテ8行、横10列の文字を入れる表を作ったと考えてください。1つの枠に1文字入ります。つまり、

m e r c u r y      
v e n u s          
e a r t h          
m a r s            
j u p i t e r      
s a t u r n        
u r a n u s        
n e p t u n e      

といった感じです。
ここからが重要で、この文字列をprintfで表示するには以下のように記述します。

printf(“ %s ”, a[i]);

iは行を表しています。例えばa[0]なら%sの所に「mercury」が表示されます。

解答は10月17日夜に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。 チェックして返信します。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2

3


4


5
6

7
8
9
10
11
12
13
14

15
16
17
18
19
20
21

22

#include <stdio.h>

int main () {

    char a[8][10]={"mercury","venus","earth","mars","jupiter","saturn","uranus","neptune"};
    int  b[8]={4879,12103,12756,6794,142984,120536,51118,49572};
    int  c[8];
    int i,j,k;

    for (i=0;i<=7;i++){
        k=1;
        for(j=0;j<=7;j++){
           if(b[j] < b[i])
                k++;
        }
        c[i]=k;
    }

    for(k=1;k<=8;k++){
        for(i=0;i<=7;i++){
            if(c[i]==k) {
                printf("%d %s %dkm \n",k,a[i],b[i]);
            }
        }
    }

}

実行例は上と同じです。

解説

今回使った変数とその役割

a[8][10]
b[8]
c[8]
i
j
k
文字を格納する行列 8行10列で8項目10文字まで記憶
恒星の直径データ
恒星の順位データ
カウントアップ用
カウントアップ用
順位決定用

配列の初期値は3,4行目のように書くことが出来ます。
初期値は配列の枠の数だけ入れる必要はありません。例えば、

image

このように枠100個の配列に対し、”1,2,3”しか初期値を入力しなかったとしても、問題なくプログラムが通ります。結果は以下のようになり、

image

a[0]から順に代入され、あとは”0”となります。

7行目のfor文は恒星の直径が小さい順に順位をつけています。
7行目のfor文:比較する恒星(1つ)
9行目のfor文:8つの恒星を順に大きさ比べ

となってます。ここで、7行目で選んだ恒星を親恒星、9行目の恒星を子恒星とします。
赤いif文が肝で、親恒星が子恒星より大きかった時、kが1増えます。
つまり、親恒星の大きさが全体の3番目に小さい時、親恒星より小さい恒星は2つしかありません。よって、kの初期値は1ですから、9行目のfor文でkは2増え、kは3となります。
kは自動的に順位を表す事になります。
青い命令でc[]に順位データを代入します。

15行目からのfor文は配列c[]の順位データに基づいて並べ替えしながら、直系の小さい順に表示しています。
15行目のfor文:表示する順位を決定
16行目のfor文:配列c[]を全部調べる
となっています。
紫色のif文が肝で、15行目のfor文で決定した順位kと合致するc[i]があった時、printfで表示します。
a[i],b[i],c[i]は同じ星の情報なので、iさえ分かればそれに関する情報が全部表示できます。配列の利点です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

2009年10月8日木曜日

第15回 配列① FizzBuzz

お題:
FizzBuzzプログラムを作る。
①数を1からカウントしていく
②カウントする上限を尋ねる
③3の倍数の時、「Fizz」と表示
④5の倍数の時、「Buzz」と表示
⑤3と5の倍数の時、「FizzBuzz」と表示

プログラム実行例:

image

必須事項:
・配列を利用する事

ヒント:
・まず、配列をたくさん用意して、3の倍数、5の倍数、3と5の倍数、それ以外に分類します
・実行例は改行しましたが、あってもなくてもいいです
・配列に関しては第11回の予備知識を参考にしてください

解答は10月10日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3

4
5

6
7
8
9
10
11
12
13
14
15
16
17

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

#include <stdio.h>

int main () {
    int a[1000],i,n,k;

    puts("いくつまでfizzbuzzを行いますか?");
    printf("n=");    scanf("%d",&n);

    for(i=0;i<=n;i++){
        a[i]=0;
    }
    for(i=1;3*i<=n;i++){
        a[3*i]=1;
    }
    for(i=1;5*i<=n;i++){
        a[5*i]=2;
    }
    for(i=1;3*5*i<=n;i++){
        a[3*5*i]=3;
    }

    k=1;
    for(i=1;i<=n;i++){
        if(a[i] == 0 )
            printf("%d ",i);
        else if (a[i] == 1)
            printf("fizz ");
        else if (a[i] == 2)
            printf("buzz ");
        else if (a[i] == 3)
            printf("fizzbuzz ");

       if (i == 10*k) {
            printf("\n");
            k++;
        }
    }
}

実行例は上と同じです。

解説

今回使った変数とその役割

a[1000]
i
n
k
数字の属性を記憶する変数
カウントアップする数字そのもの、または倍数処理に利用
カウントアップする数字の上限
数字が10個並んだら改行するための変数

このプログラムは、数字と配列を対応させて、配列に数字の属性を印していきます。
例えば、数字の7なら配列a[7]に7の属性を印します。

この印付けを行っているのが6から17行目の命令です。
まず、a[0]からa[n]までの配列に0をとりあえず入れていきます
次に、3の倍数の配列に1を入れていきます。
次に、5の倍数の配列に2を入れていきます。
最後に、3と5の倍数の配列に3を入れていきます。
つまり、
0の印が付いた数字はただの数、
1の印が付いた数字は3の倍数、
2の印が付いた数字は5の倍数、
3の印が付いた数字は3と5の倍数、
という事になります。
印をどんどん上書きしていきます。

赤いif文で数字ごとの印を判別してfizz,buzz,fizzbuzzを表示させています。
青いif文は改行用です。iをカウントアップして10の倍数に至った時に、改行を入れます。見やすくするために入れました。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

2009年9月29日火曜日

第14回 for文③ 多重ループ

お題:
原点を通る一次関数(y=a*x)のグラフを■で表現する。グラフはx,y軸が正の領域(第一象限)のみ。
①初めにグラフの規模(n*n)を尋ね、設定する。nは整数で、n<100。
②一次関数の傾きaを尋ね、設定する。aは小数点にも対応する。
③グラフを描く。

プログラム実行例:
imageimageimage

必須事項:
・for文を2回以上使う事

注意事項:
・if文なども駆使してください
・全角記号□と■は半角数字の2個分のスペースです
・表現方法はたくさんあるので、上の実行例と全く同じにしなくても大丈夫です

解答は10月3日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4

5
6
7
8

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32

#include <stdio.h>

int main () {
    int n,x,y;
    double a;

    puts("グラフの規模は? n×n");
    printf("n=");    scanf("%d",&n);
    printf("\n直線の傾きは?\n");
    printf("a=");    scanf("%lf",&a);

    for(y=n;y>=0;y--){
        if (y > 9)
            printf("%d",y);
        else
            printf(" %d",y);
       for(x=0;x<=n;x++){
            if (a*x >= y && a*x <y+1){
                printf("■");
            }
            else if (x >= y/a && x - 1< y/a)
                printf("■");
            else
                printf("□");
        }
        printf("\n");
    }

    printf("  ");
    for(x=0;x<=n;x++) {
        if (x < 10)
            printf("%d ",x);
        else
            printf("%d",x);
    }
}

実行例は上と同じです

解説

今回使った変数とその役割

n
x
y

a
グラフの規模(x,y軸の表示する範囲)
xの値
yの値
直線の傾き

紫のfor文はy軸で、青いfor文はx軸です。
グラフはy軸正方向(上)から描いていくので、for文も上からに設定します。なので9行目の通り、y=nから始まり、y=0になるまで1づつ降りて行きます。

青いfor文はx=0からx=nまで1づつ増やしながら■か□を1つづつ表示していきます。
考え方としては、下の図のようなイメージです。
image

現在紫のfor文で実行中のyの値とa*xがぶつかった所に■、それ以外には□を表示します。yは整数なのでa*xが小数の時にも対応するため、15行目のように、”1”の大きさの範囲を設けます。

18行目は直線が途切れなく表示されるためのif文です。これが無いと以下のようになります。

image

なぜ空白があくかというと、下の図のようなイメージです。

image

この時、現在のyに注目し、図の緑の点が現在のxの範囲に入っているかどうかを検討します。それが18行目です。
これさえあれば15行目はいらないのでは?と思うかもしれませんが、18行目だけだと傾きaが1以下の時に、同じような空白が出る現象が起こります。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

2009年9月27日日曜日

第13回 for文② 多重ループ

お題:
物体を自由落下させた時に進む距離を求めるプログラムを作成する。
様々な初速度で落下させ、重力によってどれだけ落ちるかを計算する。
①初速度は0,1,2,3,4,5,6,7[m/s]
②重力の加速度は9.8[m/s^2]とする
③落下させてから0秒から1秒ごとの落下距離を表示する。n秒まで表示させる
④nを初めに入力させる

プログラム実行例:

何秒後まで表示させますか?
n=5

初速度  0[m/s],1[m/s],2[m/s],3[m/s],4[m/s],5[m/s]
1秒      4.9[m],5.9[m],6.9[m],7.9[m],8.9[m],9.9[m]
2秒 ・・・
・・・
5秒 ・・・

必須事項:
・for文を2回使う事

注意事項:
・二乗は単純に二回掛けください
・分数を使う場合は数式をよく確認してください

予備知識:

等加速度運動をする物体が進む距離Xは、時間をt、初速度をv、加速度をaとすると、以下の式で表されます

X = v*t + (a*t^2) / 2

for文の中にfor文を入れる事が出来ます。例えば、123456・・・と数字を並べて、1行7つ数字を表示すると改行するようにするには、以下のようなプログラムになります。

#include <stdio.h>

int main () {
    int i,t,y;
    i=0;
    for (t=1;t<=5;t++) {
        for(y=1;y<=7;y++) {
            i++;
            printf("%d ", i);
        }
        printf("\n");
    }
}

(実行結果)
image

このプログラムでは
tが行
yが列
iが数

の変数です。iは青い部分のfor文を抜けても数値は保存されたままなので、カウントアップできます。

解答は9月28日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4
5

6
7
8

9
10
11
12
13

14
15
16
17
18
19
20
21

#include <stdio.h>

int main () {
    int n,t,v;
    double a;
    a=9.8;

    puts("何秒後まで表示させますか?");
    printf("n=");    scanf("%d",&n);
    puts("");

    printf("初速度 ");
    for (v=0;v<=7;v++) {
        printf("%d[m/s], ",v);
    }
    printf("\n");

   for(t=1;t<=n;t++){
        printf("%d秒    ",t);
        for(v=0;v<=7;v++){
            printf("%.1f[m],",v*t+a*t*t/2);
        }
        printf("\n");
    }
}

実行例は次の通りです

image

解説

今回使った変数とその役割

n
t
v

a
求める最大の時間(秒)
時間(秒)
初速度[m/s]
重力の加速度9.8[m/s^2]

赤いfor文が行、青いfor文が列です。
まず、赤いfor文でtを設定し、青いfor文で初速度vを1づつ増やしながらtを代入していきます。青いfor文で初速度v=7[m/s]までいくと一行が完成し、赤いfor文に戻り、tが1秒増え、また青いfor文に入ります。

printf(“\n”)で最後の改行を入れています。

17行目の%.1fは、小数点以下2桁目を四捨五入して小数点以下1桁から上を表示させるという意味です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

2009年9月22日火曜日

第12回 for文①

お題:
第11回と同じプログラムをfor文を使って作成する
n個の整数に関して数値をそれぞれ入力し、その整数の合計を求めるプログラム
①はじめに、整数の個数nを入力させる
②n個分の整数を入力する
③合計値を出す

プログラム実行例

整数の個数nを入力してください
n=3
a0=3
a1=4
a2=5
よって合計値は
3+4+5=12
です

必須事項
・for文、配列を使う事

注意事項
・合計値の式はfor文で工夫
・配列の数え方 (a[0],a[1],a[2]・・・)
・配列は事前にたくさん用意すると対応できる (百個とか)

予備知識:
for文は以下のように書きます。

for ( ① ; ② ; ③ ) {
    命令文;
}

for文はwhile文と同じ、ブロックの中の命令文を繰り返して実行するものです。①、②,③で、繰り返しを制御します
①は初期値のようなものです。for文の繰り返しの1回目に1度だけ実行されます。
②は繰り返しの条件です。この条件に合う時だけ繰り返します。
③はブロックの中の命令文が実行された後に実行されます。

例えば、変数iを0から5まで表示したい場合は、

for(i=0;i<=5;i++){
    printf("%d \n",i);
}

となります。i=0が初期値で、iが5になるまで、printfでiを表示します。printfで表示した後はi++が実行され、iが1増えて、また最初にもどり条件に合うかどうか判断されます。合わない場合、つまりiが6以上になるとfor文から抜けます。

解答は9月24日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3

4
5

6
7
8
9

10

11
12
13
14
15
16

#include <stdio.h>

int main () {
    int n,a[100],i,sum;

    puts("整数の個数nを入力してください");
    printf("n=");    scanf("%d",&n);

   for ( i=0; i<=n-1; i++) {
        printf("a%d = ",i);
        scanf("%d",&a[i]);
    }

    puts("よって合計値は");

   for ( i=0; i<=n-2; i++) {
        printf("%d + ",a[i]);
        sum += a[i];
    }
     printf("%d = %d",a[n-1],sum + a[n-1]);
}

実行例は次の通りです

整数の個数nを入力してください
n=4
a0 = 123
a1 = 456
a2 = 789
a3 = 321
よって合計値は
123 + 456 + 789 + 321 = 1689

解説

第11回のwhile文よりスッキリしたプログラムになりました。

赤い部分、青い部分は第11回と対応しています。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

2009年9月16日水曜日

第11回 while文③ 配列を使ったプログラム

お題:
n個の整数に関して数値をそれぞれ入力し、その整数の合計を求めるプログラム
①はじめに、整数の個数nを入力させる
②n個分の整数を入力する
③合計値を出す

プログラム実行例

整数の個数nを入力してください
n=3
a0=3
a1=4
a2=5
よって合計値は
3+4+5=12
です

必須事項
・while文、配列を使う事

注意事項
・合計値の式はwhile文で工夫
・配列の数え方 (a[0],a[1],a[2]・・・)
・配列は事前にたくさん用意すると対応できる (百個とか)

予備知識:
配列は、数値を入れる箱です。箱を用意する方法は

int = a[3];

と書きます。この場合、a[0],a[1],a[2]という3つの箱ができます。

配列は、例えばiという変数を用意した時、

a[i]

といった書き方が出来ます。iにはもちろん数字を入れなければなりませんが、iが1づつ増えていく場合、a[i]とするだけで、a[0],a[1],a[2]とiの数の配列が指定されることになり、便利です。

解答は9月18日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4

5
6

7
8
9
10
11
12

13

14
15
16
17
18
19
20
21

#include <stdio.h>

int main () {
    int a[100],i,n,sum;
    sum=0;

    puts("整数の個数nを入力してください");
    printf("n=");    scanf("%d",&n);

   i=0;
    while (i <= n-1) {
        printf("a%d = ",i);
        scanf("%d",&a[i]);
        i += 1;
    }


    puts("よって合計値は");

    i=0;
    while (i <= n-2) {
        printf("%d + ",a[i]);
        sum += a[i];
        i += 1;
    }

    printf("%d = %d",a[n-1],sum + a[n-1]);
}

実行例は次の通りです

整数の個数nを入力してください
n=10
a0 = 1
a1 = 2
a2 = 3
a3 = 4
a4 = 5
a5 = 6
a6 = 7
a7 = 8
a8 = 9
a9 = 10
よって合計値は
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

整数の個数nを入力してください
n=1
a0 = 1
よって合計は
1 = 1

解説

赤い部分(3行目)はa[100]とすることで、a[0]からa[99]までの変数を作っています。これは、入力する整数を記憶する変数になり、つまりこのプログラムは100個までの足し算が出来る事になります。

青い部分では、入力する数値を受け付けます。iが配列a[?]?を指定しています。iは初めは0でwhile文に入ります。printfでa0=と出力され、scanfでa[0]に数値が代入されます。
i += 1; は、i=i+1; と同じ意味になります。while文を実行すると最後にiが1増えます。
これが整数の個数n回だけ繰り返されます。a[0]からa[n-1]まで数字が入る事になります。

紫の部分では、計算式と合計値を表示します。while文で計算式をどんどん書いています。整数の個数n個分繰り返すと、計算式の最後に+が出てきてしまうので、while ( i <= n-2 ) { としています。n-1個分繰り返して、最後にa[n-1]だけを添えます
while文では計算式を書くと同時に合計値sumの計算をしています。while文はn-1回しか繰り返さないので、正確には
sum = a[0] + ・・・ + a[n-2]
で、本当の合計値はsum + a[n-1]となります。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

 

2009年8月16日日曜日

第10回 while文②

予備知識:
階乗は、

n! = 1×2×3×・・・×n-1×n

と表せられる。ただし、0!=1です。

お題:
階乗を計算するプログラム
①はじめに、n!の整数nを入力させる
②n!の計算式と、計算結果を表示させる

プログラム実行例

整数nを入力してください。
n=5
5! = 1×2×3×4×5 = 120

必須事項
・while文を使うこと
・n=0にも対応する

解答は8月20日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4
5

6
7

8
9
10
11
12
13

#include <stdio.h>

int main () {
    int n,i,a;
    i=1;
    a=1;

   puts("整数nを入力してください。");
    printf("n=");    scanf("%d", &n);

    while ( n >= i ) {
        a=a*i;
        i++;
    }

    printf("%d!=%d\n",n,a);
}

実行例は次の通りです。

整数nを入力してください。
n=33
33!=-214748364
12!=479001600

解説

n=0の場合は1が答えですが、このプログラムではn=0の時while文を通らず、12行目のprintfにて、初期値のa=1が表示されます。

int型は10桁までしか保存できないので、n=33が限界です。n=34以上になると、n!が10桁を超えてしまいます。
int型は10桁までしか保存できないので、n=12が限界です。n=13以上になると、n!が10桁を超えてしまい、誤った値が出ます。

9行目の

a=a*i;

は、左辺のaが新しいaで、右辺のaは古いaです。while文のような繰り返す命令ではよくつかわれます。新しい変数にドンドン古い変数を入れていく感覚です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

※2009.9.4 訂正

2009年7月20日月曜日

第9回 while文

予備知識:
自然対数eは

e=1/0! + 1/1! + 1/2! + 1/3! + ・・・ 1/(n+1)!

で求まります。nの値が大きいほどeの精度が増します。
また、n!=1×2×3×・・・×n です。0!=1です。

お題:
自然対数eを求めるプログラム
①はじめに、求める精度=項数nを整数で入力させる
②eの計算結果を表示する

プログラム実行例

精度nを入力してください。
n:30
e=2.718282

必須事項
・while文を使うこと
・n=1にも対応する。 (この時e=1.0)

while文とは
while文は

while (式) {}

と記述され、{}ブロック内の命令を(式)の条件を満たす限り繰り返し実行します。特徴的なのは、(式)の判断を{}ブロックを実行する前に行うことです。do文では{}ブロックを実行した後に判断していました。例えば、

scanf("%d", &a);
while ( a != 7777777) {
    puts("気合いを入れろ!");
    scanf("%d", &a);
}
puts("正解");

とすると、最初にa=7777777と当てられればwhile文に入らず「正解」となります。はずれたら、while文に入って当たるまで永遠と無限ループします。

これを利用して自然対数を求めましょう。

解答は7月26日の夜に掲載します。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールに張り付けて以下のアドレスに送ってください。

解答、質問はこちらまで。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4
5
6
7

8
9
10
11
12
13
14
15
16
17
18
19

20
21

#include <stdio.h>

int main () {
    double e,b;
    int a,c,n,i;
    puts("精度nを入力してください。");   
    printf("n=");    scanf("%d",&n);
    printf("e=");

    c=1;
    b=1.0;
    while ( c < n ) {
        i=1;
        a=1;
        while ( i <= c ) {
            a=a*i;
            i = i+1;
        }
        b = b+(double)1/a;
        c = c+1;
    }
 

    printf("%f",b);
}

実行例は次の通りです。

精度nを入力してください。
n=30
e=2.718282

解説

このプログラムの流れは、
1.各項の分母を計算
2.各項を確立
3.項を合計していく
といったイメージになっています。定義した変数a,b,c,i,nについて
aは分母
bは各項の和
cは項数のカウント
iはn!の掛け算のカウント
nは求める項の数=精度
に使用しています。

青い部分では各項の分母を作っています。n項目の分母は(n-1)!なので、例えば4項目の分母を計算しているなら、while文でiがになるまで1*2*3と計算します。具体的には、
1巡目:i=1, a=1 → a=1*1, i=1+1=2
2巡目:i=2, a=2 → a=1*2, i=2+1=3
3巡目:i=3, a=2 → a=2*3, i=3+1=4
といった具合です。ちなみに指定した精度がn=1の時、青い部分のwhile文には入らず、答えとしてbの初期値”1”が吐き出されます。

赤い部分では、青い部分で出来上がった分母から項を作り、n項まで合計していきます。

最終的にbには全項の合計が入っているので、それをprintfで表示させます。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

2009年7月13日月曜日

第8回 do文 [解答済]

お題:
その数が素数がどうか判別するプログラム
①はじめに10桁以下の整数を入力させる
②それが素数かどうか判別する。

プログラム実行例

10桁以下の整数を入力してください。
a:3257

これ素数

必須事項
・do文を使うこと

do文とは
do文は、

do {} while ();

と記述され、{}ブロック内の命令をwhile()内の式が成り立つまで繰り返し実行します。例えば、

do {
    puts("気合いを入れろ!");
    scanf("%d", &a);
} while ( a == 777777777);

のようにプログラムします。このプログラムでは、気合いでa=777777777を当てない限り、プログラムは終わりません。

これを利用して素数判別プログラムを作ってください。

解答は7月19日の夜に掲載します。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールにがっちり張り付けて以下のアドレスに送ってください。

解答、質問はこちらまで。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答

解答例は以下の通りです。

1

2
3
4
5
6

7
8
9

10
11
12
13
14
15

#include <stdio.h>

int main () {
    int a,b;
    b=1;    //bの初期値
    puts("10桁以下の整数を入力してください。");
    printf("a:");    scanf("%d", &a);

    do {
        b=b+1;
    } while ( a%b);


    if ( b < a ) {
        puts("これ素数じゃない");
    }
    else
        puts("これ素数");

}

実行例は以下の通りです。

10桁以下の整数を入力してください。
a:131
これ素数

解説

素数は1か、その数でないと割れない数なので、do文でひたすら割り続けるプログラムを作りました。

赤い部分はそのdo文です。bの初期値は1なので、b=2からスタートします。while()の条件を満たすとdo文を抜ける事ができます。つまり、2から順々にaを割って行って、aがbで割り切れた時点でdoを抜けます。

ここで、bには、とにもかくにもaを割ることの出来る数字が入っています。
青い部分では、bがaそのものなのか、aより小さい数なのかを判別します。もし、bがaと一致、つまりaが1とaでしか割れないとすれば、aは素数ということになります。
一方bがaより小さければ、aはbの倍数ということなので、素数ではありません。

ある数を解析する際、単純な作業を人海戦術できるのがコンピュータの利点と言えます。

今回解答が一番早かったのはKばやし君です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

 

2009年7月9日木曜日

第7回 ifとSwitch文 [解答済]

お題:
10進数を16進数に変換する。
①はじめに、1から255までの整数を入力させる。
②その10進数を16進数に変換すると、どんな数になるか答える。

プログラム実行例

1から255までの整数を入力してください。
a:18

16進数に変換すると:12

必須事項
・if文、switch文を使う。

switch文は単なる場合分けをしてくれます。作る側にとって、直感的に作れるので便利です。

例えば以下のように記述します

Switch (a % 3) {
    case 0 : puts("aは3で割り切れる"); break;
    case 1 : puts("aを3で割ると1余る"); break;
    case 2 : puts("aを3で割ると2余る"); break;
}
 

()の中の答えをcaseで場合分けして、それぞれの命令を実行します。ここで重要なのは、各命令の最後にあるbreak;で、これがないと、switchのブロック{}を抜ける事ができません。

16進数はネットで調べれば光速で見つかるので、調べてください。

解答掲載は7月12日の夜です。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付ingしてください。

解答、質問はこちらまで。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答

解答例は以下の通りです。

1

2

3

4
5
6

7
8
9
10
11
12
13
14
15
16
17

18
19
20
21
22
23
24
25
26
27
28
29

#include <stdio.h>

int main () {

    int a;

    puts("1から255までの整数を入力してください");
    printf("a:");    scanf("%d", &a);
    printf("16進数に変換すると:");

    if ( a/16 < 10) printf("%d",a/16);
    else {
        switch (a/16) {
            case 10 : printf("A");    break;
            case 11 : printf("B");    break;
            case 12 : printf("C");    break;
            case 13 : printf("D");    break;
            case 14 : printf("E");    break;
            case 15 : printf("F");    break;
        }
    }


   if ( a%16 < 10) printf("%d", a%16);
    else {
        switch (a%16) {
            case 10 : puts("A");    break;
            case 11 : puts("B");    break;
            case 12 : puts("C");    break;
            case 13 : puts("D");    break;
            case 14 : puts("E");    break;
            case 15 : puts("F");    break;
        }
    }

}

実行例は以下の通りです。

1から255までの整数を入力してください
a:234
16進数に変換すると:EA

解説

16進数は桁が16までいくと、桁が繰り上がります。10進数の世界では数字が0から9までしかないので、10以上を1桁で表すためにA,B,C,D,E,Fの英語を使います。このプログラムは、その過程を忠実に実行しているだけです。

まず、青い部分では16進数の2桁のうちの16の位?つまり2桁目の変換を行います。1から255までの整数が来るはずなので、16進数が3ケタになる事はありません。ptintf(””)を改行なしで使うことで、16進数の二桁目を表示した後、改行せず1桁目を並べることができます。

赤い部分は16進数の1桁目を変換していますが、やってることは青い部分と同じです。aが10以下ならそのまま表示して、10以上なら英語に変換します。

今回解答が1番早かったのは僕です。かなしいです。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

 

2009年7月4日土曜日

第6回 ifとブロック複合文と論理演算子 [解答済]

お題:
日本の単位とSI単位を調べるプログラムを作る
①はじめに、「日本の単位」か「SI単位」かを選ばせる。
②10の何乗が知りたいかを尋ね、その単位が何なのかを表示する
③1から10の12
乗まで対応する
注意!例えば10の5乗を万、10の7条をM(メガ)としてください!!

プログラム実行例

どちらが知りたいか選んでよね。
1.日本の単位
2.SI単位
知りたい単位は:1(例)

10の何乗が知りたいのか書いてよね。
10の何乗?:9
それは億ね。

10の何乗が知りたいのか書いてよね。
10の何乗?:5
それは万ね。

10の何乗?:100000
それは知らない。

10の何乗?:-0120444444
それは知らない。

必須事項
・if () { } else { } を使う。
・論理演算子 && || を使う。

if () { } else { }の{}はブロック(複合文)といって、2行以上の命令を含む時に使います。論理演算子はifの条件で使います。使い方は以前つかった演算子と同じです。意味を調べて、よく覚えておいてください。

単位についてはこちらを参考にしてください。USEDしてる人にはお馴染み単位だと思います

解答掲載は7月8日です。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付するか、メールに添付してください。

解答、質問はこちらまで。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答

解答例は以下の通りです。

1

2
3
4

5
6
7

8
9
10
11

12
13

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

46

#include <stdio.h>

int main () {
    int a;    //どちらの単位が知りたいか
    int b;    //10のb乗

    puts("どちらが知りたいか選んでよね");
    puts("1.日本の単位 2.SI単位\n");
    printf("知りたい単位は:");    scanf("%d",&a);
   
    if ( a < 1 || 2 < a) {
        puts("指示通りに答えてね");
        return (0);
    }


    puts("10の何乗が知りたいのか書いてよね。");
    printf("10の何乗?:");    scanf("%d",&b);

    if (a==1) {
        if ( b==1 )
            { puts("それは十ね。"); }
        else if (b==2)
            { puts("それは百ね。"); }
        else if (b==3)
            { puts("それは千ね。"); }
        else if (3 < b && b < 8)
            { puts("それは万ね。"); }
        else if (7 < b && b < 12)
            { puts("それは億ね。"); }
        else if (b==12)
            { puts("それは兆ね。"); }
        else
            { puts("それは知らない。"); }
    }

  
else if (a==2) {
        if ( b==1 )
            { puts("それはdaね。"); }
        else if ( b==2 )
            { puts("それはhね。"); }
        else if ( 2 < b && b < 6 )
            { puts("それはkね。"); }
        else if ( 5 < b && b < 9 )
            { puts("それはMね。"); }
        else if ( 8 < b && b < 12 )
            { puts("それはGね。"); }
        else if ( b == 12 )
            { puts("それはTね。"); }
        else
            { puts("それは知らないっす。");}
    }

}   

実行例は以下の通りです。

どちらが知りたいか選んでよね
1.日本の単位 2.SI単位

知りたい単位は:2
10の何乗が知りたいのか書いてよね。
10の何乗?:5
それはkね。

解説

まず、どの単位が知りたいのか聞きます。プログラムの茶色い部分では、答える人間が1と2以外を入力したときに、「指示通りに答えてね」と表示し、プログラムを終了するようになっています。ここで、論理OR演算子を利用しています。

論理OR演算子 a || b 
aとbどちらかが成り立たてば非0、成り立たなければ0

また、10行目のreturn(0);を入れることによって、プログラムを終了させることができまう。便利なので覚えておいてください。

赤い部分では、a=1、つまり日本の単位についてのプログラムです。ここで論理AND演算子を利用しています。

論理AND演算子 a && b
aとbどちらも成り立てば非0、成り立たなければ0

ちなみに、ifの条件で、例えば( 3 < b < 8 )とすると、プログラムが成り立ちません。気を付けてください。試してみると面白いです。

青い部分では同様にSI単位についてのプログラムです。

今回1番解答が早かったのはKBやし君です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

目次

目次です
随時更新していきます。

基本
第1回 基本的な定型文とコンパイル [解答済]
第2回 演算と型 [解答済]

if文
第3回 if と else [解答済]
第4回 ifとelseと時々演算子[解答済]
第5回 ifと似てるよ条件演算子 [解答済]
第6回 ifとブロック複合文と論理演算子 [解答済]

Switch文
第7回 ifとSwitch文 [解答済]

do文
第8回 do文 [解答済]

while文
第9回 while文
第10回 while文②
第11回 while文③ 配列を使ったプログラム

for文
第12回 for文①
第13回 for文② 多重ループ
第14回 for文③ 多重ループ

配列
第15回 配列① FizzBuzz

2009年6月30日火曜日

C言語講座 第5回 ifと似てるよ条件演算子 [解答済]

お題:
①プログラム実行中に3つの”整数”(正負に対応)の入力を受け付け、一番大きい数字を表示させる。
②100と一番大きい数字との差を正の整数で表示させる。
注意:ifとelseは使ってはいけない。①、②とも条件演算子を用いたプログラムにせよ。

プログラム実行例

整数を3つ入力してください。
a:
b:
c:
一番大きい数字は:
一番大きい数字と100との差は:

必須文字列
・条件演算子 ___ ? ____ : ____

条件演算子の使い方をマスターしてください。うまく使うとプログラムを簡略化することが出来ます。

解答掲載は7月4日です。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付するか、8G以上云々して提出してください。

質問等はメールまたはコメントにて受け付けます。前回は解答者0だったので、今回は頑張って取り組んでください。

---------------------------------------------------------------

解答

解答例は以下の通りです

1

2
3
4
5
6
7
8

9
10
11

12
13
14
15

#include <stdio.h>

int main()
{
    int a,b,c,max,d;
    puts("3つの整数a,b,cを入力してください。");
    printf("a:");    scanf("%d",&a);
    printf("b:");    scanf("%d",&b);
    printf("c:");    scanf("%d",&c); 

    max = a;
    max = b > max ? b : max ;
    max = c > max ? c : max ;

    printf("一番大きい数字は:%d \n",max);
    d = max > 100 ? max - 100 : 100 - max ;
    printf("一番大きい数値と100との差は:%d \n",d);
}

実行例は以下の通りです。

3つの整数a,b,cを入力してください。
a:123
b:456
c:789
一番大きい数字は:789
一番大きい数値と100との差は:689

解説

_条件演算子の使い方についての問題です。条件演算子は次のように書きます。

式1  ?  式2  :  式3  ;

この意味は、「式1が非0なら式2を実行、式1が0なら式3を実行」となります。これをif文で表すとするなら、

if (式1) 式2; else 式3;

となります。

行番号9,10,11
一番大きな整数の選出ですが、まず、とりあえずaを一番大きいと仮定します。次にaとbを比べて、どちらか大きい方をmaxとします。cも同様に比べると、最終的に一番大きい数字がmaxに代入されます。

行番号13
ここでは、maxと100との差を求めています。差なので負にはなりません。なので条件演算子で「max>100ならmax-100、それ以外なら100-max」としています。それ以外の場合には、max=100も入ります。

_差を求める専用の関数もあります。それはabs関数といい、

A=abs(max-100);

と表すことも出来ます。しかし、abs関数を使うには、abs関数が乗ってる辞書、つまり「ライブラリ」がないと、コンピュータは分かってくれません。そのため、プログラムの頭(ヘッダという)に

#include <stdlib.h>

と書きくわえなければなりません。このように、#includeはコンピュータに使う辞書を指定する役割を持っています。stdlib.hが辞書にあたります。

_今回1番解答が早かったのはK林君です。

答えられる範囲で質問受け付けます。
cosmo-cleaner@za.pial.jp

2009年6月28日日曜日

C言語講座 第4回 ifとelseと時々演算子

お題:
①プログラム実行中に1以上99以下の”2つの整数”a,bの入力を受けつけ、そのa,bの関係(a=b,a<b,a>b)を表示させる。
②a==a,a==0,a<100,a<0,a>0,a>100の関係演算子の結果をそれぞれ表示させる。

プログラム実行例

1以上99以下の整数を2つ入力してください。
a:
b:
a<bです。

関係演算子の結果は、
?
?
・・・

必須文字列
・if
・else
・==, < , >

ifとelseのスマートな書き方、関係演算子(==,<,>など)の仕組みを理解してください。

解答掲載は6月29日です。それまでに各自プログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付するか、8G以上のUSBメモリに入れてプレゼントするか、16GのmicroSDに入れてプレゼントするか、1TのHDに入れてプレゼントするか、いずれかの方法で提出してください。

質問等はメールまたはコメントにて。 どんな些細なことでも答えるので、頑張って取り組んでください。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答

解答例は以下の通りです。

#include <stdio.h>

int main () {
    int a,b;
    printf("a:");    scanf("%d", &a);
    printf("b:");    scanf("%d", &b);
    if (a==b)
        puts("a=b");
    else if (a<b)
        puts("a<b");
    else if (a>b)    //elseのみでも可
        puts("a>b");
    printf("%d\n %d\n %d\n %d\n %d\n %d\n"
        ,a == a,a==0,a<100,a<0,a>0,a>100);
}

実行例は以下の通りです。

a:25
b:31
a<b
1
0
1
0
1
0

解説
演算子を使って条件を作りました。ifとelseの書き方は人それぞれですが、”else if ()”とした方がスマートでいいと思います。

②の課題は演算子の本質を知ることが目的です。演算子は2つの関数の関係性について、演算子が表現するものと一致するのかしないのかを、1か0で表します。この場合、例えばa==aは当然成り立つので、”1”が吐き出されます。a==0はaが0で無い限り一致しないので、”0”が吐き出されます。ifの条件で演算子が使えるのは、ifの「0か非0か」という条件分岐に合うからです。

演算子吐き出す1と0はint型なので、扱いには注意してください。

他の演算子として、
a!=b、a<=b、a>=bなどがありますが、自分で調べてみてください。

C言語講座 第3回 if と else [解答済]

お題:
①プログラム実行中に”整数”の入力を受け付け、その整数が偶数か奇数か判断する。偶数の時は「偶数です」、奇数の時は「奇数です」と表示させる。
②プログラム実行中に整数以外の値を入力された場合、「整数ちゃうよ」といったメッセージを表示させる。

プログラム実行表示例

整数を入力してください。
x:
入力された値は偶数(奇数)です。


or

なんで整数を入力しないんですか。ディスってるんですか。

必須文字列
・if
・else
・% (剰余を計算する演算子)

if文の本質をよく理解してください。条件がゼロならどうなるか、など。

解答掲載までの期間は3日間です。それまでに各自プログラムを作成し、
・プログラム文
・プログラムをコンパイルした実行ファイル
をメールに添付するなり、紙に書いてポストに投函するなり、言葉で伝えるなり、いかなる方法をつかっても構わないので提出してください。

質問等はメールまたはコメントにて。 どんな些細なことでも答えるので、頑張って取り組んでください。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答

解答例は以下の通りです。

#include <stdio.h>

int main () {
    double x;    //入力値を格納
    int y;        //整数判定に使用
    printf("x:");    scanf("%lf",&x);
    y = 100000*x;

    if ( y % 100000)
        printf("なんで整数を入力しないんですか。\nディスってんディスか。\n");          
                 //x/10^5に余りがある時、ここを通る。
    else                                              
                //x/10^5の余りが"0"の時、ここを通る。
        if ((int)x % 2)
            puts("そいつは奇数です。");
        else
            puts("そいつは偶数です。");
    return(0);
}

解説
整数判定は、まず、入力された値を10^5倍し、小数点以下を整数に引きずり出し、int型のyに整数としてぶち込みます。次にifの条件でyを10^5で割った余りを判定します。

例えば、x=123.12345を代入すると、y=12312345となり、y/10^5の余りは12345となって、if条件が非0となるので、1つ目の命令を実行して終了します。
この場合、小数点以下5桁の値まで、整数か否かの判定ができます。それ以上の桁数だと判定出来ない場合があります。例えば123.0000023などの値です。結果と理由は考えてみてください。

ここで、注意しなければならないのは、int型は10ケタまでの整数しか扱えない、ということです。10ケタ以上の数を入れようとすると、エラーが起きて分け分からん値が代入されます。つまり、このプログラムでxに代入できる数は、整数5桁までの数字となります。それ以上だと1億万1回の1億万回くらいは”なんで整数入力しないんディスか”となります。例えば123456は10^5倍した時に10ケタを超えてしまうので、エラーになります。代入されるわけわからん値が見たい人は、プログラム作って試してみてください。簡単にできます。
つまり、このプログラムで扱えるxは
・小数点以下あわせて10ケタ
・小数点以下5ケタ
・整数5桁
の実数です。精度を変えたければ、10の乗数を変えます。

奇数、偶数判定はプログラムの通りです。2で割れるか、割れないかで判断します。この段階では、xは整数であると決まってるので、(int)xで、xをint型にします。みなさんから質問ありましたが、%は整数の計算しか扱えません。

あと、puts関数について。これは与えられた文字列を出力した後、改行してくれる便利な関数です。つまり、
puts(“ナイスデース”); = printf(“ナイスデース\n”);
という事になります。一行メッセージをちょろっと入れたい時に便利です。

C言語講座 第2回 演算と型 [解答済]

お題:
①プログラム実行中に2つの”小数点を持った実数値”の入力を受け付け、その実数値の足し算、引き算、掛け算、割り算の計算結果を表示する。
②”1/7”の計算結果を小数点以下3桁まで計算して表示させる。
以上の①、②を実行するプログラムを作成せよ。

プログラム実行表示例

2つの”小数点を持った実数値”を入力してください。
x:(ここに入力)
y:(ここに入力)

x + y =
x – y =
x * y =
x / y =

1 / 7 =

必須文字列
・double
・scanf
・%l(エル)f
・%.3f

解答掲載までの期間は3日間です。それまでに各自プログラムを作成し、
・プログラム文
・プログラムをコンパイルした実行ファイル
をメールに添付するなり、紙に書いてポストに投函するなり、言葉で伝えるなり、いかなる方法をつかっても構わないので提出してください。

質問等はメールまたはコメントにて。
cosmo-cleaner@za.pial.jp

-----------------------------------------------------------

解答

解答例は以下の通りです

#include <stdio.h>

int main () {

    double x,y;

    printf("2つの小数点を持った実数値を入力してください。\n");
    printf("x:");    scanf("%lf", &x);
    printf("y:");    scanf("%lf", &y);

    printf("x + y = %f \n",x+y);
    printf("x - y = %f \n",x-y);
    printf("x * y = %f \n",x*y);
    printf("x / y = %f \n",x/y);

    printf("1 / 7 = %.3f \n",1.0/7.0);    //ここは1と7ではなく1.0と7.0にしないとダメ
    return(0);

}

%lfは倍精度実数値といって、%fより精度が必要な時に使います。
たいていは使わないと思いますが、scanf()の場合は、%lfでないと、小数点以下の数を受け付けない(みたい)です。気になる人は実験してみてください。

1/7の計算をするときは、解答例のような書き方もありますが、この場合は小数点を含む実数を扱う%.3fに合わせて、1.0/7.0と計算式を入れなければなりません。しかし、島本君の解答にありましたが、このような書き方もあります。

printf("1 / 7 = %.3f\n" ,(double)1 / (double)7);

これは、1と7という整数を、double型に変換しています。書き方は、

(double) a //aは実数

このような変換はキャストと呼ばれ、()をキャスト演算子と言います。この方法を使えば、double型に変換されるので、小数点を含む実数を扱う%.3fにも対応できます。

解答早かった順位
1位 O氏
2位 島本

忙しいとは思いますが、こちらも時間さいて問題と解答作ってるので、頑張って講座に取り組んでください。質問があったらいつでも受け付けます。

質問、補足ありましたら、コメントまたはメールにて。

C言語講座 第1回 基本的な定型文とコンパイル [解答済]

お題:

私の名前は○○ △△です。
□□歳です。

と表示するプログラムを作成し、コンパイルせよ。□□には、整数の数字を代入する。

 

必須文字列 (これらを機能的に使用したプログラムにすること)
・include
・<stdio.h>
・printf
・%d
・int 

解答掲載までの期間は3日間です。それまでに各自プログラムを作成し、
・プログラム文
・プログラムをコンパイルした実行ファイル
をメールに添付するなり、紙に書いてポストに投函するなり、言葉で伝えるなり、いかなる方法をつかっても構わないので提出してください。

質問等はメールまたはコメントにて。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答の一例

#include <stdio.h>

int main () {

    int age=220000;        //ageは年齢
    printf("私の名前は篠岡健です。\n%d歳です。\n" , age);

    return(0);

}

return(0)はあっても無くてもかまいません。プログラムを終わるときに添えます。

解答が早かった順に 島本、valda、こばやし。

C言語講座 開設のお知らせ

AVRマイコンのプログラムにはC言語の知識が不可欠なので、C言語を学ぶための講座を開きます。

形式としては、ここにお題投下して、各自お題の目的を達するプログラムを作成。質問はメール、メッセで応答。数日後、ここに回答や計算結果を投下、、、といった感じになると思います。

教材はありません。ネットにC言語に関する資料がいっぱいあるので、それをgoogleなりで調べてください。ちなみに、問題は「明解 C言語 入門編(柴田望伀洋 著)」 を参考に作ります。この本は2chの人が大絶賛してた本なので、超絶いいものです。

51N3ym-NBRL

講座を受ける前に、まず各自のPCにC言語の環境を整えてください。C言語のプログラムがコンパイル出来ればなんでもいいですが、便宜上「CPad for Borland C++Compiler」というソフトに統一します。このリンクにインストールの仕方が乗ってるので、他のサイトなども参考にして頑張って導入してください。ちなみにこんな感じのソフトです。

image

問題は後日投下します。

導入の報告、質問等は cosmo-cleaner@za.pial.jp までお願いします。