• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語での関数forについて)

C言語での関数forについて

koreiの回答

  • ベストアンサー
  • korei
  • ベストアンサー率30% (22/72)
回答No.5

こんにちは。 C言語のマニュアルで、forのところを読まれたら、わかると思いますが。 上記にかかれているプログラムのfor文の処理される順番は (1)countに0をいれる (2)count < 5 の条件文を満たしているかチェックする(今はcountは0) (3)条件文を満たしているのでprint文を実行する(countは今0です を表示) (4)countに1をたす(countは1となる) (5)count < 5 の条件文を満たしているかチェックする(今はcountは1) (6)条件文を満たしているのでprint文を実行する(countは今1です を表示) (7)countに1をたす(countは2となる)    ・    ・  繰り返し行う    ・    ・ ・countに1をたす(countは4となる) ・count < 5 の条件文を満たしているかチェックする(今はcountは4) ・条件文を満たしているのでprint文を実行する(countは今4です を表示) ・countに1をたす(countは5となる) ・count < 5 の条件文を満たしているかチェックする(今はcountは5) ・条件文を満たしていないので、forループを抜ける。 次の処理を実行する。    ・    ・ なので、for文を抜けた時点でcountは5になっています。 なので、「正解は5でした」と表示されます。 しかし、for文内の処理が実行されるのは、count<5の間なので、 「countは今4です」までしかでないのです。 あと、forは関数ではありません。ループ文です。 まずは、基本を身に付けるようにがんばって勉強してくださいね。

yuki7505
質問者

お礼

ありがとうございます!すごくわかりやすかったです。 あの,条件文を満たしていたら、countに1を足し、print文を実行する。 という順番にならないのは何故ですか (count = 0; count < 5; count++)と先にかいてあって、その後にprint文がきてるので 先にcountに1をたしてから、print文を実行するとどうしても思ってしまうんですが なぜcount++はprint文の後に来ないのでしょうか・・

