「C言語/制御文」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
標準ライブラリ関数を「命令」としていたので「関数」に訂正(JISX3010で命令としていないことを確認)。
Ef3 (トーク | 投稿記録)
cleanup, s/#include "stdio.h"/#include <stdio.h>/, s/#include "string.h"/#include <string.h>/
タグ: 2017年版ソースエディター
29 行
int main(void)
{
int a = 4;
if (a==4) {
printf("aは4である。\n");
int g = 15;
printf("gは%dである。\n",g);
}
 
return 0;
}
47 ⟶ 46行目:
このように、if文の条件式(上記のプログラムの場合は <code>a==4</code>)が満たされるときには中カッコ{}の内部が実行される。
 
なお、条件式を書くときの等号は、<code>==</code>になる。条件式における等号は、けっして<code>=</code>ではない。(C言語では、ひとつだけのイコール記号<code>=</code>は代入記号の意味である。)
 
 
195 ⟶ 194行目:
</syntaxhighlight>
 
scanf_s の3つ目の引数(「10」)は、入力するデータサイズの限度です。
 
 
* 参考文献サイト
:Yahoo知恵袋『c言語実行画面がすぐ消えてしまう 僕はvisual stu』 [https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13159333633] 2018年7月2日に閲覧
 
(※ ウィンドウズのVisual C では、コード実行終了後にウィンドウがすぐ消えてしまうのが標準設定になっている。なので<code>system("pause")</code>などを使う必要がある。これは標準入出力には入ってないので、<code>#include <stdlib.h></code>でインクルードしないといけない。)
206 ⟶ 205行目:
if文は、0が偽、0以外が真であることを用いて、次のように簡潔に書き換えることができる。
<syntaxhighlight lang="C">
if (i != 0)
//↓
if (i)
 
if (i == 0)
//↓
if (!i)
</syntaxhighlight>
 
C99では、stdbool.h が導入され上記のコードは次の様に書くことができる。
<syntaxhighlight lang="C">
#incude <stdbool.h>
 
if (i != fase)
//↓
if (i)
 
if (i == false)
//↓
if (!i)
</syntaxhighlight>
 
219 ⟶ 231行目:
<syntaxhighlight lang="C">
//例 if文のネストの使用例
#include "<stdio.h">
 
int main(void)
237 ⟶ 249行目:
//例 if文のネストの使用例
// Visual C 用
#include "<stdio.h">
#include <stdlib.h>
 
int main(void)
259 ⟶ 271行目:
<syntaxhighlight lang="C">
// 例 if文で&&演算子を用いる。
#include "<stdio.h">
 
int main(void)
276 ⟶ 288行目:
 
<code>==</code> ではなく、<code>strcmp</code>をつかわなければいけない。
なお、strcmpを使うためには <code>#include "<string.h"></code> で string.h をインクルード(導入)する必要がある(しないとエラーになる)。
 
なお <code>strcmp</code> 関数は文字列どうしを比較して、一致したときに(1ではなく)0を返す組み込み関数である。
283 ⟶ 295行目:
;コード例
<syntaxhighlight lang="C">
#include "<stdio.h">
#include "<string.h">
 
int main(void)
311 ⟶ 323行目:
;コード例
<syntaxhighlight lang="C">
#include "<stdio.h">
#include "<string.h">
 
int main(void)
352 ⟶ 364行目:
 
たとえば
:a==1なら、命令文m1を実行
:a==2なら、命令文m2を実行
:a==3なら、命令文m3を実行
:a==4なら、命令文m4を実行
(以下略)
 
364 ⟶ 376行目:
(イメージ)
switch(a)
case 1: 命令文m1 ; break ;
case 2: 命令文m2 ; break ;
case 3: 命令文m3 ; break ;
case 4: 命令文m4 ; break ;
(以下略)
 
384 ⟶ 396行目:
 
switch
:case 1: 命令文m1 ;
:case 2: 命令文m2 ;
:case 3: 命令文m3 ;
:case 4: 命令文m4 ;
(以下略)
 
というコードなら、もしa=2なら、実行されるのは、命令文m2だけでなく、さらに命令文m3や命令文m4も実行してしまいます。
 
このような仕組み(つまりbreak文がないかぎり、次の関数を実行してしまう)のことを'''フォールスルー'''と呼びます。
 
 
このようなフォールスルー的な動作を行うことには、けっして、なんらかの深い工学的意味がありはしません。
 
単に、昔のC言語の開発者が、こういう仕組みで作ったままのものが、いまだに残っているだけです。
 
ですから、ほかのプログラム言語では、switch文においてフォールスルー的な動作が廃止されている場合もあります。たとえばグーグルの開発した「Go言語」というプログラム言語では、原則的にフォールスルーは行わないようになっており、例外的に現在実行中のcaseの下にある次のcaseを実行したい場合にだけ「fallthrough」という関数キーワードを付け加えるという仕組みです。(もちろんC言語には「fallthrough」関数キーワードはない。)
 
C言語を知りGo言語やSwift言語を学ぶ人は、switch分がディフォルトではフォールスルーしないことに気がつかづ混乱することがある。Rubyではこの混乱を避けるためswitch/case文ではなく、case/when(then)文を用意し転換教育がスムースに行われるよう配慮した。
 
ともかく、C言語のフォールスルーを原則とする仕組みは、単なるローカル・ルールですので、悩む必要はありません。
425 ⟶ 439行目:
switch (整数式){
case 整数定数式:
break;
.
431 ⟶ 445行目:
.
default:
文;
}
</syntaxhighlight>
668 ⟶ 682行目:
英語における「for」は、英語の前置詞(ぜんちし)というものの一つです。中学校でまだ前置詞を習ってない人は、わからなくても気にしないでください。
 
さてプログラミングにおけるfor文は、「;(セミコロン)」で区切られた、初期化式、前実行式(制御式、継続条件式とも呼ばれる)、後実行式、及びループ本体と呼ばれる文からなる。
 
初期化式では宣言を行ってもよい。
690 ⟶ 704行目:
{
int i;
for (i = 0; i < 5; i++i)
printf("%d ",i);
//「0 1 2 3 4」と表示される。
705 ⟶ 719行目:
{
int i, j;
for (i = 1; i <= 9; i++i) {
for(j = 1; j <= 9; j++j) {
printf("%2d ", i*j);
}
printf("\n");
}
return 0;
}
</syntaxhighlight>
740 ⟶ 755行目:
int main(void)
{
while (1) {
double d;
printf("正の数を入力してください。(0以下で終了):");
scanf("%lf", &d);
if (d<=0) break;
printf("%fの平方根は%f。\n", d, sqrt(d));
}
802 ⟶ 817行目:
[[File:Destination Continue Programming in If sentence in For sentence.svg|thumb|500px|continue文の移動先の説明図]]
 
<!--
<ref>『JISX3010:2003』p.104「6.8.6.2 continue文」</ref>
continue文(コニュティニューぶん)とは、分岐文の内の1つであり、ループ本体の中で使われ、ループ本体の終わりへ制御を移す。
924 ⟶ 939行目:
{|class="wikitable"
|+ 関係演算子
! 演算子の名称 !!   例   !! 意味
|-
| <演算子 || a < b || aの値がbより小さければ1、それ以外の場合は0
|-
| >演算子 || a > b || aの値がbより大きければ1、それ以外の場合は0
942 ⟶ 957行目:
 
 
たとえば
if(a <= b)
の場合で、もし aの値 が b以下 なら、このif文は内部処理的に 1 を返す。