特別課題A 「処理の繰り返し」「処理の選択」「配列と文字・文字列」の範囲

(1)奇数(正整数で2で割ったあまりが1のもの)nをキーボードから入力し,nに応じて「*」「-」で以下の模様を描くプログラムを作りなさい。
nは79まで対応しなさい。(pe01ex01.c)
検証はn=1,3,5,7,9,79で行ないなさい。

n=1

n=3

n=5

n=7

n=9

*

***
-*-

*****
-***-
--*--

*******
-*****-
--***--
---*---

*********
-*******-
--*****--
---***---
----*----

(2)奇数(正整数で2で割ったあまりが1のもの)nをキーボードから入力し,nに応じて「*」「-」で以下の模様を描くプログラムを作りなさい。
nは79まで対応しなさい。(pe01ex02.c)
検証はn=1,3,5,7,9,79で行ないなさい。

n=1

n=3

n=5

n=7

n=9

*

-*
**
-*

--*
-**
***
-**
--*

---*
--**
-***
****
-***
--**
---*

----*
---**
--***
-****
*****
-****
--***
---**
----*

(3)奇数(正整数で2で割ったあまりが1のもの)nをキーボードから入力し,nに応じて「*」「-」で以下の模様を描くプログラムを作りなさい。
nは79まで対応しなさい。(pe01ex03.c)
検証はn=1,3,5,7,9,79で行ないなさい。

n=1

n=3

n=5

n=7

n=9

*

*-
**
*-

*--
**-
***
**-
*--

*---
**--
***-
****
***-
**--
*---

*----
**---
***--
****-
*****
****-
***--
**---
*----

 

(4)キーボードから正整数nを読み込み,長さnの棒を「*」で描くプログラムを作りなさい。(pe01ex04.c)
ただし,棒の左端から5,15,25...の位置は「*」でなく「-」で描かれるようにし,10,20,30...の位置は「*」でなく「!」
で描かれるようにします。
また,「正整数を読み込んで棒を描く作業は連続して出来るようにし,負の整数が入力した時点でプログラムは
終了することとします。
実行例が次のようになることを検証しなさい。

<<実行例1>>
n= 23
****-****!****-****!***

<<実行例2>>
n= 38
****-****!****-****!****-****!****-***

 

(5)List3.3.3を参考に,1001から2000までの素数をすべて求め,見つかった素数の個数と,見つかった素数をすべて加えた値を求めよ。(pe01ex05.c)

(6)6の約数は,1,2,3,6となり,約数の個数は4個です。501から530の各数がそれぞれ何個約数を持っているか調べて,次のように表示しなさい。(pe01ex06.c)

  501:    1    3  167  501 ==> 4
  502:    1    2  251  502 ==> 4
  503:    1  503 ==> 2

(7)6の約数は,1,2,3,6ですが,この順に並べると1+2+3=6が成り立ちます。8の約数は,1,2,4,8ですが同様に並べても1+2+4=8とはなりません。同様に28の約数は,1,2,4,7,14,28ですが,1+2+4+7+14=28が成り立ちます。このような数は完全数と呼ばれています。
約数を求めるプログラムを改良して,2から10000までの数を検査して,完全数をすべて求めなさい。(pe01ex07.c)

 

(8)a,b,cは整数であり,500≦a<b<c≦1000を満たしている。a,b,cを3辺の長さとする三角形のうち直角三角形になるものをすべてあげ,総個数を求めるプログラムを作成しなさい。ただし,3辺の長さはお互いに公約数を持たないものだけを求めることとします。全部でいくつ見つかったかも表示しなさい。(pe01ex08.c)
三重ループで a2 + b2 = c2 であるかどうか総当りで調べることにします。その際,各辺が公約数を持たないことをチェックします。

 

(9)int型配列arry1[100],arry2[100]を宣言し,forループを使って,arry1[0]には0を,arry1[1]には1を,arry1[2]には2を,...,arry1[99]には99を格納する作業を行いなさい。次にforループを使ってarry2[0]にはarry[99]を代入,arry2[1]にはarry1[98]を代入,...,arry2[0]にはarry1[0]を代入する作業を行いなさい。arry1とarry2をすべて表示して,作業を確かめなさい。
(pe01ex09.c)

 

(10)int型配列arry[100]を宣言し,forループを使って,arry[0]には0を,arry[1]には1を,arry[2]には2を,...,arry[99]には99を格納する作業を行いなさい。次にforループを使って,arry[0]とarry[99]の内容を交換し,arry[1]とarry[98]の内容を交換し,...適当なところまでこの作業を続け,配列arryが逆順になるようにしなさい。その結果を表示して逆順になったことを確かめなさい。
(pe01ex10.c)

 

(11)文字列(文字型配列)を宣言し,次のように初期化しなさい。char string[]="Tokyo National College of Technology";
最初に関数puts(string)で表示した後,この文字列を逆順に並べ替え,再度関数puts(string)で表示しなさい。
「ygolonhceT fo egelloC lanoitaN oykoT」が表示されたら成功です。(pe01ex11.c)

 

(12)「課題4(3)次の配列を小さい順に並べて表示しなさい。」のプログラムに変更を加え,何回比較したか,何回交換したかを数え,その値を表示するようにしなさい。(pe01ex12.c)

 

(13)「課題4(13)キーボードから入力された文字列に,母音字がそれぞれいくつ含まれているか表示するプログラムを作成しなさい。」のプログラムに変更を加え,大文字小文字を区別して数えるようにしなさい。(pe01ex13.c)

 

(14)奇数(正整数で2で割ったあまりが1のもの)nを入力し,nに応じて「*」「-」で以下の模様を描くプログラムを作りなさい。
nは79まで対応しなさい。(pe01ex14.c)
検証はn=1,3,5,7,9,79で行ないなさい。

n=1

n=3

n=5

n=7

n=9

n=11

*

***
*-*
***

*****
*---*
*-*-*
*---*
*****

*******
*-----*
*-***-*
*-*-*-*
*-***-*
*-----*
*******

*********
*-------*
*-*****-*
*-*---*-*
*-*-*-*-*
*-*---*-*
*-*****-*
*-------*
*********

***********
*---------*
*-*******-*
*-*-----*-*
*-*-***-*-*
*-*-*-*-*-*
*-*-***-*-*
*-*-----*-*
*-*******-*
*---------*
***********