• ベストアンサー

大学の課題で2のx乗で10000を越えるのはいくつ

という課題を受けました。どこが悪いのか見ていただけないでしょうか。 #include<stdio.h> #include<math.h> main() { double x,kazu; kazu=1.0; x=0.0; while(kazu>10000); { double kazu=pow(2.0,x); printf("%f日で%f個となる。\n",x,kazu); x=x+1; } }

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

kazuが10000.o未満の間実行するというのが、正解ですが、 10000.0を超えた値も1回は表示したいというのが趣旨なら 以下のようにしてください。 ------------------------------------- #include<stdio.h> #include<math.h> main() { double x,kazu; kazu=1.0; x=0.0; do { kazu=pow(2.0,x); printf("%f日で%f個となる。\n",x,kazu); x=x+1; }while(kazu < 10000.0); } ------------------------------------ 以下、実行結果です。 0.000000日で1.000000個となる。 1.000000日で2.000000個となる。 2.000000日で4.000000個となる。 3.000000日で8.000000個となる。 4.000000日で16.000000個となる。 5.000000日で32.000000個となる。 6.000000日で64.000000個となる。 7.000000日で128.000000個となる。 8.000000日で256.000000個となる。 9.000000日で512.000000個となる。 10.000000日で1024.000000個となる。 11.000000日で2048.000000個となる。 12.000000日で4096.000000個となる。 13.000000日で8192.000000個となる。 14.000000日で16384.000000個となる。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

Xは整数ですか?浮動小数点数ですか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

