• 締切済み

どこが間違っているのか教えてください。。

C言語の勉強をしています。 プログラムを作成してみましたが、うまくいきません。 どこが間違っているのか、なぜそうなるのか、教えていただけると助かります。 よろしくお願いします。 あるクラスの試験の点数を整数で繰り返し入力し、点数の合計と平均点を出力するプログラムを作成しなさい。 点数は、0点以上100点以下とし、この範囲外の点(0点未満または100点より大きい点)が入力されたときは、入力を終了し、点数の合計と平均点を出力する(最後に入力された範囲外の点は集計の対象としない)。 また、平均は小数点以下2桁まで出力する。 繰り返しの命令は、何を使ってもよい。 ▼実行例 点数:10 点数:100 点数:20 点数:35 点数:120 合計:165点 平均: 41.25点 ******************************************* 考えたプログラム #include<stdio.h> int main(void) { int   ten,hito,goukei; double           heikin; goukei=0; hito=0; while(1){ printf("¥n点数:"); scanf ("%d", &ten); if(ten<0||100<ten) break; goukei=goukei+ten; hito=hito+1; break; } printf("¥n合計:%d点",goukei); heikin=(double)goukei/(double)hito; printf("¥n平均:%.2lf点",heikin); }

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

質問ってのはたいてい「うまくいかない」ときにする (想定した通りに動いていたら, 疑問に思わないでしょ?) ものだから, 単に「うまくいかない」とだけ書くようでは質問の文章として失格. 何がどう「うまくいかない」のかをちゃんと書いてください.

sairamnaomi
質問者

お礼

解決しました。ご指摘ありがとうございました。

sairamnaomi
質問者

補足

コンパイルすると、結果が実行例と同じようにならず、このようになります。 breakを外したり、いろいろやってみましたが、無限ループになったりします。 よろしくお願いします。 ▼実行を開始します ----PETA2が1回目の実行を開始します--自動入力値[10 100 20 35 120]- 点数: 合計:10点 平均:10.00点 ----PETA2が2回目の実行を開始します--自動入力値[10 50 0 -1]- 点数: 合計:10点 平均:10.00点 ▲実行を終了しました

回答No.2

whileの中6行目が、必ずbreakすることになってしまっているので、たとえば if(hito==5) break; にして、5人分の入力が終わったらbreakにすればいいんじゃないですかね。 思いついたものを勝手に書いてみました。参考になれば幸いです。 (入力値の範囲確認してませんが・・・) #include <iostream> int main(void) { int goukei=0; const int size=5; //配列の要素数 int ten[size]; //点数の配列 for(int i=0; i<size; i++){ //点数の入力 std::cout << "点数[" << i << "]?→"; std::cin >> ten[i]; } for(int i=0; i<size; i++){ //合計の計算 goukei += ten[i]; } printf("\n合計:%d点",goukei); printf("\n平均:%.2lf点", (double)goukei/size ); return 0; }

sairamnaomi
質問者

お礼

ご回答ありがとうございます! C言語を学習し始めて1週間程で、まだ習っていない表現がありますが、参考にさせていただきます。 ありがとうございました。

  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.1

breakが2か所あります。 2番目のbreakはなぜ必要ですか?

sairamnaomi
質問者

お礼

breakを外したら、解決できました! ありがとうございました!

