- ベストアンサー
C言語のfor文問題でセンセーショナルなタイトルを生成してください
- C言語のfor文問題で三角旗型のアスタリスクを表示させる方法を教えてください。
- C言語のfor文問題でダイヤ型のアスタリスクを表示させる方法を教えてください。
- C言語のfor文問題で六角形型のアスタリスクを表示させる方法を教えてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
「ソースコードだけ」っていうじゃなーい、でもそれ「代わりに回答してくれ」って意味ですから、残念。 #我ながら古い。 という訳で方針だけ説明しますが、要は「*の位置決めをどうするか」という話ですね。 ANSIエスケープシーケンスなんて手もなくはないですが、まぁ普通に空白で左から埋めていけばいいでしょう。 「関数」を封じられると#1でも言われているように打つ手なしですが、まぁ本意は「関数を作るな、main()内で完結しろ」って意味でしょうから普通にfor()とputchar()でケースに応じて空白か*を出力するだけです。 一行終わったら改行を出力して次の行、の繰り返し。 配列がNGなのは先に文字列パターンを作って出力するだけ、という手を封じるのが目的でしょうか。 ベタにやってもいいですが、増減値にパターンがあるので各行の空白の数、*の数は計算でも出せなくはありません。
その他の回答 (7)
- kmee
- ベストアンサー率55% (1857/3366)
たぶんですね、いろいろ条件がついてるのを見て、パニックになってるだけだと思うんですよ。 まずは、冷静に考えること。 条件がなければ、こんなプログラムをまず考えますよね? /* 問題(2) */ int main(){ printf("__*\n"); /* スペースを_だ代用 */ printf("_***\n"); printf("*****\n"); printf("_***\n"); printf("__*\n"); return 0; } 「配列も使ってはいけません」等と言われなければ、配列使うことなんか考えもしないでしょう。 「main関数以外の関数は使わないように」等と言われなれば、関数を定義することなんか考えもしないでしょう。 自分で思いつけるプログラムを作ってから、条件に合せて変更していけばいいのです。 printfがだめなら、代替方法がないか、調べてみましょう。マニュアルを読めば、printf以外にも出力関数がいっぱいあることがわかります、printfと同じ機能でなくても、今回の目的を十分果せる関数が見つかります。 forは所定回数繰り返すのに使用します。問題を見れば「*がX個」といかにも「forで繰り返してくれ」と言わんばかりのものがあるじゃないですか。 プログラムの書き方は一つじゃないです。 ここで「解答」待ってる時間があるなら、自分で考えて、とりあえず実行してみましょうよ。 /* 問題(2)別解 */ #include <stdio.h> #define S putchar('*'); #define s putchar(' '); #define E putchar('\n'); int main(){ s s S s s E s S S S s E S S S S S E s S S S s E s s S s s E for(;0;) ; return 0; }
- Wr5
- ベストアンサー率53% (2173/4061)
どうすればいいか、自分で考えたコードはかけらも無いんでしょうか? そういったものを提示して、助言を求めれば前向きな回答も付くのですが。 さて、直前の方達に便乗して私も… インデントの調整に全角スペース使用しています。 #include<stdio.h> int main(void) { int yline, pattern, mask; for(yline = 0; yline < 5;yline++) { pattern = 0; switch(yline) { case 2: pattern |= 0x20; case 1: case 3: pattern |= 0x40; case 0: case 4: pattern |= 0x80; } for(mask = 0x80;mask;mask >>= 1) { if(pattern & mask) { putchar('*'); } else { putchar(' '); } } putchar('\n'); } return 0; } #include<stdio.h> int main(void) { int yline, pattern, mask; for(yline = 0; yline < 5;yline++) { pattern = 0; switch(yline) { case 2: pattern |= 0x88; case 1: case 3: pattern |= 0x50; case 0: case 4: pattern |= 0x20; } for(mask = 0x80;mask;mask >>= 1) { if(pattern & mask) { putchar('*'); } else { putchar(' '); } } putchar('\n'); } return 0; }
お礼
非常に参考になりました、ありがとうございます。
- D-Matsu
- ベストアンサー率45% (1080/2394)
#5に続いて実現はしてるけど問題の意図には沿わない手法。 #include<stdio.h> int main(void) { const char *pattern=" *\n ***\n*****\n ***\n *\n"; int i; for(i = 0; pattern[i] != '\0' ; i++) { putchar(pattern[i]); } }
お礼
とんでもないです、かなり参考になりました。
- Tacosan
- ベストアンサー率23% (3656/15482)
あえて問題の答えにはならない方法を書いてみる: #include <stdio.h> #include <stdlib.h> int main() { printf("*\n**\n***\n**\n"); puts("*"); return EXIT_SUCCESS; }
お礼
ありがとうございます。これを元に、プログラムを組んでみます。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
方針1 for(i = 0; i < 10; i++) putchar(' '); for(i = 0; i < 10; i++) putchar('*'); putchar('\n'); for(i = 0; i < 10; i++) putchar(' '); for(i = 0; i < 10; i++) putchar('*'); putchar('\n'); for(i = 0; i < 10; i++) putchar(' '); for(i = 0; i < 10; i++) putchar('*'); putchar('\n'); for(i = 0; i < 10; i++) putchar(' '); for(i = 0; i < 10; i++) putchar('*'); putchar('\n'); for(i = 0; i < 10; i++) putchar(' '); for(i = 0; i < 10; i++) putchar('*'); putchar('\n'); が動かせるように考える。 方針2 表示された図形を見て、いじれそうな数字をいじって、どう変化するか眺めてみる。 方針3 その組み合わせで、一応図形はかける。
お礼
とても為になるヒントありがとうございます。
- hidebun
- ベストアンサー率50% (92/181)
そうかそうか…。 外部のテキストファイルに書いておいて、 それを読みだして表示するのはアリ?
補足
おねがいします、C言語のソースコードだけ書いてください。 この問題が終わると、夏休みに入るので、そこからは自分で解けるようにします。 期限は刻々と迫っていて、 とにかく今は考えてる時間がないので・・・ どうか今回だけは、本当にお願いします。
- Tacosan
- ベストアンサー率23% (3656/15482)
あなたは「ここに載ったソースコード」を課題への回答として出せなくなるのですが, それでいいんですか? ま, いずれにしても私には「main関数以外の関数は使わない」で出力する方法が思いつきませんが. すべての標準関数を封じられたら手も足も出ない.
補足
失礼しました、それだったら、何も出来ませんよね。 どんな標準関数を使っても、いいので、ソースコードを書いてください。 とにかく時間がないので、すいません。
お礼
どうもありがとうございます。