- 締切済み
プログラミングの質問です
下記の構造体タグ「seiseki」を使って,表に示す データをもつ構造体配列「list」を作成する. 関数に構造体配列「list」のアドレスを渡す. 関数で構造体ポインタ「*list」を利用して,一番点 数の高い者(1名限定)を調べ,その名前を表示する. struct seiseki{ char name[30]; int score; }; name score 佐藤 80 鈴木 75 田中 95 高橋 90
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- Peechyan
- ベストアンサー率69% (34/49)
こんにちは。なんか、似たような質問の回答をしたばかりなような気もしますが、C言語の入門書レベルで書けるコードはこんな感じになると思います。このコードの少し面倒くさいところは、関数への配列のアドレスを渡すところです。この部分が少し捻ってある部分ですね。また、最後の名前を表示する部分については、名前+成績を表示するように変えてあるので、"%d"と、成績の変数を取り除けば、課題どおりになります。なお、このコードはわざとデバッグ用の部分も残してありますので、いろいろいじって実行してみてください。その結果(コードが)壊れたら、またコピペすればよいだけの話です。 #include <stdio.h> #include <string.h> #define NUM 4 //4人分の配列を用意するので、マクロで置き換える //デバッグ用のマクロ(コメントアウトすると#ifdef~#endifの内容が無効になる) #define DEBUG struct seiseki{ char name[30]; int score; }; typedef struct seiseki seiseki; /* 各人の名前と点数を表示する関数の宣言 */ void showPeople(seiseki *list); /* 一番点数の高い者を調べ,その名前を表示する関数の宣言 */ void showMax(seiseki *list); int main(void) { seiseki list[NUM]; // 佐藤 80 鈴木 75 田中 95 高橋 90 strcpy(list[0].name, "佐藤"); list[0].score=80; strcpy(list[1].name, "鈴木"); list[1].score=75; strcpy(list[2].name, "田中"); list[2].score=95; strcpy(list[3].name, "高橋"); list[3].score=90; // 配列名は、配列の先頭要素のアドレスを格納しているポインタと同じ働きを持つ。 // よって、配列名listを引数として関数に渡すだけで、 // 関数に構造体配列「list」のアドレスを渡したことになる。 #ifdef DEBUG showPeople(list); #endif showMax(list); return 0; } /* 各人の名前と点数を表示する関数の定義 */ void showPeople(seiseki *list){ int i; printf("%s\t%s\n", "name", "score"); for(i=0;i<NUM;i++){ printf("%s\t%d\n", list[i].name, list[i].score); } } /* 一番点数の高い者を調べ,その名前を表示する関数の定義 */ void showMax(seiseki *list){ int i; //ループ用 // パターン1用の変数(最大値を持つ配列番号の格納用) int maxArrayNum = 0; // パターン2用の変数 int max = 0; char name[30]; // パターン1は、最高点の人の配列のデータを直接使うやり方 // パターン2は、最高点が見つかるたびに別に用意した変数に // 名前と点数を上書きしていくやり方。お好きな方をお使いください。 for(i=0;i<NUM; i++){ if(max < list[i].score){ /* パターン1 */ maxArrayNum = i; #ifdef DEBUG printf("現段階の最高点は%sさん☆:\t%d\n", list[maxArrayNum].name, list[maxArrayNum].score); #endif /* パターン2 */ max = list[i].score; strcpy(name, list[i].name); #ifdef DEBUG printf("現段階の最高点は%sさん!:\t%d\n", name, max); #endif } } // パターン1を使った表示法。 printf("最高点は%sさん:\t%d点\n", list[maxArrayNum].name, list[maxArrayNum].score); // パターン2を使った表示法。 printf("最高点は%sさん:\t%d\n", name, max); }
- lv4u
- ベストアンサー率27% (1862/6715)
たぶん、回答をもらっても、それさえも解読できない状態なんでしょうね。 ですから、いくらここで質問しても解決しません。 C言語の勉強をしましょう。 ま、構造体については、学ぶのになかなか難しいところがあるのは事実です。 C言語の参考書についていえば、初級が多くて、中上級の本は少ないといわれています。 回答を解読するには、中級レベルの知識を必要としていると思います。 ただ、質問者さんが、努力のカケラさえも見えないとなれば、みんな冷たくなるのは当然です。 たとえ、このサイトで親切にしてもらえたとしても、今のままなら、就職して困ることが続くと思います。
- Wr5
- ベストアンサー率53% (2173/4061)
せっかくなんでコピペで回答。 ってか同じガッコの友達が先に質問していますよ。 # 実際、冷たくされてますしねぇ。 ================================================================================================ で、どこまで自分で出来ます? まるっきりコードが書けない。 なんてことはないですよね? # 前回回答貰っていますし。 ポインタ変数とかはちゃんと授業で受けましたか? 判らない点は先生に質問しましたか? 努力の跡すら認められないと先輩プログラマからは冷たくされることが多いですよ。 ================================================================================================
- black2005
- ベストアンサー率32% (1968/6046)
課題を丸投げすんな
- Tacosan
- ベストアンサー率23% (3656/15482)
しかも http://okwave.jp/qa/q8108854.html で回答までもらってるのに.
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
で、聞きたい内容はなんなの?
お礼
親切なかたがいて非常にたすかりました。 解説をしっかり勉強して学びたいとおもいます。 ありがとうございます。