• ベストアンサー

[C言語] 関数を利用する計算

年a% の複利で、b円借りて、c年後にすべて返済した場合の返済額を計算するプログラムを、関数を利用して作りたいのです。 a%でc年借りた場合の利息を計算する部分を関数とすると、 (1+r/100)^c なので、これを関数としてプログラムを組みたいのですが、 関数の使い方がいまいちわからなく、中々組めません。 main()から関数を呼び出し、その数値を返した値にbをかければ答えが出ると思うのですが、 main()から関数を呼び出す、というのはどういう風にかけばいいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • aigaion
  • ベストアンサー率47% (287/608)
回答No.1

複利計算ですか・・・ 授業の課題か何かですかね? そうだったら教科書を見れば詳しく書いてあると思います。 数学的にどのように計算をすればよいのかは理解できているのであとはC言語に直すだけですね。 答えを教えるのは簡単ですが、それをやるとあなたの質問がこのWEBサイトの禁止事項である 「課題等の丸投げ」になるのでヒントを書きますね。 まず、教科書をみてわからないなら次のあたりをみて関数を練習してください。 http://www5c.biglobe.ne.jp/~ecb/c/07_01.html そして、次に 足し算を行う簡単な関数の例を示しました。 数学的にいえば複利計算のような難しいものではなく a + b を行う簡単なものです。 これを元に (1+r/100)^c を考えてみては? ちなみに ^c は累乗を表しているかと思いますが累乗の計算には pow 関数という便利な関数があります。 http://www.bohyoh.com/CandCPP/C/Library/pow.html /* プログラムの例 ちなみにコピペしてもコンパイルできませんよ */ #include <stdio.h> #include <math.h> int sum(int a, int b){   int result = 0;   result = a + b;   return result; } int main(void){   int wa ;   wa = sum(1, 2);   printf("1 + 2 = %d\n", wa); }

Flieger
質問者

お礼

int main()は後ろに来るんですね。 わからなかった色々な部分を書いてくれたので大方作ることができました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • chie65535
  • ベストアンサー率44% (8549/19429)
回答No.5

因みに、計算結果の確認は http://www.jabankosaka.or.jp/pb/pb/kinyukeisan/HUKU1.asp で行えます。 先ほどの回答の実行例 年利(%)=1.21 元本(円)=100000000 期間(年)=20 利子(円)=27194548 元利(円)=127194548 であれば 元金 [10000] 万円を、金利が  年 [1.21] % の [12] ヵ月複利で複利運用すると、 [20] 年後にはいくらになるか ? と入力([]で括った部分が入力)して「計算」を押すと 元利合計額 12,719.45万円 年平均利回り 1.360% と表示され、金額が正しい事が判ります。 ※質問文では「年a% の複利」となっていますので、上記ページでは「[12] ヵ月複利」と入力しています。12ヶ月=1年、ですので。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率44% (8549/19429)
回答No.4

#include <stdio.h> int kinri(double nenri,int kingaku,int nensu) { int nen,rishi; double riritsu; double kinri; riritsu = (1.0 + nenri / 100.0); /*1年の元利率*/ kinri = 1.0; for (nen = 1;nen <= nensu;nen++) { kinri *= riritsu; /*年数で乗する*/ } kinri *= kingaku; /*元本の額を掛けると元利合計になる*/ kinri += 0.5; /*0.5を足してから*/ rishi = (int)kinri; /*整数に変換すると小数第1位で四捨五入になる*/ rishi -= kingaku; /*元利合計から元本を引くと利子になる*/ return rishi; /*求めた利子を返す*/ } main(void) { double nenri; int kingaku,nensu,rishi,ganri; printf("年利(%)="); scanf("%lf",&nenri); /*年利の入力。実数*/ printf("元本(円)="); scanf("%d",&kingaku); /*元本の入力。整数*/ printf("期間(年)="); scanf("%d",&nensu); /*年数の入力。整数*/ rishi = kinri(nenri,kingaku,nensu); /*利子を求める*/ ganri = kingaku + rishi; /*元利(元本+利子)を求める*/ printf("利子(円)=%d\n",rishi); /*利子の表示*/ printf("元利(円)=%d\n",ganri); /*元利合計の表示*/ return 0; } 実行例 C:\TEMP>kinri 年利(%)=1.21 元本(円)=100000000 期間(年)=20 利子(円)=27194548 元利(円)=127194548 C:\TEMP>

