問題文
2つの整数値を読み込んで、1つ目に読み込んだ値が、2つ目に読み込んだ値の何%に当たるかを表示するプログラムを作成せよ。
※【表示例】中の赤文字は、ユーザによる入力を求める箇所
青文字は、計算により変動する箇所
うおな
今回の問題では、ユーザからは必ず1以上の正の整数が入力される。
使用する変数は、全て整数型を用い、浮動小数点数型への型変換などは行なわないという制約のもと、取り組みます。
プログラムの手順
- int型の変数nx, ny, calcを宣言する
- 整数の入力を求めるメッセージを出力する
- キーボードからの入力を受けつけ、整数xの値をnx、整数yの値をnyに代入する
- 割合を求める計算を行なう
- 計算結果を表示例に従って、出力する
サンプルプログラム
#include <stdio.h>
int main(void)
{
int nx, ny, calc;
puts("二つの整数を入力してください。");
printf("整数x:");
scanf("%d", &nx);
printf("整数y:");
scanf("%d", &ny);
calc = 100 * nx / ny;
printf("xの値はyの%d%%です。", calc);
return 0;
}
1.int型の変数nx, ny, calcを宣言する
int nx, ny, calc;
うおな
int型の変数を3つ宣言しています。
int nx = 0;
int ny = 0;
int = calc;
うおな
このように、変数を宣言する時は、合わせて初期化も行なうと、不定値が混入する恐れがなくなります。
2.整数の入力を求めるメッセージを出力する
puts("二つの整数を入力してください。");
うおな
puts関数を用いて、文字列を出力すると同時に、改行も行なっています。
3.キーボードからの入力を受けつけ、整数xの値をnx、整数yの値をnyに代入する
printf("整数x:");
scanf("%d", &nx);
printf("整数y:");
scanf("%d", &ny);
うおな
printf関数で、入力してほしい値を示し、scanf関数を用いて、変数に格納しています。
4.割合を求める計算を行なう
calc = 100 * nx / ny;
うおな
今回は、整数型の変数のみを用いるという制約を設けています。
そこで、単純に割合を求めようとすると、小数点以下を変数に格納できず、計算が上手くできません。
そこで、予めnxの値に100をかけることで、対応をしています。
5.計算結果を表示例に従って、出力する
printf("xの値はyの%d%%です。", calc);
うおな
printf関数を用いて、計算結果の表示を行なっています。
%dと変換指定子を設定したところに、第2引数のcalcの値が挿入されます。
また、printf関数において、%は、変換指定子の始まりを指定する際に使用するため、「%%」という風に、2つ%を入力する必要があります。