条件式 - switch -

課題1

下記のプログラムをswitch1.cとして書き、実行することで、switch文の動作を 確認せよ。

#include <stdio.h>

int main(void) {

    int  a;

    for(a=1; a<=5; a++){
        printf("-------------\n");
        switch(a){
            case 1:
                printf("a=1\n");
            case 3:
                printf("a=3\n");
            case 5:
                printf("a=5\n");
            default :
                printf("others\n");
        }
    }
    return 0;
}

課題2

下記のプログラムをswitch2.cとして書き、実行することで、switch文におけるbreak の働きを理解せよ。

(プログラム)
#include <stdio.h>

int main(void) {

    int  a;

    for(a=1; a<=5; a++){
        printf("-------------\n");
        switch(a){
            case 1:
                printf("a=1\n");
                break;
            case 3:
                printf("a=3\n");
                break;
            case 5:
                printf("a=5\n");
                break;
            default :
                printf("others\n");
        }
    }
    return 0;
}

課題3

次のプログラムの(あ)の行を、下記の1-5のそれぞれに置き換えることが可能か どうか答えよ。また、置き換えが可能な場合、そのときの実行結果も示せ。
(実際にプログラミングする際には、コンパイル可能かどうかで、置き換え可能か判断 できる。)

  1. case 'A':
  2. case 3.5:
  3. case "ABC":
  4. case a>2:
  5. case MAX:

#include <stdio.h>
#define MAX 2

int main(void){

    int a;

    for(a=0; a<5; a++){
        printf("a = %d \n", a);
        switch(a){
            case 3:                  (あ)
                printf("成功!\n");
                break;
        }
    }
    return 0;
}

課題4

  1. 次のプログラムによって、画面に出力される結果を示せ。
  2. 次のプログラムのswitch case文の部分のみを、if文またはelse if文を用いて 書き直せ
#include <stdio.h>

int main(void){

    char a[]="I am very hungry";
    int i=0;

    printf("文字列 = %s\n", a);
    while(a[i] != '\0'){
        switch(a[i]){
            case 'a':
                a[i] = 'b';
                break;
            case 'v':
            case 'h':
                a[i] = 'w';
                break;
            case 'y':
                a[i] = 'z';
                break;
            default:
                a[i] = '*';
        }
        i++;
    }
    printf("文字数 = %d\n", i);
    printf("文字列 = %s\n", a);

    return 0;
}

課題5

ソフトウェア基礎aのクラスA, B, C(小文字a, b, cにも対応するとする) を入力すると担当者の名前を表示させ、それ以外の文字入力に対しては、「そのような クラスはありません」と表示させたい。 目的を達成するプログラムをswitch5.cとして書き、下記の実行例のように、 正しく実行されることを確認せよ。

(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
a
担当者は小豆畑先生です


hp3225[susaki]502:~/program% 
hp3225[susaki]502:~/program% ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
 A
担当者は小豆畑先生です
hp3225[susaki]503:~/program% 
hp3225[susaki]503:~/program%  ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
 b
担当者は北風先生です


hp3225[susaki]504:~/program% 
hp3225[susaki]504:~/program%  ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
 B
担当者は北風先生です


hp3225[susaki]505:~/program% 
hp3225[susaki]505:~/program%  ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
 c
担当者は鈴木先生です
hp3225[susaki]506:~/program% 
hp3225[susaki]506:~/program%  ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
 C
担当者は鈴木先生です


hp3225[susaki]507:~/program% 
hp3225[susaki]507:~/program%  ./a.out
ソフトウェア基礎aのクラス名を入力してください(A,B,Cのいずれか)
 d
そのようなクラスはありません
hp3225[susaki]508:~/program% 

課題6

任意の数のデータを入力させ表示させる場合に、オプションを1つだけ 選択させることで、表示方法を変更可能としたい。 下記の実行例に示された3つのオプション通りに、表示方法を可能とする プログラムをswitch6.cとして書き、正しく表 示されることを確認せよ。3つのオプションa,b,c以外の文字が入力されたら、例題13の 通りに表示されるものとする。この場合、switch文か、else-if文のどちらかを使用せ よ。

(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]507:~/program%  ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(1つだけ)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
a
4
5
6
7
8


hp3225[susaki]502:~/program% 
hp3225[susaki]507:~/program%  ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(1つだけ)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
b
data[0]=4 data[1]=5 data[2]=6 data[3]=7 data[4]=8 


hp3225[susaki]503:~/program% 
hp3225[susaki]507:~/program%  ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(1つだけ)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
c
8 7 6 5 4 


hp3225[susaki]504:~/program% 
hp3225[susaki]507:~/program%  ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(1つだけ)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
z
4 5 6 7 8 


hp3225[susaki]505:~/program% 
hp3225[susaki]507:~/program%  ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(1つだけ)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
d
4 5 6 7 8 
hp3225[susaki]506:~/program% 

課題7

上記の課題6では、オプションを1つしか選択できなかった。しかしここでは、 3つのオプションのうち、複数のオプションの組合せも変更可能としたい。 しかも、オプションの様々な入力に対しても、同一の結果を表示させたい。 例えば、abc, acb, bac, bca, cab, cbaのような文字列に対しても、 全て同様に「改行つき、要素数つき、逆順で」表示させるというものである。

下記の実行例に示された3つのオプション通りに、表示方法を可能とするプログラムを switch7.cとして書き、正しく表示されることを確認せよ。この場合も、 課題12-4と同様、switch文か、else-if文のどちらかを使用せよ。

(実行例)
hp3225[susaki]501:~/program% 
hp3225[susaki]501:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
ab
data[0]=4
data[1]=5
data[2]=6
data[3]=7
data[4]=8


hp3225[susaki]502:~/program% 
hp3225[susaki]502:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
ba
data[0]=4
data[1]=5
data[2]=6
data[3]=7
data[4]=8


hp3225[susaki]503:~/program% 
hp3225[susaki]503:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
bc
data[4]=8 data[3]=7 data[2]=6 data[1]=5 data[0]=4 


hp3225[susaki]504:~/program% 
hp3225[susaki]504:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
ca
8
7
6
5
4


hp3225[susaki]505:~/program% 
hp3225[susaki]505:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
bac
data[4]=8
data[3]=7
data[2]=6
data[1]=5
data[0]=4


hp3225[susaki]506:~/program% 
hp3225[susaki]506:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
cab
data[4]=8
data[3]=7
data[2]=6
data[1]=5
data[0]=4


hp3225[susaki]507:~/program% 
hp3225[susaki]507:~/program% ./a.out
データを入力してください
4
5
6
7
8
データ表示のオプションを入力してください(複数可)
a: 改行して表示
b: 何番目の要素かを表示
c: 入力とは逆順に表示
オプションなしの場合は z を入力してください
z
4 5 6 7 8 
hp3225[susaki]508:~/program% 

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]