- 締切済み
プログラミングの質問です
- みんなの回答 (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% (2177/4070)
せっかくなんでコピペで回答。 ってか同じガッコの友達が先に質問していますよ。 # 実際、冷たくされてますしねぇ。 ================================================================================================ で、どこまで自分で出来ます? まるっきりコードが書けない。 なんてことはないですよね? # 前回回答貰っていますし。 ポインタ変数とかはちゃんと授業で受けましたか? 判らない点は先生に質問しましたか? 努力の跡すら認められないと先輩プログラマからは冷たくされることが多いですよ。 ================================================================================================
- black2005
- ベストアンサー率32% (1968/6046)
課題を丸投げすんな
- Tacosan
- ベストアンサー率23% (3656/15482)
しかも http://okwave.jp/qa/q8108854.html で回答までもらってるのに.
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
で、聞きたい内容はなんなの?
関連するQ&A
- コンピュータープログラミングの質問です。
下記の構造体タグ「seiseki」を使って,表に示すデータをもつ構造体配列「list」を作成。. 構造体配列「list」を利用して,一番点数の高い者を探し,その名前を表示するプログラミングの書き方、わからないです、よろしくおねがいします、、、、 Struct seikei{ Char name[30]; Int score[30]; }; name. Score 佐藤 80 鈴木 75 田中 95 高橋 90
- ベストアンサー
- C・C++・C#
- C言語 list 構造体配列
どうしてもこの問題がわからないので教えてください! 下記の構造体タグ「seiseki」を使って,表に示すデータをもつ構造体配列「list」を作成する. 関数に構造体配列「list」のアドレスを渡す. 関数で構造体ポインタ「*list」を利用して,一番点 数の高い者(1名限定)を調べ,その名前を表示する. struct seiseki{ char name[30]; int score; name score }; 表 佐藤 80 鈴木 75 田中 95 高橋 90
- 締切済み
- その他(学問・教育)
- C言語
よろしくお願いします。 下記の構造体タグ「seiseki」を使って,表に示すデータをもつ構造体配列「list」を作成する. 関数に構造体配列「list」のアドレスを渡す. 関数で構造体ポインタ「*list」を利用して,一番点 数の高い者(1名限定)を調べ,その名前を表示する. struct seiseki{ char name[30]; int score; name score }; 表 佐藤 80 鈴木 75 田中 95 高橋 90
- 締切済み
- その他(学問・教育)
- C言語 構造体配列 list
プログラミングでこの問題がわからないので教えてください! 下記の構造体タグseisekiを使って,表に示すデータをもつ構造体配列listを作成する. 構造体配列listを利用して,一番点数の高い 者を探し,その名前を表示する. struct seiseki{ char name[30]; int score; name score }; 表 佐藤 80 鈴木 75 田中 95 高橋 90
- ベストアンサー
- その他(学問・教育)
- 構造体で配列を使用しない方法。
構造体で配列を使用せずに、メモリ領域を獲得する関数を使用する場合はどうすればよろしいですか?? 例 char *str; struct seiseki{ char name[20]; int eig; int suu; int kok; char rank[3]; }; str = ()malloc();
- 締切済み
- C・C++・C#
- 構造体型のポインタ変数を含む構造体
struct seiseki_tag { Int32 math ; Int32 english ; Int32 science; } ; typedef struct seiseki_tag SEISEKI ; struct personal_tag { Char name ; Int32 num ; SEISEKI *sptr } : typedef struct personal_tag PERSONAL ; struct info_tag { PERSONAL person_info ; } ; typedef struct info_tag INFO ; たとえば、上記のように3つの構造体があり、PERSONAL構造体のメンバーに SEISEKI構造体の型を持つポインタ変数が含まれているような場合で、下記のように INFO型のポインタ変数からSEISEKI構造体のメンバーを参照する方法を教えてください。 PERSONAL構造体メンバーのnameやnumは INFO *info ; info->person_info.name ; info->person_info.num ; のように参照すると思いますが、sptrが示すSEISEKI構造体のメンバーへの アクセスができません。下記のように参照を試みたのですがコンパイルは 通るのですが、実際に参照できていませんでした。 INFO *info ; SEISEKI *seiseki ; seiseki = info->person_info.sptr ; seiseki->math ; 判りにくい説明で申し訳ありませんが、どなたか教えていただければと思います。 よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- 構造体について
凄く初歩的な質問で申し訳ありませんが… 入門書の構造体のところで 以下のようなプログラムの例がありました。 #include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ >char name[20] というのは、NAMEの領域を20文字 確保すると言うことですよね? >struct seiseki seito1, seito2[20] ここの箇所が分からないのですが seito2[20]の20というのは どうして20なのですか? NAMEだけではないので もっと大きな数字になるような気がするのですが… またseito1の方は どうして数字が何もないんですか? 考え違いをしているところを ご指摘して頂ければ幸いです。
- ベストアンサー
- C・C++・C#
- リスト構造の設定のしかた
メンバ変数が配列のlist_before構造体に設定してあるものを、リスト構造のlist_after構造体に設定し直したいです。 どのように設定すればいいのでしょうか? また、list_before構造体とlist_after構造体を引数にした関数で設定したいのですが呼び出し元と先の引数はどう書けばいいのでしょうか? その際の構造体とメンバ変数は以下になります。 ご教授どうぞ宜しくお願いいたします。 struct list_before { char *name[5]; int size[5]; }; struct list_after { char *name; int size; struct list *next; };
- 締切済み
- C・C++・C#
- ファイルの読み込みと構造体
こんばんは☆ Cのプログラミングに困っています(>_<) テキストファイル(meibo.txt) 田中 32 公務員 佐藤 20 学生 というファイルを読み込んで、構造体に入れて表示するには どうしたらよいでしょうか? struct meibo{ char name[20]; int age; char job[20]; }list[3]; としたあとにどのように入れたらよいかがわかりません… わかる方教えてくださいm(_ _)m
- ベストアンサー
- C・C++・C#
お礼
親切なかたがいて非常にたすかりました。 解説をしっかり勉強して学びたいとおもいます。 ありがとうございます。