関連するQ&A

  • 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 です。 どうぞ宜しくお願い致します。

  • データの損失について

    はじめまして今回が初めての投稿になります、よろしくお願い致します。実はCの復習をかねて以下のようなプログラムを作ったのですが、なぜかjirouとsaburouの英語の点数が0と表示されてしまいます。tarouとshirouはきちんと表示されるのですが・・・ソフトはVisual C++6.0を使っていてコンパイルの際に「'const double ' から 'int ' に変換しました。データが失われているかもしれません。」と出ているのですがいまいち良くわかりません。もしよろしければご教授お願い致します。 #include<stdio.h> #define KAMOKU 3 main() { /*変数の宣言*/ int ten[4][3] = { {73,59,92}, {52,95.70}, {22.19,31}, {100,99,96} }; int goukei[4],i; double heikin[4]; char lank[4] = {'B','B','C','A'}; char shimei[4][10] = {"tarou","jirou","saburou","shirou"}; /*合計と平均の計算*/ for(i = 0;i < 4;i++){ goukei[i] = ten[i][0]+ten[i][1]+ten[i][2]; heikin[i] = (double)goukei[i]/KAMOKU; } /*表示*/ printf("氏名   国語 数学 英語 合計  平均 評価\n"); for(i = 0;i<4;i++){ printf("%-10s %5d %5d %5d %5d %7.1f %c\n",shimei[i],ten[i][0],ten[i][1],ten[i][2], goukei[i],heikin[i],lank[i]); } }

  • C++の配列についてなんですが

    #include <iostream> using namespace std; int main() { int i,goukei=0; int kokugo[5]; float heikin; for(i=0;i<5;i++) { cout << "出席番号" << i+1 << "番の国語の成績を入力してください\n"; cin >> kokugo[i]; goukei = goukei + kokugo[i]; } heikin = (float)goukei/5.0; cout << "平均点は" << heikin << "点です\n"; for(i=0;i<5;i++) { cout << "出席番号" << i+1 << "番の国語の成績は" << kokugo[i]; cout << "点で、平均との差は" << heikin-(float)kokugo[i] << "です\n"; } return 0; } これを基に 数学の点数も入力する 数学の平均も出力する 国語と数学の総合的な平均点も出力する ようにするにはどうすればいいんですか?

  • 高校1年生のプログラング問題で分からない点があります><先週からCについて学びはじめました

    こんばんは。最近C言語について学びはじめた高校生です。 ある程度学校の授業で学習するのですが、明日から実際にプログラミングを始めるみたいです。 予習しようと思い、visualC++をインストールして練習しております。 そこで、いくつか思い通りにいかない問題がありましたのでご回答、アドバイスなどいただけると嬉しいです。 内容はC言語の基礎中の基礎だと思います>< 「1」 5個の整数データを配列に代入にそれらの合計と平均を求めるプログラムをつくれ。 「2」 問「1」のデータの最大値を求めるプログラムをつくれ。 「3」 問「1」の5つのデータを大きい順に並べ変えろ。 というみっつの問題です。 C言語は先週から学びはじめたばかりなのでまだまだ知識不足ですが、 下記に一番を自分なりに作ってみました。 #include <stdio.h> int main (void) { int box[5]={0,0,0,0,0}; int goukei,i; float heikin; goukei=0; for(i=1;i<=5;i++){ scanf("%d",&i); goukei=goukei+i; } heikin=(float)heikin/5.0; printf("合計は%d",goukei); printf("平均は%f",heikin); return0; } やはり思い通りの結果が出ず困っております。 正答とアドバイスいただけると嬉しいです。 よろしくおねがいします。

  • C言語の課題で

    C言語の課題で 「成績集計プログラム 入力件数nをキーボードより入力し、n人分のテストデータを入力する。その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。ただし、平均点は実数型とし小数点第2位まで出力する。平均点以外の変数は整数型とする。」というのが出ました。 #include <stdio.h> int main(void) { int n,a,b,c; int res,i; printf("入力件数を入力して下さい。\n"); scanf("%d",&n); for(i = 1; i <= n; i++) { printf("点数を入力して下さい。\n"); scanf("%d",&a); printf("%d人目=>%d\n",i,a); if(i == res) break; } return 0; } ここまでは、出来たのですが、後が分かりません。どなたか教えていただけませんか?お願いします。

  • C言語 構造体でつまずいています

    以下、番号と点数を入力して構造体配列に入力し、番号に0が入力されたら、入力処理をやめ、平均点を表示するプログラムです。  今のコードでは、最初から番号に0を入力すると、0除算になりエラーになります。どうすれば良いのでしょうか? #include <stdio.h> #define MAX 50 //配列の要素数を定義 int count=0; //グローバル変数 struct data { //構造体の定義 int num; //メンバの宣言 int ten; }; void nyuryoku(struct data *); //プロトタイプ宣言 float heikin(struct data *); //プロトタイプ宣言 void main() { struct data score[MAX]; //構造体の宣言 printf("**学生番号/点数入力**\n"); printf("\n"); nyuryoku(score); //nyuryoku関数呼び出し printf("\n**以上%d名の平均点:%0.1f点**\n",count,heikin(score)); //heikin関数の戻り値表示 } //nyuryoku関数 //機能:構造体配列にデータを入力する void nyuryoku(struct data *pd) //仮引数pdに構造体ポインタが渡る { int i; for(i=0;i<MAX;i++){ printf("学生番号>>"); scanf("%d",&pd->num); if(pd->num==0){ //学生番号に0を入力するとループを抜ける break; } printf("点  数>>"); scanf("%d",&pd->ten); count++; //人数のカウント pd++; //構造体配列を一つずらす } } //heikin関数 //機能:構造体配列の点数の平均を計算、戻り値として返す float heikin(struct data *pd) //仮引数pdに構造体ポインタが渡る { int i; int sum=0; float ave=0; for(i=0;i<MAX;i++){ if(pd->num==0){ break; } else{ sum+=pd->ten; //点数を加算 pd++; } } ave=(float)sum/count; //平均値を求める return(ave); //平均値を戻り値として返す }

  • 学校の課題で悩んでます

    #include <stdio.h> void main(){ float syushi[7],goukei,heikin; int i; goukei = 0; for( i=1; i<=7; i++ ){ printf("%dの収支は?\n",i); scanf("%f",&syushi[i-1]); goukei =goukei+syushi[i-1]; } heikin = goukei / 7.0; printf("7日分の平均収支: %f円\n",heikin); } 1週間分の合計収支が 20万円より大きかったら(ぼろ勝ち) 20万円以下で0円より大きいかったら(まあいいか) 0円なラ(意味ないな) マイナスなら(焼肉を食おう)

  • 平均、最大、最小値の求め

    データーを20個入力して平均値、最小値、最大値を求めるという問題を解こうとしたのですが、どうも分からないので教えていただけないでしょうか? 友達と二人で取り組んでプログラムを作成したのですがエラーが出たりして成功しませんでした。 (1)算術型関数heikin、saidai、saishoに分けて作成せよ #include<stdlib.h> #include<stdio.h> #define N (20) int main(void){ double Saidai(double data[], int N){ int i; double saidai; saidai = data[0]; for (i=1; i<N; i=i+1){ if(data[i] > saidai){ saidai = data[i]; }else } double Saisho(double data[], int N){ int i; double saisho; saisho = data[0]; for (i=1; i<N; i=i+1){ if(data[i] < saisho){ saisho = data[i]; }else } double Heikin(double data[], int Ninzu){ int i; double heikin; double goukei; goukei = 0; for (i=0; i<Ninzu; i=i+1){ goukei = goukei+data[i]; } heikin = goukei / ((double)Ninzu); fprintf(stdout,"saidai=%lf\n",saidai); fprintf(stdout,"saisho=%lf\n",saisho); fprintf(stdout,"heikin=%lf\n",heikin); return(EXIT_SUCCESS); } エラー E2293 ) が必要(関数 main ) エラー E2139 宣言に ; がない(関数 main ) エラー E2134 複合文に } がない(関数 main ) 警告 W8070 関数は値を返すべき(関数 main ) (2)手続き型関数を用いて、平均値、最大値、最小値を一括に処理するプログラムを作成せよ こちらに関してはお互い手も出ませんでした。 乱文で分かりずらいと思うかも知れませんが、分かる方がいましたら教えていただけないでしょうか? よろしくお願いします。

  • C言語が分からないので分かる方説明お願いします

    C言語が分からないので分かる方説明お願いします #include<stdio.h> int main(void) { int i; int tensu[5]; int sum=0; printf(”点数を入力してください。”); for(i=0;i<5;i++){ printf(”%2d番:”,i+1); scanf(”%d”,&tensu[i]); sum+=tensu[i]; } printf(”合計点:%5d¥n”,sum); printf(”平均点:%5.1f¥n”,(double)sum/5); return(0); } 実行すると 点数を入力してください。 1番:95 2番:83 3番:85 4番:63 5番:89 合計点:415 平均点:83.0 できるだけ詳しく教えてください

  • C言語について

    #include <stdlib.h > #include <stdio.h> double sum ( double data[] , int number) { double result; int a ; result = 0; for (a = 0; a < number; a+1){ result += data[a]; } return (result); } double average ( double data[] , int number) { double result; result = sum(data,number)/number; return (result); } int main ( void ) { double heikin; double data[9]; double average; int number,i; printf("数値の数を入力(1~10) = "); scanf("%d",&number); printf("データを入力 "); for( i=0;i<number;i++ ) { printf("%d個目 = ",i+1); scanf("%d",&data[i]); } heikin = average(data,number); printf("平均は%lfです\n",heikin);//文を使って平均値(heikin)を出力 return(EXIT_SUCCESS); } というプログラムがありエラーで 「35行目」で記述エラーを発見しました。 「function pointer」を付け忘れています。 と出てきます。ほかのサイト様で写真とかありえないといわれましたのでテキストで再度質問させていただきました。 よろしくお願いします。 前投稿から編集もしているので少しプログラムが違います。