コンパイルエラーの原因と解決方法

このQ&Aのポイント
  • コンパイルエラーが発生しています。
  • コードの中に問題がある可能性があります。
  • 解決方法を教えてください。
回答を見る
  • ベストアンサー

コンパイルエラーです。

#include <stdio.h> #include <time.h> int main() { float a = 1; float b = 1; clock_t start, end; for(a <= 9999; a++) for(b <= 99999; b++) printf("%fx%f=%f\n",a, b, a*b); end = clock(); printf("[4x4]\n####################\n%fs\n####################\n",(double)(end - start) / CLOCKS_PER_SEC); return 0; } エラーが起きるのですが、僕には、どこが間違っているのかわかりません。 教えてください。

  • mapig
  • お礼率10% (3/29)

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

  • ベストアンサー
  • bypass000
  • ベストアンサー率100% (1/1)
回答No.5

forの作りがおかしいです、動作させるには for( ; a <= 9999 ; a++ ) for( ; b <= 99999 ; b++ ) ではないかと。 あと、startに何も数値を入れていないので中身がNULLのままです。 このままでは欲しい結果は得られないと思います。

その他の回答 (5)

  • bypass000
  • ベストアンサー率100% (1/1)
回答No.6

間違えました、NULLではないですね。ただ適当な値が入っています

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

>for(a <= 9999; a++) >for(b <= 99999; b++) for文のカッコの中には、セミコロンが2個必要です。 ところで、float型の変数をa++とかでインクリメントすることは あまり一般的でないように思います。ていうか、本当にできるんだろうか…。 整数型の変数に対しては、ごく一般的な方法なんですけどね。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

追記。 むしろ、やっかいなのは、「エラーにならないけど、期待通りに動かない」ものです。 このプログラムにも、そんな間違いがあります。 変数start って、いくつになっていると思いますか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

エラーメッセージが出て、そこにエラーが発生している行数とか出ているはずです。 別の箇所の記述が原因で、指摘箇所でエラーになる、という難しいケースもありますが 今回は、エラー箇所に問題があります。 しかも、極々単純な間違いです。 forの使い方を勉強してください。

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

>エラーが起きるのですが、僕には、どこが間違っているのかわかりません。 教えてください。 どんなエラーが起きてるんですか? エラーメッセージの内容を理解しようともせずに「エラー」の一言で済ませてる間は自分で間違いを見つけられるようにはならないですよ。

