ここから本文です

[至急]C言語 C言語プログラミングのfor文が苦手すぎて困っています。 課題が...

e91********さん

2014/11/1200:48:44

[至急]C言語

C言語プログラミングのfor文が苦手すぎて困っています。
課題がなかなか進みません…。

これだけ!答えだけでもいいので(厚かましいですが解説付きだととてもありがたいです)教えて頂きたいです。

for文を使って実行結果のように☆1つ×2つの規則的に繰り返し合計9個の☆×を出力するプログラムをお願いします。

{実行結果}
☆××☆××☆××


int i;
までしか打ち込めてないです…。

補足繰り返しを利用しないといけないので・・。お願いします、ごめんなさい。

閲覧数:
293
回答数:
9
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

2014/11/1206:10:39

#include "stdio.h"
int main()
{
int i;
for(i=0;i<9;printf(i++%3?"×":"☆"));
return 0;
}

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜5件/8件中

並び替え:回答日時の
新しい順
|古い順

zxx********さん

2014/11/1523:31:09

c++の場合(必要ないと思いますけど)
include <iostream>
using namespace std;

int main()
{
int i;
for(i=0;i<10;i++){
cout<<"☆××"<<endl;
}
return 0;
}

eig********さん

2014/11/1416:53:44

まず、一番シンプルな回答例を以下に全文で書きたい書きたいと思います。

・回答例

#include <stdio.h>

int main()
{
int i;
int N=9;

for(i=0;i<N;i++)
{
printf("☆××");
}

printf("\n");

}

・解説

#include <stdio.h> : 現段階ではおまじないと考えて良いです。

int main() {} : 実行する本文、と考えれば良いです。

int i; : "i" という int型(integer : 整数) の箱を用意します。
int N; : "N" という int型の箱を用意し、9にします。(繰り返し回数を表します)

for(i=0;i<N;i++)
{
printf("☆××");
}

この部分で、N回、{}の中を行います。

printf("☆××");

これで、☆××を一回表示します。


printf("\n");
これで、最後に、改行を行います。


以上です。がんばってください。

bas********さん

2014/11/1411:00:36

回数がわかっている(もしくは上限がわかっている)場合for文をつかい、それ以外なら while文がいいですが、

今回の場合、全部で9こ ということなんで , for文でやります。

for文の公式(? 構文ですが。数学の公式みたいな。 )は、

for( 初期化; 条件文; UpDown ){....}

です。

初期化は
i = 0;
のように最初のiの値を指定します。

次の「条件式」はどんな時に回すかというやつです。

パターン的には、
i < 3; // 初期値が0だと 3回やる、みたいな。
i > 7; // 七回やるみたいな。
i == 0; // ゼロの間. この文ではいりませんが。
i != 8; // i が 8 でなければ
i <= 9;
i >= 10;
という感じです。

で次の UpDown は (私が適当につけましたが。 )

どう変化させるかというものです。

i++
のようなやつなら
「1ずつ上昇」
i--
なら、
「1ずつ減少」

という感じです。

もし2とびなら、
i + 2
といった感じでしょうか。

--
は後ろからやっていくときに使います。
なので、今回は9回 回すので、

int i;
for( i = 0; i < 9; i++ )...

となります。

で、

規則的にということなので、

実際におこなってもらいたい 実行結果 から共通点を見つけます。

もし、実行結果を
××☆××☆××☆
としたいのであれば、
3とびで星が出ています。なので3の倍数かどうかで判断します。

こういうのはif文を使いますので、
if( 条件式 ) { ... }
で,
条件式は 条件です。
i != 0
とすれば,
i が 0 でないとき
となります。

で、
3の倍数は、3で割り切れるかどうかなので、

余りを調べるには

%
を使うそうです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
例:
c = a % b; // a を bで割ったときの数字をcに格納

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
なので、
今回は 3の倍数 = 3で割り切れる = c に入る数字は 0 ( 余りはないので。 )

なので、

if( i % 3 == 0 )...

となりますが、
これだとわかりづらいので、

if( ( i % 3 ) == 0 )...

とするか

c = i % 3;

if( c == 0 )...


とします。

