プログラミング入門 情報科学演習
2013.12.16
授業の最初に配列に関する小テストを実施します.いつものように柱のところの席は使用しないで下さい.
今回は残念な答案がいくつか出てきました.以下のようになっています.
無限ループ b1322
解答用紙不使用 b1371
大馬鹿もん b1313 b1375
以下は問題のあるプログラムのいくつかの例です.まったくおかしいものについてはここには挙げていません.
以下はインデントのおかしいものです.
この授業の最後の難関である配列です.これが使えないと実際のプログラミング
では困ります.複数の並んだ値を一つの名前で保存できる便利な機能ですので,
必ず使えるようになってください.
例えば,1日の気温を1時間ごとに自動で測定するシステムがあるとします.午前0
時から午後11時まで24個の温度を,
temp0, temp1, temp2, .... , temp23
のようにたくさんの変数を使用して記憶しておくことは無駄ですし,後から使う
ときにやりにくい面が多いことになります.そこで,配列 temp として
1時間ごとの温度を
temp[0], temp[1], temp[2], ... , temp[23]
のようにしておくと,変数名としては1つの temp だけで済みますし,
時間を添字として利用することで読み出しが簡単になります.
今日からのポイントは値が何番目に入っているかを示す「添字」の使い方です.この添字を
for 文などと組み合わせて自動的に処理する方法を理解しましょ
う.
実習の演習問題は当日ご案内します.
教科書のp.59-65を予習してきてください.
授業の終わりに宿題の案内をします.ただ
し,問題を見ることができるのは17日以降です.
絶対やっちゃだめなのがひさしぶりに出ました.零点です.
if(sum == 1)
printf("oxooooooooooooo\n\n");
if(sum == 2)
printf("ooxoooooooooooo\n\n");
if(sum == 3)
printf("oooxooooooooooo\n\n");
if(sum == 4)
printf("ooooxoooooooooo\n\n");
if(sum == 5)
printf("oooooxooooooooo\n\n");
if(sum == 6)
printf("ooooooxoooooooo\n\n");
if(sum == 7)
printf("oooooooxooooooo\n\n");
if(sum == 8)
printf("ooooooooxoooooo\n\n");
if(sum == 9)
printf("oooooooooxooooo\n\n");
if(sum == 10)
printf("ooooooooooxoooo\n\n");
if(sum == 11)
printf("oooooooooooxooo\n\n");
if(sum == 12)
printf("ooooooooooooxoo\n\n");
if(sum == 13)
printf("oooooooooooooxo\n\n");
if(sum > 14 ){
sum -= a;
printf("Too large to go. Cast dice again!\n\n");
}
二つの while 分に別ける発想がいけません.
if(sum<15){
while(j<sum-1){
printf("o");
j++;
}
printf("x");
j=0;
while(j<15-sum){
printf("o");
j++;
}
わかりづらいですが,else は i=1; にしか係らないようになっています.変です.
while(sum!=15){
int num = rand() % 6 + 1;
printf("\n\nDice: %d ",num);
sum+=num;
if(sum>15){
printf("Too large to go. Cast dice again!");
sum-=num;
}
else
i=1;
while(i<=15){
if(i==sum)
printf("x");
else
printf("o");
i++;
}
}
if の位置はおかしいですね.
while(i<=15){
if(i==sum)
printf("x");
else
printf("o");
i++;
}
if(sum>15){
printf("Too large to go. Cast dice again!");
sum-=a;
}
else の中の処理が下がっていません.
else{
printf("oooooooooooooox");
printf("\nGaol!\n\n");
}
途中からインデントの幅が変わります.
while(sum<15){
printf("\n\n\n");
i=1;
a=rand() % 6+1;
sum+=a;
printf("Dice: %d ", a);
if(sum<15)
while(i<=15){
if(i==sum)
printf("x");
else
printf("o");
i++;
}
else の上の閉じ括弧の位置がおかしいし,その後,else の中身が下がっていません.
else if(i>15){
i-=j;
printf("Too large to go. Cast dice again!\n");
}
else{
printf("oooooooooooooox\n");
printf("Goal!\n\n");
}
なぜ if は下がるのでしょうか?
while(j<=14){
j++;
printf("o");
if(j==i)
まだいました.
main()
{
srand((unsigned) time(NULL));
int a, i, j=1;
こちらもまだいました.一刻も早くコピペから脱却しましょう.
printf("-----------------------\n");
return(0);
}
閉じ中括弧の上には来ないと何度も言っています.
printf("\n\n");
}
いつまで経っても好き勝手な位置に書く人がいます.
while(ichi != 15){
j = 0;
dice = rand() % 6 + 1;
if(dice <= 15 - ichi){
ichi += dice;
printf("\nDice: %d ",dice);
while(j<=14){
j++;
if(j==ichi)
printf("x");
else
printf("o");
}
printf("\n");
}
else if(dice >= 15 - ichi)
printf("\nDice: %d Too large to go. Cast dice again!\n",dice);
これもインデントが多すぎます.
}
}
printf("oooooooooooooox\n");
printf("Goal!\n\n");
printf("-----------------------\n""\n");
return(0);
}
変な位置にありますね.
if(sum<15){
i=1;
while(i<=14){
if(i==sum)
printf("x");
printf("o");
i++;
}
printf("\n\n");
}
目次ページに戻る