- 締切済み
c++
プログラミング初心者なのですが 2つの整数を入力してその2つの間の数を全て足すプログラムを 作りたいのですがどうしてもできません。 #include <stdio.h> intmain(void) { int no = 1 int sum = 0; do{ sum = sum + no; no = no + 1; } while (no <= 5); printf("1から5までを足した数は%d\n", sum) return(0); } これで1から5までを足すプログラムにはできるのですがどこを 変えればできるでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- BLK314
- ベストアンサー率55% (84/152)
>2つの整数を入力してその2つの間の数を全て足す これが大前提なので、これを利用したプログラムにします。 === ここからソース==================== int main(void) { int a, b, i; int sum = 0; int n; printf("2つの整数を入力してください: "); scanf("%d %d", &a, &b); n = abs(a - b) + 1; sum = (n * (n + 1)) >> 1; printf("%dから%dまでの和は%dです\n", a, b, sum); return (0); } === ここまでソース============================== 現在のPCのCPUは演算速度が滅茶苦茶速いので、 どう加算しても計算時間は変わらないでしょう。 でも、より適した方法で実装するのも大切と考えます。 何が"最適"なのかは場面で変わるので.... 正直に1ずつ加算するのにもメリットがあります。 それは、柔軟性です。 (どんな意味があるかは別として) 例えば足す数を配列で与えることで 自由に変化させられます。 sum = n*(n+1) / 2 は1ずつ足す専用であり それ以外の場合は破綻します。 ましてや、足す数がどんどん変わる場合には 全く公式では対応できません。 どちらにも、メリット・デメリットがあり 取捨選択に頭を悩ませるのが 辛くもあり楽しいことでもあります。
- asuncion
- ベストアンサー率33% (2127/6289)
#include <stdio.h> int main(void) { int sum, a, b, t, i; printf("2つの整数を入力してください > "); scanf("%d%d", &a, &b); if (a > b) t = a, a = b, b = t; for (sum = (a == b) ? a : 0, i = a; i <= b; i++) { sum += i; } printf("和は%dです。\n", sum); return 0; }
- Nereus
- ベストアンサー率45% (17/37)
こんにちは。 質問タイトルがC++ですが、C言語の記述だったのでC言語で書きます。 // ここからソース #include <stdio.h> int main(void) { int a, b, i; int sum = 0; printf("2つの整数を入力してください: "); scanf("%d %d", &a, &b); // a < bだと仮定 for (i = a; i <= b; i++) { sum += i; } printf("%dから%dまでの和は%dです\n", a, b, sum); return (0); } // ここまでソース このプログラムでは a < b だと仮定して記述してあります。 もし a > b だったり a == b だと上手く動作しません。 その辺りは貴方が考えてみてください。