プロが教えるわが家の防犯対策術!

キーボードから正の整数を読み取り、n個の奇数を加算しディスプレイにかきだすプログラムです。;が型の前に必要というエラーがずっとでてきて、でも足りないところはわからないのですが、何が違うのでしょう??もうわけがわからなくて困ってます。お願いします。

/*演習1-3*/
#include<stdio.h>
int main()
{
int i;
int n;
int sum=0;

printf("%d¥n",n);

for (i=1;i<=n;i+=2);
int scanf("%d",&n);
sum+=i;
printf("1+2+...+n=%d\n",sum);
return 0;
}

A 回答 (3件)

(1) #includeの次に半角スペースがない。


(2) 変数n を初期化していない。
(3) printf文の\(半角文字)が¥(全角文字)になっている。
(4) for文の最後に不要な ; が付いている。
   ただし、これは、コンパイルエラーにはならない。

これらを修正すると、以下のようになります。
インデント(字下げ)は全角スペースを使用しているので、
そこはTABとかに直して使ってみてください。


#include <stdio.h>

int main()
{
 int i, m, n, sum;
 
 printf("正の整数(最大32767)を入力してください >");
 scanf("%d\n", &m);
 
 printf("0~%dの奇数の合計を計算します\n", m);
 
 sum = 0; /* 奇数の合計 */
 n = 0; /* 奇数の数 */
 for(i=1; i<=m; i+=2) {
  sum += i;
  if( i==1 ) {
   printf("%d",i);
  } else {
   printf("+%d",i);
  }
  n++;
 }
 
 printf("=%d\n", sum);
 printf("0~%dまでの奇数の数は%dで、合計は%dです\n",m,n,sum);
 
 return(0);
}
    • good
    • 0
この回答へのお礼

詳しい回答をありがとうございました!!
もう一度やってみます!!

お礼日時:2008/06/03 17:21

>(intが32ビットの環境ならば0から約42億回までのどこか。

現状では空ループなので一瞬ですが)

訂正です。
42億回でなく21億回…です。
i+=2を見逃していました。

ということで、for文をブロックに修正しても、
> printf("1+2+...+n=%d\n",sum);
は正しくありませんが。
"1+3+...+n"ということになります。
    • good
    • 0
この回答へのお礼

ありがとうございます!
訂正します!

お礼日時:2008/06/03 17:22

>;が型の前に必要というエラーがずっとでてきて、でも足りないところはわからないのですが、何が違うのでしょう??



一緒に行番号も表示されているかと思われますが。
その前後(このエラーだと表示された行より前)に問題があるかと。

> printf("%d¥n",n);
¥は半角だと思いますが……。
未初期化の変数を参照しているので表示される値は不定です。
後のループ回数を入力させたいのではないですか?

> for (i=1;i<=n;i+=2);
この行の最後の;は必要ですか?
この場合空ループするだけですが意図したものですか?
なお、ループ回数は不定です。(intが32ビットの環境ならば0から約42億回までのどこか。現状では空ループなので一瞬ですが)

> int scanf("%d",&n);
何故intが書かれているのでしょう?

ループ中に数字を入力させて合計値を算出したい。
というのであれば、for文のあとをブロックで囲む必要があります。
    • good
    • 1
この回答へのお礼

すみません。;がたりないっていわれたので、やたらにつけてみたのです!もう一度一から考え直してみます!ありがとうございました!!

お礼日時:2008/06/03 17:26

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A