練習問題/解答例/有理化するプログラム/C
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[練習問題]]
#include <stdio.h>
void yurika(int , int );
int main()
{
int a, b;
for (a = 1; a < 101; a++)
for (b = 1; b < 101; b++)
yurika(a,b);
return 0;
}
void yurika(int a, int b)
{
int a1, a2, i;
printf("√%2d / √%2d = ", a, b);
if (a == b) { printf("1\n"); return; }
if (a % b == 0) { a = a / b; b = 1; }
else a = a * b;
for (i = 1; i*i <= a; i++)
if (a % (i*i) == 0) { a1 = i; a2 = a / (i*i); }
for (i = 1; i < 15; i++)
if (a1 % i == 0 && b % i == 0) { a1 = a1 / i; b = b / ...
if (a1 == 1 && b == 1) { printf("√%d\n", a2); return; }
else if (a2 == 1 && b == 1) { printf("%d\n", a1); retur...
else if (b == 1) { printf("%d√%d\n", a1, a2); return; }
else if (a2 == 1) { printf("%d / %d\n", a1, b); return;...
else if (a1 == 1) { printf("√%d / %d\n", a2, b); return...
else printf("%d√%d / %d\n", a1, a2, b);
return;
}
以下、解説付き
// √a / √b を有理化するプログラム
// 有理化の例:√1 / √2 = √2 / 2
#include <stdio.h>
int yrk(int , int ); // √引数 / √引数 を有理化する...
int main()
{
int k = 20; // √1 / √1 から √k / √k まで調べる
int a, b; // √a / √b
for (a = 1; a < (k+1); a++)
for (b = 1; b < (k+1); b++)
yrk(a,b); // √a / √b を有理化する...
return 0;
}
int yrk(int a, int b) // √a / √b を有理化する関数
{
int a1, a2; // √a => a1√a2
int i;
printf("√%2d ÷ √%2d =", a, b);
if (a == b) { // √3 / √3 => 1
printf(" 1\n");
return 0; }
if (a % b == 0) { // √8 / √2 => √4 / 1
a = a / b;
b = 1; }
else
a = a * b; // √8 / √6 => √48 / 6
for (i = 1; i*i <= a; i++)
if (a % (i*i) == 0) { // √48 => 4√3
a1 = i;
a2 = a / (i*i); }
for (i = 1; i < 15; i++)
if (a1 % i == 0 && b % i == 0) { // 3√5 /...
a1 = a1 / i;
b = b / i; }
// ---------------- //
// 以下、答えの出力 //
// ---------------- //
if (a1 == 1 && b == 1) {
printf(" √%2d\n", a2); // 1√3 / 1 ...
return 0; }
else if (a2 == 1 && b == 1) {
printf(" %2d\n", a1); // 5√1 / 1 ...
return 0; }
else if (b == 1) {
printf("%2d√%2d\n", a1, a2); // 3√7 / 1 ...
return 0; }
else if (a2 == 1) {
printf(" %2d / %2d\n", a1, b); // 2√1 / 5 ...
return 0; }
else if (a1 == 1) {
printf(" √%2d / %2d\n", a2, b); // 1√31 / 9...
return 0; }
else
printf("%2d√%2d / %2d\n", a1, a2, b); // 4√...
return 0;
}
終了行:
[[練習問題]]
#include <stdio.h>
void yurika(int , int );
int main()
{
int a, b;
for (a = 1; a < 101; a++)
for (b = 1; b < 101; b++)
yurika(a,b);
return 0;
}
void yurika(int a, int b)
{
int a1, a2, i;
printf("√%2d / √%2d = ", a, b);
if (a == b) { printf("1\n"); return; }
if (a % b == 0) { a = a / b; b = 1; }
else a = a * b;
for (i = 1; i*i <= a; i++)
if (a % (i*i) == 0) { a1 = i; a2 = a / (i*i); }
for (i = 1; i < 15; i++)
if (a1 % i == 0 && b % i == 0) { a1 = a1 / i; b = b / ...
if (a1 == 1 && b == 1) { printf("√%d\n", a2); return; }
else if (a2 == 1 && b == 1) { printf("%d\n", a1); retur...
else if (b == 1) { printf("%d√%d\n", a1, a2); return; }
else if (a2 == 1) { printf("%d / %d\n", a1, b); return;...
else if (a1 == 1) { printf("√%d / %d\n", a2, b); return...
else printf("%d√%d / %d\n", a1, a2, b);
return;
}
以下、解説付き
// √a / √b を有理化するプログラム
// 有理化の例:√1 / √2 = √2 / 2
#include <stdio.h>
int yrk(int , int ); // √引数 / √引数 を有理化する...
int main()
{
int k = 20; // √1 / √1 から √k / √k まで調べる
int a, b; // √a / √b
for (a = 1; a < (k+1); a++)
for (b = 1; b < (k+1); b++)
yrk(a,b); // √a / √b を有理化する...
return 0;
}
int yrk(int a, int b) // √a / √b を有理化する関数
{
int a1, a2; // √a => a1√a2
int i;
printf("√%2d ÷ √%2d =", a, b);
if (a == b) { // √3 / √3 => 1
printf(" 1\n");
return 0; }
if (a % b == 0) { // √8 / √2 => √4 / 1
a = a / b;
b = 1; }
else
a = a * b; // √8 / √6 => √48 / 6
for (i = 1; i*i <= a; i++)
if (a % (i*i) == 0) { // √48 => 4√3
a1 = i;
a2 = a / (i*i); }
for (i = 1; i < 15; i++)
if (a1 % i == 0 && b % i == 0) { // 3√5 /...
a1 = a1 / i;
b = b / i; }
// ---------------- //
// 以下、答えの出力 //
// ---------------- //
if (a1 == 1 && b == 1) {
printf(" √%2d\n", a2); // 1√3 / 1 ...
return 0; }
else if (a2 == 1 && b == 1) {
printf(" %2d\n", a1); // 5√1 / 1 ...
return 0; }
else if (b == 1) {
printf("%2d√%2d\n", a1, a2); // 3√7 / 1 ...
return 0; }
else if (a2 == 1) {
printf(" %2d / %2d\n", a1, b); // 2√1 / 5 ...
return 0; }
else if (a1 == 1) {
printf(" √%2d / %2d\n", a2, b); // 1√31 / 9...
return 0; }
else
printf("%2d√%2d / %2d\n", a1, a2, b); // 4√...
return 0;
}
ページ名: