質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1510閲覧

C言語 入力した文字を交互に表示する

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/11/04 08:53

編集2022/11/04 09:21

キーボードから正の整数nを一つ受け取り、縦横n×n文字の範囲に+と-を交互に並べて表示するプログラムを作成したいです。
実行結果として

n=2のとき
+-
-+

n=3のとき

+-+
-+-
+-+

と表示されるプログラムです。
なにとぞよろしくお願いします。

補足
すみません、明らかに情報不足でした。
現在、for,while,if,printf,scanfほどしか習っておらず、これらを使ってのプログラム作成を試みているのですができませんでした。
調べても明らかにより高度なものしか出てこず、全く理解ができません。
これらの関数で作る方法、もしくはヒントで構いませんので教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2022/11/04 09:27

>試みているのですができませんでした。 その試みたソースコードを質問に追記してくださいませんか。
退会済みユーザー

退会済みユーザー

2022/11/04 09:35

#include <stdio.h> int main(void) { signed int i, j, n; printf("Input a non-negative integer: "); scanf("%d" , &n); for(i=1; i<=n; i++) { printf("+",n); for(j=1; j<=n; j++) { printf("-",n); } printf("\n"); } return 0; } こんな感じに書きました。しかし、実行しても +--- +--- となってしまいます😭
fana

2022/11/04 09:58

私の回答のようにやってください. というのは,回答に示した方法の内容ではなくて,取り組みの順序についてです. つまり,まずは「どうやったら 達成できるであろうか?」という 方法論/手続き をしっかりと考え→それができたら実装する,という順序です. 方法論無しの状況であてずっぽうな実装をしても意味がありません. まぁ,今々は「コードを示せ」と言われてしまったから,何か出すしかなかったのでしょうけども. コード化で苦戦はしていても確信のもてる手続きの側はしっかりと考えてある,という場合にはその手続きも示せば良いのではないかな,と思います.
guest

回答3

0

ベストアンサー

他のサイトで質問したところ、意図に沿う形での回答をいただいて解決いたしました。
こちらのサイトだと、高度なものが送られてきたり、文句をつけられたりと初心者に優しく内容でしたので、今後は質問を慎みたいと思います。
回答を送っていただいた方はありがとうございました。

投稿2022/11/04 10:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

0-indexedであることを前提とします.

横方向のindexをi,縦方向のindexをjとしてi + jが偶数のときに+,奇数のときに-を出力してください.

投稿2022/11/04 09:09

PondVillege

総合スコア1579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/11/04 10:11 編集

(正直,これが「高度」と言われてしまうと,どうしたらいいか困りますね.) とりあえず「回答としてはこれで十分だろ常考」を示す意味でてきとーにリアクションをつけてみました.
退会済みユーザー

退会済みユーザー

2022/11/04 10:22

右も左もわからない初心者に対しててきとーに反応するのが正しい対応なのですね。 感謝します
fana

2022/11/04 10:44 編集

これ,「リアクション」が誤読されてるのかな? (ここでは,このサイトでの機能の名称なのだが.【「リアクション」を3種類ほど並べてみたこと】を「てきとー」と言っているだけ)
guest

0

f(x,y) = cos(x)*sin(y) のグラフを眺めてみると,出力したい物と非常によく似ていることに気づくでしょう.
すなわち,(グラフをちょろっと伸縮&オフセットすれば)f(x,y) の値の符号を用いて +, - のどちらを出力すれば良いのかを判断できそうです.

方法論を用意できたので,あとはそれを実装するだけです.
以下のコードはこの話を愚直に書きました.

C

1void F( int n ) 2{ 3 const double PI = acos(-1.0); 4 for( int y=0; y<n; ++y ) 5 { 6 double S = sin( PI*(y+0.5) ); 7 for( int x=0; x<n; ++x ) 8 { 9 double C = cos( PI*x ); 10 putchar( "-+"[ C*S>0 ] ); 11 } 12 putchar( '\n' ); 13 } 14} 15 16int main(void) 17{ 18 int n = 0; 19 scanf( "%d", &n ); 20 F(n); 21 return 0; 22}

何やら人気の課題なのかもしれないし(?) 念のため最も話的に愚直だと思う実装を書いておく.
(呼び出し側の main 関数のところは↑と同一なので省略)

C

1//2種類の文字を交互に出力したいなら,どっちを出力するか?を毎回切り替えればいいよねっていう. 2void F( int n ) 3{ 4 //次に出力する行の先頭で出力すべき文字 5 char FirstOutputChar_for_NextLine = '+'; //最初の行は'+'だよね. 6 7 for( int y=0; y<n; ++y ) //n行分のループ 8 { 9 //この行内で次に出力すべき文字. 10 char OutputChar = FirstOutputChar_for_NextLine; 11 12 for( int x=0; x<n; ++x ) //現在の行のn文字についてループ 13 { 14 //現在出力すべき文字を出力する 15 putchar( OutputChar ); 16 17 //「この行内で次に出力すべき文字」を更新する 18 //今 '+' を出力したなら次は '-' にすればいいし, 19 //そうでないなら次は '+' にすればいい. 20 if( OutputChar=='+' ) 21 { OutputChar = '-'; } 22 else 23 { OutputChar = '+'; } 24 } 25 putchar( '\n' ); //行末で改行 26 27 //(行内の話と同様に) 28 //「次の行の先頭で表示すべき文字」も更新する. 29 if( FirstOutputChar_for_NextLine=='+' ) 30 { FirstOutputChar_for_NextLine = '-'; } 31 else 32 { FirstOutputChar_for_NextLine = '+'; } 33 } 34}

投稿2022/11/04 09:13

編集2022/11/04 11:28
fana

総合スコア11658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2022/11/04 09:32 編集

何か昔同じ話をやったような気がする. 人気のある課題なのかな? 本件では cos(x)*cos(y) とする方が素直と思うが,昔の回答のときに cos(x)*sin(y) を用いた気がするから何となくそれに合わせた.
fana

2022/11/04 09:38

Π の値は 3.14159..... って十分な桁数だけハードコーディングすればいいだろ,とは思うんだけども, そんな桁数覚えてないし,毎回調べるとかどこかにメモしておいたのを引っ張り出すとかするのもちょっとだるいんで,ここでは acos(-1.0) って書いちゃった.
fana

2022/11/04 11:50 編集

ヒントでいいっていうからヒントを書いたらなんかすっごい怒られたので,もっとも話的に簡単であろうと思うやつも追記しておいた. (他者が回答している「足し算の結果の偶奇を見る方法」と比較してもさらに簡単な話であろうと強く信じています) コーディングで行き詰るのは仕方ないとしても,このような「誰でも2分で考え付くような話」の側をひねり出すこと(およびそれを説明すること)すら放棄するのは褒められた姿勢ではないと思うがなぁ.
jimbe

2022/11/05 07:05

関数は習っていないとか putchar は習っていないとか for の中に int って(ry 本人の意思に関係無く詰め込みだけでヤレと言われるのは同情しますが。
fana

2022/11/07 01:09

> 調べても明らかにより高度なものしか出てこず とか(そもそもこの課題の内容で何をどう調べたのか謎だが…),ここで書かれた話に関しても「高度」の一言で終わらせて勝手に詰んでる.私はそんな奴には同情はできないなぁ. そもそもわからんことがあるのは普通のことだし,だからこそ質問なんてしてるんだし,そしたら,調べたことや書かれたことの不明点について 普通に 問えばよいのではあるまいか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問