• 締切済み

C# 計算

int i = 1 / 2 * 100; という計算式をソースに書いた際 変数iには50が入ってほしいのですが… 変数iには0が入ってしまいます。 double = 1.0/2.0*100 にすれば、50になりますが、int型で解決したいと思っています。 BackgroundWorker.ReportProgressの引数にしたい為です。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.1

intで計算してるなら当然です。 1 / 2 * 100 → 0 * 100 → 0 ですので演算の優先順位も考慮して 100 * 1 / 2 にしましょう。

関連するQ&A

  • (C,C++言語)関数の引数は自動キャストされる?

    プログラミング言語C,C++の数値計算に関する質問です. 整数データ変数同士のみの計算結果は小数点以下は切り捨てられますよね. もし実数型で計結果を得たいときは,int変数を(double)や(float)でキャストしてあげなければならないことは知っています. ここで,仮引数リストにdouble型変数が設定されている関数の引数にint型変数を与えた時,関数の呼び出し時にキャストしなくても自動でキャストされるのでしょうか. 以下のサンプルコードを作成し,実行してみた結果を次に示します. ---サンプル--- #include <iostream> using namespace std; void printDouble(double val, double val2) { cout << "(double)val = " << val / val2 << endl; } int main(void) { for (int i = 1; i < 5; i++) { cout << i / (i * 2) << endl; printDouble(i,i*2); } } -----実行結果---- 0 (double)val = 0.5 0 (double)val = 0.5 0 (double)val = 0.5 0 (double)val = 0.5 ------------------------- 関数の外での計算は整数に丸められてしまうので i / ( i * 2 ) 計算結果はゼロに,関数の中では与えられた i はdouble型として扱われるので小数点以下の値も残っているということですよね. この場合,printDouble関数へ整数を与えるときには printDouble( (double)i , (double)( i * 2 ) ); といったようにわざわざキャストしなくても自動で仮引数の型でキャストされて関数が呼び出されると理解してもよいのでしょうか. 実行結果から明らかだろ,思われてしまうかもしれませんが,何かの参考書に記述されているのを見たり,人からそう教わったわけではなく,また関数のオーバーロードのこともありますので,質問させて頂きました.よろしくお願いいたします.

  • C言語から質問です。

    C言語から質問です。 /* main関数の中で初期化した配列 data[10]={60,30,70,25,20,9,92,55,20,10}; を関数 keisan() に引数として渡して、関数keisan()内で 平均値、最大値,最小値 を求め、その結果をmain関数に戻し、main関数内で 平均値、最大値,最小値を表示させるプログラムを作成せよ。 int keisan(const int data[], int data_kosuu, double answer[]) { return 0; } とする。 (注) プロトタイプ宣言を用いよ。 ヒント:平均値,最大値,最小値の3つの値を main関数に戻すやり方として、配列answer[]を使うとよい。 data_kosuu は、配列の要素数を与えるものです。 ヒント: (int型の変数)/(int型の変数)=int型の値です。 int型同士の割り算の答えANSWERをdoubleにしたい場合は、  ANSWER=(double)(int型の変数)/(int型の変数);    と(double) キャストという操作をする必要がある */ #include <stdio.h> int keisan(const int data[], int data_kosuu, double answer[]); int main(void) { int i; int a[10]={60,30,70,25,20,9,92,55,20,10}; // この値を使ってください double ans[3]; keisan(a,10); /* keisan関数に配列と配列要素数を引数で与える */ for(i=0; i<10 ; i++) printf("a[%d]=%d\n",i,a[i]); printf("平均=%lf 最小値=%d 最大値=%d\n",ans[0],ans[1],ans[2]); return 0; } /* 合計・最大値・最小値を求める関数 */ int keisan(const int data[], int data_kosuu, double answer[]) { int i; int sum; int min,max; min=10; /* min の初期化 */ max=10; /* max の初期化 */ sum=0; /* 合計値の初期化 */ for (i=0; i<10 ; i++){ sum = sum+data[i]; if(data[i] > max) max=data[i]; if(data[i] < min) min=data[i]; } sum=sum/10; answer[0]=sum; answer[1]=min; answer[2]=max; } エラー error C2198: 'keisan' : 呼び出しに対する引数が少なすぎます。 とでて先に進めません。 教科書などを見ても間違いがわかりません; 虫食いになってるところを自分なりにやってみたため、 根本的に間違ってるかもしれませんが、 どうかアドバイスや指摘などをお願いします。

  • C言語で内積、、、わかりません。

    C言語で内積、、、わかりません。 /* double配列 vecter1 のデータと double配列 vecter2 のデータ、 および、 vecter1,vecter2 の「要素数」を関数 naiseki_f に 引数として渡す。 関数 naiseki_f 内では、 vecter1 と vecter2 とによる 「double型の内積値」を計算し、その結果を戻り値とするものである。 main関数内では、関数naiseki_fで計算した「内積値」を printf表示させるプログラムを作成せよ。 */ /* 配列の合計を求める */ #include<stdio.h> double naiseki_f(const int vecter1[],const int vecter2[]); int main(void) { int i,kosuu=10; double vecter1[10]={0.5,0.48,0.54,0.32,0.32,0.46,0.88,0.45,0.90,0.23}; double vecter2[10]={0.24,0.34,0.26,0.78,0.43,0.67,0.88,0.95,0.45,0.75}; double a; a=naiseki_f(vecter1,vecter2); /* ベクトルの内積計算 */ for(i=0; i<kosuu; i++) printf("%5.3f %5.3f\n",vecter1[i],vecter2[i]); printf("内積=%8.3f\n",a); return (0); } /* 内積を計算 */ double naiseki_f(const int vecter1[],const int vecter2[]) { int i; double ###; ############; for(i=0 ; i<10 ; i++) ################# ; return (######); } かれこれ2時間くらい悩んでいるんですが 内積をどうやって計算するのか資料をみてもわかりません、、。 main関数内は自分が入力した部分もあるので多少間違ってるかもしれません。 よろしくお願いします。

  • C++関数の仮引数について

    関数の引数に配列を指定したいのですが たとえば、 double* point[4]; void setPoint(double _point[]) { for(int i = 0; i < 4; i++){ point[i] = (_point + i); } } int main(void) { setPoint((double[])(1.0, 2.0, 3.0, 4.0)); } '型キャスト' : 'double' から 'double []' に変換できません。 とエラーが出てしまいます。 どのようにすればよいでしょうか?

  • 外部変数について

    今Vine Linuxを使ってC++でプログラムを書いているのですが教えて頂きたいことがあります. C++の初心者の為,変なことをお聞きしますがお許しください. extern宣言で他のソースのローカル変数を参照する方法はないのでしょうか? 例えば,a.cとb.cというソースがあったとします. a.cの関数内でint i;と宣言されている変数をb.cからextern int i;という風にしたいのですが, こうするにはa.cでグローバル変数としてint i;を定義する以外方法はないのでしょうか? できればグローバル変数を使いたくないのですがこれ以外では無理でしょうか? あともう一つお聞かせ下さい. メイン関数の引数を別の関数,またはソースで使うということはできないのでしょうか? int main( int argc, char *argv[] )のargv[1]というのを別の関数で使用したいのですがこれも無理でしょうか? 馬鹿な質問だとは思いますが,どなたかお答え頂けますでしょうか? よろしくお願いします.

  • C++に関する質問です

    #include <stdio.h> double calave (double [ ] ); double calmax (double [ ] ); main () { int i; double average,maximum; double a[5]; for ( i=0;i<=4;i++) { printf ("Input data %d\n", i ); scanf ("%lf",&a [i] ); } average = calave (a); maximum = calmax (a); printf ("Average = %lf\n", average); printf (" Maximum = %lf\n", maximum); } double calave (double x [5]) { int i; double ave; ave = 0; for (i=0; i<=4; i++) { ave = ave + x[i]; } ave = ave /5.0; return (ave); } double calmax (double x[5]) { int i; double max; max = x[0]; for ( i=0; i<=4; i++) { if ( max >= x [i] ){ max = max; }else{ max = x[i]; } } return (max); } 上のプログラムでは,関数calaveに入力している配列変数はa[ ]だが,関数calave内で使用している配列変数はx[ ]であり,名前が違う変数である。これが,プログラム上は問題ない理由を教えてください。 よろしくお願いします。

  • C言語の配列とポインタについて

    C言語の配列とポインタについてわからないことがあります。 以下のソース例は、10個の値の平均値を求めるプログラムです。 コメントを挟んだ部分が疑問点です。 【ソース例】 #include <stdio.h> int getaverage(int *data); int main(void) { int average,array[10] = {15,78,98,15,98,85,17,35,42,15}; average = getaverage(array); printf("%d\n",average); return 0; } int getaverage(int *data) { int i,average = 0; for (i = 0;i < 10;i++) { average += data[i]; /*ポインタ変数なのに? */ } return average / 10; } 【実行例】 49 このdata[i]はポインタ変数であり、 配列arrayの i 番目の要素であるarray[i]の"アドレス" が代入されているはずだと思うのですが、 なぜ通常の整数変数であるaverageと数値計算が出来、正しい結果が出たのでしょうか? あたかもdata[i]には、 array[i]の"アドレス"ではなく、 array[i]の"メモリの中身"が代入されているようです。 どういうことでしょうか? 回答よろしくお願いします。

  • C#の予測変換についての質問です

    C#でプログラムのソースコードを書いているときiという変数と型名のintをよく使うのですが(エディタはVisual studio)iと変数をうった後に続きを書こうとすると予測変換で型名のintが入力されてしまいます。候補でintがでるのはいいのですが、何か打ったときにintが入力されるのは困ります。VisualStudio初心者なので細かく教えていただけるとありがたいです

  • 大きな桁の計算はどうやるの?

    double型で計算しきれない桁数のの計算はどうすればいいのでしょうか。 4桁の問題を80問やったときにまぐれで全問正解する確率を計算したいのですが int i; double x=4; for(i=1;i<80;i++){ x = x * 4; } printf(" %f 分の1 \n",x); これでは結果が e と出てしまって計算できません。 どなたか教えてください><

  • froat型

    int型の変数iとjに100000000を代入し、float型の変数rを宣言し、   r = (i + j + 1); を計算するとrは200000000.000000になりdouble型の変数uを宣言し、   u = (i + j + 1); を計算するとuは200000001.000000になりました。 何故そうなるのかわかりません。教えてください。

専門家に質問してみよう