角錐の底面積と高さを整数値で入力し,その体積を小数点第1位まで表示する 
  角錐の体積は以下の式で求める
   角錐の体積 = 底面積 * 高さ / 3
 処理
  底面積と高さを入力
  底面積と高さがどちらも0より大きい値ならば
  角錐の体積を求めて、表示する
  どちらかが0以下ならば
  "入力された値が正しくありません" のメッセージを出力する

底面積と高さはint型とする
  体積はdouble型とする
 イメージ
  底面積 5  高さ 2 の時、体積は 3.3 と表示される

という問題で僕は以下の様に作りました。#include <stdio.h>

void main(void)
{
int teimennseki takasa;
double taiseki

printf("角錐の底面積を入力して下さい(整数値):");
scanf("%d",&teimennseki);

printf("高さを入力して下さい(整数値):");
scanf("%d",&takasa);

if (teimennseki <= 0 ){
printf("入力された値が正しくありません");
}
else if (takasa <= 0 ){
printf("入力された値が正しくありません");
}
else{
taiseki = teimennseki * takasa / 3.0
printf("底面積 %d 高さ %d の時、体積は %.1f\n",teimennseki,takasa,taiseki);
}

return 0;
}

すると、エラー7(記憶領域制御ブロックが壊れていました。) がでます。これはどういうエラーで、原因はどこでしょうか?

A 回答 (6件)

> エラー7(記憶領域制御ブロックが壊れていました。

) がでます

他の方が指摘された細かいこと以外に、コンパイラによって問題が出そうなところ
がひとつあります。

> void main(void)
省略
> return 0;
> }

規格云々の話もありますが、少なくとも、戻り値を void で宣言した関数で、
return 0; と値を返してはいけませんね。

本来なら、コンパイルエラーにして欲しいところですが、これを通してしまう
コンパイラーなのでしょう。

で、戻り値用の領域を用意してないのに、戻り値を入れたことが「記憶領域制御
ブロックを壊す」ことにつながったのでしょう。
    • good
    • 0

プログラムの記述については皆さんの回答されている通り。


エラーについても正確なところはわかりませんが
> 記憶領域制御ブロックが壊れていました。
という表現から受ける印象は、「OSが壊れているんじゃないの?」
というところですね。
    • good
    • 0

何のエラーかは分かりませんが、、


どのような環境(OSやコンパイラ)でどの時点でのエラーなのか(コンパイル、実行時)ぐらいは示された方が良いと思います。

taiseki = teimennseki * takasa / 3.0
の行に ; が抜けているのは関係ないですよね?^^;

後、本題とはそれますが、
if (teimennseki <= 0 ){
printf("入力された値が正しくありません");
return 1;
}
else if (takasa <= 0 ){
printf("入力された値が正しくありません");
return 1;
}

taiseki = teimennseki * takasa / 3.0
printf("底面積 %d 高さ %d の時、体積は %.1f\n",teimennseki,takasa,taiseki);

と言うようなコードの方が読みやすくなるかと^^;
好みの問題かも知れませんが、、
    • good
    • 0

このソースは、コピペされたものでしょうか?


もし、そうなら、下の2行のセミコロン;が抜けています。

double taiseki
taiseki = teimennseki * takasa / 3.0

プログラムは正しく作動すると思いますよ!
OS、コンパイラーなども補足されますと
後の方の回答がやり易いのではないでしょうか?
    • good
    • 0

>double taiseki



>taiseki = teimennseki * takasa / 3.0

こちらもそれぞれ、

double taiseki;

taiseki = teimennseki * takasa / 3.0;

ですね。(ただのセミコロン付け忘れ)

それから

>return 0;

とするのであればint main(void)であるべきです。

