C 02-プログラム設計基礎向上班(C++)第8週のオンサイトタスク-構造体


第8周:教材の第7章(p 201-230)を読んで、主な内容は构造体とカスタマイズのタイプで、同时に学友达を第3-7章の内容を整理して、第8周の上机の任务を完成して、今周の任务はいくつかの构造化のプログラムの设计の技术で问题を解决する総合的なテーマを増加します;
(C 02-プログラム設計基礎向上班(C++)学習手配に戻る)
実践タスク(必要なデータファイルscore.txtは本明細書の後、自分でコピーした後、手帳でscore.txtとして保存):【タスク1】構造体データグループ
  score.txtには、いくつかの学生の学号、氏名、C++、高数、英語の成績が定義され、学生の成績の構造体配列が定義され、そのメンバーには学号(char num[12])、氏名(name)、3つの授業の成績(grade)、総点(score)が含まれる.
(1)ファイルからデータを読み出し、定義した構造体配列に格納する.
(2)学生一人一人の総得点を求める(読み込み過程で「ついでに」計算できる).
(3)総得点順(降順)
(4)ソート後の成績表を出力する.
(5)30名の学生が奨学金を受けることができ、総得点が高い者を優先し、科を掛けて奨学金を得ることができないのがルールです(わが校はこのように規定しています).奨学金をもらった学生のリストを出してください.
(6)各科目および総得点の平均成績、最高と最低成績、標準偏差を統計し、出力する.
#include  <iostream>  
#include  <fstream>  
usingnamespace std;  
struct Student  
{  
   char num[13]; //         ,         。12       ,          
   char name[10]; //         ,      ,5       
   int cpp;  
   int math;  
   int english;  
   int grade;  
};  
const intN=180;  
int main( )  
{  
   int i, j, k;  
   Student stu[N];  //       
      
   //                ,             
 
   //             
   
   //           
    
   //              
   
}  
 

