• ベストアンサー

C言語について

初心者で学校の課題をやっているときに疑問がでてきてしまったので、基本的な質問なのですが、教えて頂けたらうれしいです。 1.関数にすることによってどんな利点があるのでしょうか。 2.分岐のif文とswitch文は同じ処理をしていると考えていいのでしょうか。 3.switch文の中にfor文や、for文の中にswitch文など、条件式の中に条件式をいれることはできるのでしょうか?? 一度に3つも質問してしまってすみません。 ぜひ回答をおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

1.関数の利点 1)汎用性のある関数であれば複数の開発者で共有できる 2)同じ処理や似た処理を毎回書くより、プログラムサイズを小さくできる 2.ifとswitch 似ていますが、判定式を評価する回数が異なります。 if~else if~else if~elseの構文では、条件が成り立つまでif、else ifの判定式が毎回評価されますが、switchの構文では判定式は1回のみ評価されます。 3.構文の入れ子 {}で囲むブロックの中には、{}で囲めるブロックを入れ子に出来ます。

neige_6
質問者

お礼

丁寧に回答して頂いてありがとうございました。初心者の私も理解することができました。今後もわからないことがあったら質問すると思うのですが、できたら教えて頂きたいと思います。ありがとうございました。

その他の回答 (3)

  • rancers5
  • ベストアンサー率6% (3/43)
回答No.4

>3.switch文の中にfor文や、for文の中にswitch文など いくらでも可能ですが、あまり多くするのはお勧めできません。 構造が複雑になり、動作確認や保守がやりにくくなります。 例えば、switchの中の条件を関数化するなどしたほうが良いです。 保守を考えると、プログラムテクニックに頼る書き方も本来良くないのですが。

neige_6
質問者

お礼

回答ありがとうございました!switchの中を関数化すると構造が簡単になって、よりいいんですね。今度挑戦してみます。今後もわからないことがあったら質問するかもしれませんが、その時もできたら教えて頂きたいと思います。ありがとうございました!

  • akipapa
  • ベストアンサー率38% (34/89)
回答No.3

関数の効用について共通処理を関数化すりことの効用はすんなりと理解できるでしょう。でも、それだけではありません。 プログラム開発の現場で、行数の多いプログラムほど困るものはありません。保守するときのことを考えて、機能ごとにできるだけコンパクトにすることがだいじです。 関数に分割しないで、だらだらとコーディングしてもプログラムとしてはちゃんと動くものになるのですが、機能ごとに関数にすることで、処理内容が理解し易く、保守性の良いプログラムにすることができます。

neige_6
質問者

お礼

丁寧に教えていただいてありがとうございました!効用を考えることだけでなく、コンパクトにすることも大事なんですね。プログラムを作っていく上で参考にしていこうと思います。ありがとうございました!

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

//重複しないと思われる範囲で 1. 同じ処理を再利用できる。 処理を抽象化することができる。 2. switch の場合、break しないと下に抜けてしまう。 3. ブロックの中にブロックや文は含めることができる。 条件式の中に条件式の意味はよくわからない。

neige_6
質問者

お礼

回答ありがとうございました!3については私の理解がまだ足りないみたいですね^^;しっかり勉強していきたいと思います。ありがとうございました。