で、それ以外( 3の倍数以外 )の処理も加えるので、

else
を使います。

本来の if文の公式は

if( 条件文 ){
// 条件が満たされた場合の処理
}else if( 条件文 ) {
// 条件が満たされた場合の処理
}else{
// それ以外のときの処理
}

なので、

c = i % 3;
if( c == 0 ){
...
}else{
...
}

をfor文内に埋め込んでください。
int cも使っているので定義しておいてください。

でおこないたい処理
は、
3の倍数 -> ★
それ以外 -> ×

とすると....

で、今回の場合は、(私的にはバラバラなので) 後ろから見ると
上記のやつにそっくり!
なので後ろからやっていくことにします。



後ろからやる場合は、
初期値を 最大値にして、
条件は
0 までは
とすると

int c;
int i;
for( i = 9; i <= 0; UpDown )...

と なり、どのように変化するかは、
後ろから前へなので、値を小さくします。
i--
と。

なので、

for( i = 9; i <= 0; i-- ) ...

となります。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

pen********さん

2014/11/1217:19:24

同様の質問がありましたので参考にどうぞ^^
http://dixq.net/forum/viewtopic.php?f=3&t=15961

プロフィール画像

カテゴリマスター

n2q********さん

2014/11/1209:51:48

まず for 文の形を覚えましょう。

for (①;②;③) ④

こうです。①、②、③には「式」(expression)、④には「文」(statment)を書きます。実際のところ、④は「複文」(compound statement)になっていることが多いです。複文というのは { 記号で始まって } で終わる、例のアレですよ。これは分かると思います。

動作に対応させると次のようになります。

①の式を計算。結果は棄却。
②の式を計算。結果が偽なら for 文終わり。
④の文を実行。
③の式を計算。結果は棄却。
→②のところに戻る。

こういう感じです。①は初回のみですからね。④が先で③が後。この辺が注意点だと思います。

で、「結果は棄却」っていうところですが、気になりましたか?これは C 言語の変わっている所で、代入式というのは、それ自体が値を持つのです。i = 0 という式は 0 という値(厳密に言うとちょっと違うけど)なのでしょ。それを棄却するという話です。でも i に 0 は入りますからね。そこは「棄却」と関係ないから。

あと、①、②、③は省略可能。どれか一つ、あるいは二つ、あるいあは3つ全てでも。ただし、何を省略するにしても括弧とセミコロンだけは省略できませんからね。そこは気をつけてください。

では実例です。

int i = 0;
for (;i < 3;++i)
ㅤㅤprintf("☆××");
putchar('\n');

これで 3 個の ☆×× が出力されます。

①の部分は省略してます。既に変数 i は 0 に初期化してるので。
②の部分は i < 3 ということで i が 3 より小さい間繰り返すという意味になります。
④の部分は printf を使って文字列を出力しています。putchar のところは含まれませんからね。これは for 文が終わった後の処理です。
③の部分は変数 i を +1 してます。i++ という風に ++ を変数名の後に書く習慣(?)の人も居るようですね。ただ、場面によって後置の ++ というのは特別な意味を帯びてきますよ。そこを間違えてはいけません。なので普段は ++i と書いたほうが良いと思うんだけどなぁ。まあ、これは個人的な意見です。

更に高度な例です。

int i = 0;
for (;i < 9;++i)
ㅤㅤprintf("%s", i % 3 ? "×" : "☆");
putchar('\n');

9 回繰り返してます。内容としては i を 3 で割った時に余りがあれば "×" 、余りがなければ "☆" を表示。かなり高度なものになってしまいました。すみません、クセなんですよ。

簡単にしました。

#include <stdio.h>
int main()
{
ㅤㅤint i = 0;
ㅤㅤfor (;i < 9;++i) {
ㅤㅤㅤㅤif (i % 3 == 0)
ㅤㅤㅤㅤㅤㅤprintf("☆");
ㅤㅤㅤㅤelse
ㅤㅤㅤㅤㅤㅤprintf("×");
ㅤㅤ}
ㅤㅤputchar('\n');
ㅤㅤreturn 0;
}

これなら分かり易いかと。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる