はじめに
どうも! みなため(@MinatameT)です。
この記事で紹介するプログラムでは、以下の考え方が大切です。
ポイント
- 7の倍数の判断
- 1の位が7であることの判断
これらについては、ソースコード中のコメント文で説明してあります。
問題文
30以上の整数nを、キーボードから入力させます。1からnまでの整数のうち、「7の倍数」または「1の位が7の値」の総和を求めましょう。
nの入力の繰り返しには、for文を使ってください。また、キーボードからの入力が30未満の場合には、入力をやり直すようにプログラムしましょう。
例えば、n = 30の場合は、次のように出力させてください。
sum=7+14+17+21+27+28=114
解答例
#include<stdio.h>
int main(void)
{
int n; //入力値
int sum; //「7の倍数」または「1の位が7の値」の総和
int x; //ループ用変数
int y; //1の位が7の値かどうかを調べるときに使う変数
sum = 0; //合計値の初期値は0。
y = 17; //yの初期値は17。
for(n=0; n<30; ) //nの値が30未満の場合は繰り返す。
{
printf("nの値>");
scanf("%d",&n); //nの値の入力
if(n<30) //入力されたnの値が30未満なら
{
printf("nの値は30以上にしてください。\n");
}
}
printf("sum=");
for(x=1; x<=n; x=x+1) //xが1ループごとに1ずつ増えていく。
{
if(x==y) //xの1の位が7なら
{
printf("%d",x);
printf("+");
sum = sum + x; //合計値に現在のxを足す。
y = y + 10; //17、27、37……と確認していくために、10を足す。
}
else if((x%7)==0) //xが7の倍数なら
{
printf("%d",x);
printf("+");
sum = sum + x; //合計値に現在のxを足す。
}
}
printf("\b"); //\bで現在の最後の1文字(+)を消去する。
printf("=%d\n",sum); //合計値を表示して、改行する。
return(0);
}
「1の位が7かどうか」の判断は、まずは17とxを比較し、一致すれば次からは27とxを比較し、一致すれば次からは37とxを比較し……と、17に10を足していった値とxを比較するようにしています。
このプログラムでは、例えば、90を入力すると、次のような実行結果になります。
nの値>90
sum=7+14+17+21+27+28+35+37+42+47+49+56+57+63+67+70+77+84+87=885
「7の倍数」と「1の位が7の値」の総和が正しく計算されていることがわかります!
ちなみに、0などの30未満の値を入力すると、次のような実行結果になります。
nの値>0
nの値は30以上にしてください。
nの値>
このように、再入力させられます。
今回はここまでです。皆さん、お疲れさまでした。