(1) 1からnまでの階乗n!を求めるプログラムを作成せよ
#include<stdio.h> void main() { int a, b; printf("階乗計算を行います¥n数字を入力してください:"); printf("a="); scanf("%d", &a); printf("%dの階乗は,", a); b=1; while(a>0){ b*=a; /* b = a * b */ a--; /* a++の逆である.つまりa=a-1のこと */ } printf("%dです.¥n",b); }
(2)n!が5000以上になる最小のnを求めるプログラムを作成せよ
#include<stdio.h> void main() { int a,b; printf("階乗計算において5000を超える値を探します¥n"); a=1; b=1; while(b<5000){ b*=a; a++; } printf("5000を超える値は%dの階乗です¥n",a-1); /* どうして a-1 なのか */ }
(3)2つの入力した整数m,nの最大公約数を求めるプログラムを作成せよ
#include <stdio.h> void main() { int m, n, tmp, tmpm, tmpn; /* tmpは変数一時保管用 */ printf("最大公約数と最小公倍数を探します¥n"); printf("数を入力してください¥n"); printf("m="); scanf("%d",&m); printf("n="); scanf("%d",&n); tmpm = m; /* 最小公倍数を求めるために元の数字を保管 */ tmpn = n; /* 上記と同じ */ if(n>m){ tmp = n; /* mとnはm>nでないとならないので入れ替え */ n = m; m = tmp; } while(m%n != 0){ tmp = n; n = m%n; m = tmp; } printf("最大公約数は%dです¥n",n); printf("最小公倍数は%dです¥n",tmpm*tmpn/n); /* 最小公倍数は元の数の乗数に最大公約数で割ると求められる */ }
(4) 第4回の演習課題(3)を利用して,A君とBさんのどちらかが先に3回勝つまでじゃんけんをさせるようにループして,最後に,「A君(Bさん)が先に3回勝ちました」と表示させるプログラムを作成せよ
#include <stdio.h> void main() { int a, b, win_a=0, win_b=0; while(win_a<3 && win_b<3){ printf("a君とb君がじゃんけんします.¥nグー : 1 チョキ : 2 パー : 3¥n"); printf("a君は何を出しますか?"¥n;); scanf("%d", &a); printf("b君は何を出しますか?"¥n;); scanf("%d", &b); if(a < 1 || a > 3 || b < 1 || b > 3){ printf("1か2か3をちゃんと入力してください¥n"); }else if(b==(a%3)+1){ /* aの勝ち。*/ win_a++; }else if(b==(((a+1)%3)+1)){ /* bの勝ち。*/ win_b++; }else{ /* あいこ */ printf("あいこです.¥n"); } printf("A君:%d勝¥nB君:%d勝¥n",win_a,win_b); } if(win_a==3){ printf("A君が先に3回勝ちました¥n"); }else{ printf("B君が先に3回勝ちました¥n"); } }