関連するQ&A

  • C言語初心者です。

    #include <stdio.h> int main() { int b[100]; int i, n; int a, r, data; int count=0; printf("Please input two integers:"); fflush(0); scanf("%d %d", &a, &r); if(a<=0 || r<=1){ printf("Error\n"); } else{ for(n=0; b[n]<=80.0; n++){ if(n==0){ b[0]=0; count++; } else { for(i=0; i<=n-1; i++){ data*=r; } b[n]=a*data; printf("%d ", b[n]); count++; } } printf("\n"); for(; count>0; count--){ printf("%d ", b[count]); } } return 0; } windows8でeclipseを使ってC言語を書いてます。 eclipse上だと何もエラーが表示されてないのですが、実行し、 Please input two integers: と表示された後、適当な数字2つを入力しても何も反応しません。 稚拙な質問ですいません。どなたか原因を教えてください。

  • C言語の問題がわからないです。

    C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }

  • コンパイル失敗と表示されましたがどこが間違っているでしょうか?

    インターネット上のC言語入門講座で例題どうりにコンパイラーに入力したつもりなのですが[コンパイルに失敗しました。]と表示されてしまいどこが間違っているのか分かりません。詳しい方教えてください。 #include<stdio.h> void main() { int count; for (count = 0; count < 5; count++) { printf("countは今%dです\n", count); } if(count == 4){ printf("正解は4でした\n"); }else if(count == 5) { printf("正解は5でした\n"); }else { printf("4でも5でもありませんでした\n"); } }

  • C言語

    forの直後で1+2+3+4+5+・・・・・・・と加算し続ける式がわからないので教えてください。 #include<stdio.h> int main(void) { char moji; int i,sum; printf("正の整数を1から順に加算します。n\"); printf("加算を開始してよろしいですか。(Y=実行。N=終了)\n"); moji=getchar(); if(moji==y) { for(i=2;sum>=1001;i++) { この部分がわかりません; printf("加算値は%dです。¥n",sum); } }else if(moji=='n'){ printf("終了します。\n"); }else{ printf("YまたはNを入力してください。\n"); } return 0; }

  • C言語について

    問題文が表示され、その解答を数字で入力すると正解の場合は「大正解」、不正解の場合は「はずれ」と表示されるプログラムなのですが、?部分がどうしても分りません・・・ 正しいと思えば0、間違ってると思うなら1と入力するプログラムです。 どなたかご教授いただけるとありがたいです>< main() { int i,k; i=0; while(i<5){ printf("次の文章が正しければ0、間違っていれば1を入力してください。\n"); printf("%s",q[i]); scanf("%d",&k); if(a[?]==?) {printf("大正解\n");} else {printf("はずれ\n");} i????; } printf("おしまい\n"); }

  • C言語で分からないところがあるのですが……

    C言語で分からないところがあるのですが…… すみません。C言語の課題で分からないところがあり、質問しに来ました。 ユーザから数を受けて、そこまでのフィボナッチ数列を表示させるというプログラムです。 下のソースコード(でいいんですよね?)は正しいやつです。 for文を使って、繰り返しの作業を行うことに成功しましたが、doとwhileに書き換える作業がうまくできません。 どなたか助けてください。 #include<stdio.h> fib(int n) { if(n == 1)return(1); else{ if(n == 2) return (1); else return fib(n-1) + fib(n-2); } } main() { int n, i ; printf("INPUT the number. : "); scanf("%d",&n); for(i=1; i<=n; i++){ printf("F%d = %d\n",i, fib(i)); } }

  • C言語でのじゃんけん

    こんちには。 C言語の乱数を用いてじゃんけんプログラムを作ろうと思っているのですが、 エラーメッセージが出てしまいうまくいきません。 どこがおかしいのでしょうか? #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { int i,j,k; printf("じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)¥n"); for(k=k; k<=10; k++) { srand(time(NULL)); j=rand()%3+1; scanf("%d",&i); if(i==1&&j==1) printf("私はグーなので、あいこです¥n"); else if(i==1&&j==2) printf("私はチョキなので、あなたの勝ちです¥n"); else if(i==1&&j==3) printf("私はパーなので、あなたの負けです¥n"); else if(i==2&&j==1) printf("私はグーなので、あなたの負けです¥n"); else if(i=2&&j==2) printf("私はチョキなので、あいこです¥n"); else if(i==2&&j==3) printf("私はパーなので、あなたの勝ちです¥n"); else if(i==3&&j==1) printf("私はグーなので、あなたの勝ちです¥n"); else if(i==3&&j==2) printf("私はチョキなので、あなたの負けです¥n"); else if(i==3&&j==3) printf("私はパーなので、あいこです¥n"); else printf("1か2か3を入力してください¥n"); } } OS mountain lionで利用中ですが、 「じゃんけんをしましょう(ぐー:1、ちょき:2、ぱー:3)」 と表示されたまま、うまく動作しません。 教えてください。

    • ベストアンサー
    • Mac
  • C言語について

    以下のプログラムについてです。 test.txtというファイルを読み込み、その中の異なる単語の数を求めるプログラムです。 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<ctype.h> #include<stddef.h> #define NMAX 80 #define LMAX 5000 void count(FILE*, int); void all_words(FILE *); FILE *fp, *fp2; char *fn="alice.txt"; char *fn2="total word.txt"; char *ignore="\n !?()*-;:.,_\"[]"; int main(void){ int p=0, x, count, l, t=0,k=0; char name[LMAX][NMAX], word1[NMAX], word2[NMAX]; char *tp, *tp2; if((fp=fopen(fn,"r"))==NULL){ printf("Can't open '%s'.\n",fn); exit(1); } if((fp2=fopen(fn2,"w"))==NULL){ printf("Can't open '%s'.\n",fn2); exit(1); } for(count=0;count<LMAX;count++){ if(fgets(name[count],NMAX,fp)==NULL)break; p++; } for(count=0;count<p;count++){ for(x=0;x<NMAX;x++){ word1[x]=tolower(name[count][x]); } tp=word1; while((tp2=strtok(tp,ignore))!=NULL){ if(*tp2=='\''){ if(*(tp2+1)=='`') t=1; tp2++; } strcpy(word2,tp2); k=l=strlen(word2)-1; if(word2[k]==('\'' & l)) word2[l]='\0'; if(word2[0] =='\'' &&t==0){ if(word2[1]!='\0'){ fputs(word2+1,fp2); fputc('\n',fp2); } } else{ if(word2[0]!='\0'){ fputs(word2,fp2); fputc('\n',fp2); } } tp=NULL; } } fclose(fp); fclose(fp2); all_words(fp2); return 0; } void all_words(FILE* fp2){ char word3[NMAX]; int n=0; if((fp2=fopen(fn2,"r"))==NULL){ printf("Can't open '%s'.\n", fn2); exit(1); } for(;;){ if(fgets(word3, NMAX,fp2)==NULL) break; n++; } fclose(fp2); count(fp2,n); } void count(FILE* fp2, int n){ int count, x, y=0; char *m=(char *)malloc(n*NMAX); char *xp,*yp; if(m==NULL){ return ; } if((fp2=fopen(fn2,"r"))==NULL){ printf("Can't open '%s'.\n", fn2); exit(1); } for(count=0,xp=m; count<n;count++,xp+=NMAX){ fgets(xp,NMAX,fp2); } qsort(m,n,NMAX,(int (*)(const void*, const void*))strcmp); count=1; for(x=0,xp=m,yp=m+NMAX;x<n-1;xp+=NMAX,yp+=NMAX,x++){ if(strcmp(xp,yp)==0){ y++; count++; } else{ count=1; } } printf("KIDN OF WORD:%d\n",n-y); if(m){ free(m); m=NULL; printf("%p\n",m); } fclose(fp2); } このプログラムを実行するとメモリリークになってしまいます どうしたら良いでしょうか?

  • C言語で分からない点があるのですが……

    C言語で分からない点があるのですが…… こんにちは。C言語を学んでいて、詰まったので宜しければ回答いただけると嬉しいです。 フィボナッチ数列に関するプログラミングです。 ユーザから数字を受け取ります。(第何項か) そこまでの数字を表示するというプログラムです。 n=3なら F1=1 F2=1 F3=2 という具合です。 しかし、実行した結果が添付した図の通りで、途中の項がすっ飛ばされていました。 どうすればいいんでしたっけ? 宜しければご助力ください!! #include<stdio.h> fib(int n) { if(n == 1)return(1); else{ if(n == 2) return (1); else return fib(n-1) + fib(n-2); } } main() { int n, i ; printf("INPUT number.: "); scanf("%d",&n); for(i=2; i<=n; i++){ printf("F%d = %d\n",n, fib(n)); } }

  • 続・C言語について

    http://okwave.jp/qa5241461.html 先ほど、このような質問をして、いただいた回答を参考に下記のようなプログラムを作ってみたのですが、実行結果は、数値の入力と最後の"\n"しか反映していません…。 このプログラムのどの部分がマズイのか、お教えいただけたら幸いです。 よろしくお願いいたします。 #include <stdio.h> void draw_even(int, int); void draw_odd(int, int); int main(void) { int kazu; int gyou=1; printf("数字2~9を入力してください:"); scanf("%d", &kazu); while(kazu < 2 || kazu >9) { printf("※入力エラー!! 2~9を入力してください:"); scanf("%d", &kazu); } while(gyou <= kazu) { if(kazu = 2*(kazu/2)) { gyou = kazu+1; draw_even(kazu, gyou); } else { gyou = kazu; draw_odd(kazu, gyou); } gyou++; } } void draw_even(int kazu, int gyou) { int keta = 1; if(kazu!=(gyou+1)/2) { while(keta==kazu && keta==(gyou+1)/2 && keta==gyou-(kazu-1)) { printf("*"); } } else { for(keta=1; keta<=gyou; keta++) { if(keta!=(gyou+1)/2) { printf("*"); } else { printf(" "); } } } printf("\n"); } void draw_odd(int kazu, int gyou) { int keta = 1; if(kazu!=(gyou+1)/2) { while(keta==kazu && keta==(gyou+1)/2 && keta==gyou-(kazu-1)) { printf("*"); } } else { for(keta=1; keta<=gyou; keta++) { printf("*"); } } printf("\n"); }