これって元のソースのコピーじゃありませんね?
写し間違いが多い気がしますので…。(^_^;
    • good
    • 0

>int teimennseki takasa;



これは正しくは

int teimennseki,takasa;

ですよね。
元のソースはこうなっているのかな?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q側面積の求め方の公式

側面積の求め方の公式はありますか?
あったら教えてください。

Aベストアンサー

何の側面積ですか?

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。

Q円錐の側面積の公式の覚え方

円錐の勉強で、「側面積=母線×半径×円周率」というのがありますが、これの良い(たとえば語呂合わせ的な)覚えかたってありますか?あったら教えてください。

Aベストアンサー

「側面ぼはえん」とでも覚えておけばいいんじゃないでしょうか。

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Q円錐の側面積の公式 の 説明(証明)

次の 問題を 解いて下さい。

「円錐の側面積の公式」の説明(証明)

底面の半径をr、円錐の母線の長さをRとする。
側面積Sは
        S=πrR
で 求められることを 説明(証明)しなさい。

               1 
ただし、説明の中で、 - LR 、L=2πr を 用いること。
               2

です。 急いで答えを 知りたいので

よろしくお願いします。

Aベストアンサー

証明には積分が必要かな。
説明だったら、一定の半径の円については弧の長さと弧の両端と中心を結ぶことによってできる扇形の面積が比例することを前提に、話を進めていけばすぐだと思うけど。

Qchar AA[]{"全角文字"};から"全"という一字を取り出したい

 今晩は、Cの初心者です、宜しくお願いします。
 全角文字の入ったchar AA[]{"全角文字"};から"全"という文字一字を取り出す時にAA[0]とかくとエラーになります。
 どのようにしたら取り出せるのでしょう。
 ポインタを使う方法と使わない方法を教えて下さい。
 宜しくお願いします。

Aベストアンサー

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出す必要があります。

>char AA[]={'全','角'};

char AA[]="全角";
とし
>printf("%s%s\n" , AA[0],AA[1] ) ;

printf("%c%c\n" , AA[0],AA[1] ) ;
とすれば、「全」だけを表示する事が可能と思われます。

日本語を文字列で表示する為の文字コードについては
Shift-JISだけでなく、UnicodeやUTF・EUC・JISなどがあります。

もう少し詳しく記載してあるホームページはないか探してみましたが、ちょっと無理でした。

参考URL:http://marupeke296.com/CPP_charUnicodeWideChar.html

お疲れ様です。

まずお伺いしたのがOSおよび開発するためのコンパイラです。

ロケール等の話は分かりませんが、昔のC言語で日本語を扱う場合には全角文字1文字で2個つのchar領域を使用していました。
(マルチバイト文字セットと言います。)

詳細は参考URLを参照の事。

windowsでVCと仮定した場合、charを使われていると言うことは、多分、shift-jis(シフトJIS)で文字列を扱っていると思われます。

結論として全角文字1文字だけを取り出したいという場合は、結局char2個分のデータを取り出...続きを読む

Q立体(円錐・三角錐・四角錐など)の画像を探しています

こんにちは、皆様。

立体(円錐・三角錐・四角錐など)の画像ソフトを探しています。

ワードやエクセルに付いている【オートシェイプ】という形で【円錐・三角錐・四角錐など】あれば、ベストですが、単体の画像でもOKです。

無料・有料を問いません。

宜しくご指導をお願い申し上げます。

Aベストアンサー

こんなフリーソフトがありますが、もっと本格的に描くのなら(変形、サイズ挿入や透視図など)、イラストレーターやなんかの有料ソフトがあります。修練するのは大変
ですが。お答えになりますかどうか。orz

参考URL:http://www.d4.dion.ne.jp/~tadashii/rittai.htm

Qブロックで };ついているのと }だけの差はなんでしょうか

皆様こんにちは^^
 さて、以下のプログラムの{}ブロックで質問があります。
 {ブロック+セミコロン};と{セミコロンなし}があります。
 };で最後にセミコロン;がついていますが!これは何の意味があるのでしょうか!?
 1時間ぐらい調べましたが、該当する項目がありませんでした。
 よろしくお願いいたします。
#include <stdio.h>
#include <string.h>