> while(kazu>10000); - ケツの';' 不要(つか、書いちゃダメ) - 条件が逆 > double kazu=pow(2.0,x); - 'double'は不要(つか、書いちゃダメ)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • なぜかうごきません

    #include<stdio.h> #include<math.h> int main() { double x; printf("%10s%10s%10s%15s%20s\n","x","log(x)","sqrt(x)","exp(x)","pow(10.0,x)"); for(x=1.0;x<10.0;x++) printf("%10.5f%10.5f%10.5f%15.5f%20.5f\n",x,log(x),sqrt(x),exp(x),pow(10.0,x)); return 0; } がどうしてもうごきません。 log,sqrt,exp,powが認識されないようです。定数なら大丈夫ですが、for文で変数を走らせると駄目になります。なぜでしょうか?

  • 最速化するにはどうしたらいいでしょうか?

    #include <stdio.h> #include <math.h> #include <time.h> double abssucc(double x){ return x / (1 - pow(2,-53)); } double abspred(double x){ return x * (1 - pow(2,-53)); } double succ (double x){ if(abs(x) < pow(2,-1022)) return x + pow(2,-1074); if (x >= 0) return abssucc(x); else return abspred(x); } double pred(double x){ if(abs(x) < pow(2,-1022)) return x - pow(2,-1074); if (x >= 0) return abspred(x); else return abssucc(x); } int main(){ clock_t start, end; double r= 0; int i=0; start = clock(); for(i;i<1000000;i++){ r= succ(1); printf("%.50f\n",r); }end = clock(); printf("ループ100万回の時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC); } このプログラムをpow関数使わないでもっと速く動かしたいのですが、やり方がわかりません。 教えて下さい!お願いします。

  • 学校の課題で

    sin,cos,tanを0~90度を出せっていわれたのですが #include <stdio.h> #include <math.h> main() { int N; float x; char *line="-------------------------------------\n"; printf(line); printf("%3s %5s %10s %13s \n", "kakudo", "sin","cos","tan"); for(N=0; N<=90; ++N) { x=N*3.14159265358979323846264338327950288/180; if(N%10==1) { printf(line); } if(N=90) { tan(N)= ; } printf("%3d %7.6f %10.6f %13.6f \n", N, sin(x), cos(x), tan(x)); } printf(line); } で出ません。 間違いは if(N=90){tan(N)= ;} の部分なのですが、どうすれば出せますか?

  • どこがおかしいのでしょうか?

    #include <stdio.h> #include <math.h> #include <time.h> double pow_2_53 ; double pow_2_1022 ; double pow_2_1074 ; double abssucc(double x){ return x / (1 - pow_2_53); } double abspred(double x){ return x * (1 - pow_2_53); } double succ (double x){ if(abs(x) < pow_2_1022) return x + pow_2_1074; if (x >= 0) return abssucc(x); else return abspred(x); } double pred(double x){ if(abs(x) < pow_2_1022) return x - pow_2_1074; if (x >= 0) return abspred(x); else return abssucc(x); } int main(){ pow_2_53 = pow(2,-53); pow_2_1022 = pow(2,-1022); pow_2_1074 = pow(2,-1074); clock_t start, end; double r= 0; int i=0; start = clock(); for(i;i<1000000;i++){ r= succ(1); printf("%.50f\n",r); }end = clock(); printf("ループ100万回の時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC); } このプログラムを動かしたいのですが、動きません。どこがおかしいのでしょうか? 教えて下さい!

  • プログラミング言語がわかる方に質問します。

    「直角三角形の斜辺を求めるプログラミングをつくれ」ということでプログラミングをしたのですが、 sqrtの使い方がわからずに挫折して、教科書に書いてあったものを入力してみたのですが、 どうも実行してもうまく結果が出ないようです。 以下、教科書の丸写しなのですが、どこがおかしいか指摘していただければありがたいです。 ------------------------------------------------------------------------------ #include <stdio.h> #include <math.h> main() { double x,y,z; puts("直角三角形の斜辺を求めます。"); printf("底辺->"); scanf("%1f",&x); printf("高さ->"); scanf("%1f",&y); z = sqrt (pow(x,2) +pow(y,2) ); printf("斜辺 %.2f\n",z); } ------------------------------------------------------------------------------ 実行結果 直角三角形の斜辺を求めます。 底辺->3 高さ->4 斜辺 0.00←ここが5.00にならなければおかしいのですが、どうしても0.00になってしまいます。 回答の程をよろしくお願いします。

  • C言語のpow関数の不具合

    linux(ubuntu)の上でgccを使っています。 powの関数がおかしいです。 pow(10,-1)を計算させると正しく1e-1が出力されます。 #include <math.h> #include <stdio.h> int main(void){ double x = -1; printf("%f",pow(10,x)); return 0; } 上記のプログラムを走らせると、 In function "main"; *****.c:(.text+0x2d):undefined reference to 'pow' collect2: ldはステータス1で終了しました。 というエラーメッセージがでます。 なぜかpow関数の中に変数を入れるとプログラムが動きません。

  • うまく出力されない

    #include <stdio.h> #include <math.h> int main(void) { int j=0; double t,i[500]; for(t=0;t<=20*pow(10,-3);t=t+(0.04*pow(10,-3)) ){ i[j]=(3.9*pow(10,-12)*5*pow(10,3)*(sin(314*(t+(0.04*pow(10,-3))))-sin(314*t)))/(0.04*pow(10,-3)); printf("%3d %1.10f\n",j,i[j]); j++; } } これを出力させたところ、202番以降からしか表示されませんでした。 これはなぜなのでしょうか? 分かる方がいたら、ぜひ、解決法を教えてもらえませんか? 宜しくお願いします。

  • γ関数のプログラム(初心者です)

    以下のようにγ関数のプログラムを組みました。 とりあえず整数値を入力すれば、正しい値は返しているということがprintfの4で確認できました。 もとはfortranで組んだプログラムをCに置き換えました。 ですが、実際走らせてみると、4で値は確認できますがsegmentation faultが出てしまいます。 ですからサブルーチンファイル(ユーザー関数?)として利用できません。 何がいけないのでしょうか? 正しくyが帰ってくるようにどうなおしたらよいのか教えてください。 #include <stdio.h> #include <math.h> double gamma(double x) { double c[8],y,a,r,b,s; int i; a=1.; r=1.; c[1]=5.771916e-01; c[2]=9.882058e-01; c[3]=8.970569e-01; c[4]=9.182068e-01; c[5]=7.567040e-01; c[6]=4.821993e-01; c[7]=1.935278e-01; c[8]=3.586834e-02; printf("0 %f\n",x); while(1){ if(x>2.){ x=x-1.; a=a*x; printf("1 %f %f\n",x,a); } else if(x<1.){ a=a/x; x=x+1.; printf("2 %f %f\n",x,a); } else{ break; } } x=x-1.; for(i=1;i<8;i++){ b=(double)(i); s=(c[i]*((double)(pow(-1,b))) *((double)(pow(x,b)))); printf("3 %d %f\n",i,c[i]); r=r+s; } y=a*(r+(0.03586834*((double)(pow(-1,8)))*((double)(pow(x,8))))); printf("4 %f\n",y); return y; } main() { double x,y; printf("数字を入力してください。"); scanf("%lf",&x); printf("メインプログラム %lf\n",x); y=gamma(x); printf("%f\n",y); }

  • C言語課題(数値計算)お願いします。

    課題内容 ニュートン法を用いて√2の値を求められるプログラムを作る。 10ケタまで表示する。 書いてみたソースコード #include <stdio.h> #include <stdlib.h> #include <math.h> #define max 1000 //最大繰り返し回数 #define eps 1.0e-10 //収束条件 double f(double x); double df(double x); void newton(void); int main() { newton(); return 0; } void newton(void) { int count; double a,newa; count=0; printf("初期値を入力してください。\n"); scanf("%lf",&a); for(;;) { count++; newa=a-f(a)/df(a); if(fabs(newa-a)<eps) break; a=newa; if(count==max) { printf("収束しませんでした。\n"); exit(1); } } printf("解の値は %f\n収束するのに %d 回かかりました。\n", newa,count); } double f(double x) { return x*x-2; } double df(double x) { return 2x; } コンパイルできません。 間違いとどうすればよいかを教えていただけるとありがたいです!!!

  • 自然対数の底を求める

    自然対数の底eを、第n項まで求めるプログラムを作成するのですが #include <stdio.h> #include <math.h> int main(void) { double e, x, k; int n=2*k-1; if(k==0) return(0.0); return(pow((x-1)/(x+1), n)/n + add(x, k-1)); double x=5.0; x = add(x,20)*2.0; printf("f(5.0)=%f\n",x); }if ( x >= 1 ) { printf("整数を%d個入力してください--->", x); for ( k = 0 ; k <= x-1 ; k++) { scanf("%d", &a); s += a ; } printf("これらの数の合計は%dです\n", s); } else { printf("この値は不適です\n"); } return 0; このようなプログラムを作ってみたのですが自分でも理解できていない状態です。 e=1+1/1!+1/2!+1/3!…1/n! の再帰呼出しを使いたいのですが、アドバイスお願い致します。