• ベストアンサー

変数の宣言、初期化

C++を習い始めたばかりの初心者です。下のプログラムを教えてください。 2つの整数値をキーボードから入力し、それをint型変数xとyに格納する。 一方double型変数aとbをそれぞれ5.3と2.5で初期化する。 このときa*x+b*yを算出し出力するプログラムを作成せよ。 本当に始めたばかりなので見当違いなことを書いてるかもしれませんが 自分でやってみるとこんなふうになりました。 #include <iostream> using namespace std; int main() { int x,y; cin>>x>>y;  ←キーボードで入力する。 int a(5.3);  ←初期化 int b(2.5); x=double(a);  ←キャスト y=double(b); cout<<a*x+b*y<<endl; return 0; } お願いします。

noname#63549
noname#63549

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

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

> ということですか? コンパイルして、正しく実行できるかどうか、 まずはご自身で確認してみてください。 > 上書きしているというのはどういうことでしょうか。 最初のコードでは、 > cin>>x>>y;  ←キーボードで入力する。 ここでxとyに整数値を入力した後、 > x=double(a);  ←キャスト > y=double(b); ここでxにaの値を、yにbの値を代入しています。 その結果、最初に入力していたxとyの内容を 更新してしまっています。これが「上書き」です。 今回のプログラムでは、してはまずいですよね。

noname#63549
質問者

お礼

ちゃんとできました。何度もありがとうございます。 x=double(a); y=double(b); は上書きという意味だったんですね。

その他の回答 (2)

  • Interest
  • ベストアンサー率31% (207/659)
回答No.3

int型、double型が何か。データ型について理解されていないものと思います。 int型は、整数を扱います。 double型は、少数まで扱うことができます。 とりうる値の範囲は、本でもネットでもよいのでご自身で調べてみましょう。 ということで、intは整数しか扱えないので、int a; に 5.3を入れようとしてもダメ。 > あと、上書きしているというのはどういうことでしょうか。 x=double(a);  ←キャスト y=double(b); これのことです。これでは、先ほどキーボードから入力した x, yが意味なくなります。この式の意味は、「x に a の値を代入する」ですから。キーボードから入力した x が a で上書きされてしまいます。

noname#63549
質問者

お礼

intが整数値を扱うというのを自分がちゃんと理解してなかったみたいです。 回答ありがとうございます。なんとかできました。

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

> double型変数aとbをそれぞれ5.3と2.5で初期化 > int a(5.3);  ←初期化 > int b(2.5); > x=double(a);  ←キャスト > y=double(b); 冗長です。はじめからdouble型で定義してはいかがですか? また、せっかく入力したxとyを上書きしてしまっています。

noname#63549
質問者

補足

double型で定義するというのは #include <iostream> using namespace std; int main() { int x,y; cin>>x>>y; double a(3.5); double b(2.4); cout<<a*x+b*y<<endl; return 0; } ということですか? あと、上書きしているというのはどういうことでしょうか。 すみませんが詳しく教えていただけませんか。

関連するQ&A

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • VC++でプログラムの勉強をしています。

    プログラムは最近はじめたばかりです。While文とif文を使ってクイズを作ってみたところ、一個目のsinで入力を求めているところから無限ループになってしまいました。色々調べてcin.cler()とsin.ignore()を入れたりもしてみましたが上手くいきませんでした。どこを間違えているのでしょうか? //クイズ #include <iostream> using namespace std; int main()//cin.clear();cin.ignore();???? { int a; int b; while(1) { cout<<"ネコ型のロボットが出てくるアニメといえば?"<<endl; cout<<"A)ドラえもん B)ドラエもん C)ほりえもん D)サザエさん"<<endl; cin>>a; if(a=='A') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){break;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} if(b!='Y'||'N'){cout<<"正しく入力してね!"<<endl;} } if(a=='B'||'C'||'D') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){cout<<"残念!!"<<endl;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} } if(a!='A'||'B'||'C'||'D'){cout<<"正しく入力してね!"<<endl;} } cout<<"正解!!"<<endl; }

  • 実行

    こんにちは。私は昨日からC++を始めたのですがなかなかうまくいかないためこちらに質問させていただくことにしました。 #include <iostream.h> int main(void) { int x; int y; cout<<"xを入力: 10"; cin>>x; cout<<"yを入力: 2"; cin>>y; cout<<"x+yは"<<x+y<<"です。\n"; return(0); } このようなプログラムを作成したのですが実行してみたところ、 xを入力: 10 これ以降下までいきません。どうすればうまくいくのでしょうか?宜しくお願いします。

  • mainの外に変数 vs ポインタ渡し

    C++についての質問です。プログラミング初心者ですが、よろしくお願いします。 最近、関数の外側でも変数を宣言できることを知りました。関数の外側で変数を宣言すると、全ての関数でその変数にアクセスすることができ大変便利なように思います。 「わざわざポインタ渡しなどする必要はないのでは?」と思ってしまいました。 これは何か問題があるのでしょうか? 初心者の言葉で説明しても理解しにくいかと思いますので、例として「足し算するプログラム」を以下に記載します。 ポインタ渡しで書くと、以下のような感じになるかと思います。 //●ポインタ渡し #include "stdafx.h" #include <iostream> void func(int x,int y,int *pans){ *pans = x+y; } void main(){ int a=10, b=20, ans; func(a,b,&ans); std::cout << ans << std::endl; } しかし、mainの外に変数を宣言すれば //●mainの外に変数 #include "stdafx.h" #include <iostream> int a,b,ans; void func(int x,int y){ ans = x+y; } void main(){ a=10; b=20; func(a,b); std::cout << ans << std::endl; } ansをポインタ渡しする必要なく、funcの計算結果をansに代入できました。 「●mainの外に変数」のプログラムはどのような問題や危険性を孕んでいるのでしょうか? 以上になります。長文お読みいただきありがとうございました。 よろしくお願いいたします。

  • char型変数のアドレスを coutで表示するには

    #include <iostream> using namespace std; int main() { bool b; int i; short s; long l; float f; double d; char c; //上で宣言した変数のアドレスを表示 cout << "bool &b " << &b << endl; cout << "int &i " << &i << endl; cout << "short &s " << &s << endl; cout << "long &l " << &l << endl; cout << "float &f " << &f << endl; cout << "double &d " << &d << endl; cout << "char &c " << &c << endl; //「char &c 」とのみ表示される cout << '\n'; //char型のみ printf で再表示 printf("char &c %p\n", &c); //「char &c ********」と表示される return 0; } 上のプログラムを実行すると cout << "char &c " << &c << endl; のところだけ、アドレスが表示されません。 printfを使えば、char型の変数のアドレスも表示されるのですが…。 coutを使ってchar型のアドレスを表示させるにはどうすればいいのでしょうか。 よろしくお願いします。

  • 下記、プログラム内の「char *」の役割

    C++初心者です。 縦長になってしまいますが、 『 #include <iostream.h> void show(int); void show(double); void show(char *);   ←左記の記述の使い方 int main(void) { show(1); show(0.25); show("文字列"); return 0; } void show(int x) { cout << x << endl; } void show(double y) { cout << y << endl; } void show(char *z) { cout << z << endl; } 』 のプログラムにおいて、「char *」の使い方がいまいち理解できません。 上記プログラムですとエラーが表示されないのですが、下記のプログラムだとエラーが発生します。 『 #include <iostream.h> void show(int); void show(double); void show(char);   //←---------上記と違う行 int main(void) { show(1); show(0.25); show("文字列"); return 0; } void show(int x) { cout << x << endl; } void show(double y) { cout << y << endl; } void show(char z) {  //←---------上記と違う行 cout << z << endl; } 』 なぜ、ポインタ(*)を付けないといけないのか分かりやすく教えていただけましょうか。

  • C++の問題の問題なんですが

    a = 3+aを代入演算子を用いて表現せよ。ってどうすればいいんですか? a+=3;ですか? 以下のように出力されるプログラムを作成せよ 年齢を入力してください 16 生まれた年を入力してください 1986 好きな数字を入力してください 7 あなたは1986年生まれの16才で、7が好きですね #include <iostream> using namespace std; int main(){ cout << "年齢を入力してください\n" << 16 << endl; cout << "生まれた年を入力してください\n" << 1986 << endl; cout << "好きな数字を入力してください\n" << 7 << endl; cout << "あなたは1986年生まれの16才で、7が好きですね" << endl; return0; } 上の問題にcinを一度だけ使って表現せよ 1番最初のプログラムはこうでいいのかなと思うんですが、次のcinを一度だけ使って表現せよって言うのが分かりません。実行結果も含めて教えてもらえませんか?

  • 初心者です。エラーが分かりません。

    エラーが二つ出てしまいます。 自分ではよく分からなく、図々しく質問しました。 誰か助けてください。 #include<iostream> using namespace std; double fan(double,double angle=360.0); /* angleはデフォルト360 */ double fan(double r, double angle){ return 3.1415926*r*r*angle/360.0; /* 面積を返す */ } int main(void){ double r,angle; cout << "半径を入力してください。 : "; cin >> r; cout << "角度を入力してください。 : "; cin >> angle; cout << "半径 : " << r << " 角度 : " << angle << endl; cout << "面積 : " << fan(r,angle) << endl << endl; cout << "半径 : " << r << " の円なら" << endl; cout << "面積 : " << fan(r) << endl; return 0; }

  • 質問です。。。

    いつもすみません。また質問させていただきます。 まずしたのプログラムを見てください・・・ #include <iostream> #include <string> using namespace std; int main() { string name; int tosi; cout << "こんにちは。私はコンピュータです。" <<endl; cout << "あなたの年齢を教えてください" <<endl; cin >> tosi; cout<<name<<"歳なんですか・・・老けてますね(笑)"<<endl; cout << "どこの学校ですか" <<endl; cin >> name; cout<<name<<"That's right!"<<endl; } このプログラムの8行目にあるint tosi;がありますよね。 この単語がなくても string name があったら12行目のプログラムができたのですが、どういうことなのでしょうか? 表現が一部変ですがよろしくお願いします。

  • コンストラクタについて

    クラスを学んだため面積と体積を計算するプログラムを試しに作ってみました。面積を計算するクラスとその派生の体積です。見ずらいでしょうが以下プログラムを載せます。 この時 「エラー E2251 class.cpp 40: 基本クラス 'area' を初期化するデフォルトコンストラクタが見つからない(関数 volume::volume(int) )」とエラーが出ます。 何が原因でしょうか? その他プログラムについてのコメントをお願いします。 #include <iostream.h> class area{ protected: int x,y; public: area (int i, int e); int thearea(); int area::set (int i, int e); }; area::area(int i, int e) { cout <<"construct for area is running"<<endl; set (i, e); } int area::set (int i, int e) { x=i, y=e; return 0; } int area::thearea (){ return x*y; } class volume:public area{ int z; public: volume (int d); thevolume (); }; volume::volume(int d) {cout <<"construct for volume is running"<<endl; z=d; } int volume::thevolume (){ return area::thearea()*z; } int main() { int a, b,d; cout<<"a"; cin>>a; cout<<"b"; cin>>b; area c(a, b); cout << "the area" <<c.thearea(); cout<<"next d"; cin>>d; cout<<"volume"; volume t (d); cout << t.thevolume(); return 0; }

専門家に質問してみよう