• ベストアンサー

プログラムがエラーになってしまいます

角錐の底面積と高さを整数値で入力し,その体積を小数点第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-kuma
  • ベストアンサー率50% (1122/2211)
回答No.6

> エラー7(記憶領域制御ブロックが壊れていました。) がでます 他の方が指摘された細かいこと以外に、コンパイラによって問題が出そうなところ がひとつあります。 > void main(void) 省略 > return 0; > } 規格云々の話もありますが、少なくとも、戻り値を void で宣言した関数で、 return 0; と値を返してはいけませんね。 本来なら、コンパイルエラーにして欲しいところですが、これを通してしまう コンパイラーなのでしょう。 で、戻り値用の領域を用意してないのに、戻り値を入れたことが「記憶領域制御 ブロックを壊す」ことにつながったのでしょう。

その他の回答 (5)

  • ranx
  • ベストアンサー率24% (357/1463)
回答No.5

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

  • sssohei
  • ベストアンサー率33% (33/98)
回答No.4

何のエラーかは分かりませんが、、 どのような環境(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); と言うようなコードの方が読みやすくなるかと^^; 好みの問題かも知れませんが、、

  • brogie
  • ベストアンサー率33% (131/392)
回答No.3

このソースは、コピペされたものでしょうか? もし、そうなら、下の2行のセミコロン;が抜けています。 double taiseki taiseki = teimennseki * takasa / 3.0 プログラムは正しく作動すると思いますよ! OS、コンパイラーなども補足されますと 後の方の回答がやり易いのではないでしょうか?

  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

