c言語のfor文の問題が理解できなくなってしまったので至急教えて欲しいです。
例えばですが、左上を直角とする三角形を表示させる時は下記のようなプログラムを書きます。この時の2つ目のfor文は横の行の*の数を表してると思うのですが、なぜ初期設定にj=0という風に書いているのでしょうか。一行目は*が10個表示されるならj=10と書いてはいけないんですか?
もう一つ質問したいことがあるのですが、この2つのfor文を for (i=1; i<=10; i++)for (j=1; j<=10-i; j++)のように1繰り上げて書くのはダメなんでしょうか。i=0のように0始まりだと個人的に違和感がありうまく理解できません。できるだけ詳しく教えて欲しいです。お願いします。
#include <stdio.h>
int main(void) {
int i, j;
for (i=0; i<10; i++){
for (j=0; j<10-i; j++){
printf("*");
}
printf("\n");
}
return (0);
}
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
「もう一つ」の方を先に書いてしまうと
一般に C では「0 からはじめる」のがふつうなのでこの先 C を続けていくつもりなら慣れるべし
だな. もちろん「個人で」やるだけならどう書こうと勝手だが, 「他人」がからむ場合には「一般」を無視するわけにはいかない.
で戻ると「初期設定」も「結果として正しく動く」ように書けばいい... んだが, 具体的には全体としてどう書くつもり?
No.2
- 回答日時:
「正しく動かない」って, どういうこと? 具体的にはどのような動作をするの? 逆に「正しく動く」ときには, どのように動いてほしいの?
何をどう考えて「for(j=10;j>0;j--)にすればいいのかなとは思った」のですか?
ということを*具体的に*説明してほしい.
No.3
- 回答日時:
どう書いてもかまいません。
結局、想定通り表示されるのであれば。
考えにくいやり方にする必要はありません。
ただデバッグなど、ほかの人のわかりやすいやり方が
あなたのやり方と同じだとは限らないので、
読めるようにしておかなければいけませんが。
#include <stdio.h>
int main(void) {
int i, j;
for (i=10; i; --i) {
for (j=i; j; --j) {
printf("*");
}
printf("\n");
}
for (i=0; i<10; i++){
for (j=i; j<10; j++){
printf("*");
}
printf("\n");
}
return 0;
}
No.4
- 回答日時:
>正しく動かないのでどうすればいいのか分からない状態です。
あ、これは論外ですね。正しく動くように考えてください。
正しく動かないということは、わかってないからです。
だからわかりやすいと思うのはあなたの妄想です。
No.6
- 回答日時:
>この2つのfor文を
>for (i=1; i<=10; i++)
> for (j=1; j<=10-i; j++)
>のように1繰り上げて書くのはダメなんでしょうか
j<=10-i は j<=10-(i-1)
かな。それはおいといて
別に1から始めても良いのだけど
0 から始めるのに慣れた方がいいです。
① Cでは配列のインデックスは先頭からの
オフセットという意味なのでゼロから始まります。
② 他の 言語でも、javaの文字列中の文字の位置とか
pythonのスライスによる位置も ゼロから始まります。
それから、プログラミングでは、範囲を指定するのに
inclusive-exclusive(最初を含め、最後を含めない)
を使うのが定跡になってます。
C の
for (i = 0; i < 10; i++) {
というような書き方がそれ。
for (i = a; i < b; i++) {
と書くとループ回数が b - a
になりわかりやすいとか、
n = 3
for (i = 3; i < n; i++) {
でループを一度も回さないようにできるとか
#n=2
#for (i = 3; i <= n; i++) {
#は気色悪い
いろいろメリットがあるので
広く使われてます。
こういうイディオムに逆らう書き方をすると、
他の人がソースを読むとき負担になるので、
とっても嫌がられます(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
for文の中にswitch文はいれられ...
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
プログラム
-
xのy乗を求める問題で…(ただし...
-
プログラミングで二番目に大き...
-
直角三角形を表示するプログラム
-
1年単利金利 0.2% の A銀行と...
-
if文の中に
-
データ管理プログラムを作って...
-
c言語で平均をだす
-
C言語についてですfor ifをつか...
-
分散を求めるプログラム
-
素因数分解のプログラムを作成...
-
C言語 重複しない4ケタの乱数...
-
配列を使って魔方陣
-
C言語基本 2次元配列(for文...
-
乱数を用いたプログラミング
-
for文のプログラミング 私は、...
-
C言語の二分法のプログラムにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
getcの改行判定
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
プログラミングに関して
-
C言語についてですfor ifをつか...
おすすめ情報
「もう一つ」の方は理解できました。ありがとうございます。
初期設定の方ですが、j=10にしたいとは言ったものの結果として正しく動かないので困っているところです。for(j=10;j>0;j--)にすればいいのかなとは思ったのですがこれだと正しく動かないのでどうすればいいのか分からない状態です。