• ベストアンサー

Cプログラムの質問

S117の回答

  • S117
  • ベストアンサー率40% (18/45)
回答No.3

>初心者なので、どこが間違っているのかわかりません。教えてください。 プログラミングを学び始めたばかりの場合、バグに遭遇したのなら、とにかく変数のトレースをしましょう。トレースとは、変数がどう変化するのか確かめることです。今回のような場合はどう変化するのか紙に書いて確かめてください。(いいですか、このソースコードを印刷し、そのとき変数がどのような値なのか紙に書いてください。) もしかして、変数がどう変化するか良く分かってないってことはありませんか? それなら入門書をよく読んでください。何か勘違いしているのです。 プログラムは難しいと思っていませんか? すべてのプログラマは生まれついてプログラマなのではありません。みな初心者だったのです。ですから、初心者だから理解できないということはありません。がんばってください。

関連するQ&A

  • 2つのプログラムの違い

    どうしても分からなかったので投稿しました。よろしくお願いします。 #include<stdio.h> int main(void) { int c; while((c=getchar())!=EOF){ putchar(c); } return 0; } のプログラムをコマンドプロンプトで入力すると、 abc abc なんですが、 #include<stdio.h> int main(void) { int c,i; i=0; while ((c=getchar())!=EOF) { putchar(c); i++; printf("%d\n",i); } return 0; } の場合、 abc a1 a2 a3 4 になります。 自分は abc a1 a2 a3 になると思ったのですが、a3と4の隙間と4は何故出て来たのでしょうか?

  • C言語でこのプログラムを完成させるには

    C言語でこのプログラムを完成させるには C言語初心者です。 1~6の乱数を100回発生させて、それぞれの出現回数をカウントし、ヒストグラムとして表示するプログラムを作成したいのですが上手くいきません。 #include <stdio.h> #include <time.h> #include <stdlib.h> int rnd(int m, int n) { return (int)(n-m+1)*(rand()/(RAND_MAX+0.1))+m; } int main(void) { int i, j, r; int hist[7]; for (i=1; i<7; i++) hist[i]=0; srand((unsigned)time(NULL)); for (i=0; i<100; i++) { r=6; while (6-- > 0) putchar('*'); putchar('\n'); } for (i=1; i<7; i++) { printf("%2d:", i); for (j=0; j<hist[i]; j++) printf("*"); printf("\n"); } return 0; } 何がいけないのでしょうか? よろしくお願いします。

  • 直角三角形を表示するプログラム

    下記のプログラムを実行するとコマンドプロントになにも表示されず、強制終了しなければならなくなってしまいます。 whileのところがおかしいのはわかったのですが、この書き方の何がいけないのかが分かりません。 初歩的な質問で申し訳ありませんが、回答していただけると有難いです。 #include <stdio.h> int main(void){ int count, i; printf("何段ですか?"); scanf("%d", &count); for(i = 1; i <= count; i++){ while(i-- > 0){ putchar('*'); } putchar('\n'); } return 0; }

  • C言語

    以下の出力結果はどうなりますか? 教えてください。 #include <stdio.h> #include <stdib.h> int main (void){ int n,f; n=792; f=2; while(f*f<=n){ while(n%f==0){ printf("%d",f); n=n/f; } f++; } if(n !=1) printf("%d",n); printf("\n"); return 0; }

  • C言語のプログラムでおかしな動作をするのですが教えて頂けないでしょうか?

    VisualStudio2008使用しています。 問題は、サイコロを200回振ってその出た目の数の個数分*を表示するプログラムです。 サイコロの目はランダムで出しています。 次のプログラムは正常に動作するものです。 /* #include <stdio.h> #include<stdlib.h> #include<time.h> #define N 200 int DICE(int min,int max); int main() { int n,i,j; int y[7]={0}; srand((unsigned int)time(NULL)); for(i=0;i<N;i++){ n=DICE(1,6); y[n]++; } for(i=1;i<7;i++){ printf(" %2d: ",i); for(j=0;j<y[i];j++){ printf("*"); } printf("\n"); } return 0; } int DICE(int min,int max) { return min+(int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } */ 次のプログラムが問題で、授業で先生が配列にはstaticをおまじないとしてつけないと暴走すると言われたので、つけて見ると明らかに間違ってると思われるプログラムで動作するのですが原因を教えて頂けないでしょうか? 以下問題のプログラム! 配列の前にstaticをつけたら、添え字をいくつにしても正常に動作します。普通は添え自分しか領域って確保されないですよね??? /* #include <stdio.h> #include<stdlib.h> #include<time.h> #define N 200 int DICE(int min,int max); int main() { int n,i,j; //以下が問題の配列宣言 static int y[2]={0}; srand((unsigned int)time(NULL)); for(i=0;i<N;i++){ n=DICE(1,6); y[n]++; } for(i=1;i<7;i++){ printf(" %2d: ",i); for(j=0;j<y[i];j++){ printf("*"); } printf("\n"); } return 0; } int DICE(int min,int max) { return min+(int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); } 質問の意味が正確に伝わらなかった場合は補足しますので、ご回答よろしくお願いします。

  • C言語<素数を求めるプログラム>

    #include<stdio.h> int j; int prime(int n) { int i; if(n < 2) return 0; if(n == 2) return 1; if(n%2 == 0) return 0; for(i = 3; i*i<= n; i += 2){ if(n%i == 0) return 0; } return 1; } int main(void) { int n; for(n=1; n <= 1000; n++) { if(prime(n)){ printf("%d\n",n); j++; } } printf("素数の個数は全部で %d 件見つかりました。\n",j); return 0; } このプログラムは1から1000までの素数のみを表示させるプログラムでありますが、このアルゴリズムが全くわかりません。 int prime(int n)の中身のアルゴリズムがどういう仕組みになっているのかお分かりになりますでしょうか?

  • C言語【おみくじプログラム】

    お正月前にならったばかりのC言語を用いて おみくじプログラムを作りました。 最近それをまた改良して 強制的にくじを引かせるものにしようと考えました。 しかしどうしてもwhileのループから抜け出せないので ここで質問させていただきます。 どうか間違っている部分を教えてください。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 7 int main(){ int k,y,n; printf("ようこそ。\n"); printf("ここではおみくじを販売して折ります。\n"); printf("よろしければ運試しをしていって下さい。\n\n"); printf("おみくじを引きますか?\n"); printf("※引く場合はy,引かない場合はnを入力してください\n"); scanf("%s,&k"); if(k!=y){ while(k=y){ printf("そんなこと言わずに引いてみてくださいよ。\n\n"); printf("おみくじを引きますか?\n"); printf("※引く場合はy,引かない場合はnを入力してください\n"); scanf("%s,&k"); } } char *kuji[N] = {"大吉", "中吉", "小吉","末吉", "吉", "凶","大凶"}; srand((unsigned)time(NULL)); printf("おみくじ: %s\n\n\n", kuji[rand() % N]); printf("結果はどうでしたか?\n"); printf("またのお越しをお待ちしております。\n"); return 0; }

  • C言語で分からないことがあります。

    私は初心者で、ある参考書で下記の例が載っていたのですが、このプログラムで分からないことがあります。 #include<stdio.h> void nchar(int ch,int no) { while(no-->0) putchar(ch); } int main(void) { int i,ln; printf("何段ですか:");scanf("%d",&ln); for(i=1;i<=ln;i++){ nchar(' ',ln-i); nchar('*',i); putchar('\n'); } return 0; } まず、 ・nchar関数のnoは何を表しているのか? ・nchar関数のputchar(ch)は一体何を表しているのか? 参考書にはこのプログラムについてあまり説明が無くこの2点がよく分かりません。 よろしくお願いします。

  • プログラミングで質問です。言語はC++です。

    いま、 While文でループし、Enterキーを おすとループから抜けます。 そこで、上矢印キー↑を押すと マウスカーソルがそれに応じて動くようなプログラムを while文でループさせたいのですが やり方がわかりません。 途中まで書いてみたのですが動きません。 詳しく教えていただけると嬉しいです。 #include <stdio.h> #include <windows.h> #include <Windows.h> int main( void ) { printf("roop in\n"); POINT po; while(1){ po.x=0; po.y=0; if( GetAsyncKeyState(VK_RETURN)) break; if(GetAsyncKeyState(VK_UP)&0x8000 <0) po.x+=7; Sleep(500); } printf("roop out\n"); return 0; }

  • C言語について。初心者です。

    参考書の問題で、「整数値以下である正の偶数を照準に表示するプログラムを作成せよ」 例)整数を入力してください:19   2 4 6 8 10 12 14 16 18 とあり、自分で以下のプログラムを作ってみたのですが「222222・・・・・・・・・・・・・・・・・・」となるだけです。どう変えればちゃんと表示されるようになりますか?ちなみにwhile文を使うのが条件です。 #include<stdio.h> int main(void) {       int na; int nb=0; printf("整数を入力してください。:"); scanf("%d",&na); while(nb<na) printf("%d",nb+2); putchar('\n'); return 0; }