関連するQ&A

  • 【C言語】文字列による処理の分岐について

    いつも丁寧な解説拝見しております。 C言語について質問させて頂きます。 シリアル通信によって受信した1バイトの文字列があるとします。 この文字列のパターンよって処理の分岐をさせたい場合、コードはどのように書けば良いのでしょうか。 より具体的に申しますと、 →文字列パターン1の場合、関数1を呼び出す。 →文字列パターン2の場合、関数2を呼び出す。 →文字列パターン3の場合、関数3を呼び出す。・・・・・・ と、100パターンほどの文字列があり、それぞれにおいて異なる関数を呼び出したいと考えております。私の理解は以下に示す通りなのですが、どうも正しい処理が分らないでいます。 ・受信した文字列がどのパターンなのかを判断するために、strcmp関数で比較を行う。 ・多分岐なので、switch case文かelse if文を用いる。 この場合、条件式の中でstrcmp関数による比較を行えば良いのでしょうか。簡単にコードを示して頂ければ幸いです。C言語初心者なので理解に間違いがあるかもしれませんが、どうぞよろしくお願い致します。

  • C言語のお作法 - ”{”の使い方

    C及びC++を学ばないまま、いきなりC#の学習始めました、というレベルの者です。 (下記は適当に引っ張ってきたコードです。) namespace HelloWorld { class Hello { static void Main() { System.Console.WriteLine("Hello World!"); } } } 見た限りどの本もウェブページも、こんな風に書くと"Hello Word!"が表示されます、と、 たいていはここから説明が始まります。 ですが、 ”{” はどのような意味があるのか、の説明が見つからず困っています。 もちろんなんとなくはわかるのですが、どういう時に使うか、 逆にどういう時は使わないか、がわからないのです。 例として、if文とswitch文での使い方で御教示いただければと思います。 if 条件式 { 処理1 } else { 処理2 } switch 条件式 { case 値1: 処理1 case 値2: 処理2 } if文の時はelse毎に囲むのに、switch文の時はcase毎には囲まない。 これは何故なのでしょうか?

  • c言語プログラミングでの質問?です。

    学校でc言語プログラミングを使って簡単なゲームを作りなさい。 という課題が出ました。 下記の条件に沿って作れとのことです。 なかなかいいアイデアが浮かばないんですが、なにかちょうどいいものないですかね? ・scanf文を使うこと。。 ・if文を使うこと。 ・for文(while文)を使うこと。 ・rand関数を使うこと。 ・自分で定義した関数を使うこと。 ・配列または文字列を使うこと。

  • プログラミング(自由課題)

    プログラミングの勉強会で以下のような課題が出されたのですがなかなかいいアイディアが思い浮かびません。初心者にもあまり難しくないものは何かないでしょうか?あったら教えてください。 内容は自由であるが、必ず 『繰り返し』(for文またはwhile文) 『条件分岐』(if文またはswitch文) 『配列』 『関数』(main関数以外の自作の関数) を含むこと。 初めてプログラムを見た人にもわかる説明ができるようにしておくこと。

  • C/C++ ソースのコーティングについて

    最近、C/C++ ソースのコーディングに関して興味を持ちました。 そこで質問します。 皆様は普段プログラムを書くときにどんなコーディングをしていますか。 人それぞれ記述が異なると思いますが、何か自分の中でのコーディング・ルールが あれば教えて下さい。できるだけ詳しくお聞きしたいです。 ちなみに私の場合は (1)return、sizeof 演算子には必ず括弧を付けます。 (2)if、else、while、for には必ず{、}のブロックを記述して省略しません。 (3)関数を呼び出すとき、引数と引数はスペースを必ず挿入します。→strcpy( s, t );  ただし、if、while、for の条件式の中ではスペースを入れません。→while ( fgets(buff,sizeof(buff),fp) != NULL ){ … } (4)2項(3項)演算子はスペースを両端に挿入します。→ret = 2 + 3;  単項演算子はスペースは挿入しません。→i++、*str (5)ブロックのインデントは  if ( 条件式 ){   処理  }  else{   処理  } などがあります。 特に詳しく知りたいのは(5)です。 タイプ1 if ( 条件式 ){  処理 } else{  処理 } タイプ2 if ( 条件式 ){  処理 }else{  処理 } タイプ3 if ( 条件式 ) {  処理 } else {  処理 } タイプ4 if ( 条件式 )  {  処理  } else  {  処理  } それではコーディング・ルール(こだわり)などを教えて下さい。 なお、今回の質問は、より見やすいコーディングを目指しての質問です。 よろしくお願いします。

  • C言語で%を使わない余りの出し方

    c言語で%を使わない余りの出し方の問題を出されたのですが、色々考えたのですが全くわかりません まず余りの限界(余りがどこまであるか)がどこまであるか。 そしてwhileかforを使って余りを出す方法を自分で考えたのですが全くできませんでした。 自分の中ではif文でaを余りとして(a==1 && a==2)など考えたりしました。 またこれはポインタも使わずavgr**なども使いません。 さらに発展した問題で if文、switch文、for文、while文を使わないで余りを出すというのが出てきました 情けないのですが、何かアドバイスがあれば教えていただきたいと思います

  • C言語 よく使うのは?

    C言語の参考書で、例えば1章~8章まであるとすると、 1章~前半くらいは、printfや変数や、演算など出てきると思うんですが、後半にかけて、配列やポインタや関数など出てくると思います。 実際に仕事で、よく使うのを挙げるとどんなのですか?(例えば、ポインタはよく使うや配列もよく使うや) もちろん、変数や演算などが出来ないと条件分岐や配列もポインタも何も出来ないと思うんですが、 上手く言えないんですが、for文はよく使うから、ちゃんと理解していないとダメとか、仕事ではポインタがしょっちゅう使うとか、ありますか? 本屋さんで見ると、ポインタ専用の本や、関数専用の本があるので、よく使うのかなと思いました。 それか、難しく理解が難しいから、より詳しく書かれているんでしょうか? 上手く説明が出来ていないですが、よろしくお願いします。

  • C言語の関数ポインタのイメージで処理させるには?

    いくつも条件分岐があり、配列?テーブル?か何かに 登録しておいて、対応づけにより、C言語の関数ポイン タのように処理をしたいのですが、どう記述すれば いいのでしょうか。 例えば、変数$stool が”kitte”の場合は、関数 func_kitte()を呼び、変数$stool が"hagaki"の場合 関数func_hagaki()を呼び出したいのです。 この条件が300個以上あり、全部if~elsif文で 記述するより、配列か何かに登録する方が効率的だと 思ったからです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか?

    PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか? for文やwhile文ではbreakやcontinueなどが使えるようですが、if文にはないのでしょうか? 条件分岐がいくつかあって、その一つを途中で抜けて次の条件分岐へと移行したいのですが、 exitを使ってしまうと、次へ行かずに処理が中止されてしまいますし、 どのようにすればよいのか分からず困っています。何かよい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • pythonのif for文の処理を複数行書きたい

    C言語などはfor if文を使うとき if(条件式){ 処理 } for(条件式){ 処理 } など中括弧を使いますが、 pythonはカッコを使わず for 条件式: 処理 などと、中括弧を使いません。 しかし for 条件式: 処理1、 処理2, 処理3… などと言った処理を書くと、処理1だけがループされ、 if 条件式: 処理1、 処理2, 処理3… だと、処理1だけがifの対象になりますよね 処理1,2,3すべてがforやifの対象になるにはどういう書き方をすればいいんでしょうか。 「for if 複数行処理」などで検索しても、or andなど複数条件などがヒットして中々探せません

専門家に質問してみよう