二つの自然数を引数として与えられて,それらの最大公約数を返す関数
int gcd(int m, int n) { /* … */ }を作成し,それを利用して入力された二つの正整数の最大公約数を求めるプログラムを作り方を教えてください。
ユークリッドの互除法を使い、関数を使う事が条件なのですが全然わかりません。
#include<stdio.h>
int gcd(int m, int n)
if(m>n) {m%n}
if(m%n==0)
printf("最大公約数は%d",n); ←このあたりがわかりません
else if (n%(m%n))
printf("最大公約数は%d",n%(m%n));
int main( void )
{
int na, nb;
puts(""二つの整数を入力してください。);
printf("整数1:"); scanf("%d",na);
printf("整数2:"); scanf("%d",nb);
printf("最大公約数は%dです。\n",gcd(int m, int n));
return0;
}
No.3ベストアンサー
- 回答日時:
《年寄りの小言》
・質問主旨とは無関係な不具合( scanf("%d",na);等)が多すぎます。
・自分の「作品」を投稿するのだから、コンパイラをとおして化粧しないと。
(不明でメモ同然な部分は、「コメント」行としてコンパイル)
return 0; でなく return0; であることは後述。
-----------------------------------------
《回答》
☆「ウィキペディア」で「最大公約数」、そこからのリンクで「ユークリッドの互除法」をたどると「アルゴリズム(◆)」まで載ってる。
この平文をC言語にするだけ・・。「だけ」としましたが、「なぞなぞ」を解く感覚で。
★「コロンブスの卵」ということもあるのでソースを投稿します(Borland c++5.6.4)。
-----------------------------------------
《余談》
下のソースは、main() の型を void としています。99年だったか、
void main() が「処理系定義の方法」として、標準規格に追加(除く++)されましたが、
・void main() を「エラー」とする処理系ってあるのかなぁ。
-----------------------------------------
《質問者様への勧告》 ← (冗談です)
・int main( void ) を使い続けろ(温故)。
・return( 0 ); と括弧を付けなさい(中の 0 は詮索せず、まれに負の数としてみなさい)
-----------------------------------------
#include <stdio.h>
#include <math.h>
int gcd( int m, int n )
{
m = abs( m ); // 正の整数
n = abs( n ); // 〃
while( m * n ){ // どちらも 0 でない間
if( n > m ){
n %= m; // ◆4.
if( ! n ) return( m ); // ◆2.
}
if( m > n ){
m %= n; // ◆4.
if( ! m ) return( n ); // ◆3.
}
}
return( -999 ); // ここにはこないが・・
}
void main()
{
int iKekka;
int na = 1071, nb = 1029; // 入力部割愛
iKekka = gcd( na, nb );
if( 1 == iKekka ) printf( "(%d,%d) は互いに素である。\n", na, nb );
if( 1 != iKekka ) printf( "(%d,%d) の最大公約数は %d です。\n", na, nb, iKekka );
}
//注:インデントに全角空白を用いています。タブに一括変換して下さい。
No.1
- 回答日時:
>ユークリッドの互除法を使い、関数を使う事が条件なのですが
学校の課題ですか?
では丸投げ行為は禁止されているので、ソースコードを答えることはできません。
というか、検索ぐらいしたほうがいいですよ。
http://www.google.com/search?hl=ja&inlang=ja&q=C …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
if と配列の組み合わせ
-
(int *)の意味
-
複数桁10進数の*桁目だけを抽出...
-
足して100になるような乱数のア...
-
ラップ関数とはどんなものですか?
-
エラー 添字が付けられた値が、...
-
C言語で三目並べをするプログラ...
-
円周率
-
return 1L
-
ポインタを使って関数の値の...
-
商と剰余を同時に求める(C言語)
-
PowerShellがうまくいかない
-
C言語 エラーの原因がわからな...
-
数字列を3桁ごとにカンマで区切...
-
質問です 下記のコードを分かり...
-
アスタリスクで正方形
-
systemの戻り値を取得する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報