首页 > 代码库 > C++程序设计原理与实践 第十章部分答案
C++程序设计原理与实践 第十章部分答案
1 #include "../../st.h" 2 3 class Point{ 4 public: 5 Point():x(0),y(0){} 6 Point(int x1,int y1):x(x1),y(y1){} 7 double re_x(){return x;} 8 double re_y(){return y;} 9 friend istream& operator>>(istream&is,Point&p);10 private:11 double x; 12 double y;13 };14 15 ostream& operator<<(ostream& os,Point&p)16 {17 return os<<"("<<p.re_x()<<","<<p.re_y()<<")";18 }19 20 21 istream& operator>>(istream&is,Point&p)22 {23 char c1,c2,c3;24 is>>c1>>p.x>>c2>>p.y>>c3;25 return is;26 }27 28 29 void fill_from_file(vector<Point>&p,string&s)30 {31 ifstream ist(s.c_str());32 if(!ist)33 error("can‘t open input file",s);34 Point pp;35 while(ist>>pp)36 p.push_back(pp);37 }38 39 void file_from_fill(vector<Point>&p,string&s)40 {41 ofstream ost(s.c_str());42 int i;43 if(!ost)44 error("can‘t open output file",s);45 for(i=0;i<p.size();i++)46 ost<<‘(‘<<p[i].re_x()<<‘,‘<<p[i].re_y()<<‘)‘<<endl;47 }48 49 int main()50 {51 int i;52 int x,y;53 vector<Point> original_points;54 vector<Point> processed_points;55 string oname="output.txt";56 57 for(i=0;i<7;i++)58 {59 cout<<i+1<<" 输入(x,y):";60 cin>>x>>y;61 Point p(x,y);62 original_points.push_back(p);63 }64 65 file_from_fill(original_points,oname);66 fill_from_file(processed_points,oname);67 68 69 for(i=0;i<7;i++)70 cout<<original_points[i]<<endl;71 for(i=0;i<7;i++)72 cout<<processed_points[i]<<endl;73 keep_window_open();74 75 }
1 #include "../../st.h" 2 3 int main() 4 { 5 string s="mydata.txt"; 6 int i; 7 int sum=0; 8 ifstream ist(s.c_str()); 9 if(!ist)10 error("can‘t open input file",s);11 while(ist>>i)12 {13 sum+=i;14 }15 cout<<sum<<endl;16 keep_window_open();17 18 }
1 #include "../../st.h" 2 3 struct Reading{ 4 int hour; 5 double temperature; 6 char c; 7 Reading(int h,double t,char ch):hour(h),temperature(t),c(ch){} 8 }; 9 10 ostream& operator<<(ostream&os,Reading&r)11 {12 return os<<r.hour<<‘,‘<<r.temperature<<r.c<<endl;13 }14 15 istream& operator>>(istream&is,Reading&r)16 {17 char c;18 is>>r.hour>>c>>r.temperature>>r.c;19 return is;20 }21 22 void change(Reading&r)23 {24 if(r.c==‘c‘)25 {26 r.c=‘f‘;27 r.temperature=32+r.temperature*1.8;28 }29 30 }31 32 void fill_from_file(vector<Reading>&r,string&s)33 {34 ifstream ist(s.c_str());35 if(!ist)36 error("can‘t open input file",s);37 Reading rr(0,0,‘c‘);38 while(ist>>rr)39 {40 change(rr);41 r.push_back(rr);42 }43 }44 45 46 int main()47 {48 string s="mydata.txt";49 int hour;50 double tem;51 char ch;52 vector<Reading> readings;53 ofstream ost(s.c_str());54 if(!ost)55 error("can‘t open output file",s);56 while(cin>>hour>>tem>>ch)57 {58 if(hour<0||hour>23)59 error("hour out if range");60 ost<<Reading(hour,tem,ch);61 }62 ost.close();63 64 fill_from_file(readings,s);65 int i,j;66 int h,t;67 for(i=0;i<readings.size();i++)68 for(j=0;j<readings.size()-i-1;j++)69 if(readings[j].temperature>readings[j+1].temperature)70 {71 h=readings[j].hour;72 t=readings[j].temperature;73 readings[j].hour=readings[j+1].hour;74 readings[j].temperature=readings[j+1].temperature;75 readings[j+1].hour=h;76 readings[j+1].temperature=t;77 }78 double sum=0;79 for(i=0;i<readings.size();i++)80 sum+=readings[i].temperature;81 cout<<"middle:"<<readings[readings.size()/2].temperature<<endl<<"平均:"<<sum/readings.size()<<endl;82 83 keep_window_open();84 85 }
1 void print_year(ofstream&ofs,Year&y) 2 { 3 ofs<<y.year<<" year:\n"; 4 for(int i=0;i<12;i++) 5 { 6 if(y.month[i].month!=not_a_month) 7 { 8 ofs<<"\tmonth "<<y.month[i].month<<endl; 9 for(int j=0;j<32;j++)10 {11 if(y.month[i].day[i].is_day!=not_a_day)12 {13 ofs<<"\t\tday "<<y.month[i].day[i].is_day<<endl;14 for(int k=0;k<24;k++)15 if(y.month[i].day[i].hour[k]!=not_a_reading)16 ofs<<"\t\t\t"<<i<<" hour: "<<y.month[i].day[i].hour[k]<<endl;17 }18 19 }20 }21 }22 }
1 #include "../../st.h" 2 3 class Roman_int{ 4 public: 5 int as_int(string s); 6 int re_int(){return i;} 7 char re_kind(){return ch;} 8 Roman_int() 9 :i(0){} 10 Roman_int(char c) 11 :ch(c),i(0){} 12 Roman_int(char c,int ii) 13 :ch(c),i(ii){} 14 private: 15 int i; 16 char ch; 17 }; 18 19 string as_roman(int i) 20 { 21 if(i<1||i>>3999) 22 error("over range 1~3999"); 23 string digits[10] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; 24 string tens[10] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; 25 string hundreds[10] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; 26 string thousands[4] = {"", "M", "MM", "MMM"}; 27 28 string ss=""; 29 ss+=thousands[i/1000]; 30 ss+=hundreds[i%1000/100]; 31 ss+=tens[i%100/10]; 32 ss+=digits[i%10]; 33 34 return ss; 35 } 36 37 int Roman_int::as_int(string s) 38 { 39 int b[100]; 40 int sum=0; 41 int i1=0,sum1=0; 42 for(i1=0;i1<s.size();i1++) 43 { 44 switch(s[i1]) 45 { 46 case ‘I‘:b[i1]=1,sum1++;continue; 47 case ‘V‘:b[i1]=5,sum1++;continue; 48 case ‘X‘:b[i1]=10,sum1++;continue; 49 case ‘L‘:b[i1]=50,sum1++;continue; 50 case ‘C‘:b[i1]=100,sum1++;continue; 51 case ‘D‘:b[i1]=500,sum1++;continue; 52 case ‘M‘:b[i1]=1000,sum1++;continue; 53 default: break; 54 } 55 } 56 if(sum1==1) 57 sum=b[0]; 58 else 59 { 60 sum=0; 61 for(i1=0;i1<sum1;i1++) 62 { 63 if(b[i1]>=b[i1+1]) 64 sum=sum+b[i1]; 65 else 66 { 67 sum=sum+(b[i1+1]-b[i1]); 68 i1++; 69 } 70 } 71 } 72 i=sum; 73 return sum; 74 } 75 76 istream& operator>>(istream&is,Roman_int&ri) 77 { 78 string s; 79 is>>s; 80 ri.as_int(s); 81 return is; 82 } 83 84 ostream& operator<<(ostream&os,Roman_int&ri) 85 { 86 return os<<ri.re_int(); 87 } 88 89 class Token_stream{ 90 public: 91 Token_stream(); 92 Roman_int get(); 93 Roman_int get(istream&); 94 void putback(Roman_int ri); 95 private: 96 bool full; 97 Roman_int buffer; 98 }; 99 100 Token_stream::Token_stream()101 :full(false),buffer(0)102 {103 }104 105 void Token_stream::putback(Roman_int t)106 {107 if(full) error("putback() into a full buffer");108 buffer=t;109 full=true;110 }111 112 Roman_int Token_stream::get(istream&ifs)113 {114 if(full){115 full=false;116 return buffer;117 }118 char ch;119 ifs>>ch;120 switch(ch){121 case ‘;‘: case ‘q‘: case ‘(‘: case ‘)‘: case ‘{‘:122 case ‘}‘: case ‘+‘: case ‘-‘: case ‘*‘: case ‘/‘:123 return Roman_int(ch);124 case ‘I‘: case ‘V‘: case ‘X‘: 125 case ‘C‘: case ‘D‘: case ‘M‘:126 { 127 string s="";128 s+=ch;129 while(ifs>>ch)130 {131 if(ch==‘I‘||ch==‘V‘||ch==‘X‘||ch==‘C‘||ch==‘D‘||ch==‘M‘)132 s+=ch;133 else134 {135 ifs.putback(ch);136 break;137 }138 }139 Roman_int r(‘8‘);140 r.as_int(s);141 return r;142 }143 case ‘f‘: 144 while(cin.get(ch)&&isalpha(ch)) 145 ;146 cin.putback(ch);147 return Roman_int(‘f‘);148 case ‘t‘:149 while(cin.get(ch)&&isalpha(ch)) 150 ;151 cin.putback(ch);152 return Roman_int(‘t‘);153 default:154 error("bad token");155 }156 }157 158 Token_stream ts;159 double expression(istream&ifs);160 161 double primary(istream&ifs)162 {163 164 Roman_int t=ts.get(ifs);165 switch(t.re_kind()){166 case ‘(‘:167 {168 int d=expression(ifs);169 t=ts.get(ifs);170 if(t.re_kind()!=‘)‘) 171 error("‘)‘expected");172 return d;173 }174 case ‘8‘:175 return t.re_int();176 default:177 error("primary expected",t.re_kind());178 }179 }180 181 double primary1(istream&ifs)182 {183 Roman_int t=ts.get(ifs);184 while(true)185 {186 switch(t.re_kind()){187 case ‘{‘:188 {189 double d=expression(ifs);190 t=ts.get(ifs);191 if(t.re_kind()!=‘}‘) 192 error("‘}‘expected");193 return d;194 }195 default:196 ts.putback(t);197 return primary(ifs);198 }199 }200 }201 202 double term(istream&ifs)203 {204 double left=primary1(ifs);205 Roman_int t=ts.get(ifs);206 207 while(true){208 switch(t.re_kind()){209 case ‘*‘:210 left*=primary1(ifs);211 t=ts.get(ifs);212 break;213 case ‘/‘:214 {215 double d=primary1(ifs);216 if(d==0)217 error ("divide by 0");218 left /=d;219 t=ts.get(ifs);220 break;221 }222 default:223 ts.putback(t);224 return left;225 }226 }227 }228 229 double expression(istream&ifs)230 {231 double left=term(ifs);232 Roman_int t=ts.get(ifs);233 while(true){234 switch(t.re_kind()){235 case ‘+‘:236 left+=term(ifs);237 t=ts.get(ifs);238 break;239 case ‘-‘:240 left-=term(ifs);241 t=ts.get(ifs);242 break;243 default:244 ts.putback(t);245 return left;246 }247 }248 }249 250 int main()251 {252 try{253 double val=0;254 Roman_int t;255 while(cin)256 {257 t=ts.get(cin);258 259 260 if(t.re_kind()==‘f‘)261 {262 double val1=0;263 string s;264 cin>>s;265 ifstream ifs(s.c_str());266 if(!ifs)267 error("can not open input file1",s);268 t=ts.get(cin);269 if(t.re_kind()==‘t‘)270 {271 cin>>s;272 ofstream ofs(s.c_str());273 if(!ofs)274 error("can not open output file1",s);275 while(ifs)276 {277 t=ts.get(ifs);278 while(t.re_kind()==‘;‘)279 t=ts.get(ifs);280 if(t.re_kind()==‘q‘) 281 break;282 ts.putback(t);283 ofs<<as_roman(expression(ifs))<<endl;284 }285 }286 }287 else288 {289 290 while(t.re_kind()==‘;‘)291 t=ts.get(cin);292 if(t.re_kind()==‘q‘) 293 {294 keep_window_open("~~");295 return 0; 296 } 297 ts.putback(t);298 cout<<as_roman(expression(cin))<<endl;299 }300 }301 return 0;302 303 }304 305 catch(exception&e){306 cerr<<e.what()<<endl;307 while(1);308 return 1;309 }310 311 catch(...){312 cerr<<"exception\n";313 while(1);314 return 2;315 }316 317 }
1 void fn(string&a,string&b,string&c) 2 { 3 ifstream ifs1(a.c_str()); 4 if(!ifs1) 5 error("can not open input file1",a); 6 ifstream ifs2(b.c_str()); 7 if(!ifs2) 8 error("can not open input file1",b); 9 vector<string> s;10 string ss;11 while(ifs1>>ss)12 s.push_back(ss);13 while(ifs2>>ss)14 s.push_back(ss);15 sort(s.begin(),s.end());//习题916 ofstream ofs(c.c_str());17 if(!ofs)18 error("can not open output file1",c);19 for(int i=0;i<s.size();i++)20 ofs<<s[i]<<‘ ‘;21 }
1 #include "../../st.h" 2 3 int main() 4 { 5 string s1="a.txt"; 6 double sum=0; 7 double d; 8 char ch; 9 ifstream ifs(s1.c_str());10 if(!ifs)11 error("can not open input file1",s1);12 while(ifs>>ch)13 {14 if(isdigit(ch))15 {16 ifs.putback(ch);17 ifs>>d;18 sum+=d;19 }20 }21 22 cout<<sum<<endl;23 keep_window_open();24 }
1 //用到第十一章内容 2 3 #include "../../st.h" 4 5 int main() 6 { 7 string s1="a.txt"; 8 string str1; 9 string s;10 int i=0;11 cout<<"input the word:";12 cin>>str1;13 ifstream ifs(s1.c_str());14 if(!ifs)15 error("can not open input file1",s1);16 while(getline(ifs,s))17 {18 i++;19 stringstream ss(s);20 string str;21 while(ss>>str)22 {23 if(str==str1){24 cout<<i<<" "<<s<<endl;25 break;26 }27 }28 29 }30 31 keep_window_open();32 }
C++程序设计原理与实践 第十章部分答案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。