プログラミング初心者なのですが
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までを足すプログラムにはできるのですがどこを
変えればできるでしょうか?

A 回答 (3件)

>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ずつ足す専用であり
それ以外の場合は破綻します。
ましてや、足す数がどんどん変わる場合には
全く公式では対応できません。

どちらにも、メリット・デメリットがあり
取捨選択に頭を悩ませるのが
辛くもあり楽しいことでもあります。
    • good
    • 0

#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;
}
    • good
    • 0

こんにちは。


質問タイトルが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 だと上手く動作しません。
その辺りは貴方が考えてみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング