• 締切済み

関数についての質問です。

c言語を勉強しています。関数で戻り値がありますが、関数の処理の仕組みが理解できません。本等で勉強し僕の考え方が間違っていたら教えてください。 お願いいたします。 #include <stdio.h> int buy(int x,int y ) { int z; //1 printf("%d万円と%d万円の車を買いました。");//2 z=x+y; //3 return z; //4 } int main(void) { int num1,num2,num;//5 printf("いくらの車をかいますか?\n");//6 scanf("%d",&num1);//7 printf("いくらの車をかいますか?\n");//8 scanf("%d",&num2);//9 sum=buy(num1,num2);//10 printf("合計で%d万円です。\n",sum);//11 return 0;//12 } まず最初に 整数型、int num1,num2,numを読みます。 次に//7と//8で数値を入力します。 そして//10で値を格納し int buy( int x,int y)に値をわたします。 ※正確には関数buyに渡す。 そして計算をし計算結果 zをreturn で int buy(int x,int y )の buyに値を渡します。 そのあと呼び出し元の//10のbuyに値をかえします。 そしてプログラムが終了します。 間違っていたら教えてください。

みんなの回答

  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.2

数学で、f(x) = 2x + 3 っていう1次関数があるとき、 xに2を渡せばfという関数は7を返し、 xに-6を渡せばfという関数は-9を返しますよね。 それと同じ理屈で、上に書いた2とか-6とかいうのが 関数に渡す引数で、7とか-9とかいうのが 関数から返ってくる戻り値です。

回答No.1

特に間違ってはいないと思いますよ。 printf("%d万円と%d万円の車を買いました。");//2 ここに、x,yは必要ですが。 なんなら、これも関数にしてみては? printf("いくらの車をかいますか?\n");//6 scanf("%d",&num1);//7 int input() { int n; printf("いくらの車をかいますか?\n"); scanf("%d",&n); return(n); } なら、 num1=input(); num2=input(); sum=buy(num1,num2); とシンプルになります。 思いっきり圧縮すれば、 printf("合計で%d万円です。\n",buy(input(),input()));//11 だけで、おわりますが^^

