• ベストアンサー

c言語

私は現在c言語初心者ですが関数を使い円柱の体積を求めてるのですが なぜかエラーだらけです。どなたか何故エラーが起きるのか教えていただけませんか? #include<stdio.h> int taiseki(int *volu); int main() { int volu=0; taiseki(int &volu); printf("%d",volu); } int taiseki(int *volu) { int i = 2; int c = 3; int t = 6; int a = 2*i*c*c/4; int b =i*c*t; volu=a/b; return volu; } こんなかんじですがいかがでしょう?

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

  • ベストアンサー
  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.2

いろいろあるのですが、 (1)main関数の戻り値を返していません。 (2)taiseki関数の戻り値を使用していない→戻り値なし(void) (3)小数はint型で表現できません→double型を使用 (4)既にvolu変数を宣言しているのに、再宣言していた (5)ポインタ変数に代入するときは、*をつける。 ======================================== #include<stdio.h> void taiseki(double *volu); //(2)(3) int main(){   double volu = 0; //(3)   taiseki(&volu); //(4)   printf("%f",volu);   return 0; //(1) } void taiseki(double *volu){ //(2)(3)   int i = 2;   int c = 3;   int t = 6;   double a = 2*i*c*c/4; //(3)   int b = i*c*t;   *volu = a/b; //(5)   //return volu; //(2) } ======================================== こんな感じでしょうか

armpoint
質問者

お礼

ありがとうございます的確なご指摘。 もう一度組みなおします。

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

その他の回答 (2)

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

そもそも、円柱の体積を求める式はそれで正しいのでしょうか? 円周率の値(約3.14)がどこにも登場していませんね。 ゆとり教育世代なので3を使っている、ということでしょうか。 また、底面の半径や円柱の高さ、という重要な変数の名前が iとかcとかtとかいうのは、ちょっといただけません。 「名は体を表わす」よう、半径や高さであることが 一目見てわかるような名前を付けることを強くお勧めします。

armpoint
質問者

お礼

ありがとうございます。 たしかに誰が見てもわかりやすい方が良いですよね。 関数とポインタの使い方がいまいちわからなかったので。 そこまで気が回らず、自分だけの理解で終わっていました。 以後だれからも見やすくというのを意識したいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • kent_a
  • ベストアンサー率18% (36/199)
回答No.1

ちょっと割愛しますが int taiseki(int *volu) { return volu; } このような場合、関数taiseki()の戻り値としてvoluを返します。 例を2パターン書いてみたので試してみて 1) void taiseki(int *volu); int main() { int volu=0; taiseki(int &volu); printf("%d",volu); } void taiseki(int *volu) { int i = 2; int c = 3; int t = 6; int a = 2*i*c*c/4; int b =i*c*t; *volu=a/b; return; } 2) int taiseki(void); int main() { int volu=0; volu = taiseki(); printf("%d",volu); } void taiseki(int *volu) { int i = 2; int c = 3; int t = 6; int a = 2*i*c*c/4; int b =i*c*t; volu=a/b; return volu; }

armpoint
質問者

お礼

ありがとうございます。 早速試してみましたが、二つともエラーが起きてしまいます。 どこでエラーしているのかさっぱりわかりません。 引数の問題や間接参照レベルがちがうらしいのですが。。。。。

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

関連するQ&A

  • C言語の簡単な質問です。

    #include "stdio.h" int tasizan(int a,int b){ int c; c=a+b; return c; } int main(void){ int a,b,c; a=1; b=1; c=tasizan(a,b); printf("%d+%d=%d",a,b,c); return 0; } と、あるとします。この文を読み込む順番を教えてください。  文の左に行番号みたいに順番を書き込んでください。   例 (例が間違ってたらすみません) 1 #include "stdio.h" 2 int main(void){ 3 int a,b,c; 4 a=1; 5 b=2; 6 c=a+b; 7 printf("%d+%d=%d",a,b,c); 8 return 0; }

  • c言語なのですが

    c言語なのですが #include<stdio.h> main() { int a; printf("整数を5回足し算する\n"); scanf("%d %d",&a); printf("a*5=%d\n",a*5); return(0); } でエラーが起こります どこを修正すればいいのでしょうか

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • c言語で分からないところがあるので教えてください。

    http://www9.plala.or.jp/sgwr-t/c/Q/ens06-61.html の問題がわかりません。 回答の #include <stdio.h> int main( void ) { int kekka[51]; int a, b, i; int amari; printf( "整数値を2つ入力してください " ); scanf( "%d%d", &a, &b ); if( b == 0 ){ printf( "処理終了\n" ); return 0; } printf( "%d / %d = ", a, b ); kekka[0] = a/b; for ( i = 1; i < 51;i++ ) { amari = a%b; if ( amari == 0 ) break; a = amari * 10; kekka[i] = a/b; } printf( "%d.", kekka[0] ); ここまでの部分はわかったのですが、 下の for ( a = 1; a < i; a++ ) { printf( "%d", kekka[a] ); } の部分がわかりません。 この部分は何を表わしているのか 教えてください。

  • C言語で困っています

    C言語で 100:1 99:2 98:3 .......ループ 1:100とやりたいんですが このやりかたがわかりません goto文などを使うのでしょうか? 一応コードは #include <stdio.h> int main(void) { int i,a; for(i=100; i>=1; i--){ for(a=1; a<=100; a++){ printf("%d:\n",i); break; printf("%d",a); } } return 0; } です まったくこれだと右側が出力されなくてだめみたいです どなたかお知恵をください お願いします

  • C言語の参照はずしについて

    ソートのプログラムなんですが #include <stdio.h> #include <stdlib.h> int comp(const void *, const void *); int main() { int i; int test[6] = {10, 8, 2, 6, 4, 0}; qsort(test, (size_t)6, sizeof(int), comp); printf("\n"); for (i = 0; i < 6; i++) printf("%d\n", test[i]); return 0; } int comp(const void *a, const void *b) { static int i = 1; printf("%02d--%d,%d\n", i, *(int *)a, *(int *)b); i++; return (*(int *)a - *(int *)b); } 最後のreturnの()の中身がよくわかりません。「参照はずし」という事をしてるらしいんですが「参照はずし」とは何ですか意味も教えてください。

  • C言語の配列について

    配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  • C言語 ソートについて

    #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { } bool is_at(char c) { } void justify(char line[], int n) { } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; } 上の雛形を使って文字列lineに含まれる@以外の文字を文字列の前の方に詰めていくプログラミングを作るという問題を解いていたのですが下のプログラミングまでは出来たのですが最後のjustifyの部分がわかりません 良ければ解答をお願いします #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { char temp = *a; *a = *b; *b = temp; } bool is_at(char c) { if(c == '@') { return true; } else { return false; } } void justify(char line[], int n) { for(int i=0;i<n-1;i++) { } } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; }

  • c言語で

    c言語で /*a==bのとき商と余を求めるそれ以外は積を求める*/ # include<stdio.h> main () { int a,b,seki,sho,joyo; printf("aとbを入力してください\n"); scanf("%d %d", &a,&b); if(a==b) printf("sho=%d\n",(a/b)); printf("joyo=%d\n",(a%b)); else printf("seki=%d\n",(a*b)); return(0); } はどこがおかしいでしょうか? あと /*小数点*/ # include<stdio,h> main () { float a,b,seki,sho,joyo; printf("%f %f",&a,&b); if(a>b) printf("sho=%f4.3\n",(a/b)); printf("joyo=%f4.3\n",(a%b)); else printf("seki=%f4.3\n",(a*b)); return (0) にいたってはエラーの嵐なのですがどうすればいいでしょうか