• 締切済み

main関数以外での結果の表示?

rot-Nの回答

  • rot-N
  • ベストアンサー率27% (118/432)
回答No.4

回答については、No1殿の言うとおり、printf(これも関数だって判るかな?)の中に移せばよい。 つまり得点判定の関数の中にprintf()やputc()、putchar()を書いて、SとかAとかを出力させればよい。 で、さて、貴兄のプログラムを見ていると、「関数」というものが全然判ってない様ですね。なぜ、Aクンの判定と、Bクンの判定、それぞれにia()とib()を作っているのかな? (しかもBクンのB判定のところは、変数ixを使っている(^^;)) 私だったら、たとえば、hanteiという関数を作って、 hantei(Aクンの得点); hantei(Bクンの得点); と、関数の引数にAクン、Bクンの得点を入れてhantei関数を呼び出すのだけどね。 課題にも文句(^^;)があって、こういう場合、関数hantei()の戻り値が、Sとか、Aとかになるのが、綺麗なヤリ方だと思うね(実は、ここは趣味とか個人毎の書き方とかいう以前の問題なのだが)。 つまり、判定の関数のプロトタイプは、「char hantei(int 得点);」というところかな。 そうすると、 printf("Aクンの判定:%c\n",hantei(Aクンの得点)); って書けるよね? プログラムの勘所って、そういうもんじゃないかと思うのだが。

