(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");
}
}