/* 学生の人数 */
#define GAKUSEI_NUM 3

/* 構造体の定義 */
struct TestKekka
{
char shimei[80];
int kokugo;
int sugaku;
int eigo;
};
int main(int argc, char* argv[])
{
int i,heikin;
/* 構造体の配列の宣言 */
struct TestKekka gakusei[GAKUSEI_NUM];

/* 学生のデータ入力する */
for (i = 0; i < GAKUSEI_NUM; i++)
{
printf("氏名:");
scanf("%s", &gakusei[i].shimei);
printf("国語の得点:");
scanf("%d", &gakusei[i].kokugo);
printf("数学の得点:");
scanf("%d", &gakusei[i].sugaku);
printf("英語の得点:");
scanf("%d", &gakusei[i].eigo);
printf("---------------\n");
}

/* 学生ごとの平均点を表示する */
for (i = 0; i < GAKUSEI_NUM; i++)
{
heikin = (gakusei[i].kokugo + gakusei[i].sugaku + gakusei[i].eigo)/ 3;
printf("%sの平均点%d\n", gakusei[i].shimei, heikin);
printf("----------------\n");
}

return 0;
}

皆様こんにちは^^
 さて、以下のプログラムの{}ブロックで質問があります。
 {ブロック+セミコロン};と{セミコロンなし}があります。
 };で最後にセミコロン;がついていますが!これは何の意味があるのでしょうか!?
 1時間ぐらい調べましたが、該当する項目がありませんでした。
 よろしくお願いいたします。
#include <stdio.h>
#include <string.h>

/* 学生の人数 */
#define GAKUSEI_NUM 3

/* 構造体の定義 */
struct TestKekka
{
char shimei[80];
int kokugo;
int sugaku;
...続きを読む

Aベストアンサー

for文、関数の{}はそれで完結しているので文法上 ; は必要ありません。
構造体 struct の {}は、 } の後に変数名(もしくは別名)を書くことも可能なので、終端を示す ; が必要になります。

いずれも、C言語の文法で定義されています。

struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
};



struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
} testkekka; ← 変数名

もしくは、

typedef struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
} TESTKEKKA; ← 別名

など。

Q四角錐での電気抵抗

 各辺が1Ωの抵抗である [四角錐E-ABDC] があるとします。
 この四角錐について、「錐の頂点~底辺のある頂点」間(たとえば EAやEC)の合成抵抗を求めたいです。
 似たような問で「正四面体のある一辺についての合成抵抗」を考えるものがあり、それはなんとか回路図の書き換えにより理解することができました。
 今回の四角錐の問でも、まず回路をできるだけ簡単にしようと書き換えを試みたのですが、[画像]の所からどうしても書き換えが進まず詰まってしまいました(EA間の抵抗を求めようとしています)。

 これについて、わかる方がいらっしゃれば回路図の書き換え方を教えて欲しいです。
 特にDとEの周りの書き換えに困っています……

 もしよければよろしくお願いします。
 

Aベストアンサー

E と A の間に抵抗はあるんでしょうか?

いずれにしても, 対称性から B と C は短絡できる. あるいは, 同じことだが C につながる 3本の辺を全て B につなげてもいい.

Q新たな疑問 for( ; ; ){

 ループプログラムでfor( ; ; ){ の; ;てどんなループですか?
以下参考にされてください。
練習問題 5-18
数値を繰り返して入力し、0が入力されたら入力を止め、それまでの合計を表示するプログラムを作成しなさい。
________________________________________
int sum = 0;
int value;

for( ; ; ){
scanf( "%d", &value );

if( value == 0 )
break;

sum += value;
}

printf( "合計は%d", sum );

Aベストアンサー

・for文では初期値の設定を行わない
・for文ではループを終了する条件を指定しない
・for文ではループのたびに実行する付加実行式を指定しない

ということだと思いますが・・・。

あくまでも ”for文では” 行わないということで。


人気Q&Aランキング

おすすめ情報