更新日 |
|
2018-10-25 |
- [pp4-1.c](必須)
画面に
Welcome
to
C!
と表示するプログラムを,printf を一つだけ使って作りなさい。
次の点に注意すること。
- ソースファイルの 1 行目には,コメントとしてソースファイル名を記入することとする。
- ソースファイルを作ったら,コンパイルしてプログラムを実行し,
その結果が正しいことを必ず確認すること。
- 表示の最後にも改行を出力すること。
-
[pp4-2.c](必須)
二つの printf を使って,画面に
3 * 2 = 6
3 / 2 = 1
と表示するプログラムを作りなさい。ただし,printf
の二重引用符 " " の中には数字を一切書かないこと。
- [ppa4-1.c]
画面に
"Welcome to
C!"
と表示するプログラムを,
printf を一つだけ使って作りなさい。
なお,表示の2 行目(C! の行) の行頭を字下げするために,タブ文字 \t を使うこと。
タブによる字下げの量は,端末の設定によって変わるため,上と同じ字下げ量にならなくともよい。
1 行目は字下げしない。
|
2018-10-29 |
- [pp5-1.c](必須)
講義資料のリスト 1.7 をもとに,
変数 integer1 と integer2 に格納した 2 整数の積 (product)・
商 (quotient)・余り (modulus) を全て求めて表示するプログラムを作りなさい。
プログラムを実行して計算結果を確認しなさい。
なお,printf で % そのものを出力したければ,二重引用符の中に
%% と書く。
- [pp5-2.c](必須)
キーボードから入力する 3 つの整数の平均値を求めて表示するプログラムを作成しなさい。
平均値は整数で求まればよい。
ただし,必ず次の形式で表示するプログラムにすること
(10,20,30 を入力した場合の例)。
Average of 10, 20 and 30 is 20
- [ppa5-1.c]
キーボードから入力した3桁の整数の,各桁の数値を空白で区切って表示するプログラムを作りなさい。
例えば
123 と入力すると,1 2 3 と出力する。
ヒント: % 演算子と / 演算子で各桁の数値を取り出せばよい。
|
2018-11-02 |
以降の問題では字下げや空行の入れ方等,コードの読みやすさにも配慮すること。
また,Emacs でタブキーを押し,字下げの仕方が正しいかどうかの確認を行うこと。
- [pp6-1.c](必須)
キーボードから2つの整数を入力し,大きい方の整数のあとに「is larger」という文字列をつけて表示するプログラムを if 選択構造を使って作りなさい。
2 つの整数が等しいときは,「These numbers are equal」というメッセージを表示する。
例えば,入力が 5 と 10 のときには「10 is larger」と表示し,
入力が 5 と 5 のときは「These numbers are equal」と表示する。
ヒント:この問題における二つの整数の関係は
- 1番目の値が2番目の値より大きい場合
- 1番目の値が2番目の値より小さい場合
- 二つの値が等しい場合
の3通りであり,すべての場合についての処理をプログラムに記述する必要がある。
- [pp6-2.c](必須)
キーボードから入力する二つの整数の和,または積を求めて表示するプログラムを以下に示す。
このプログラムは,3 番目に入力した値が 0 のときには 2 数の和を,0 以外の時には 2 数の積を求めて表示しなければならない。
ただし,このプログラムには全ての行に少なくとも一つの誤りがあるので,全ての誤りを直しなさい。
/* pp6-2.c /*
#include <studio.h>
int main
(
int num1, num2, result;
print("Input two integers./n");
scanf("%d%d\n", num1, num2);
print("Input operator number./n");
scanf("%d\n", operator);
num1 * num2 = result
if (operator = 0);
num1 + num2 = result;
print("Result is %d/n", Result, num1, num2);
return0;
)
正しいプログラムの実行例は次のとおりである。
[foo@host ~]$ ./a.out
Input two integers.
2 5
Input operator number.
0
Result is 7
[foo@host ~]$ ./a.out
Input two integers.
2 5
Input operator number.
1
Result is 10
- [ppa6-1.c]
2つの整数を入力すると,
最初の整数が2番目の整数の倍数であるか否かを判定するプログラムを書きなさい。
ここで「倍数であるか否かを判定する」とは,
最初の整数が 2 番目の整数で割りきれる場合に
「最初の整数」is multiple of「2番目の整数」
と出力し,
割り切れない場合には何も表示しないこととする。
|
2018-11-08 |
- [pp7-1.c](必須)
キーボードから入力した整数が 10 以上ならば A,
8 か 9 ならば B,
6 か 7 ならば C,
5 ならば D と表示し,
これ以外のときには printf 文を二つ使って
Failed.
You must take this course again.
と表示するプログラムを作成しなさい。
if/else 選択構造を使うこと。
- [pp7-2.c](必須)
キーボードから入力する 3 つの整数から,最大値を求めて表示するプログラムを作りなさい。
ヒント:
最大値を求めるために使う変数名を仮に max とする。
以下を順に行えば,最終的に max に最大値が入る。
- 1 番目と 2 番目に入力した数(変数に格納されている)のうち,大きい方を max に代入する。 if/else 構文を使うとよい。
- max と 3 番目に入力した数を比較して,3 番目の方が大きければ,3 番
目の数を max に代入する。(3 番目の方が大きくなければ何もしない。)
-
[ppa7-1.c]
キーボードから三つの整数を入力し,3 番目の整数値に応じて,以下の動作をするプログラムを switch を用いて作りなさい。
- 1 : 最初の 2 整数の和を表示
- 2 : 最初の 2 整数の差を表示
- 3 : 最初の 2 整数の積を表示
- 4 : 最初の 2 整数の商を表示
- それ以外 : Illegal operator と表示
|
2018-11-11 |
-
[pp8-1.c](必須)
次のプログラムがどのような動作をするプログラムなのかを考えなさい。
これと同じ動作をするプログラムを,
一つの if と論理演算子を使って作りなさい。
/* pp8-1.c */
#include <stdio.h>
int main()
{
int num;
printf("Enter integer\n");
scanf("%d", &num);
if (num % 2 == 0)
printf("Hit!\n");
else
if (num % 3 == 0)
printf("Hit!\n");
return 0;
}
- [pp8-2.c](必須)
資料の「1000 を越える最初の 2 の累乗を求める」コードを基にして,次のことを行いなさい。
- 1000 を越える最初の 2 の累乗を求めて表示するプログラムを作り,
動作を確認しなさい。
- そのプログラムを,1000 を越える最初の 2 の累乗までの,正の 2 の累乗を全て表示するように変更しなさい。
ヒント:変数 product に値を代入する度に product の内容を表示する。
-
[ppa8-1.c]
次のプログラムを参考にして,
10 個の整数をキーボードから入力すると,
その中の最大値を求めて表示するプログラムを作りなさい。
カウンタ制御による反復処理を行うプログラムにすること。
また,main の中のコメントは省くこと。
/* Maximum of three integers */
#include <stdio.h>
int main()
{
int number; /* 入力値格納用 */
int largest; /* それまでに見つかった最大値 */
/* 最初の数の処理 */
printf("Type integer : ");
scanf("%d", &number);
largest = number;
/* 2 から 3 番目の数の処理 (同じ処理の繰り返し) */
printf("Type integer : ");
scanf("%d", &number);
if (number > largest)
largest = number;
printf("Type integer : ");
scanf("%d", &number);
if (number > largest)
largest = number;
/* 結果の出力 */
printf("Largest integer: %d\n", largest);
return 0;
}
|
2018-11-29 |
-
[pp9-1.c](必須)
次の表を出力するプログラムを, for 反復を用いて実現しなさい。
N 10*N 100*N 1000*N
1 10 100 1000
2 20 200 2000
3 30 300 3000
4 40 400 4000
5 50 500 5000
6 60 600 6000
7 70 700 7000
8 80 800 8000
9 90 900 9000
10 100 1000 10000
この課題は,次の手順でプログラムを作成できる。
- 使用する変数を仮に i とする。
i に 1 を代入してから,i とその 10 倍,100 倍,1000
倍の数値を,タブ区切りで一行に出力するだけのプログラムを作る。
正しく動作することを確かめる。
- 次に for 反復構造を導入して,i の値を 1 から 10 まで 1 ずつ増やしていきながら,各行を出力するように変える。
このように段階的にプログラムを作成していけば,誤りがあった場合に,誤り箇所の発見が容易になる。
字下げを正しく行ってプログラムを書くこと。 N や 10*N 等を出力の一行目に表示させるのを忘れないこと。
- [pp9-2.c](必須)
1 から 100 までの整数のうち,3 と 7 の両方で割り切れるものを全て表示するプログラムを作りなさい。
for 反復構造に if 選択構造がネストする(入れ子になる)。
- [ppa9-1.c]
第8回課題 3 (ppa8-1.c)を for 反復構造を使って解きなさい。
|
2018-12-06 |
- [pp10-1.c](必須)
リスト 4.6 のプログラムを次を出力するように書き換えなさい。
2 文字分の場所を使って整数を表示するには,printf の最初の引数に,%d の代わりに %2d と書けばよい。
(-5,-3) (-5,-2) (-5,-1) (-5, 0) (-5, 1) (-5, 2) (-5, 3)
(-3,-3) (-3,-2) (-3,-1) (-3, 0) (-3, 1) (-3, 2) (-3, 3)
(-1,-3) (-1,-2) (-1,-1) (-1, 0) (-1, 1) (-1, 2) (-1, 3)
( 1,-3) ( 1,-2) ( 1,-1) ( 1, 0) ( 1, 1) ( 1, 2) ( 1, 3)
( 3,-3) ( 3,-2) ( 3,-1) ( 3, 0) ( 3, 1) ( 3, 2) ( 3, 3)
( 5,-3) ( 5,-2) ( 5,-1) ( 5, 0) ( 5, 1) ( 5, 2) ( 5, 3)
-
[pp10-2.c](必須)
キーボードから整数を入力すると,その個数分のアスタリスク(*)を表示するプログラムを書きなさい。
ただし,アスタリスクを 20 個表示する毎に改行するプログラムとすること。
また,0 以下の整数が入力されると,正の整数が入力されるまで Illegal Input と出力するようにすること。
ヒント:
反復構造の中に if 選択構造をネストさせ,
20 の倍数個のアスタリスクを表示したら改行を出力(表示)すればよい。
20 で割った余りが 0 であれば,20 の倍数である。
- [ppa10-1.c]
n の階乗 n! を求めるプログラムを反復構造を用いて作りなさい。
ここで n は非負の整数であり,プログラム実行時にキーボードから入力することとする。
階乗 n! の定義は,1 より大きな n に対して n! = n * (n-1) * (n-2) * ... * 2 * 1 であり,1! = 0! = 1 である。
負の整数が入力された場合にはエラー処理を行うこと。
|
2018-12-08 |
- [pp11-1.c] (必須)
講義資料のリスト 5.2 を実行しなさい。
次に,このプログラムをエンターキーの押下(改行文字の入力)で終了するようにしなさい。
さらに,キーボードから入力した文字に加え,その文字のコードを 10 進数で表示するプログラムにしなさい。
例えば,
abc
と入力すると
a(97)b(98)c(99)
と出力して終了するプログラムにすること。
- [ppa11-1.c]
キーボードから入力した文字の中に a が何個あったかを数えて出力するプログラムを作りなさい。
EOF が入力されるまで文字入力を繰り返すプログラムにすること。
|
2018-12-11 |
-
[pp12-1.c](必須)
int 型変数 i と j に,各々 3 と 2 が格納されているとする。
このとき次の各式の持つ値は何か。
それを調べる (式の持つ値を表示する) プログラムを作成しなさい。
i と j 以外に変数を使わないこと。
結果を予想してからプログラムを実行してみなさい。
1 + i / j * 10
1 + 10 * i / j
1 + i / j * 10.0
1 + 10.0 * i / j
1 + (double) i / j * 10
1 + (double) ( i / j ) * 10
i = j = 1.5
- [pp12-2.c](必須)
キーボードから入力した二つの整数の商,余り,実数での割り算の結果を求めて表示するプログラムを作りなさい。
割り算の結果は小数点以下第3位まで表示することとする。
例えば 5 と 2 の入力に対しては
quotient: 2
modulus: 1
division: 2.500
のように表示する。
- [ppa12-1.c]
キーボードから入力した非負の実数から
最大値を求めて表示するプログラムを作りなさい。
負の数を入力するまで入力を繰り返すプログラムとすること。
入力した実数は double 型変数に格納すること。
|
2018-12-20 |
- [pp13-1.c] (必須)
次に示す x とその平方根の一覧を表示するプログラムを作りなさい。
表示位置や表示桁数に気を付けること。
x root of x
0.00 0.00000
0.50 0.70711
1.00 1.00000
1.50 1.22474
2.00 1.41421
2.50 1.58114
3.00 1.73205
3.50 1.87083
4.00 2.00000
4.50 2.12132
5.00 2.23607
浮動小数点数の誤差に伴う不具合を防ぐため,ループ制御変数は整数型とする。
そのため,プログラムの主要部分を次のとおりとする。
下線部には適当なコードを書くこと。
for (i = 0; i <= 10; i++) {
x = i * 0.5;
printf(_________________________);
}
- [pp13-2.c](必須)
標準ライブラリ関数 toupper を用いて,キーボードから入力された小文字を大文字にして出力(表示)するプログラムを作りなさい。
1回のプログラムの実行につき,入力する文字は一つとする。
コマンドラインで man toupper を実行して,toupper の使い方を調べ,必要なコードを書くこと。なお,man コマンドは q を押せば終了できる。
ヒント:
文字の入力は標準ライブラリ関数 getchar で行える。
小文字 a を toupper を用いて大文字に変換し出力するコードは,例えば
putchar(toupper('a')) と書ける。
ただし,この問題では特定の文字のみを扱う訳ではないので,変数に入った文字を変換して出力する必要がある。
- [ppa13-1.c]
直角三角形の直角を挟む 2 辺の長さから,斜辺の長さを求めて表示するプログラムを作りなさい。
2 辺の長さはキーボードから与えることとする。
実数値を与えられるようにすること。
|
2019-01-10 |
- [pp14-1.c](必須)
リスト 6.3 を参考にして,次の指示に従ってプログラムを作りなさい。
- int 型の整数の絶対値を求めて int 型の戻り値として返す関数 iabs を作りなさい。
iabs の本体では,
この関数の呼び出し元から渡される値(パラメータの値)が
0 以上の場合にはそれを戻り値とし,
そうでない(0 未満の)場合には正負の符号を反転させて戻り値とすればよい。
- 関数 iabs を呼び出すコードを関数 main に書いて,ソースコード全体でプログラムとして動作するようにしなさい。
main では,キーボードから整数を読み込み,それを関数 iabs に渡し,iabs からの戻り値を表示するようにすること。
なお,関数 iabs には変更を加えないこと。
- [ppa14-1.c]
キーボードから入力した摂氏の温度を華氏に変換して表示するプログラムを作りなさい。
ただし,以下の要件を満たすように作ること。
|