for文を使ってキーボードから入力された整数から30までの和を求めるプログラムの作成方法

このQ&Aのポイント
  • for文を使ってキーボードから入力された整数から30までの和を求めるプログラムの作成方法について解説します。
  • プログラム中で発生しているエラーの原因や修正方法についても説明します。
  • while文とfor文の使い方についても解説します。
回答を見る
  • ベストアンサー

while for の使い方?

for文 を使って,キーボードから1以上10以下の整数を入力した後,その整数から30までの和を求めて画面に表示するプログラム prog5.c を作って下さい.ただし,while文を使って,キーボードから入力された整数が1以上10以下になるようにしてから,for文を実行すること. という問題で、次のように書いたら、エラーが発生しました。解説お願いします。 #include<stdio.h> main() { int i, n, sum=0; scanf("%d",&i); while(1<=i<= 10){ for(n=i, n<=30, n++){ sum+=sum+n; } } } エラー prog5.c: In function ‘main’: prog5.c:13: error: expected ‘;’ before ‘)’ token prog5.c:13: error: expected expression before ‘)’ token   

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>キーボードから入力された整数が1以上10以下 というのを >while(1<=i<= 10){ で書いているつもりでしたら… 残念ながら意図した動作にはなりません。 上の条件式は… 「iが1以上だった」ら(1<=i)の判定が1となりますので、 続けて、「1が10以下だったら」という判定になります。 つまり、iが1以上の値であれば1000でも真となります。 C言語の文法としてはアリなのでエラーにはならないでしょう。 >prog5.c:13: error: expected ‘;’ before ‘)’ token >for(n=i, n<=30, n++){ for文の書式を確認しましょう。 ","ではなく";"ではありませんか?

msnaruo
質問者

お礼

ありがとうございました。

その他の回答 (1)

回答No.1

単純にfor()の区切りがセミコロン(;)ではないのが問題ではないでしょうか? あと、iの加算が行われていないし、0以下11以上の数値が入力された時に 再入力を求めるコードになってません。 (質問の為にはしょっただけかもしれませんが) また、Cはかれこれ10年以上離れているので、どうなのか覚えてませんが、 気になる点があります。 while()の条件は、論理和で条件判断しないとうまくいかないのでは?と 思います。 そもそも 1<=i<=10 という式がコードとして成り立たないと思いますし (頭の中では成り立ちますが、コードとしては、あくまでi<=iもしくはi<=10 という判断になると思います)、 仮にそれが正しい書き方だとしても、確かCはFalseが0、Trueは0以外という 判断になったかと思うので、1<=i によって0以外のブール値(A)が求められ、 (A)<=10 によって誤った判断が行われ、無限ループなどに陥ったりはしない でしょうか?

関連するQ&A

  • C言語のforとwhileについて・・・

    C言語で「While 文を使って、1から100までの和を求めて表示するプログラムを作る」ことをやってみました。↓ ですが、forではできたのですが、whileでは動きませんでした。 whileで作る時は、forのどの部分を変えれば出来るんでしょうか? 解説できましたら、お願いします。。 #include <stdio.h> int main(void) { int i,wa; wa=0; for(i=1; i<=100; i++) { wa=wa+i; } printf("和=%d\n",wa); }

  • while文の作成について

    キーボードに整数を打ち込み、0を打ち込むと終了し、その合計を出すプログラムを以下のように作りました。 #include<stadio.h> int main(void){ int num=0 int sum=0 printf("整数を入力"\n"); do{ scanf("%d",&num); sum +=num; }while(num); printf("合計は%dです。\n",sum); returen 0; } 次に負の値が入力されるまで整数を読み込み続け、その合計をを求めるプログラムを作りたいのですが、whileのところを }while(num>=0); としてみたのですが、うまくいきません。また分かり易くするため、入力した整数の個数も表示できるようにしたいです。どうすればよいでしょうか。詳しい方、教えてください。

  • C言語(while構文)

    #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c='m'; while(c!='e')//eでない限りwhileループを実行する { sum=sum+i; printf("\n1 kara %d madewo tasuto %d desu.\n",i,sum); i++; printf("nanikakeywo oshitekudasai.owaru tokiha 'e'\n"); c=getch(); } printf("loopwo nukemashita\n"); getch(); } getch()の代わりに、scanf()を使って整数値を入力させ、負の数が入力されたら終了するプログラム(正を入力したら「次の数値を入力せよ」とだして、繰り返す。)を造りたいのですが、どこを変えればよいか教えてください。

  • コンパイルエラーの英語の読み方

    #include <stdio.h> int main() { printf("Hello, World"; } と書くと error: expected ‘)’ before ‘;’ token error: expected ‘;’ before ‘}’ token と表示されます。 ;の前に)がないと言っているようですが、expectedは名詞の後にくるものだと思うので、 error: ‘)’expected before ‘;’ token だと思うのですが、これについて回答をよろしくお願いします。

  • C言語を始めたばかりですが、なかなか難しいです。

    C言語を始めたばかりですが、なかなか難しいです。 下記のプログラムですが、誤りを指摘して頂けないでしょうか? /************************************************************************ 合計と平均を求める ************************************************************************/ #include <stdio.h> #define KAMOKU 3 main() { int ten[KAMOKU]={73,59,92}; /*得点*/ int goukei=0; /*合計点*/ double heikin; /*平均点*/ char shimei[20]="太郎"; /*氏名*/ char kamokuName[KAMOKU][10]={"国語","数学","英語"}; int i; /*科目数*/ /*合計点と平均点の算出*/ for(i = 0; < KAMOKU;i++) { goukei+=ten[i]; } heikin=(double)goukei / i; /*画面に表示*/ printf("氏名:%s\n",shimei); for(i = 0; < KAMOKU;i++) { printf("%-6s:%3d点\n",kamokuName[i],ten[i]); } printf("\n"); printf("%sさんの合計:%3d点 平均:%5.1f点\n",shimei,goukei,heikin); エラーメッセージは for.c: In function ‘main’: for.c:18: error: expected expression before ‘<’ token for.c:27: error: expected expression before ‘<’ token です。 どうぞ宜しくお願い致します。

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • for文

    for文なのですが、 scanfで得た、 iを for文のi--で、一づつへらしてますが、 0でfor文がおわりますが 0で終わりの記述がない気がするんですが、 どうしてでしょか? int main(void) {    int i;    printf("正の整数を入力してください。\n");    scanf("%d",&i);    for( ; i ; i--)    printf("qが入力されました。\n");    return 0; }

  • for文

    整数を読み込んで、その値を0までカウントダウンしながら表示するプログラム作りたいのですが、 while文ではできたのですが、for文ではうまくいきません。 どこが間違っているのでしょうか? OS:Windows XP C++Builder X パーソナル #include <stdio.h> int main(void) { int i; int num; printf("整数を入力してください:"); scanf("%d", &num); for(i = num; i <= 0; --i) { printf("%d", i); } return 0; } 宜しくお願いします。

  • gccコンパイラのエラーについてstdin

    画像を変換するCプログラムを作成し、cygwinのgccでコンパイルしようとしたところ 以下のエラーが出て困っています。 $ gcc conv.c In file included from conv.c:24:0: conv.c: 関数 ‘main’ 内: conv.c:78:18: エラー: expected ‘)’ before ‘->’ token extern FILE *stdin; ^ conv.c:79:18: エラー: expected ‘)’ before ‘->’ token extern FILE *stdout; ^ conv.c:80:18: エラー: expected ‘)’ before ‘->’ token extern FILE *stderr; 24行目で、#include <stdio.h>を記述しております。 なにが原因でしょうか?

  • while doについて

    九九の表で、forの2重のプログラムは作成できたのですが、whileとdo~whileを使って書き直すやり方がわからないのです。 どうか教えてください。お願いします。 #include <stdio.h> main() { int i,j; for(j = 1; j <= 9; j++){ for(i = 1; i <= 9; i++) printf("%3d", j*i); printf("\n"); } }

専門家に質問してみよう