質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

2回答

969閲覧

n-1個の円柱の計算結果の出力

cf.meteo

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2021/06/17 11:10

編集2021/06/17 13:04

前提・実現したいこと

底辺の半径 r, 高さ h の円錐を h を n 等分し,n − 1 個の円柱の体積を求め積算することにより計算せよ.
というものを実行しようとしていました。

発生している問題

scanが反応しているのかいないのか、数字を打っても処理が行われない。

該当のソースコード

c言語

1 2コード 3 4#include<stdio.h> 5#define PI 3.1415926536 6int main(void){ 7 8 double r; 9 double n; 10 double h; 11 printf("please enter the radius,height and split? \n"); 12 scanf("%lf",&r); 13 scanf("%lf",&h); 14 scanf("%lf",&n); 15 double i; 16 double val=0; 17 for(i=1;i<n;i++){ 18 val=val+r*r*(1-i/n)*(1-i/n)*PI*h/n; 19 } 20 printf("%lf",val); 21 return 0; 22} 23 24 25```### 試したこと 26 27printfの位置を変える、n,h,iをscanfにしてみる等を行いましたが解決しませんでした。 28###現在の出力 29please enter the radius,height and split? 30123 310.000000%

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2021/06/17 12:15

コードを変更されたようですが、入力が正しく行われているか確認しましたか? 手元では、値が出力されましたが、、、(正しいかの検証はしてない)
Crimson_Tide

2021/06/17 12:16

確認ですが、 問題は、底辺の半径 r, 高さ h の円錐を h を n 等分する。 n等分したときの一番上をn個目としたとき n-1個の円柱 とn個目の円錐ができる。 1 ~ n-1個目の円柱に対してそれぞれ体積を求め、それらを積算することで n-1個分の円柱の体積を求める。 で合っていますか?
kazuma-s

2021/06/17 12:44

実際に試した入力データと出力結果を追記してください。
cf.meteo

2021/06/17 13:02

pepperleafさん、kazuma-sさん 行いました、以下の通りです。 please enter the radius,height and split? 123 0.000000% crimson_Tideさん、 はい、その解釈で大丈夫です。
Crimson_Tide

2021/06/17 13:16

r*r*(1-i/n)*(1-i/n)*PI*h/n この計算式あっていますか? i=1 のとき 1-1/n が0になって 体積0になりますよ
cf.meteo

2021/06/17 13:19

n=1じゃなければ大丈夫かと思うのですが…
Crimson_Tide

2021/06/17 13:33

n=2 で2分割したとき for は i =1 しか実行されませんよね r*r*(1-i/n)*(1-i/n)*PI*h/n が0になるので valは0になると思うのですが、私何か勘違いをしているのでしょうか
Crimson_Tide

2021/06/17 13:47 編集

ああすみません 1-i/n を(1-i)/n と見誤っていました。 大変失礼しました
Crimson_Tide

2021/06/17 14:16

https://paiza.io/ja/projects/new こちらのサイトにコード貼り付けて、入力タブに1 2 3を入力して試したら please enter the radius,height and split? 1.163553 と出力されました。 ↓試した結果(リンク切れ起こすかも) https://paiza.io/projects/c0bqbTdHsrm6w7jQqx5rKw AtCoderという競技プログラミングのサイトにある実行テスト環境でも、私のローカル環境でもC++ですが、同様の結果になりました。 文法的には問題なさそうですけど、実行環境の問題ですかね? 実行ファイルを一度消して、コンパイルし直してみてどうでしょう。
Crimson_Tide

2021/06/17 14:19 編集

scanが反応してるかどうかは、scan後にn,h,r変数を出力してみて確認されてはどうでしょうか。 問題なければ for文の計算前後のvalの値を出力して確認してみましょう。
cf.meteo

2021/06/17 14:41

ありがとうございます!解決しました。
Crimson_Tide

2021/06/17 14:44

同じ問題を抱えた方のためにも、原因を教えていただけますか?
cf.meteo

2021/06/17 14:47

全角だったのが原因だと思います。お騒がせしました。
guest

回答2

0

ベストアンサー

double r;

int n;
int h;

これらの初期値がありません。
あと、これら、全て intですが、多分、だめ。
例えば、 n=10, i=1 の時、i/n => 0 (整数演算のため)です。 計算をキャストするか、intでなく、doubleとかにしましょう。

投稿2021/06/17 11:25

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cf.meteo

2021/06/17 11:29

コメントありがとうございます。scanfでr,n,hに具体的数を代入し、double型で行ってみます。
guest

0

printf("%lf",&val);

&は不要

投稿2021/06/17 11:14

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cf.meteo

2021/06/17 11:17

ありがとうございます、エラーは解決したのですが実行すると 0.000000 と出てきてしまいます。この原因を教えていただけると幸いです。
episteme

2021/06/17 11:21

r*r*(1-i/n)*(1-i/n)*PI*h/n コレが0なんじゃ?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問