• ベストアンサー

関数を使ったプログラムについてなのですが・・・

・変数a,bの内容を入れ換える処理を関数を用いて実行するためのプログラム と ・変数a,bを与えたときa+bとa-bを計算する処理を関数を用いて行い、和と差を表示させるためのプログラム はどう作ればいいか分かりません…。 教えてください。

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

  • ベストアンサー
  • khurata
  • ベストアンサー率40% (54/134)
回答No.3

 質問文からは、いろいろな解釈が可能なのですが、ひとまず、「ご質問の通りの動作をする関数」の作例を、回答として記したいと思います。 (1)変数a,bの内容を入れ換える関数  まず、変数a,bの型が分かりませんので、ひとまず整数型(int型)と仮定します。文字型やポインタ型の可能性もありますが、とりあえず int型で作例をあげてみます。 void sample_swap(  int * a_p, /* aのアドレスが入るポインタ変数 */  int * b_p /* bのアドレスが入るポインタ変数 */ ) {  int swap_area; /* 入れ替え用の「うつわ」*/  swap_area = *a_p; /* a_pの指す内容を「うつわ」に入れる */  *a_p = *b_p; /* b_pの指す内容を a_pの指すところに入れる */  *b_p = swap_area; /* 「うつわ」の内容を b_pの指すところに入れる */  return; /* 終了 */ }  この関数を使うには、次のようなメインプログラムから呼び出します。 #include <stdio.h> void sample_swap( int * a_p, int * b_p ); /* プロトタイプ宣言 */ void main() /* メイン関数 */ {  int a;  int b;  a = 3; /* 例値、デタラメです */  b = 109; /* 例値、デタラメです */  printf( "\na=%d, b=%d", a , b ); /* 最初の値を表示 */  sample_swap( &a, &b ); /* 入れ替え */  printf( "\na=%d, b=%d", a , b ); /* 入れ替えた値を表示 */ } (2)変数a,bを与えたときa+bとa-bを計算する関数  これも、型が intなのか floatなのか doubleなのか、もしくは独自に定義した数値型なのかが分かりませんが、とりあえず int型と仮定して作例を示します。 int sample_add( /* 加算関数 */  int a, /* 仮引数a */  int b /* 仮引数b */ ) {  return( a + b ); /* aと bの和を返す */ } int sample_sub( /* 減算関数 */  int a, /* 仮引数a */  int b /* 仮引数b */ ) {  return( a - b ); /* aと bの差を返す */ }  この関数を使うには、次のようなメインプログラムから呼び出します。 #include <stdio.h> int sample_add( int a, int b ); /* プロトタイプ宣言 */ int sample_sub( int a, int b ); /* プロトタイプ宣言 */ void main() /* メイン関数 */ {  int a;  int b;  a = 3; /* 例値、デタラメです */  b = 109; /* 例値、デタラメです */  printf( "\na=%d, b=%d, a+b=%d", a , b, sample_add( a, b ) ); /* 和を表示 */  printf( "\na=%d, b=%d, a-b=%d", a , b, sample_sub( a, b ) ); /* 差を表示 */ }  なお、字下げのために全角スペースを用いていますが、実際にコピーして使われる際は、全角スペースは取り除いてください。 (上記の作例は、Windows上の Borland C++ Compiler 5.5.1で検証致しました)

その他の回答 (2)

回答No.2

質問の意味がつかめないのですが、「関数」の「作り方」を知りたいのか?あるいは「関数」の「利用法」を知りたいのでしょうか?   たとえば、和、差を求める関数をそれぞれ作っておき   int kansuu_wa( a, b ) int a, b; { return(a+b); } int kansuu_sa( a, b ) int a, b; { return(a-b); } これに対して   main( ) { int a,b,c,d; a = 123; b = 45; c = kansuu_wa(a,b); d = kansuu_sa(a,b); fprintf(stderr, "WA=%d, SA=%d\n", c, d); } ってな事?

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  二番目については、  int a = 1; int b = 2; int answer = 0; answer = a + b; printf("a+b = %d\n", answer); answer = a - b; printf("a-b = %d\n", answer);  となりますが、これが分からないという事でしょうか?  関数についても、C/C++の基本中の基本です。  まずはお手元の参考書を再度読んでみるか、 猫でも分かるプログラミング http://www.kumei.ne.jp/c_lang/  を参照してみてください。  その上で「何故分からないか」「どこが分からないか」を補足して頂ければ、身に付く回答が得られると思いますよ。