Flieger
質問者

お礼

皆さんのおかげで粗方できていたんですが、計算結果がおかしかった理由がおかげでわかりました。 とても初歩的だったのですが、変換仕様を誤って計算がおかしくなっていたようです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

わからないのは「関数定義の仕方」と「関数の使用方法」のどちらでしょうか? >#1 規約は改正されて丸投げ禁止ではなくなりましたよ。 http://faq.okwave.jp/EokpControl?&tid=950130&event=FE0006 まぁそれでも褒められた事でないのは確かですが。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

#1 の中にもありますけど, printf っていう関数を呼び出したことはありませんか? それと同じで, (正確ではないけど) 「関数名のあとにかっこを書き, (必要なら) その中に引数をコンマで区切って並べる」だけで呼び出せますね.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語

    以下の流れにそってプログラムを書いてみましょう。 ある数値を渡されると、その数値の 2 乗を求め、その値を return する関数 func_pow を作る。 main 関数において、1 から 10 までの数値の 2 乗を func_pow 関数を呼び出して求め、それぞれの値とその合計を表示する。 この問題文がいまいち分かりません・・・。解き方を教えていただけたらうれしいです。

  • C言語プログラミング

    C言語プログラミングに関して質問です。 元本、年数、単利、複利を順にa,b,c,dと置き、年数経過後の単利、複利の場合のそれぞれの額をe,fとしたとき、 e = a+(a*c)*b となるのはわかるのですが、複利の場合の金額を求める時の計算式はどう書けばよいのですか。 また、複利が単利より小さい時、何年後に複利のときの金額が単利のときの金額を越すかを表示したいのですが、次の書き方で合ってますか。 if(d < c){ b = 2; while(1){ if(f > e) break; else b++; } printf("%d年後、単利のときの金額を複利のときの金額が追い越します\n",b); }

  • C言語教えてください。

    (1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。

  • C言語 関数の作り方

    1~30の数字を使い、直角三角形が成り立つ組み合わせを見つけよ。(a<=b<=c) ただし、a,b,c辺を見つけて配列に入れる機能は関数にすること。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include <stdio.h> int main(void) {    int a,b,c,i=0,ct=0;    int ahen[20];    int bhen[20];    int chen[20];    for(a=1;a<31;a++)    {     for(b=1;b<31;b++)     {      for(c=1;c<31;c++)      {       if(a*a+b*b==c*c && a<=b && b<=c)       {         ahen[i]=a;         bhen[i]=b;         chen[i]=c;         i=i+1;         ct++;       }      }     }    }    for(i=0;i<ct;i++)    {     printf("%d %d %d\n",ahen[i],bhen[i],chen[i]);    }    return 0; } 実行例: 3 4 5 5 12 13 6 8 10 7 24 25 8 15 17 9 12 15 10 24 26 12 16 20 15 20 25 18 24 30 20 21 29 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー とりあえず、関数を使わない上記のプログラムを作って見ました。 ここから関数を使ったものに変更したいのですが、配列が絡むとさっぱり分かりません。 printfで表示する箇所以外を全て関数にするのだと思いますが、どなたかご教示願います。

  • エクセルにて空白を利用した関数

    宜しくお願いいたします。 エクセル2003でセル空白を利用した関数を作成したいと考えております。 具体的には、 A1 B1 A2 B2      C2 とセルに数値を入力したとします。(C2に関数・計算式を入力) このときに、A1ーB2で単純な引き算を設定する際に、A2とB1が空白である場合に限って A1-B2の答えがC2のセルに反映されると言ったような、条件設定は関数でできるものなのでしょうか? つたない質問で誠に申し訳ありませんが、宜しくお願いいたします。

  • C言語で計算が合いません(初心者)

    C言語で計算が合いません(初心者) 簡単な計算のプログミングをしているのですが 計算が合わなくて困っています。 整数型変数aと実数型変数bを定義 整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b 実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b という内容のプログラムを作ったのですが a=7,b=2.4を代入してみた結果 ---------------------------- Input a>>7 Input b>>2.4 8 7 8.400000 7.200000 ---------------------------- となりました どこが間違っているのでしょう? 答えは8.4でcが8なのは有効数字のためだと思いますが dとeで答えが全く違う理由が分かりません。 下に私が書いたものを貼っています。 ---------------------------- #include<stdio.h> int main(void){ int a,c,d; double b,e,f,ans; printf("Input a>>"); scanf("%d",&a); printf("Input b>>"); scanf("%lf",&b); c=0.5*a*b; printf("%d\n",c); d=a/2*b; printf("%d\n",d); e=0.5*a*b; printf("%lf\n",e); f=a/2*b; printf("%lf\n",f); return 0; } ---------------------------- よろしくお願いします。

  • C言語 関数について

    協力お願いします。 2問あります。 1問目です。 西暦年yearを引数として受け取り, 閏年かどうかの判定結果を戻り値として返す関数leap_year()を作成せよ. ただし,leap_year()は,閏年の場合は1を返し, そうでない場合は0を戻り値として返すものとする. 提出するプログラムは,関数leap_year()だけでなく, メイン関数main()も含む下記プログラムを完成させる形で作成する。 #include <stdio.h> /* ここに関数leap_year()のプロトタイプ宣言を記述する */ int main() { int i, year[3]; for (i=0; i<3; i++) { printf("西暦年を入力してください"); scanf("%d", &year[i]); if (leap_year(year[i]) == 1) { printf("閏年です.\n"); } else { printf("閏年ではありません.\n"); } } } /* ここに関数leap_year()を定義する */ 2問目です。 mのn乗を計算する関数power()を作成せよ. ただし,関数power()はm,nを引数とし, 戻り値としてmのn乗の値を返すものとする. m,nは,正整数とする.プログラムには, 関数power()だけでなく,m,nを入力し, mのn乗を出力するメイン関数main()を含むものとする. main()は,power()の前に記述すること. また,power()のプロトタイプ宣言も記述すること。 よろしくお願いします。

  • C言語でポインタを使ってピタゴラスの定理の関数を作りたいです

    私は今あるプログラムを書いていて、その過程でどうしても関数を使ってピタゴラスの定理を作りたいのですが、ポインタの渡し方がうまくいきませんでした。ポインタを使わない場合は次の通りでした。 double pythagoras(double a, double b){ double c; c = a*a+b*b; c = sqrt(c); return c; } これはメイン関数で二つの値a,b(int型)をpythagoras関数に入れて、ピタゴラスの定理を適用させてメイン関数にc(double型)を戻り値として返すものです。 しかし2つの値a,bがint型ではなくポインタだとうまくいかないです。どのような関数を作ればいいか分かる人がいたらぜひ教えてください。ちなみに現在a,bは次のように宣言してあります。 struct node { int a; int b struct node *next; };

  • 複利計算 利息を求める

    720万円を複利利息 r %で138年運用したら4,000万円になった。この場合の複利利息は何%か。 (1) エクセル関数で求める方法 (2) エクセル関数を利用しないで計算式で求める方法 (1)(2)いずれも、回答がほしいのですが。教えてください。

  • C言語 関数の問題

    C言語(関数の問題)で読み込んだ4つの整数の最大値を求めプログラムで 整数を2つペア比較し、関数の入れ子を用いて最大値を見つけて、表示する。 というプログラムを作成したいのですが #include<stdio.h> int maxof(int a, int b) { if(a > b) return (a); else return (b); } int max4(int a, int b, int c, int d) { max(max(a, b), max(c, d)); } int main(void) { int num1,num2, num3, num4; ------ 整数の読み込み printf("最大値は%dです。", max4(num1, num2, num3, num4)); return(0); } と記述すると、上手くいったのですが これを max関数だけを用いて作成できますでしょうか? 整数の比較は全てmax関数で行いたいです。

このQ&Aのポイント
  • Windows10を立ち上げるたびに、画面の真ん中にファイルのダウンロード、このファイルを開くか、または保存しますか?名前:inkpack.jpgとある。
  • また、shop.epson.jpの表示もありますが、これは正規のEPSON社の関係情報でしょうか?どちらにしてもshop.epsonの名が表示されているので、情報か表示の消し方が知りたいです。
  • EPSON製品に関する質問です。
回答を見る