【タスク2】タスク1の各機能をそれぞれカスタム関数として設計し、タスクを書き換える.
【タスク3】ダイナミックチェーンテーブルデータは依然としてscore.txtから来ており、プログラムの中でダイナミックチェーンテーブルを構築する:1人の学生のデータを読み込むごとに、総得点を計算し、ノードの記憶空間を割り当て、そして前後のチェーン関係を構築する.チェーンテーブルを構築する同時に、統計を行い、すべての学生の総得点の平均成績を求める.ダイナミックチェーンテーブルが構築された後、最初から終了点から、平均総得点より高く、科を掛けていないすべての学生の学号、名前、総得点を順次出力します.
【タスク4】タスク3に続き、チェーンテーブルが作成された後、合計点が合計点よりも低いノードを削除します(削除後も前後のチェーンが接続され、不要なスペースが正常に解放されることに注意してください).
【タスク5】(あなたの生い立ちの秘密を暴く)これはおどかすプログラムではなく、とても役に立ちます.作者は子供が百日を過ごすのを見て、自分の万日がいつあるか考えました.プログラミング計算をして、十数日が過ぎたばかりで、その悔しさですね.二番目の万日はもう26年以上待たなければなりません.三番目の万日、誰がきっと過ごせると言いますか.20歳ぐらいのあなたは、はっきり計算しなければなりません.二番目の万日に26年以上待たなければなりません.(1)質問にあなたの誕生日を入力すればいいです.分秒も分からない?お母さんも忘れたかもしれませんが、好きな、縁起の良い時間を入力しましょう.次のプログラムは1つのmain関数で完成してもいいし、関数で解いてもいいし、main関数で呼び出せばいいです.
時間(年、月、日、時、分、秒を含む)を表す構造体を定義し(4.4.1節のtime.hでこの構造体をどのように定義したかを参照)、次の機能を完了します.
(1)入力時間(各部分データの取値範囲に注意)入力時間を1つの構造体変数に保存する.
(2)出力日が本年で何日目(閏年問題注意);
(3)出力この日の数秒目;
(4)出力この年の数秒目です.(この数がでたらめだとは思わないでください.計算中に乱数を取る必要がある場合は繰り返さない「種子数」が必要です.この秒数はよく使われています.)
(5)入力した時間dの後、どの年のどの月のどの日で、結果を1つの構造体変数に保存して出力します;(あなたの万日の日付はこの機能に頼っています)
(6)入力した時間s秒後にいつ、結果を構造体変数に保存して出力するかを求める.
【タスク6】タスク5に続いて、構造体変数で2つの時間を与えて、(1)何日差を求めますか?(2)何秒差がありますか?
【タスク7】携帯電話の通信録管理システムを設計する:模擬携帯電話の通信録管理システムを設計し、構造体配列または動的チェーンテーブルを記憶構造として利用し、携帯電話における通信録の管理を実現する.(オプションとしては、AオフィスクラスB人Cビジネスクラス)、Eメール)があります.たとえば、楊春135896664454ビジネスクラス[email protected]
重複する氏名と電話番号を入力した場合、データ入力の重複を提示し、入力をキャンセルする.通信録に15個以上の情報がある場合、記憶空間はすでにいっぱいで、新しいデータを入力できない.入力した新しいデータは、増分順に自動的にエントリ番号を付けることができます.
(2)表示機能:この機能を選択すると、AオフィスクラスBの人間Cビジネスクラス、あるクラスを選択すると、このようなすべてのデータの名前と電話番号が表示される3つの選択がリストされます.
(3)ダイヤルアップ機能:通信録のすべての人の名前を表示することができ、ある名前を選択すると、画面上で電話をかけるプロセスをシミュレートすることができます.あるいは、直接番号を入力することができます.この番号が通信録にある場合、ダイヤルアップ中に彼/彼女の名前を表示します.
(4)修正機能:誰かの名前を入力した場合、その人のデータを修正することができる
(5)削除機能:ある人の名前を入力すると、その人の該当するデータを削除し、後続の項目の番号を自動的に調整することができます.
(6)さらに拡張:通信録をファイルに格納し,プログラムを実行する際に,まずファイルから既存のデータを読み出すと,通信録中の情報の本数制限が緩和される.
附:score.txtのデータ(手帳にコピーしてテキストファイルを作成する)
劉擅60 98 75王鋭63 90何煜中90 73 82王磊87 86 92馮松89 98 83鞖培75 82馬骁62 67 90馬婧98 84 87周俊昇57 68 96賀祺61 96 72李桐93 83 86高路63 74 98馮佳媛61 79 81枚迪99 88 80枚里響85 65 96王瑞麒89 83 91徐金竹75 89 73趙媛77 75宋宗傑94 100 92張佳玮61 98王姝70 91宋媛媛61 94 92于莉55 66 78于浩78 84 72王竞90 87 67崔賛91 67 93宋静69 85 73王磊71 78 77方円70 79 76李朋90 82 97马佳60 90 100张龙62 100 78マリ73韩明83 97 88马立73呉清正89 97印虹92 68 75田苗75衛青66 73 77冷雲89 88 88 71葛志偉100 79範振光98 87王芳71 97楊超67,7382杨梦婕89,9967梁雅宁55,88100王琦98呉玮69,768杨阔90,91,98賈伟林63,9086刘亜新77,8195金昕92,69董一伟93,8880汤娜68,8571周恒87,8269张笑86,8876文静93,85杨华鑫81,68苏明霞59,94黄京62,75,960 94 80高挙81 99 91辺里56 94 87何佳成70 75 78趙旭洋87 91 94孫大偉65 69 98魯継森84 79 75白涛57 82蔺剣飛88 75 79蘭天83 66 74王悦79 82陳世勃70 92 65張昊94 83 96 HD 76 84王欣欣71 83王歓歓57 33 66葉丹87 80 96李悦63 79 97郭倩69劉盈99 72楊潔96 79徐一菡85 45 62王蒙67,9789張敏85,7589桂佳60,7365林倩67,7780任盛達57,8688呉佳林96,6582黄金龍85,9078陳美珠82,7283冼丹100 89唐楠68,9777張揚77,6593宋航彬80,71薛淇文89,7175劉紫亮72,9884