プログラミング言語Ⅰ・講義メモ

・p.48「非ゼロの判定」から

提出:p.47 演習3-1 ヒント ex0301.cpp(再掲載)

・int型の変数a、bを宣言する
・「二つの整数を入力せよ」と表示
・「変数A:」と表示し、変数aに整数を入力する
・「変数B:」と表示し、変数bに整数を入力する
・(a % b)が非0ならば「BはAの約数ではありません」と表示し
 でなければ「BはAの約数です」と表示する

作成例

/*
    p.47 演習3-1
*/
#include <stdio.h>
int main(void)
{
    int a, b; //int型の2変数を宣言
    puts("二つの整数を入力せよ");
    printf("変数A:"); scanf("%d", &a); //入力案内を表示しキーボードから整数値を入力
    printf("変数B:"); scanf("%d", &b); //入力案内を表示しキーボードから整数値を入力
    if (a % b) //aをbで割った余りが非0ならば
        puts("BはAの約数ではありません");
    else 
        puts("BはAの約数です");
    return 0;
}

p.48 非ゼロの判定

・if文のカッコ内には「式または値」を記述できる。変数1個も式なので、変数を記述しても良い。
・よって「if (変数)」とすることで、「変数の値が非0ならば」を意味できる

p.48 ifの構文図

・if直後のカッコと式または値は必須
・elseの前の文も必須

p.50 等価演算子

・2項==演算子:2項が等しければ1を、でなければ0を返す(戻り値型はint)
・2項!=演算子:2項が異なれば1を、でなければ0を返す(戻り値型はint)

p.51 list0307.cpp

// p.51 list0307.cpp
#include <stdio.h>
int main(void)
{
    int n1, n2; //int型の2変数を宣言
    puts("二つの整数を入力せよ");
    printf("変数1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("変数2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    if (n1 != n2) //n1とn2の値が異なれば
        puts("それらの値は違います");
    else
        puts("それらの値は同じです");
    return 0;
}

p.52 関係演算子

・数値の大小関係を評価して当てはまれば1を、でなければ0を返す演算子群
・「<」「>」「<=」「>=」がある。
 ※「=<」や「=>」は不可。「< =」「> =」は不可。

アレンジ演習:p.52 list0309.cpp

・整数値n1とn2を入力し、下記のどれかを表示しよう
 ①同じ値
 ②n1の方が大きい
 ③n2の方が大きい

作成例

//アレンジ演習:p.52 list0309.cpp
#include <stdio.h>
int main(void)
{
    int n1, n2; //int型の2変数を宣言
    puts("二つの整数を入力せよ");
    printf("n1:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    printf("n2:"); scanf("%d", &n2); //入力案内を表示しキーボードから整数値を入力
    if (n1 == n2) //n1とn2の値が等しければ
        puts("同じ値");
    else if (n1 > n2) //ではなくてn1の方が大きければ
        puts("n1の方が大きい");
    else //どちらでもなければ
        puts("n2の方が大きい");
    return 0;
}

p.53 入れ子になったif文

・入れ子(ネスティング)とはある構造の中に同じ構造があること
・if文は、その内部にさらにif文を書ける

p.53 演習3-2 解答例

・動作は全く変わらない
・しかし、記述方法としては推奨されない。ifの条件の指定にミスがあると「どれも実行されない」ことになりやすい。
・ifの後に「else if」をいくつでも書けるが、最後に「どれでもなければ」を意味する「else」を記述すると良い
・すると、書き換えに強い(変更しやすい)プログラムになる

p.53 演習3-3 ヒント

・絶対値とはその値と0との距離のことで、整数ではそのままの値、負の数では符号を反転した値になる
・符号の反転には単項-演算子(p.28)を用いると良い

作成例

//p.53 演習3-3 最もシンプルバージョン
#include <stdio.h>
int main(void)
{
    int n1; //int型の変数を宣言
    printf("整数を入力せよ:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    if (n1 < 0) //負の数であれば
        n1 = -n1; //符号を反転した結果を代入
    printf("絶対値は%dです。\n", n1);
    return 0;
}

//p.53 演習3-3 別解バージョン
#include <stdio.h>
int main(void)
{
    int n1, n2; //int型の変数を宣言(n1は入力用、n2は絶対値用)
    printf("整数を入力せよ:"); scanf("%d", &n1); //入力案内を表示しキーボードから整数値を入力
    if (n1 < 0) //負の数であれば
        n2 = -n1; //符号を反転した結果を代入
    else //でなければ(0か正の数ならば)
        n2 = n1; //そのまま代入
    printf("絶対値は%dです。\n", n2);
    return 0;
}

自由参加課題 free53.cpp

・整数を入力したら、その値が3の倍数、4の倍数、5の倍数か判定しよう
・2つ以上に当てはまる場合は、すべて表示すること
実行例①:
整数を入力せよ:9
3の倍数
実行例②:
整数を入力せよ:60
3の倍数
4の倍数
5の倍数

p.53 入れ子になったif文(続き)

・if文のifの中にif-elseを記述することができる
・この場合、ifとelseのペアを読み違えないよう注意
・そのため、インデント(字下げ)を行う(VC++でしてくれるのを確認)

アレンジ演習:p.54 list0310.cpp

・入力値が正の数で、
 ・3の倍数なら「正の3の倍数」
 ・でなければ「正だが3の倍数ではない」
・正でなければ
 ・「正ではない」

作成例

//アレンジ演習:p.54 list0310.cpp
#include <stdio.h>
int main(void)
{
    int no; //int型の変数を宣言
    printf("整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力
    if (no > 0) //正の数であれば
        if (no % 3 == 0)
            puts("正の3の倍数");
        else
            puts("正だが3の倍数ではない");
    else //でなければ(正の数でなければ)
        puts("正ではない");
    return 0;
}

p.54 入れ子になったif文(さらに続き)

・入れ子になったif文では読みづらさを防止するために対象範囲を「{」「}」で囲むと良い
・業務(チームルール)によっては「{」「}」で囲むことを義務にしている場合もある
・なお「{」で1行にしても良く、ifやelseのある行の末尾においても良い
 ※ VC++の規定値では前者になり、カスタマイズも可能
・また、p.54の下の例では内側のif-elseには「{」「}」を用いていないが、すべてにおいて「{」「}」で囲むことを義務にしている場合もある

アレンジ演習:p.54 list0310.cpp・続き

・p.54の下の例を参考に「{」「}」で囲んでみよう
・それから、すべてのif-elseにおいて「{」「}」で囲んでみよう

作成例

//アレンジ演習:p.54 list0310.cpp
#include <stdio.h>
int main(void)
{
    int no; //int型の変数を宣言
    printf("整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力
    if (no > 0) { //正の数であれば
        if (no % 3 == 0) { //3の倍数?
            puts("正の3の倍数");
        } else {
            puts("正だが3の倍数ではない");
        }
    } else { //でなければ(正の数でなければ)
        puts("正ではない");
    }
    return 0;
}

※ VC++の設定により勝手に改行される場合もある

//アレンジ演習:p.54 list0310.cpp
#include <stdio.h>
int main(void)
{
    int no; //int型の変数を宣言
    printf("整数を入力せよ:"); scanf("%d", &no); //入力案内を表示しキーボードから整数値を入力
    if (no > 0) { //正の数であれば
        if (no % 3 == 0) { //3の倍数?
            puts("正の3の倍数");
        } 
        else {
            puts("正だが3の倍数ではない");
        }
    } 
    else { //でなければ(正の数でなければ)
        puts("正ではない");
    }
    return 0;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です