>double taiseki >taiseki = teimennseki * takasa / 3.0 こちらもそれぞれ、 double taiseki; taiseki = teimennseki * takasa / 3.0; ですね。(ただのセミコロン付け忘れ) それから >return 0; とするのであればint main(void)であるべきです。 これって元のソースのコピーじゃありませんね? 写し間違いが多い気がしますので…。(^_^;

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

>int teimennseki takasa; これは正しくは int teimennseki,takasa; ですよね。 元のソースはこうなっているのかな?

関連するQ&A

  • 3つの整数が等しいかどうか調べるプログラム

    3つの整数が等しいかどうか調べるプログラムがよくわからないので、どなたか教えていただけないでしょうか?ちなみに、わからないながらに作ってみました。 #include <stdio.h> int main(void) { int x, y, z; puts("3つの整数を入力してください。"); printf("整数1:"); scanf("%d",&x); printf("整数2:"); scanf("%d",&y); printf("整数3:"); scanf("%d",&z); if (x==y==z) puts("3つの整数の値は同じです。"); else puts("3つの整数の値は違います。"); return (0); }

  • C言語プログラム

    2つの整数を入力させ、それらが等しい場合hitoshii、異なる場合にはhitoshikunaiと出力するプログラムを作りたいのですが、うまくいきません。間違っているところを教えてください。 #include<stdio.h> #include<conio.h> void main() { printf("整数を入力してください:"); int number1; scanf("%d",number1); printf("整数を入力してください:"); int number2; scanf("%d",number2); if(number1==number2) { printf("hitoshii"); } else { printf("hitoshikunai"); } getch(); }

  • 長方形、円、三角形の計算するプログラムでエラーがでます

    タイトルの通りなんですがエラーがでます>< コンパイラはできたのですが、実行して二つ目の入力するとこで、入力したあと止まります。 どこがおかしいのでしょうか? #include <stdio.h> int sikaku(void); int en(void); int main(void) { char ch; int a,b; printf("円(A) 長方形(B) 三角形(C)\n"); printf("入力してください:"); ch = getche(); if(ch == 'C'){ printf("\n底辺を入力してください:"); scanf("%d ",a); printf("高さを入力してください:\n"); scanf("%d",b); printf("%dです",a * b); } else if(ch == 'B') sikaku(); else if(ch == 'A') en(); return 0; } int en(void) { int a; float f; printf("\n半径を入力してください:"); scanf("%d",a); printf("円周率を入力してください:"); scanf("%f",f); printf("%fです",a * a * f); return 0; } int sikaku(void) { int a,b; printf("\n縦を入力してください:"); scanf("%d",a); printf("横を入力してくさい:\n"); scanf("%d",b); printf("dです",a * b); return 0; }

  • プログラムに詳しい方教えてください!

    #include<stdio.h> void fxl(int x,int y); int main(void) { int a,b,m,n; printf("整数aの値を入力\n"); scanf("%d",&b); printf("整数bの値を入力\n"); scanf("%d",&b); m=a; n=b; fxl(m,n); printf("a=%dとb=%dを加算した値は%d\n",ab,m); printf("a=%dからb=%dを減算した値は%d\n",ab,n); return 0; } void fxl(int x,int y) { int j,k; j=x; k=y; x=j+k; y=j-k; } このプログラムを作ってみたのはいいのですが、参照渡しを使って正常に足し算、引き算をするにはどうすればよいのでしょうか。

  • C言語 %表示

    二つの整数値を読み込んで、前者が後者の何%かを表示するプログラムを作成したいです。 #include<stdio.h> int main(void){ int no1,no2; printf("整数を入力してください。\n"); printf("整数A:"); scanf("%d",&no1); printf("整数B:"); scanf("%d",&no2); printf("Aの値はBの値の%f%%です。\n",(double)(no1/no2)); } Aの値はBの値の0.0000%です。となってしまいます。 上記のプログラムの訂正をお願いします。

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、それらの値の差が10以下でなければ、「それらの差は10以下」そうでなければ「それらの差は11以上」と表示するプログラムを作成せよ。ただし、論理OR演算子を用いること。 (自分の解答) #include <stdio.h> int main(void) { int n1,n2; printf("2つの整数を入力してください\n"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); if ( (n1-n2) <= 10 || (n1-n2) >= 11) { /*ここがわかりません*/ printf("それらの差は10以下です。"); } else { printf("それらの差は11以上です。"); } return 0; } 論理OR演算子の使い方が分かりません。 解答お願いいたします。

  • C++のプログラム

    C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作   れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?

  • Cのプログラミングを勉強中です。

    Cのプログラミングを勉強中です。 Aの値のBに対する割合を表示すしたいのですが、以下のように記述してもうまくいきません。 どこを直したらよいか教えていただけますか。 #include <stdio.h> int main(void) { int n1 , n2 ; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d", &n1); printf("整数B:"); scanf("%d", &n2); printf("Aの値はBの%d%%です。\n" , n1 / n2 * 100 ); return(0); }

  • 分数の足し算をさせるプログラムが分かりません。どなたか分かりませんか?

    分数の足し算をさせるプログラムが分かりません。 C言語の問題で分数の足し算までは一応できるんですが、答えがでたときに整数で出すやり方と約分して表す方法が分かりません。 どなたか知恵を貸してくれませんか? ユーザから4つの整数を入力し、はじめに入力された2個の整数と後に入力された2個の整数を分数と考え、その分数の和を表示するプログラムを作成せよ。 例えば、「3」「4」「5」「6」と入力されたときは、3/4 + 5/6を計算する。 そのプログラム内では分数の和を計算する関数を作成する。 さらに、 約分を行う関数を 再帰呼び出しを利用して作成する。 void yakubun(int *a1, int *a2) 例えば、以下の場合1/2と表示される。 int i=10,j=20; yakubun(&i,&j); printf(“%d / %d”, i, j); ちなみにここまでできました↓ #include<stdio.h> void bunsu_tasizan(int a1,int a2,int b1,int b2, int *c1,int *c2 ) { *c1=(a1*b2)+(b1*a2); *c2=(a2*b2); } int main() { int x1,x2,y1,y2,z1,z2; printf("整数を入力してください"); scanf("%d",&x1); scanf("%d",&x2); scanf("%d",&y1); scanf("%d",&y2); if(x2==0||y2==0||x2==0&&y2==0) printf("0以外を入力してください"); else{ bunsu_tasizan(x1,x2,y1,y2,&z1,&z2); printf("%d/%d",z1,z2);} return (0); }

専門家に質問してみよう