ページ 1 / 1
C言語の課題について
Posted: 2008年9月01日(月) 14:44
by ナオユキ
この文章で間違えてるところありますか?
Re:C言語の課題について
Posted: 2008年9月01日(月) 14:54
by 管理人
まず、何の問題であるか示してください。
そして、名前をその時によって変えないで下さい。
前トピのkazuさんですよね?
よく規約をご覧になった上でのご投稿お願いします。
まず、規約を守って頂いてから回答させて下さい。
Re:C言語の課題について
Posted: 2008年9月01日(月) 14:57
by nano
これだと平均が算出されませんね。
平均は小数計算なのでdouble型。
キャスト演算子というものを調べてみてください。
printf("平均 =%10.4f\n",double(hei));
追加。
souwa += X;
書き方的にはこっちの方が好まれると思います。
このとき、変数宣言でsouwa=0;を忘れないように注意。
Re:C言語の課題について
Posted: 2008年9月01日(月) 14:57
by バグ
とりあえず、コンパイルしてエラーが出なければ合っているのではないでしょうか?
意図したとおりに動くかどうかは別問題ですが…
Re:C言語の課題について
Posted: 2008年9月01日(月) 15:00
by いけやん
すいません。
自分初心者ですが、
int hei;
printf("平均 =%10.4f\n",hei);
この部分ですが
多分小数点まで出す処理だと思うのですが
heiはint型なので.00小数点より後ろは出ないと思います(多分)
出そうと思うと
double hei;にした方がいいですね。
C言語の課題について
Posted: 2008年9月01日(月) 15:08
by ナオユキ
先ほどはすいませんでした。
まだC言語を習い始めて半年ほどの初心者です。
テ ー マ : 整数配列の計算
プログラム説明: 配列Xに整数をキーボードより入力し、0が入力されたときそ
れまでに入力されたデータを降順にソートし、データ数、総和、
平均を出力する。
補 足 : データ数、総和、平均の桁位置を揃える。ただし、平均は小数点
以下4桁出力する。
出 力 例 :
データ入力
入力 X[0] ? 54
入力 X[1] ? 53
入力 X[2] ? 86
入力 X[3] ? 0
出力 X[0] = 86
出力 X[1] = 54
出力 X[2] = 53
データ数 = 3
総和 = 193
平均 = 64.3333
出力 Xのところに、入力した覚えのない数字が表示されます。
下記プログラムの誤りを指摘していただけないでしょうか?
#include <stdio.h>
main()
{
int i=0,n,w,souwa;
int X[256];
double heikin;
printf("データ入力\n");
do{
printf("入力 X[%d] ? ",i);
scanf("%d",&X);
}while(X[i++] != 0);
printf("\n");
for(i=0;X!=0;i++){
for(n=i+1;X[n]!=0;n++){
if(X<X[n])
w=X;
X=X[n];
X[n]=w;
}
}
for(souwa = 0,i = 0;X != 0;i++){
printf("出力 X[%d] = %d\n",i,X);
souwa += X;
}
heikin=souwa/i;
printf("\n");
printf("データ数 =%5d\n",i);
printf("総和 =%5d\n",souwa);
printf("平均 =%10.4f\n",heikin);
}
Re:C言語の課題について
Posted: 2008年9月01日(月) 15:10
by 管理人
まず、本名や学年や番号ではないかと思われる情報がコードに載っているのはいいのでしょうか?
それと今後はナオユキさんで名前を統一されるということでよかったでしょうか。
あと、添付ファイルにすると、過去ログ落ちしたとき消えてしまうので、出来れば本文に
ソースコードを書いていただけると嬉しいです。
Re:C言語の課題について
Posted: 2008年9月01日(月) 15:14
by たかぎ
相変わらず処理系が特定されていませんし、ちゃんと規約を読んだとは到底思えません。
書いてあること、これから書くことの大半が嘘であることも十分予想できます。
また、せっかく回答しても、質問文等が消去される可能性も高いですね。
まずは、信頼を回復するために、自分が何をできるかを考えてください。
Re:C言語の課題について
Posted: 2008年9月01日(月) 15:15
by 管理人
なかなか先にすすみそうにないので、回答へうつります・・。
期待した振る舞いをするかどうかはともかく直した方がいいという箇所を列挙すると
・main()で始めずにint main()で始める方がいい。
・charでXを用意している点(scanfの%dも含む)
・do whileのiは255を超える可能性があり、オーバーフローの危険性がある。
・for文で0が見つからなかったら果てしなく調べていく危険性がある
・for文でi+nが用意した配列要素以上の数にならないかチェックしてないので超える危険性がある
・heiには整数しかはいらない
・heiの表示はintに対して%10.4fになっているのでおかしい
というところでしょうか。
Re:C言語の課題について
Posted: 2008年9月01日(月) 15:45
by ナオユキ
編集キーがわからず編集できないので、返信します。
まだC言語を習い始めて半年ほどの初心者です。
テ ー マ : 整数配列の計算
プログラム説明: 配列Xに整数をキーボードより入力し、0が入力されたときそ
れまでに入力されたデータを降順にソートし、データ数、総和、
平均を出力する。
補 足 : データ数、総和、平均の桁位置を揃える。ただし、平均は小数点
以下4桁出力する。
出 力 例 :
データ入力
入力 X[0] ? 54
入力 X[1] ? 53
入力 X[2] ? 86
入力 X[3] ? 0
出力 X[0] = 86
出力 X[1] = 54
出力 X[2] = 53
データ数 = 3
総和 = 193
平均 = 64.3333
出力 Xのところに、入力した覚えのない数字が表示されます。
下記プログラムの誤りを指摘していただけないでしょうか?
#include <stdio.h>
main()
{
int i=0,n,w,souwa;
char X[256];
double heikin;
printf("データ入力\n");
do{
printf("入力 X[%d] ? ",i);
scanf("%d",&X);
}while(X[i++] != 0);
printf("\n");
for(i=0;X!=0;i++){
for(n=i+1;X[n]!=0;n++){
if(X<X[n])
w=X;
X=X[n];
X[n]=w;
}
}
for(souwa = 0,i = 0;X != 0;i++){
printf("出力 X[%d] = %d\n",i,X);
souwa += X;
}
heikin = (double)souwa/i;
printf("\n");
printf("データ数 =%5d\n",i);
printf("総和 =%5d\n",souwa);
printf("平均 =%10.4lf\n",heikin);
}
Re:C言語の課題について
Posted: 2008年9月01日(月) 15:58
by Mist
if(X<X[n])
w=X;
X=X[n];
X[n]=w;
ここ間違い。
ifのかっこを省略するから下の2行は必ず実行されて、ぐちゃぐちゃになってる。
Re:C言語の課題について
Posted: 2008年9月01日(月) 16:02
by ナオユキ
見事動きました。
ご協力いただき、本当にありがとうございました。
次回また何かあればお願いします。