ブロック文(複文)について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
wrsvrsk
記事: 11
登録日時: 2年前

ブロック文(複文)について

#1

投稿記事 by wrsvrsk » 2年前

苦しんで覚えるC言語の
https://9cguide.appspot.com/07-03.html
7章:比較と判断 3. 複数の処理の実行
より引用
if (score > 100) {
printf("入力が 100 より大きいので修正します。\n");
score = 100;
}
printf("点数は %d 点です。\n",score);
引用終わり
最初はブロック文のイメージがしにくかったのですが、変数スコアが100より
大きい場合、
"入力が 100 より大きいので修正します と表示して
score=100 scoreを100に修正する、

(条件を1回限り示してその条件に対する)2つの処理を{}でまとめる
機能なんだと理解したわけです。

https://9cguide.appspot.com/08-01.html
8章:場合分け処理を行う 1. 2つの場合分け
より引用

また、if~else文で複文を使う場合には、次のように書きます。

if (suuti == 10) {
printf("入力値は10です。\n");
} else {
printf("入力値は10ではありません。\n");
}
引用終わり
ここでは{}の中の処理がそれぞれ一つですし{}がなくてもプログラムは動きます。
ブロック文(複文)の意味が分からなくなってしまいました。
よくよく考えれば
int main(void)
{

これだって{}を使っているからブロック文、複文だってことになりますね。一番最初に覚えるプログラムですが。
{}は単純に処理を見やすくする記号なんでしょうか?
2つめのプログラムの場合{}があれば分かりやすい例ということで無くても
同じプログラムのようですし、分からないです。一つ目は{}なしだと動かないんですかね?
{}の意味はなんなのか、全てブロック文なのか。ブロック文にもいろいろなパターンがあるのか、{}の一部分の機能ガブロック文なのか、等々。

たいちう
記事: 418
登録日時: 9年前

Re: ブロック文(複文)について

#2

投稿記事 by たいちう » 2年前

if や else は、条件を満たすと直後の処理が1つだけ実行されると考えてください。
直後の処理がブロック文の場合は、ブロック文全体が実行されます。

1つめの if の例では、{ } をなくしてしまうと、printf だけが直後の処理になり、
score = 100; は、if の条件に関わらず必ず実行されてしまいます。

2つめの if-else の例では、ブロックの中身が1行だけなので、
{ } をなくしても、同じ処理が実行されます。

最後の main の例については、関数定義なので別物と考えてください。
同じ記号が使われているし、他にも共通する部分はありますが。
関数の中身が1行だけだとしても、{ } は省けません。

wrsvrsk
記事: 11
登録日時: 2年前

Re: ブロック文(複文)について

#3

投稿記事 by wrsvrsk » 2年前

>if や else は、条件を満たすと直後の処理が1つだけ実行されると考えてください。
なるほど、{ }を使うと2文を1つにまとめる、2つで1つの処理を行ったと考えるわけですね

>1つめの if の例では、{ } をなくしてしまうと、printf だけが直後の処理になり、
score = 100; は、if の条件に関わらず必ず実行されてしまいます。

この例は非常に分かりやすいですね

>2つめの if-else の例では、ブロックの中身が1行だけなので、
{ } をなくしても、同じ処理が実行されます。

テキストでブロック文を使うと書いてありますけど、ここでの目的は複数文を1つにまとめる
ということではなくて、見た目を分かりやすくするために{ }を使っているのですね?
とするとテキストの説明は理解を妨げる説明ではないかと思います。

どうも丁寧で簡潔な解説ありがとうございました。

たいちう
記事: 418
登録日時: 9年前

Re: ブロック文(複文)について

#4

投稿記事 by たいちう » 2年前

> とするとテキストの説明は理解を妨げる説明ではないかと思います。

一個人が言語を1つ丁寧に説明するサイトを作成するのは大変な労力でしょう。
特に「こう書いた方が理解してもらいやすいのではないか」と、
色々工夫されているようですが、この箇所についてはwrsvrskさんには
逆効果になってしまったという事なのでしょう。

自分に合わないと思ったら別のサイトや本を探せばよいし、
許容範囲ならば理解できない箇所をここで聞けばよいでしょう。


> どうも丁寧で簡潔な解説ありがとうございました。

解決したら「解決チェック」をしてください。

wrsvrsk
記事: 11
登録日時: 2年前

Re: ブロック文(複文)について

#5

投稿記事 by wrsvrsk » 2年前

確かに、私の理解力の問題や、本という媒体の性質上、難しいところがあるのは痛感しています

解決という表示はずっと気になっているのですが、解決しましたと明記するだけでよろしいのでしょうか?
フォーラムルールを読んでもボタンを押せとかそういうことが書いてなくて。他の例をみると解決した、と明記しなくても
解決と表示してるのもあるので、間違ってたら大変すみません。
ブロック文の用法についての疑問は解消しました。問題は解決しました。

返信

“C言語何でも質問掲示板” へ戻る