• 締切済み

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

みんなの回答

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.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ずつ足す専用であり それ以外の場合は破綻します。 ましてや、足す数がどんどん変わる場合には 全く公式では対応できません。 どちらにも、メリット・デメリットがあり 取捨選択に頭を悩ませるのが 辛くもあり楽しいことでもあります。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

#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)
回答No.1

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

関連するQ&A

  • do を用いたプログラム

    プログラミング初心者なのですが 2つの整数を入力してその2つの間の数を全て足すプログラムを do を用いて作りたいのですがどうしてもできません。 #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までを足すプログラムにはできるのですがどこを 変えればできるでしょうか?

  • Re: Vista c言語でのエラー

    直前の質問だったのですが、どうやらプログラムが壊れているみたいなんです。 #include <stdio.h> int main(void) { int sum,, no ; printf("整数を入力してください: "); scanf("%d", sum); printf("%d\n", sum); return (0); } と、とても簡単なプログラムに変えてみると、 整数を入力してください: 25 [Enter] 2147348480 となりました。また int sum, no; と変数を二個にすると前記のエラーが起こりました。 そのほかのプログラムを実行しても同じ結果でした。 コンパイラがおかしくなっちゃったんでしょうか?

  • 非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示

    非負整数nを読み込んで、1+2+・・・+m>nとなる最小の整数mを表示するというプログラミングなのですが・・・ #include <stdio.h> int main(void) { int n,m=■ , sum=0; do { printf("非負整数: "); scanf("%d", &n); } while (n■0); while (sum■n) { ■ ; sum +=■; } printf("1+2+・・・+m> %dとなる最小の整数mは%dである。\n", n, m); return (0); } ■のところがわかる方どうにかお願いします!!

  • c言語のプログラムで

    c言語で 2つの整数を読み込んで小さいほうの数以上で大きいほうの数以下の整数をすべて加えた値を表示するプログラム で最後の表示の仕方がわかりません。 実行結果は 整数1:37 整数2:28 28以上37以下の全整数は325です。と表示されるはずです。 この表示の3行目の28と37の表示がどうやればよいのかわかりません。 #include <stdio.h> int main(void) { int a, b; int sum=0; printf("整数1:"); scanf("%d",&a); printf("整数2:"); scanf("%d",&b); if(a>b) do{ sum=sum+b; b=b+1; }while(b<=a); else do{ sum=sum+a; a=a+1; }while(a<=b); printf("%d以上%d以下の全整数の和は%dです。",a,b,sum); return(0); } 全整数の表示はできます。 do文の中でa=cとかにしてやってみましたが、うまくいきませんでした。 お願いします。

  • C言語初心者です。次のプログラムを簡潔にしたいです

    二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。

  • c言語で平均をだす

    #include<stdio.h> int main(void) { int num; int sum; printf("テストの点数を入力してください。\n"); do{ scanf("%d",&num); sum+=num; }while(num); printf("テストの合計点は%dです\n",sum); return 0; } テストの平均点をだすプログラムを作りたいのですが、合計を出すまではわかったのですが、ここから、平均を出すようにするにはどうすればよいですか。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語の無効な値が入力されたときの繰り返しについて

    C言語で最初に入力した整数の5倍になるまで何度も入力を促すプログラムでわからないところがあるのですが #include  "stdio.h" int main() { int a ; do { printf("input a:"); scanf("%d",&a); } while( )     ← printf( ) ←この二つの()内の文字をどうすればよいのか分かりません return 0; } 教えていただけないでしょうか

  • C言語について。初心者です。

    参考書の問題で、「整数値以下である正の偶数を照準に表示するプログラムを作成せよ」 例)整数を入力してください:19   2 4 6 8 10 12 14 16 18 とあり、自分で以下のプログラムを作ってみたのですが「222222・・・・・・・・・・・・・・・・・・」となるだけです。どう変えればちゃんと表示されるようになりますか?ちなみにwhile文を使うのが条件です。 #include<stdio.h> int main(void) {       int na; int nb=0; printf("整数を入力してください。:"); scanf("%d",&na); while(nb<na) printf("%d",nb+2); putchar('\n'); return 0; }

専門家に質問してみよう