西安交大C++程序设计第十一章作业.docx
- 文档编号:10891979
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:29
- 大小:416.58KB
西安交大C++程序设计第十一章作业.docx
《西安交大C++程序设计第十一章作业.docx》由会员分享,可在线阅读,更多相关《西安交大C++程序设计第十一章作业.docx(29页珍藏版)》请在冰豆网上搜索。
西安交大C++程序设计第十一章作业
西安交通大学实验报告
课程计算机程序设计实验名称_标准库与输入输出流_第1页共25页
系别__________实验日期2014年6月7日
专业班级______组别__________实验报告日期2014年6月7日
姓名_________学号__报告退发(订正、重做)
同组人_________________________________教师审批签字
一、实验目的
掌握C++语言输入与输出操作的方法、流与流类库的使用方法。
二、实验内容
(一)第一题:
编写一个程序,分别用不同的域宽(0~10)打印出整数12345与浮点数1、2345。
观察当域宽小于数值的实际需要域宽时会发生什么状况。
1、源程序代码:
#include
usingnamespacestd;
voidmain()
{
intWIDTH;
for(WIDTH=10;WIDTH>0;WIDTH--)
{
cout<<"域宽、精度为"< \n"; cout、precision(WIDTH);//全局作用 cout、width(WIDTH);//只起一次作用 cout<<12345<<"\n"<<1、2345< } } 2、实验结果: 3、结论: (1)域宽不够时会自动补足。 (2)精度只需一次定义则一直有效。 (3)域宽需要每次输出时均进行定义 (二)第二题: 编写一个程序,将华氏温度0度~212度转化为浮点型摄氏温度,浮点精度为3、转换公式为如下: Celsius=5、0/9、0*(Fahrenheit-32); 输出用两个右对齐序列,摄氏温度前面加上正负号。 1.源程序代码: #include usingnamespacestd; voidmain() { doubleCelsius,Fahrenheit; cout、precision(3); cout<<"转换结果为: \n"; for(Fahrenheit=0;Fahrenheit<=212;Fahrenheit++) { cout、unsetf(ios: : showpos); Celsius=5、0/9、0*(Fahrenheit-32); cout<<"华氏"< cout、setf(ios: : showpos); cout< } } 2、实验结果: (三)第三题: 编写一个程序,打印出ASCⅡ字符集中码值为33~126的字符的ASCⅡ码表。 要求输出十进制值、八进制值、十六进制值以及码值所表示的字符。 1、源程序代码: #include usingnamespacestd; voidmain() { inta; charw; cout<<"字符八进制十进制十六进制\n"; for(a=33;a<=126;a++) { w=a; cout< } } 2、实验结果: 四、第四题: 修改例11-2中的程序,重载>>运算符,使其能够直接使用cin语句输入Date类对象。 1、源程序代码: //日期类定义date、h #ifndefDATE_H #defineDATE_H #include usingnamespacestd; classDate { friendostream&operator<<(ostream&,constDate&); friendistream&operator>>(istream&,Date&); intday,month,year; voidIncDay();//日期增加一天 intDayCalc()const;//距基准日期的天数 staticconstintdays[];//每月的天数 public: Date(inty,intm,intd);//构造函数 Date(intm,intd);//构造函数,年默认为系统当前年份 Date();//构造函数,默认为系统日期 voidSystemDate(); voidSetDate(intyy,intmm,intdd);//日期设置 voidSetDate(intmm,intdd);//日期设置,年默认为系统年份 boolIsLeapYear(intyy)const;//就是否闰年? boolIsEndofMonth()const;//就是否月末? voidprint_ymd()const;//输出日期yy_mm_dd voidprint_mdy()const;//输出日期mm_dd_yy constDate&operator+(intdays);//日期增加任意天 constDate&operator+=(intdays);//日期增加任意天 intoperator-(constDate&ymd)const;//两个日期之间的天数 voidShow(Date&da); }; #endif //Date类成员函数定义date、cpp #include #include #include"date、h" usingnamespacestd; constintDate: : days[]={0,31,28,31,30,31,30, 31,31,30,31,30,31}; //构造函数 Date: : Date(inty,intm,intd){SetDate(y,m,d);} Date: : Date(intm,intd){SetDate(m,d);} Date: : Date(){SystemDate();} voidDate: : SystemDate() {//取得系统日期 tm*gm; time_tt=time(NULL); gm=gmtime(&t); year=1900+gm->tm_year; month=gm->tm_mon+1; day=gm->tm_mday; } voidDate: : SetDate(intyy,intmm,intdd) { month=(mm>=1&&mm<=12)? mm: 1; year=(yy>=1900&&yy<=2100)? yy: 1900; if(month==2&&IsLeapYear(year)) day=(dd>=1&&dd<=29)? dd: 1; else day=(dd>=1&&dd<=days[month])? dd: 1; } voidDate: : SetDate(intmm,intdd) { tm*gm; time_tt=time(NULL); gm=gmtime(&t); month=(mm>=1&&mm<=12)? mm: 1; year=1900+gm->tm_year; if(month==2&&IsLeapYear(year)) day=(dd>=1&&dd<=29)? dd: 1; else day=(dd>=1&&dd<=days[month])? dd: 1; } constDate&Date: : operator+(intdays) {//重载+ for(inti=0;i IncDay(); return*this; } constDate&Date: : operator+=(intdays) {//重载+= for(inti=0;i IncDay(); return*this; } intDate: : operator-(constDate&ymd)const {//重载- intdays; days=DayCalc()-ymd、DayCalc(); returndays; } boolDate: : IsLeapYear(inty)const { if(y%400==0||(y%100! =0&&y%4==0)) returntrue; returnfalse; } boolDate: : IsEndofMonth()const { if(month==2&&IsLeapYear(year)) returnday==29;//二月需要判断就是否闰年 else returnday==days[month]; } voidDate: : IncDay() {//日期递增一天 if(IsEndofMonth()) if(month==12){//年末 day=1; month=1; year++; } else{//月末 day=1; month++; } elseday++; } intDate: : DayCalc()const { intdd; intyy=year-1900; dd=yy*365; if(yy)dd+=(yy-1)/4; for(inti=1;i dd+=days[i]; if(IsLeapYear(year)&&(month>2)) dd++; dd+=day; returndd; } voidDate: : print_ymd()const { cout< } voidDate: : print_mdy()const { char*monthName[12]={"January", "February","March","April","May","June", "July","August","September","October", "November","December"}; cout< < } voidDate: : Show(Date&da) { if(day==da、day&&month==da、month) cout<<"HappyBirthday! "; else { if(da-Date: : Date()<0) da、year++; cout<<"Itwillbeyourbirthdayafter"< : Date()<<"days! "; } } ostream&operator<<(ostream&output,constDate&d) { staticchar*monthName[12]= { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; output< returnoutput; } istream&operator>>(istream&in,Date&d)// { inta,b,c; in>>a>>b>>c; d、year=a; d、month=b; d、day=c; returnin; } //main、cpp修改例-9中的程序,重载>>运算符,使其能够直接使用cin语句输入Date类对象。 #include #include"date、h" usingnamespacestd; intmain() { Datetoday,Olympicday(2004,8,13); cout<<"Today(thecomputer'sday)is: "< today+=365;// cout<<"After365days,thedateis: "< Datetestday(2,28); cout<<"thetestdateis: "< Datenextday=testday+1; cout<<"thenextdateis: "< today、SystemDate(); cout<<"theAthensOlympicGamesopendayis: "< cout<<"Andafter"< <<"days,theAthensOlympicGameswillopen、"< Datebirthday; cout<<"输入出生年月日: "; cin>>birthday; cout<<"输入的就是: "< return0; } 2、实验结果: 五、第五题: 编写一个程序,可以读入一个C++语言的源文件,每一行加上行号后保存到另一个后缀为、prn的同名文件中。 1、源程序代码: #include #include #include usingnamespacestd; intmain() { strings,name,name1; cout<<"请输入源c++文件的名称(不含有后缀名): "; cin>>name; name1=name+"、prn"; name+="、cpp"; ifstreamread(name、c_str());//读取的文件,用name、c_str()就是将string的char*类型转换成const的类型,不然会出错 fstreamwrite; write、open(name1、c_str(),ios: : trunc/*创建文件*/|ios: : out/*写文件*/);//输出的文件,创建文件并写文件 inti=0; if(! read) { cout<<"Cannotopeninputfile\n"; return0; }//如果打开输入文件失败 if(! write) { cout<<"Cannotopenoutputfile\n"; return0; }//如果打开输出文件失败 while(getline(read,s))//逐行读取文件中数据到字符串s中 write<<++i< read、close(); write、close();//关闭文件 cout<<"目标文件生成成功! (与源文件同目录)"< return0; } 2、实验结果: 实验前: 实验后: 六、第六题: 将一个文本文件内容用凯撒尔方法加密,密钥就是4。 即文本文件中字母用其后第4个字母代替,若就是数字则用其后第4个数字代替。 例如文本文件原内容为“RedAndBlack2008”,加密后文本文件内容为“VihErhFpego6442”。 (提示: 先用记事本创建一个文本文件,其内容应该就是有意义的英文句子,然后以只读方式打开,加密后的内容写入另一个文本文件中。 ) 1、源程序代码: #include #include usingnamespacestd; charjiami(charch); intmain() { ifstreamin("test、txt"); ofstreamout("test_1、txt"); if(! in) { cout<<"Cannotopenthefile、"< return1; } if(! out) { cout<<"Cannotopenthefile、"< return1; } charch; while(in) { in、get(ch); ch=jiami(ch); if(in)out< } in、close(); out、close(); return0; } charjiami(charch) { if(ch>='0'&&ch<='9') { if(ch>'5')ch=ch-6; elsech+=4; } elseif(ch>='a'&&ch<='z') { if(ch>='w')ch=ch+4-'z'+'a'-1; elsech+=4; } elseif(ch>='A'&&ch<='Z') { if(ch>='W')ch=ch+4-'Z'+'A'-1; elsech+=4; } returnch; } 2、实验结果: 加密前: 加密后: (七)第七题: (必作题)找出100以内的勾股数,输出到文件gouku中。 所谓勾股数指找出三个数满足A2+B2=C2,并且A 要求将三个勾股数的计算公式A^2+B^2=C^2输出到文件中的每一行,例如3^2+4^2=5^29+16=25。 1、源程序代码: #include #include #include usingnamespacestd; intmain() { ofstreamout("gougu、txt"); if(! out) { cout<<"Cannotopenthefile、\n"; return1; } for(inti=0;i<101;i++) for(intj=i+1;j<101;j++) for(intk=j+1;k<101;k++) { if(i*i+j*j==k*k) { out、setf(ios: : left); out< out<<'\t'< } } out、close(); return0; } 2.实验结果: (八)第八题: 仿造实现DOS文件复制命令COPY源文件名目标文件名。 (提示: 利用main()函数中的参数intargv,char*argk[]识别解析命令。 ) 1、源程序代码: #include #include usingnamespacestd; intmain(intargc,char*argv[]) { charch; cout< if(argc! =3) { cout<<"请输入两个文件名,及后缀"< return1; } ifstreamfin(argv[1],ios: : binary|ios: : in); if(! fin) { cout<<"无法打开原文件"< return1; } ofstreamfout(argv[2],ios: : binary|ios: : out); if(! fout) { cout<<"无法打开目标文件"< return1; } while(fin) { fin、get(ch); if(fin) { fout< } } fin、close(); fout、close(); return0; } 2、实验结果: 保存为exe格式之后提示“64位不兼容”,由于能力有限不知道如何操作。 因而无法得到结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 C+ 程序设计 第十一 作业