関連するQ&A

  • 関数のプログラムについて

    任意の二次方程式ax^2+bx+c=0をとくプログラムの作成です 引数をa,b,cとして、解の大きい方を返すというものなのですが、 僕は以下のようにして組んだのですが、うまくいきません。 と、いうより、関数の作り方がいまいちわからないです。 どこが駄目なのか教えてください。 作ってみたやつ↓ #include<math.h> #include<stdio.h> int a,b,c; double d; double x,y,z; int main(void) { a=1; b=2; c=1; printf("ax^2+bx+c=0\n "); d=b^2-4*a*c; if (d<0){printf("kyosuukai\n)} else if(d>=0) { x=(b+sqrt(b^2-4*a*c))/2*a; y=(b-sqrt(b^2-4*a*c))/2*a; if(x>=y){z=x} else if(x<y){z=y} printf("x= %f\n",z); } }

  • この関数を使ったプログラムの修正箇所。

    xとyをそれぞれ0から10まで1きざみで変え、そのすべてを組み合わせた平面上の11x11個の点(x,y)のうちで、上記の領域に含まれる点の数を出力するmainプログラムとプロトタイプ宣言、 さらに入力パラメータであるx,yを組み合わせた平面上の点(x,y)を考え,この点が原点が(4,7)、半径5の円の内側(円周上は除く)に含まれるなら戻り値は1,含まれないなら戻り値は0 #include <stdio.h> int judgment(int x, int y); int main(void) { int x,y,count; count=0; for(x=0; x<=10; x++) for(y=0; y<=10; y++) if(judgment(x,y)==1) count++; printf("%d\n",count); } int judgment(int x, int y){ int a,b; if ((4 - a) * (4 - a) + (7 - b) * (7 - b) < 5 * 5) return(1); else return(0); } という関数を使ったプログラムを上記の様に書いたんですが、上手く結果が出力されず結果が0となってしまいます。 自分的にはこれでいけると思ったんですが…。 何処を手直しするべきかわからなく困っているので、どなたかヒントをもらえたら助かります。

  • 参照による呼び出し

    参照による呼び出しで3つの整数を大きい順に並び替えるという プログラムで、 #include<stdio.h> void change(int *x,int *y,int *z);/       main(){ int a,b,c; scanf("%d %d %d",&a,&b,&c); printf("入力データ:a=%d,b=%d,c=%d\n",a,b,c); change(&a,&b,&c); printf("入れ替え後:a=%d,b=%d,c=%d\n",a,b,c); return(0); } void change(int *x,int *y,int *z){ if(*x>*y){ *a=*x; *c=*y; } else{ *a=*y; *c=*x; } if(*z>*a){ *b=*a; *a=*z; } else if(*z>*c){ *b=*z; } else{ *b=*c; *c=*z; } } のように作ったのですが、zの値が一度も使われていないとエラーが 出てしまいます。どこをどう直せばいいか教えてください。 お願いします。

  • 再帰呼び出し

    アッカーマン関数の値を出力するプログラム #include void main(void); int ack(int,int); void main(void) { int x,y,i; printf(" data(x) = "); scanf("%d",&x); printf(" data(y) = "); scanf("%d",&y); i = ack(x,y); printf("Ackerman = %d\n",i); } int ack(int a,int b) { int k; if (a == 0) k = b+1; else if (b == 0) k = ack(a-1,1); else k = ack(a-1,ack(a,b-1)); return (k); } この関数を呼び出した回数も出力するようにしたいのですが、どうしたらいいのでしょうか?

  • 引数に二重配列のある関数について

    void calc(int *a,int b,int c){ a[0]=b+c; a[1]=b-c; } void main(void){ int x[2]; int y=2,z=5; calc(x,y,z); printf("x[0]=%d,x[1]=%d\n",x[0],x[1]); } 上のように引数が普通の配列の関数ならできるのですが, 引数が下のような多重配列になるとエラーが出てしまいできません。 void keisan(int **a,int b,int c){ a[0][0]=b+c; a[0][1]=b-c; a[1][0]=b*c; a[1][1]=b/c; } void main(void){ int x[2][2]; keisan(x,6,2); printf("x[0][0]=%d,x[0][1]=%d\n",x[0][0],x[0][1]); printf("x[1][0]=%d,x[1][1]=%d\n",x[1][0],x[1][1]); } 引数に多重配列を使った場合の関数の作り方について教えてください. お願いいたします.

  • 二次関数で

    任意の二次方程式(ax^2+bx+c=0)を解くプログラムを作るのですが、以下の条件を満たした方法で作るというものです。 1、関数の引数は、3つの係数と、解の入る変数二つとする。 (計5つの引数をとる。) いずれかの引数がアドレス渡し(ポインタ)になる。 2、解は関数呼出の時に指定した2つの変数にそれぞれ代入されること。 3、解の表示は関数側ではなく呼出側で行うこと。 4、グローバル変数は使用しない。 一応作ってみたのですがコンパイルすらできません。 初心者なので全くわかりません教えてください。 #include<stdio.h> #include<math.h> void solve(double *x, double *y); int main(void) { double x,y; solve(&x,&y); return 0; printf("x=%f\n", x); printf("y=%f\n", y); } void solve(double *x, double *y) { doble a,b,c; puts("二次方程式 a*x^2+b*x+c=0 を解きます"); puts("係数a, b, cを入力してください"); printf("a="), scanf("%lf", a); printf("b="), scanf("%lf", b); printf("c="), scanf("%lf", c); putchar('\n'); double d = b * b - 4 * a * c; if(d >= 0){ x = (-b + sqrt(d)) / (2 * a); y = (-b - sqrt(d)) / (2 * a); } else puts("虚数解"); }

  • IF関数以外の関数で条件付けしたいです。

    ある値Xがあって、X<=aの時F(y), a<X<=bの時G(y), b<X<=cの時H(y), c<X<=dの時I(y),……と入力したいのですが、IF関数を使用すると、括弧がいっぱいになって大変です。何か他に良い関数はありませんか?

  • ユーザー関数が定義されません

    ユーザ関数について勉強しようとしてテキストの例文を打ってコンパイルしたのですが、ユーザー関数「sub1」が照合できず、ユーザー関数が使えません。 悪いところがあれば教えてください。 コンパイラはVC++です。 例文 #include <stdio.h> void main() { int a=8,b=-6; sub1(a,b); } int sub1(x,y) { int x,y; printf("x= %d y= %d",x,y); }

  • 二つ以上の値を返す関数

    たとえば、a,bという値を関数に入れて、関数の中で変わったa,bを受け取るような方法はないでしょうか。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=138798 の int main(void) { int a=1, b=2; func(&a, &b); printf("%d, %d\n", a, b); return 0; } void func(int *x, int *y) { *x++; *y++; } を実行してみましたが、 「関数 'func' は定義されていません。int 型の値を返す外部関数と見なします。」 と出てきました。 助言をよろしくお願いします。

  • プログラムが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キー及び半角では適度な空白スペースを作ることができなかったので、プログラムを見やすくするための空白スペースは全て全角スペースで作ってあります。(もしかしたら普通に表示させる方法があるのかもしれませんが、わかりませんでした。)