情報科学演習 実習課題 2018.01.15

Back to text page


文字列を扱うプログラムを実行する際には必ずページャの less に処理を渡すこと.

$ ./a.out | less

実習課題

  1. 文字の基本

    以下に示す配列を用意します.

    	char str[5]="abcd";
    

    この文字列を %s を使って画面に表示し,さらには %c を使って表示させるプログラムを作成しましょう.

  2. 文字列の基本

    文字列の配列を用意して,それを逆順に表示するプログラムを作成しましょう.

    abcdefg
    gfedcba
    

  3. 文字コードと文字

    以下に示す配列を用意します.

    	int ary[5]={65, 75, 85, 95, 105};
    

    この配列の各要素を for 文により画面に出力する際に, printf の中で %d を使う場合と %c を使う場合で結果を比較してみましょう.

  4. 設問iiを改造して,以下のように表示するプログラムにしましょう.

    abcdefg
     bcdefga
      cdefgab
       defgabc
        efgabcd
         fgabcde
          gabcdef
    

  5. 以下に示す文字列配列を用意します.

    	char str[11] = "abcdefghij";
    

    0から5までの整数 m と2から4までの整数 n の二つを乱数を用いて発生させます.配列 str m 番目の要素を n 回繰り返すように文字列の一部を置き換えて表示するプログラムを作成しましょう.

    m=4 and n=3
    abcdeeehij
    

  6. ランダムな文字列

    アルファベットの小文字26文字の範囲内の文字をランダムに20文字表示するプロ グラムを作成しましょう.なお,文字の重複はあっても良いものとします.

    nwlrbbmqbhcdarzowkkyh
    

    教科書のp.143からのASCIIコード表を利用すると,アルファベットを数値で扱う ことが出来ます.そこでコード表にある整数値を要素として持つ int 型の配列を作り,上の例のように %c を使って教科書のp.14にある例 題2.4のようにコードから文字を表示させます.
  7. 並べ替え

    前問を改造し,アルファベット順に並べ直して表示する機能を付加しましょう.

    
    nwlrbbmqbhcdarzowkky
    abbbcdhkklmnoqrrwwyz
    

  8. 文字追加表示

    以下に示す配列を用意する.

         char str[27] = "abcdefghijklmnopqrstuvwxyz";
    

    1桁の正の整数を乱数で発生させて,その文字数分のところで毎回スペースを入れ て表示させましょう.

    
    4
    abcd efgh ijkl mnop qrst uvwx yz
    

    この問題では if 文と剰余の使用法がポイントです.
  9. 並べ替え2

    前問の配列を使用してプログラムを一部改造します.1桁の正の整数を乱数で発生させてその文字数分ずらし て表示させましょう.

    
    3
    xyzabcdefghijklmnopqrstuvw
    

  10. 文字列に関する代入操作

    数値を値に持つ変数については,値を別の変数に代入することは等号記号 = を用いて簡単に行えますが,文字列をそのまま代入することはC言語では簡単ではありません.そこで,文字列の値の代入に関する方法として,以下の2つを試して下さい.

    	char str1[4] = "abc";
    	char str2[4];
    

    のような2つの文字列配列を用意して,配列 str1 の中身である文字列 abc を配列 str2 に移す操作を行なう場合,for 文を使用して,1文字ずつ代入するプログラムを作成しましょう.

    次に,C言語に用意されている文字列コピー関数 strcpy を使用して試しましょう.この関数は教科書のp.91に説明があるように以下のようにして使用します.また,このとき,教科書のp.89にあるようにヘッダファイルを追加する必要がありますので注意してください.

    	char str1[4] = "abc";
    	char str2[4]
    	
    	strcpy(str2, str1);
    	
    	printf("%s\n", str2);
    

  11. 文字列の比較

    "abcde" の5文字を乱数を利用してランダムに入れ換える操作を,再びもとの文字列である "abcde" に戻るまで続けるプログラムを作成しましょう.文字列のランダム化は,適当な二つの乱数を発生させてその文字どうしを入れ換える操作を10回繰り返すこととします.

    ここで,文字列が同じかどうかを比較するための関数 strcmp も紹介しておきます.前問と同様にヘッダで <string.h> をインクルードして使用します.この関数は引数に与えられた文字列が一致する場合には数値の0を戻り値として返す関数です.ですので,今回の場合は無限ループの中で以下のように使用すれば実現できます.

    	if(strcmp(str, "abcde") == 0)
    		break;
    

    Start: abcde
        1: caedb
        2: ecbad
        3: adebc
        4: aebdc
        5: decba
        6: deacb
        7: abedc
        8: bcaed
        9: daebc
       10: ecbda
       11: abced
       12: adbec
       13: badec
       14: eacdb
       15: ebdac
       15: eadbc
       17: dabec
       18: dcabe
       18: deacb
       20: ecadb
       21: becda
       22: eacbd
       23: aedbc
       24: abcde
    

    このプログラムは少ないときには数回で終わりますが,長いときは1000回近くランダム化を続けることもあります.

Back to text page