関連するQ&A

  • それぞれの暗算にかかった時間

    このプログラムは3つの数字の和を暗算させるプログラムです。 プログラムでは、10回の暗算にかかった合計時間を表示させて います。 質問としては「それぞれの回数にかかった時間をそれぞれ 表示させるにはどうすればいいのかか?」です。 #include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int a,b,c,i,n; int num; clock_t start,end; srand(time(NULL)); printf("暗算トレーニング開始!!\n"); start=clock(); for(i=0;i<10;i++) { a=10+rand()%90; b=10+rand()%90; c=10+rand()%90; n=rand()%17; printf("%d%*s+%*s%d%*s+%*s%d:",a,n,"",n,"",b,n,"",n,"",c); do{ scanf("%d",&num); if(num==a+b+c) { break; } printf("\a違います。再入力してください。\n"); }while(1); } end=clock(); printf("%.1f秒かかりました。\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }

  • 素因数分解のプログラムを作成しました。

    素因数分解のプログラムを作成しました。 なぜか11桁を超えた場合、正しく表示されません!! アドバイス等お願いします。 あと、処理時間も組んでみましたがこちらもうまくいきません。 改善をお願いしますm(_ _)m #include<stdio.h> #include<time.h> void fanction(int); void main(void) { int n; clock_t start_time, end_time; printf("整数を入力してください。\n"); scanf("%d",&n); start_time = clock(); fanction(n); end_time = clock(); printf("\n\n処理時間:%.3f秒\n",(double)(end_time - start_time) / CLOCKS_PER_SEC); return 0; } void fanction(int n) { int m; char c='='; for(m=2;n != 1;m++) { while(n%m == 0) { n = n/m; printf("%c%d",c,m); c='*'; } } }

  • クイックソートの処理速度に関する実験 要素1万個、

    クイックソートの処理速度に関する実験 要素1万個、2万個、3万個の配列変数にランダムな値を代入し、・その後クイックソートで小さい順に並べ替える #include<stdio.h> #include<stdlib.h> #include<time.h> #define ASIZE 10000 #define RAND_SEED 0x1131000 void my_sort(int left, int right, int a[]); int main(void){ clock_t start, end; int i,a[ASIZE]; srand(RAND_SEED); for(i=0;i<ASIZE; i++){ a[i]=rand(); } start=clock(); my_sort(0, ASIZE-1, a); end=clock(); printf("%.3f秒でした" ,(end-start)/(double)CLOCKS_PER_SEC); getchar(); return 0; } void my_sort(int left, int right, int a[]){ ここに入れるプログラムがわかりません return; }

  • clock関数での経過時間計測

    clock関数でプログラムの時間を計測しようと思っているのですがうまくいきません。 ----------------------------- clock_t start,end; start = clock(); (処理) end = clock(); printf("かかった時間:%f",(double)(end-start)/CLOCKS_PER_SEC); ----------------------------- 上のようにしているのですが、実行結果は0.00000秒と出てしまいます。処理のところは足し算を何題か出題し解答を入力し正解したら次の問題というようなことをしています。 確認のためstartにclock()を代入した後とendに代入したあとでprintfでstartとendを出力してみましたが、どちらの値も10.00000で同じ値となっています。0秒になるのはこれのせいだと思うのですが、どうして同じ値になるのでしょうか?

  • Enterキーの入力

    今、RedHatLinuxでC言語を学んでいます。ゲームを作る宿題を与えられえ取り組み始めたのですがどうも最初からつまずいてしまいました… #include <stdio.h> #include <time.h> void main(void){ while(1) printf("%f\n",(float)clock()/CLOCKS_PER_SEC); } をENTERキーが入力されたところで停止する(無限ループから抜ける)ようにしないと話が進まないのです。 この先の、ファイルへの入出力などはフローチャートを書いてある程度予想できてるのですが、ENTERキーを入力するところがわかりません。どうか教えてください!

  • c言語でDFTのプログラムを作成したのですが

    c言語でDFTのプログラムを作成しました。 以下にソースを載せます。 #include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> #define PI 3.141592653589793 #define N 64 //データ数 DFT(double result[]){ int i,k; double A[N],B[N],T=0; //A[N]:実数部,B[N]:虚数部 double a,b; for(k=0;k<N;++k){ a=b=0; for(i=0;i<N;++i){ a=a+result[i]*cos(2*PI*i*k/N);      b=b+(-1.0)*result[i]*sin(2*PI*i*k/N); } A[k]=a/N; B[k]=b/N; } for(i=0;i<N;++i){ printf("[%f秒]:Re:%f,Im:%f\n",T,A[i],B[i]); //変換後の値を表示 T=T+(0.1/N); } } main(){ int i; double T=0; double Sampdata; double result[N]; for(i=0;i<N;++i){ Sampdata=5*sin(20*PI*T);      //0~0.1秒間をN個にサンプリング result[i]=Sampdata; //サンプリングデータを代入 T=T+(0.1/N); } clock_t start,end; //処理時間計測開始 start=clock(); DFT(result); end=clock(); printf("%.2f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC); //処理時間表示 } 元信号には5sin(20πt)の値を入れています。この信号は周期は0.1secです。 これでフーリエ変換を行うとデータ数N/2を中心に対称なデータが出てくるのですが、処理が終わるのが早い気がするんです。 例えば2^15個のデータで実行しても2分もかからずに処理が終わってしまいます。一応、対称性が出てるとはいえ、終わるのが早すぎる気がするのですが、おかしい所があれば教えていただけると嬉しいです。 よろしくお願いします。

  • clock関数は正確じゃないの?

    clock関数で時間を計測するとどうも狂ってしまいます。 おかしいので、このようなプログラムでclock関数の精度を調べてみました。 #include <stdio.h> #include <time.h> int main(){     int i,j;     clock_t start;     for(i=0;i<50;i++){         start = clock();         for(j=0;j<3000000000;j++);         printf("%4.3f秒\n",(double)(clock()-start)/CLOCKS_PER_SEC);         }     return 0; } このプログラムの実行結果はこちらです。 1.672秒 1.672秒 1.672秒 1.672秒 1.687秒←● 1.672秒 1.672秒 1.672秒 1.672秒 1.672秒 1.671秒 1.672秒 1.672秒 1.672秒 1.688秒←● ・・(略) 若干1.672で落ち着いているかと思いきや、時々狂っています。 この狂いは何が原因なんでしょうか? しかも狂うときは0.01位、結構ガツンと狂います。 しかもその狂い←●が等間隔で現れるのかと思いきや、そうでもありません。 この一見そろっているようで、時々ガツンと狂うのは何故なんでしょうか?

  • clock()関数の誤差

    プログラムの実行時間の計測について質問させていただきます。 現在,実行時間の計測でclock()関数を使っているのですが誤差が出ます。 timeコマンド(と実際に時計で測った時間)では95分、clock()関数で測った プログラム全体の実行時間は1376秒(約23分)と誤差が出る状態にあります。 プログラムでclock()関数を使っているのはmain()だけです。 printf()内がおかしいのでしょうか? 詳しい方、回答よろしくおねがいします。 ↓プログラム #include<time.h> (中略) clock_t t1,t2,t3,t4; (中略) main() { struct zahyo P,Q; int a,b,prime,Ord,sec; scanf("%d",&a); (中略) printf("Q.y = "); scanf("%d",&Q.y); t1=clock(); Ord=OrdCal(P,a,prime); t2=clock(); printf("Ord = %d\n",Ord); printf("OrdCal:%f(s)\n",(double)(t2-t1)/CLOCKS_PER_SEC); t3=clock(); PohlingBsgs(P,Q,a,prime,Ord); sec=secretkey(); t4=clock(); printf("secretkey=%d\n",sec); printf("Decipher:%f(s)\n",(double)(t4-t3)/CLOCKS_PER_SEC); printf("Total :%f(s)\n",(double)(t4-t1)/CLOCKS_PER_SEC); } 実行結果 Ordcal:74.170000(s) Decipher:1302.722704(s) Total :1376.902104(s) real 94m33.445s user 94m30.900s sys 0m0.980s

  • 4桁の英字の3桁目を当てるプログラム

    乱数でとってくる4ケタの英字の3桁目を入力して当てるプログラムを 組もうとしているのですが、コンパイラしてもいまいちうまくいきません。 特に下に書いたプログラムのこの部分が違っていると思い どのように修正したらよいのか指摘していただきたいです。 human=getchar(); if(comp[2]!=human) { ero=1; } よろしくお願いします。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> int sleep(unsigned long x) { clock_t c1=clock(),c2; do{ if((c2=clock())==(clock_t)-1) { return 0; } }while(1000.0*(c2-c1)/CLOCKS_PER_SEC<x); return 1; } int main(void) { int num,val,i,j; char comp[21]; char human; int ero=0; int try_count=0; int seikai=0; clock_t start,end; int num1; char eiji[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; srand(time(NULL)); puts("英字記憶トレーニング"); do{ printf("挑戦するレベル(3~20):"); scanf("%d",&num1); }while(num1<3 || num1>20); printf("%d個の英字を記録しましょう。\n",num1); start=clock(); do{ for(i=0;i<num1;i++) { comp[i]=eiji[rand()%strlen(eiji)]; } comp[num1]='\0'; printf("%s",comp); fflush(stdout); sleep(125*num1); printf("\r%*s\r3番目の英字を入力してください:",num1,""); human=getchar(); if(comp[2]!=human) { ero=1; } if(ero==0) { printf("正解です。\n"); seikai++; } else { printf("\a間違いです。\n"); } try_count++; }while(try_count<2); end=clock(); printf("%d回中%d回成功しました。\n",try_count,seikai); printf("%.1f秒でした。\n",(double)(end-start)/CLOCKS_PER_SEC); return 0; }

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

    #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関数使わないでもっと速く動かしたいのですが、やり方がわかりません。 教えて下さい!お願いします。

専門家に質問してみよう