C言語の課題について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ナオユキ

C言語の課題について

#1

投稿記事 by ナオユキ » 17年前

この文章で間違えてるところありますか?

管理人

Re:C言語の課題について

#2

投稿記事 by 管理人 » 17年前

まず、何の問題であるか示してください。
そして、名前をその時によって変えないで下さい。
前トピのkazuさんですよね?

よく規約をご覧になった上でのご投稿お願いします。

まず、規約を守って頂いてから回答させて下さい。

nano

Re:C言語の課題について

#3

投稿記事 by nano » 17年前

これだと平均が算出されませんね。
平均は小数計算なのでdouble型。
キャスト演算子というものを調べてみてください。

printf("平均 =%10.4f\n",double(hei));


追加。
souwa += X;
書き方的にはこっちの方が好まれると思います。
このとき、変数宣言でsouwa=0;を忘れないように注意。

バグ

Re:C言語の課題について

#4

投稿記事 by バグ » 17年前

とりあえず、コンパイルしてエラーが出なければ合っているのではないでしょうか?
意図したとおりに動くかどうかは別問題ですが…

いけやん

Re:C言語の課題について

#5

投稿記事 by いけやん » 17年前

すいません。
自分初心者ですが、
int hei;
printf("平均 =%10.4f\n",hei);
この部分ですが
多分小数点まで出す処理だと思うのですが
heiはint型なので.00小数点より後ろは出ないと思います(多分)
出そうと思うと
double hei;にした方がいいですね。

ナオユキ

C言語の課題について

#6

投稿記事 by ナオユキ » 17年前

先ほどはすいませんでした。
まだ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言語の課題について

#7

投稿記事 by 管理人 » 17年前

まず、本名や学年や番号ではないかと思われる情報がコードに載っているのはいいのでしょうか?
それと今後はナオユキさんで名前を統一されるということでよかったでしょうか。

あと、添付ファイルにすると、過去ログ落ちしたとき消えてしまうので、出来れば本文に
ソースコードを書いていただけると嬉しいです。

たかぎ

Re:C言語の課題について

#8

投稿記事 by たかぎ » 17年前

相変わらず処理系が特定されていませんし、ちゃんと規約を読んだとは到底思えません。
書いてあること、これから書くことの大半が嘘であることも十分予想できます。
また、せっかく回答しても、質問文等が消去される可能性も高いですね。
まずは、信頼を回復するために、自分が何をできるかを考えてください。

管理人

Re:C言語の課題について

#9

投稿記事 by 管理人 » 17年前

なかなか先にすすみそうにないので、回答へうつります・・。


期待した振る舞いをするかどうかはともかく直した方がいいという箇所を列挙すると

・main()で始めずにint main()で始める方がいい。
・charでXを用意している点(scanfの%dも含む)
・do whileのiは255を超える可能性があり、オーバーフローの危険性がある。
・for文で0が見つからなかったら果てしなく調べていく危険性がある
・for文でi+nが用意した配列要素以上の数にならないかチェックしてないので超える危険性がある
・heiには整数しかはいらない
・heiの表示はintに対して%10.4fになっているのでおかしい

というところでしょうか。

ナオユキ

Re:C言語の課題について

#10

投稿記事 by ナオユキ » 17年前

編集キーがわからず編集できないので、返信します。

まだ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);
}

Mist

Re:C言語の課題について

#11

投稿記事 by Mist » 17年前

if(X<X[n])
  w=X;
  X=X[n];
  X[n]=w;

ここ間違い。
ifのかっこを省略するから下の2行は必ず実行されて、ぐちゃぐちゃになってる。

ナオユキ

Re:C言語の課題について

#12

投稿記事 by ナオユキ » 17年前

見事動きました。
ご協力いただき、本当にありがとうございました。
次回また何かあればお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る