データの損失について

このQ&Aのポイント
  • Cの復習をかねたプログラムで、jirouとsaburouの英語の点数が0と表示される問題が発生しています。
  • Visual C++6.0を使用し、コンパイル時に「'const double ' から 'int ' に変換しました。データが失われているかもしれません。」というエラーが表示されています。
  • ご教授いただけると幸いです。
回答を見る
  • ベストアンサー

データの損失について

はじめまして今回が初めての投稿になります、よろしくお願い致します。実は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]); } }

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

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.2

こちらの方が問題でしたね。(^_^; {52,95.70}, {22.19,31}, どちらもカンマの代わりにドットが混入しています。

sevan_s
質問者

お礼

ホントですね、 なんかいつまでたってもこのような初歩的なミスをしてしまいます(^^; どうもありがとうございました。

その他の回答 (1)

  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

とりあえずgoukeiはdouble型で定義しましょう。(^_^) 併せてprintfの変更もお忘れ無く。

関連する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言語の勉強をしています。 プログラムを作成してみましたが、うまくいきません。 どこが間違っているのか、なぜそうなるのか、教えていただけると助かります。 よろしくお願いします。 あるクラスの試験の点数を整数で繰り返し入力し、点数の合計と平均点を出力するプログラムを作成しなさい。 点数は、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); }

  • 高校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; } やはり思い通りの結果が出ず困っております。 正答とアドバイスいただけると嬉しいです。 よろしくおねがいします。

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

    #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円なラ(意味ないな) マイナスなら(焼肉を食おう)

  • C言語についての質問です。

    C言語で順位表をつくる課題で困っています。 課題でプログラミングをしているのですが、順位表がうまく作成されません。 改善点をご教授ください。 課題は、http://www.centerjoho.com/23_q.pdf の第三問をC言語化するというものです。 よろしくお願いいたします。 以下、プログラムです。 #include <stdio.h> int main(void) { int Tensu[11]={ -1,15,9,26,13,2,28,17,21,12,10} ; int s, bango, sowa, saiko, saitei, heikin, TNin[101]={0} ; int GNin[101], ten, Tenjun[11], Tenban[11] ; int juni, i ; sowa = 0 ; saiko = 0 ; saitei = 100 ; for (bango=1;bango<=10;bango=bango+1) { s = Tensu[bango] ; sowa =sowa+s; if ( s >saiko ) saiko = s ; if ( s <saitei) saitei = s ; TNin[ s ] = TNin[ s ] + 1 ; } heikin = sowa / 10 ; printf("平均点=%d 最高点=%d 最低点=%d\n", heikin, saiko, saitei); GNin[100] = TNin[100] ; for (ten=99;ten>=0;ten=ten-1) GNin[ ten ] = GNin[ ten+ 1 ] + TNin[ ten ] ; for (bango=10;ten>=1;bango=bango-1) { s = Tensu[ bango ]; Tenjun[ GNin[s] ] = s ; Tenban[ GNin[s] ] = bango ; GNin[ s ] = GNin[ s ] - 1 ; } printf("#################\n") ; printf(" 順位 点数 番号\n") ; printf("#################\n") ; juni = 1 ; printf("%4d %4d %4d\n", juni, Tenjun[1], Tenban[1]); for (i=2;i<=10;i=i+1) { if (Tenjun[i] < Tenjun[i-1] ) juni = i ; printf("%4d %4d %4d\n", juni, Tenjun[i], Tenban[i]); } return 0 ; }

  • 協力お願いします

    このような質問をして申し訳ないんですがプログラミングが苦手なのでどなたか答えた頂けるのならばありがたいです。 下記表を並び替えて、 1) 総点順に並び換えよ。 2) 各科目別成績順に並びかえよ。   国語 算数 理科 社会 英語 太郎80 90 75 70 70 次郎70 85 80 80 85 三郎75 95 65 90 95 四朗65 70 80 75 80 春子90 100 85 90 85 夏子100 95 80 85 80 秋子60 75 90 70 85 冬子85 80 85 90 95 このような問題なんですがヒントをすごいもらって #include"stdio.h" #include "math.h" #define n 9 #define m 7 void main() { char namae[n][5]={"名前","太郎","二郎","三郎","四郎","春子","夏子","秋子","冬子"}; char kamoku [7][5]={"科目","国語","算数","理科","社会","英語","合計"}; double seiseki[n][m]={{0,0,0,0,0},{80,90,75,70,70},{70,85,80,80,85},{75,95,65,90,95},{65,70,80,75,80},{90,100,85,90,85},{100,95,80,85,80},{60,75,90,70,85},{85,80,85,90,95}}; int i,j; double goukei[n]; for(i=0;i<m;++i){ printf(" %s ",kamoku[i]); } printf("\n"); for(i=1;i<n;++i){ goukei[i]=0; printf("%s",namae[i]); for(j=0;j<m-2;++j){ printf("%6.0f",seiseki[i][j]); goukei[i]+=seiseki[i][j]; } printf("%6.0f\n",goukei[i]); } } こんな感じにはなったんですがあとどうしたらいいのかさっぱりわからません。 どなたかお力を貸していただきたく思います。 長文、乱文失礼いたしました。

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

    データーを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++でfscanf関数・fprintf関数を利用した成績処理のプログ

    C++でfscanf関数・fprintf関数を利用した成績処理のプログラムを作成しています。 #include "stdafx.h" void input(void); void calc(void); void edit(void); int gakusei=10,kamoku=5; /*学生数、科目数*/ char kamokumei[5][40]; /*科目名*/ char shimei[10][40]; /*氏名*/ int tennsuu[10][5]; /*点数*/ float heikin[10]; /*平均点*/ void main() /*メイン関数*/ { input(); calc (); edit (); } void input(void) /*データ入力(infile.d.txtから読み込む)*/ { FILE *fp; int n,k; fp=fopen("infile.d.txt","r"); if(fp==NULL) { printf("infile.d.txtが開けません\n"); } printf("infile.d.txt\n\n"); fscanf(fp,"%d %d",&gakusei,&kamoku); printf("%d %d\n",gakusei,kamoku); fscanf(fp,"%s",kamokumei); printf("%s\n",kamokumei); fscanf(fp,"%s",shimei); printf("%s\n",shimei); while(fscanf(fp,"%s",tennsuu)!=EOF) { printf("%s\n",tennsuu); } printf("\n\n"); fclose(fp); } void calc(void) /*各学生の平均点を計算、平均点の優秀者(80点以上)及び不合格者(60点未満)を摘出*/ { int n,k; float sum; for(n=0; n<gakusei; n++) { sum=0; for(k=0; k<kamoku; k++) { sum+=(float)tennsuu[n][k]; } heikin[n]=sum/kamoku; } } void edit(void) /*平均点、優秀者及び不合格者の氏名を付加した成績表を出力(outfile.d.txtに書き込み)*/ { int n; FILE *seiseki; seiseki=fopen("outfile.d.txt","w"); printf("outfile.d.txt\n\n"); fprintf(seiseki,"氏名 %s 平均\n",kamokumei); printf("氏名 %s 平均\n",kamokumei); fprintf(seiseki,"%s\n",shimei); printf("%s\n",shimei); for(n=0; n<gakusei; n++) { fprintf(seiseki,"%s",tennsuu); printf("%s\n",tennsuu); } printf("\n"); fprintf(seiseki,"平均点優秀者\n"); printf("平均点優秀者\n"); fprintf(seiseki,"平均点不合格者"); printf("平均点不合格者\n"); fclose(seiseki); } 添付した画像のoutfile.d.txtのようなフォーマットで出力したいのですが、氏名がうまく出力できません。また、点数もinfile.d.txtの最後の行しか読み込んでくれません。 どのように書き換えればよいのでしょうか? よろしくお願いします。 *infile.d.txtについて 10 5 ⇒学生数と科目数 材料力学 熱力学 ・・・ ⇒科目名 石川 川上 佐藤 ・・・ ⇒学生の氏名 78 95 75 86 ・・・ ⇒各科目の点数(1行につき5科目×2人分の点数が書き込まれています。)

  • char型変数のアドレスを coutで表示するには

    #include <iostream> using namespace std; int main() { bool b; int i; short s; long l; float f; double d; char c; //上で宣言した変数のアドレスを表示 cout << "bool &b " << &b << endl; cout << "int &i " << &i << endl; cout << "short &s " << &s << endl; cout << "long &l " << &l << endl; cout << "float &f " << &f << endl; cout << "double &d " << &d << endl; cout << "char &c " << &c << endl; //「char &c 」とのみ表示される cout << '\n'; //char型のみ printf で再表示 printf("char &c %p\n", &c); //「char &c ********」と表示される return 0; } 上のプログラムを実行すると cout << "char &c " << &c << endl; のところだけ、アドレスが表示されません。 printfを使えば、char型の変数のアドレスも表示されるのですが…。 coutを使ってchar型のアドレスを表示させるにはどうすればいいのでしょうか。 よろしくお願いします。

  • C++で10進数→2進数に

    C++で10進数を2進数に変換するプログラムを 順番通りに表示できるようにする っていうのを配列を使って作るんですが 下はあまり関係ないですが、こんな感じのが参考になるかなと思ったんですが、どうすればいいんですか #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; }