関連するQ&A

  • JAVA: プログラム間の通信について

    JAVA初心者の者ですが、実行可能なプログラム A, Bの2つがあるとして、 プログラムAを実行した後、 プログラムAの動作中にプログラムBを実行して、動作中のAの変数にアクセスしたり、 Aの関数を実行する事ってできないでしょうか? 調べていても中々出ないので質問させて頂きました。 すみませんが、宜しくお願い致します。

    • ベストアンサー
    • Java
  • 手続き型と関数型について。

    手続き型言語の定義は、「記述された命令を逐次的に実行し、処理の結果に応じて変数の内容を変化させていくプログラミング言語」となっていて、関数型言語の定義は、「数学的な言語仕様をもつプログラミング言語のこと。一度値を与えられた変数は常にその値を維持し、計算は計算結果を引数とした関数呼び出しの繰り返しとして行われる。」とあります。 関数型の、「一度値を与えられた変数は常にその値を維持し」はどういう意味ですか? 例えば、a=2とした後に、a=3などとすればaの値は変わっているのですが。 簡単な例で説明してください。

  • 九九を表示させるプログラム

    掛け算の九九、和の九九、差の九九を表示するプログラムを組むという問題ですが、コメント文の所のプログラムが分からないので教えてください。プログラムは以下の通りに与えられています。 #include<stdio.h> main(){ int x,y,z; int yn,op; do{ do{ printf("[*(1),+(2),-(3)]"); scanf("%d",&op); }while( 1 > op || op > 3 ); //ここに、九九を計算し表示するプログラムを入れる //変数opの値が1なら、掛け算の九九 //変数opの値が2なら、和の九九 //変数opの値が3なら、差の九九 を計算し表示 do{ printf("Continue[1/0]?"); scanf("%d",&yn); }while( 0 > yn || 1 < yn ); }while( yn == 1 ); }

  • プログラム関数を教えてください

    EXCEL関数で以下のようなプログラムを作っているのですが・・ 詳しい方教えてください。 株の自動売買プログラムを作りたいと思ってますが 詳しいサイト、関数プログラムがわかりません(岡三RSS使用) 作りたい関数プログラム  仮条件 A社株価1100円 B社株価1000円 1.A-B=100円のときにAを信用売り Bを信用買い 2.A-B=0円のときにAとBを手仕舞い どのような関数を使えばいいのでしょうか? 詳細がないとわからないのかもしれませんが・・・

  • プログラムの手法について

    プログラム初心者です。同僚の書いたVBAのプログラムを勉強のために見ていました。彼のプログラムは X=-1 関数1 ・・・・・関数の処理 X=1 関数1終 もしX=1じゃなければエラー処理へ。 もしX=1ならばプログラムは続く。 といった内容です。 関数直前で変数に値を持たして、関数脱出後にその変数が変わっていなければエラー処理へといった手法はよく使われるんでしょうか?自分はそんな処理の仕方をおもったことすらなかったので、そんな手法があるんだ。それって一般的なのかな?と思って質問させて頂きました。お願いいたします。

  • プログラムがmain関数から始まらない??

    C言語初心者です。よろしくお願いします。 return文について勉強している途中だったのですが、次のプログラムを実行してみたところ、わからないことが出てきたので質問させていただきました。(ほとんど自分で作ったプログラムではないです) #include <stdio.h> /* 関数a()はintを返すと指定 */ int a() {     if (1) {          /* ここで関数a()は終わります */          printf("yes1\n");          return 300;     }     pritnf("yes2\n");     /* ここは通りません */     printf("this is a()\n");     return 10; } int main() {     int i;     /* 関数a()の返り値を変数iに代入します */     i = a();     printf("i = %d\n", i);     return 0; } このプログラムの出力結果は yes1 i = 300 となるのですが、 1.以前「main関数からプログラムは開始する」というようなことを学習したのですが、このプログラムではyes1が出力されていることからa関数からプログラムが始まっていませんか? 2.a関数のif文の中のreturn 300;でプログラムが終了しないのはなぜですか? 知識のある方、どうか教えてください。 よろしくお願いします。 ※ このプログラムを表示させる際、Tabキー及び半角では適度な空白スペースを作ることができなかったので、プログラムを見やすくするための空白スペースは全て全角スペースで作ってあります。(もしかしたら普通に表示させる方法があるのかもしれませんが、わかりませんでした。)

  • AVRプログラム 関数から戻ってこない

    AtmelStudio6 で、ATmega64A向けにプログラム行なっているのですが、 すごく、単純なところで困っています。 ICEは、AVR JTAGICE です。 main() のみで処理をさせると普通に動くのですが、関数に飛ばすと飛んだ先の 関数から戻ってこなくなるのです。 ツールかレジスタの設定が不十分なのかもしれません。 -- 問題のプログラム -- #include <avr/io.h> #include <avr/iom64a.h> #include <avr/interrupt.h> #include <util/delay.h> void test(void){ DDRA = 0xC0;//<ここは、実行される }//デバッガで見ると、ここで止まっている。 int main(void) { cli();//この関数はライブラリにあるので戻ってくる test();//この関数から帰ってこない // DDRA = 0xC0; //test();の内容をここに書くと、正常に処理して通過する。 PORTB = 0xFF; //B出力レジスタ DDRB = 0xF7; //B方向レジスタ PORTC = 0xFF; DDRC = 0xDB; while(1) { //TODO:: Please write your application code LEDを点滅させるプログラム <略> } } ------------------------------------------------------- 何方か心当たりのある方は居ないでしょうか?

  • 多変数関数の最小値を求めるプログラム

    複雑な関数の最小値を求めるためのプログラムを製作しています。 4つの独立な変数からなる関数を最小にする変数を探し出したいのですが、 効率の良いプログラムがなかなか作れません。 これまで試してみたのは、まずある適当な変数の組み合わせを任意に決め、 それを基準にそこから変数を少しだけずらしたとき、 関数の値が元よりも小さくなったら、ずらした変数を新たな基準として より小さな関数値になる変数を探していく…… というものですが、どうも関数が複雑な曲線を描いているらしく、 極値を数多く持っているようで、この手法ではすぐ極値につかまってしまい、 最小値にたどりつけません。 結局、変数の取りうる組み合わせを全てしらみつぶしに調べる方法にしたのですが、 充分な精度をもたせるためには膨大な計算量が必要となってしまいまったく実用的でありません。 このような多変数関数の最小値を求めるために有効なアルゴリズムはありませんでしょうか?

  • 関数の引数と実引数の取り扱いについて

    C言語初心者です. 関数の引数と実引数の取り扱いについて,教えていただきたいことがあります. 例えば,2変数の和を求める関数を考えると,以下のようになると思います. #include <stdio.h> double sum(double x, double y); int main(void) { double a, b, wa; a=2.0; b=3.0; wa=sum(a,b); return 0; } double sum(double x, double y) { double total; total=x+y; return total; } このとき,mainプログラムでは,a,bふたつの変数を定義しておいて,関数sumに入れて計算させているわけですが,mainプログラムで変数x,yを定義しておいて,以下のようなプログラムにするのはありでしょうか? 参考書などをみると,前者のように取り扱っているようなのですが,試しに後者で実行させてみても同じ結果となりました. #include <stdio.h> double sum(double x, double y); int main(void) { double a, b, wa; a=2.0; b=3.0; wa=sum(a,b); return 0; } double sum(double x, double y) { double total; total=x+y; return total; }

  • 初心者:指定した時間が経過すると計算を開始するプログラム

    たぶん簡単な内容だとは思うのですが自分では頭が混乱してきているので質問します。 C++Builderでプログラムを作成し,このプログラムは0.01[s]でループしていくと仮定します。(ある条件を満たすまで) ここで、プログラムを実行してから0.1[s]経過すると先ほどのプログラムからある変数を取得し、別の関数内で計算を行ってまたもとのプログラムの変数に受け渡す。そして、これは0.1[s]毎に行いたいと考えています。(毎回同じ計算を行う) ここで、Sleep関数を使って計算を行おうと考えたのですが0.01[s]でループしていたプログラムにもSleepが影響してしまい、うまく実行することができませんでした。 簡単にいいますと0.01[s]間隔で得られている数値を0.1[s]経つごとに計算して計算結果をもとのプログラムに戻すといった感じです。 うまく伝わっていないかもしれませんがどなたかご教授よろしくお願いいたします。

専門家に質問してみよう