- ベストアンサー
C言語学習2日目の超初心者の質問:for文の動作について
yshr9442の回答
- yshr9442
- ベストアンサー率43% (10/23)
補足説明をしようと思ったのですが、 No1,No2の回答者様ので十分ですね。 for文の中が実行されているのは、条件が当てはまるときだけですからね。 もしもiが0,1,2しか入らないならば、永久にfor文から抜け出せなくなってしまいます。 iが+1されて条件判定し、i=3になって初めて条件から抜け出し最後のprintfでi=3,j=0が出力されるということです。
関連するQ&A
- 基礎だと思いますが、教えてください!初心者です。
『0より大きい10個の異なる数字を入力したときに、 大きいものから順番に並び替えて表示する』プログラム の作り方を教えてくださいm(__)m 下に途中までですが、自分なりにやったものを載せておきます。 include <stdio.h> int main() { int input[10],max[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; int i,j; printf("0より大きい10個の異なる数字を入力してください\n"); for(i=1; i<=10; i++)/* 比べるものを10個入力する */ { printf("%d番目の数字を入力してください",i); scanf("%d", &input[i-1]); } for(j=1; j<=10; j++) /* 1つずつ調べている */ { for(i=1; i<=10; i++) { if(max[j-1] < input[i-1]) max[j-1] = input[i-1]; /* 結果をほかの配列に格納している */ input[i-1] = 0; /* 最大となったものを0にしたい,だけどその方法がわからない */ } /* これだと最大値が変わるごとにその値が0になってしまいます */ printf("%2d目の数は%2dです \n",j,max[j-1]); } return(0); }
- ベストアンサー
- C・C++・C#
- 初心者です。
ループで、どうしてもわからないので、質問します。 1234567890123456789012345 と、いうように表示したいのですが、以下のソースでは、表示されません。教えてください。 ※ 読み込まれた整数値の個数は25とした場合です。 #include <stdio.h> int main(void) { int i = 0; int num; printf("整数を入力してください。:"); scanf("%d",&num); for (i = 0; i < num; i++){ printf("%d", i); if ( i <= 10 ){ i = 0; } } putchar('\n'); return(0); }
- ベストアンサー
- C・C++・C#
- c言語のプログラミングについて聞きたいのですが
自分は課題で「10人分の名前と点数を入力して降順に並び替える」というプログラムを作ろうとしているのですが、なかなかうまくいきません。一応↓の形までできたのですがなぜか数字が変になります。 どうしてか教えていただけないでしょうか。 #include<stdio.h> int main(void) { int i,j; int tensu[10][3]; char namae[10][6]; for(i=0;i<10;i++){ printf("名前の入力>>"); scanf("%s",&namae[i]); printf("点数の入力>>"); scanf("%d",tensu[i]); } printf("名前 点数\n"); for(j=0;j<10;j++) { printf("%s ",&namae[j]); printf("%10d\n",tensu[j]); } return 0; } それとポインタ?みたいなのもよく理解できず、点数で降順にしたあとに点数を使って名前を並び替えるのかなと思うのですがそれもよくわかりません。 どなたか教えてください
- 締切済み
- C・C++・C#
- 配列
/*10個の数字を受け取り,その中に一致する2つの数字があるかどうかを報告するプログラム*/ #include<stdio.h> int main(void) { int i,j,k; int item[9]; printf("10個の数字を入力してください\n"); for(i=0;i<10;i++) scanf("%d",&item[i]); for(j=0;j<10;j++) { for(k=j+1;k<10;k++) { if(item[j]==item[k]) printf("%dが2つ存在します.\n",item[j]); } } return 0; } というプログラムでエラーが出てしまいました. エラー内容は Stack around the variable 'item' was corrupted というものです. 原因を知りたいです.よろしくお願いします.
- ベストアンサー
- その他(プログラミング・開発)
- C言語 エラー表示 break の位置が誤っている(関数 main )
#include<stdio.h> int main(void){ int n,i,j,k; char c='*'; printf("正の整数:"); scanf("%d",&n); if(n>0){ for(i=1;i<=n;i++){ printf("%d",i); for(j=1;j<=n+1-i;j++){ if(j==1){ if(i-1>0){ for(k=i-1;k>0;k--){ printf(" "); } } } printf("%c",c); } printf("\n"); } } break; return 0; } これをコンパイルすると「break の位置が誤っている(関数 main )」と表示されるのですが何でですか? 困ってます↓
- ベストアンサー
- C・C++・C#
- C言語初心者です。書いたプログラムを採点して下さい
入力された0~100までの10個の数値から、 最小値と最大値を表示するプログラムを書きました。 #include <stdio.h> int getmin(int * pvalue); int getmax(int * pvalue); int main(void) { int i,value[10]; int minimum,maximum; printf("0~100の範囲で10個の数値を入力してください:\n"); for(i=0;i<10;i++){ scanf("%d",&value[i]); if(value[i] < 0 || value[i] > 100) { printf("0~100の範囲です:\n"); scanf("%d",&value[i]); } } minimum = getmin(value); maximum = getmax(value); printf("最小値は%d\n",minimum); printf("最大値は%d\n",maximum); return 0; } int getmin(int * pvalue) { int i=0,j; for(j=1;j<10;j++) { while(pvalue[i] > pvalue[j]){i++;} } return pvalue[i]; } int getmax(int * pvalue) { int i=0,j; for(j=1;j<10;j++) { while(pvalue[i] < pvalue[j]){i++;} } return pvalue[i]; } 正常に作動はしましたが、 記述に無駄が多い、分かりづらい などあればご指導いただけますか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 線形探索法のプログラムについて
配列Aに格納されている数字を検索するプログラムより、 Aのプログラムでは配列Aに格納されている数字を検索(scanf("%d" , j)で入力)した にもかかわらず、「該当するデータがありませんでした」と表示されてしまいます。 Bのプログラムでは、配列Bに格納されている数字を検索(scanf("%d" , j)で入力)すると 「該当するデータがありました」と表示されます。 Aのプログラムで、------でかこってある部分に問題があると思われ、 いろいろと試してみましたが、未だにその理由をつかむことができません。 その理由を知りたく、書き込みを致しました。 ご教授の程宜しくお願い致します。 A. main(){ int i , j; int k = 0; int A[5] = {4 , 1 , 3 , 4 , 5}; printf("検索する数値を入力してください > "); scanf("%d" , j); --------------------------------------------------------------- for(i=0 ; i<5 ; i++){ if(A[i] == j){ printf("該当するデータはあります"); k++; } } --------------------------------------------------------------- if(k <= 0){ printf("該当するデータがありませんでした\n"); } return; } B #include<stdio.h> main(){ int i , j , k; int A[5] = {4 , 1 , 3 , 4 , 5}; printf("検索する数値を入力してください > "); scanf("%d" , j); for(i=0 ; i<5 ; i++){ if(A[i] == j){ k++; } } if(k>0){ printf("該当するデータはありました"); }else{ printf("該当するデータはありませんでした"); } return; }
- 締切済み
- C・C++・C#
- 初心者です。
以下のソースの説明ですが、例えばnaに5、nbに4を入れたとき、 実行後の表示として 5+6+7+8=26 となるようにしたいのですが、できません。 教えてください。 #include <stdio.h> int main(void) { int sum = 0; int na,nb; printf("整数A:"); scanf("%d",&na); printf("整数B:"); scanf("%d",&nb); /*nbは回数*/ for ( na; na <= nb ;na++){ sum = sum + na; } printf("%dです。\n",sum); return(0); }
- ベストアンサー
- C・C++・C#
- C++の問題についてです
5個の数字をキーボードから受け取って、その中に同じ数字があれば、画面にその旨報告する。 というプログラムを作っているのですが、自分で作った結果、 #include "stdafx.h" #include <stdio.h> int main(void) { int i, j, a; i = 0; do{ printf("値を入力してください:"); scanf("%d", &a[i]); for(j=0; j < 5; j++) { if(a == i) { printf("%dは同じ値があります。\n", a[i]); } } i++; } while(i<5); return 0; } となりました。 このプログラムで文法がおかしいというところがあれば教えていただけませんか? 自分で考えてみたものの、全然わかりませんでした。 使用しているソフトはVisual C++2005 Express Edition というソフトです。 どうかよろしくお願いします。
- ベストアンサー
- C・C++・C#
お礼
なるほど。とりあえず2を超えて3まで行ってしまうのですね。 そして3が条件と合わないのでループの外に飛び出すという考えなのですね。 ありがとうございました。