関連するQ&A

  • Cのポインタについて(関数への値渡し)

    C言語のポインタに関する質問です。関数に引数を渡す方法として以下の誤ったswap関数でなぜだめなのかいまいち得心できません。わかりやすくかみくだいて説明していただけると有り難いです。 できましたら、トレースともうしますか、変数の値の動きを詳細に段階的にプログラムの流れに沿って追っていって、だからこうなんだよ、みたいな解説がいただけたら有り難いです。わがままいってすみません。 /* 誤ったswap関数の宣言 */ void swap(int x, int y); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(num1, num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* 誤ったswap関数の定義 */ void swap(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } ---------- /* swap関数の宣言 */ void swap(int *pX, int *pY); int main(void) { int num1 = 5; int num2 = 10; printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); printf("変数num1とnum2の値を交換します。¥n", num1); swap(&num1, &num2); printf("変数num1の値は%dです。¥n", num1); printf("変数num2の値は%dです。¥n", num2); return 0; } /* swap関数の定義 */ void swap(int *pX, int *pY) { int tmp; tmp = *pX; *pX = *pY; *pY = tmp; }

  • 合計値を求める関数

    #include<iostream> using namespace std; //sum関数の定義 int sum(int x, int y) { return x + y;  } int main() { int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout << "2番目の整数値を入力して下さい。\n"; cin >> num2; ans = sum(num1, num2); cout << "合計は" << ans << "です。\n"; return 0; }  ここのreturn x+y;の所の合計値を戻り値として返す処理の仕組みを解りやすく教えて欲しいです、戻り値はちょっと解りづらいです、よろしくお願いします。

  • ループ

    #include<stdio.h> int main(void) { int i=1,sum=0; int num=1; while(num>0) { printf("整数を入力してください。(マイナスの値で終了)\n"); scanf("%d",&num); printf("%dが入力されました。(%d番目の繰り返しです)\n",num,i); sum+=i; printf("1から%dまでをたすと%dです。\n",i,sum); i++; } printf("繰り返しが終わりました。\n"); printf("加算値は%dです。\n",sum); printf("%d回繰り返しました。\n",i); return 0; } このプログラムで101以上の数値は加算しないようにするにはどうすればいいですか。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }

  • for文を別のint内で定義し、初めのint文内で呼び出す??? 何という名のプログラム名?ですか???

    毎度毎度忙しい中失礼します。現在<私のプログラム>を基に<参照プログラム>のようにプログラムを作り変えようとしていますが、正直お手上げ状態です。 どうしても<参照プログラム>に基づいてプログラムを組まなければならないのです。 どこがお手上げ状態かといえば、<参照プログラム>を参考にすると、int multInts(int x, int y)内の条件の組み方が<私のプログラム>内でどのようにして組めばいいのかが全くもって分かりません。かなり考えても分からないレベルです・・・私にとっては。 int multInts(int x, int y)の定義の仕方を真似て<私のプログラム>でも真似てみるのですが・・・出来ないのです。何をどう直せば良いのでしょうか???初期化でtra=0;とすると、表示は"0"になったりするし・・・。簡単かと思われるかもしれませんが・・・私にとってはかなり難しいのです。 ”丸投げ”みたいな感じで恥ずかしいのですが、どうかアドバイスだけでも下さい。お願いします。 出力結果 1.5桁数字入力:"12345"と入力 (これは出来ます) 2.偶数桁のみ抽出して2倍にする→"14385" (最不明部: <参照プログラム>内のmultInts内の条件を<私のプログラム>内でどのようにして組むのかが分かりません) 3.各桁の数値を足し合わせる→1+4+3+8+5=21(不明部: 2.が出来ないので出来ません) 4.その数値が”妥当”か”不当”かをDOS?画面に表示(不明部:2.と3.が出来ないので出来ません) <私のプログラム> #include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int num,tra; int inpt=5; int inptnum; int sum=0; //#define 0 printf("5桁入力; "); scanf("%d", &num); if (num==0){ printf("その値は0です。 \n"); } else{ for(inpt ; inpt >=1 ; inpt--) { if(inpt%2 == 0) { inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; //printf("%d",tra*2); tra=(tra*2)/10+(tra*2)%10; printf("%d",tra); } else{ inptnum = pow(10,inpt-1); tra = (num/inptnum)%10; printf("%d",tra); } sum += tra; } printf("\n %d\n",sum); sum= sum%10; if(sum==0) { printf("妥当な数値です。\n"); } else { printf("不当な数値です。\n"); } } system("pause"); return 0; } <参照プログラム> #include <stdio.h> #include <stdlib.h> int main(){ int multInts(int x, int y); int num1,num2,answer; printf("間にスペース設けて2つの値入力: "); scanf("%d%d", &num1, &num2); answer = multInts( num1, num2); printf("%d * %d=%d\n", num1, num2, answer); system("pause"); return 0; } int multInts(int x, int y) { int result = 0; int i; for (i=1 ;i<=y ;i++) { result=result + x; } return result; }

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • 分割コンパイルの手順と方法について

    Visual Studio 2010でファイルを分割してコンパイル、リンクする方法がわかりません。以下のような3つのファイルです。 [myfunc.h] /* max関数の宣言 */ int max(int x, int y); [myfunc.c] int max(int x, int y) { if (x > y) return x; else return y; } [Sample13.c] #include <stdio.h> #include "myfunc.h" int main(void) { int num1, num2, ans; printf("1番目の整数を入力してください。\n"); scanf("%d", &num1); printf("2番目の整数を入力してください。\n"); scanf("%d", &num2); ans = max(num1, num2); printf("最大値は%dです。\n", ans); return 0; } 以上3つのファイルはあくまでも便宜的なもので、複数のファイルのコンパイル・リンクの手順を具台的に理解するために 用意したものです。

  • C言語のプログラムについて質問

    明解C言語という書籍に 大きい方を表示するプログラム #include <stdio.h> int maxof(int x, int y) {  if (x > y)   return (x);  else   return (y); } int main(void) {  int na, nb;  puts("二つの整数を入力してください。");  printf("整数1:"); scanf("%d", &na);  printf("整数1:"); scanf("%d", &na);  printf("大きいほうの値は%dです。\n", maxof(na, nb));  return (0); } の関数maxofを利用し、 int max4(int w, int x, int y, int z) {  return (maxof(maxof(w, x), maxof(y, z))); } を挿入して変えれば四つの整数から最大値を求められるとのことですが、 コンパイルがうまくいきません。 関数maxofのwとx,yとzをそれぞれ比較し最大値を求めてさらにmaxof(w, x)とmaxof(y, z)を比較して最大値を求めるということですよね?ですので、 maxof(w, x) {  if (w > x)   return (w);  else   return (x); } maxof(y, z) {  if(y > z)   return (y);  else   return (z); を挿入しようとしたらmaxofはすでにありますというようなことが表示されてだめでした。 また、 int maxof(maxof(int w, int x), maxof(int y, int z)) { if (w > x)   return (w); if (w < x)   return (x); if (y > z)   return (y); if (y < z)   return (z); if (maxof(w, x) > maxof(y, z))   return (maxof(w, x)); if (maxof(w, x) < maxof(y, z))   return (maxof(y, z)); } としてみましたがやはりだめでした。 前のページの説明を読み返したりネットで調べてもわかりませんでした。 何がわからないのかがわからないのでもうお手上げです。 長くなってすいません プログラム例と説明をお願いします。

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }

専門家に質問してみよう