西安交大C 程序设计第十一章作业_第1页
西安交大C 程序设计第十一章作业_第2页
西安交大C 程序设计第十一章作业_第3页
西安交大C 程序设计第十一章作业_第4页
西安交大C 程序设计第十一章作业_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安交通大学实验报告

课程计算机程序设计实验名称标准库和输入输出流第1页共25页

系别实验日期2014年6月7日

专业班级组别实验报告日期2014年6月7日

姓名学号报告退发(订正、重做)

同组人教师审批签字

一、实验目的

掌握C++语言输入和输出操作的方法、流和流类库的使用方法。

二、实验内容

(一)第一题:编写一个程序,分别用不同的域宽(0~10)打印

出整数12345和浮点数1.2345。观察当域宽小于数值的实际需要

域宽时会发生什么状况。

1.源程序代码:

#include<iostream>

usingnamespacestd;

voidmain()

intWIDTH;

for(WIDTH=10;WIDTH>0;WIDTH—)

cout<〈〃域宽、精度为〃<<Wn)TH<〈〃:\n〃

cout.precision(WIDTH);〃全局作用

cout.width(WIDTH);〃只起一次作用

cout«12345«,,\nz,«l.2345«endl;

2.实验结果:

SBC:\windows\system32\...|0||

城宽、精度为10:7

12345

1.2345

域宽、精度为9:=

12345

1.2345

域宽、精度为8:

12345

1.2345

域宽、精度为7:

12345

1.2345

域宽、精度为6:

12345

1.2345

域宽、精度为5:

12345

1.2345

域宽、精度为4:

12345

1.234

域宽、精度为3:

12345

1.23

域宽、精度为2:

12345

1.2

域宽、精度为1:

12345

1

请按任意键继续.•.

4IfHI►

3.结论:

⑴域宽不够时会自动补足。

⑵精度只需一次定义则一直有效。

(3)域宽需要每次输出时均进行定义

(二)第二题:编写一个程序,将华氏温度0度~212度转化为浮点

型摄氏温度,浮点精度为3.转换公式为如下:

Celsius=5.0/9.0*(Fahrenheit-32);

输出用两个右对齐序列,摄氏温度前面加上正负号。

1.源程序代码:

#include<iostream>

usingnamespacestd;

voidmain()

(

doubleCelsius,Fahrenheit;

cout.precision(3);

cout«〃转换结果为:\n〃;

for(Fahrenheit=O;Fahrenheit<=212;Fahrenheit++)

(

cout.unsetf(ios::showpos);

Celsius=5.0/9.0*(Fahrenheit-32);

cout.setf(ios::showpos);

cout〈<Celsius<〈”度\n〃;

)

2.实验结果:

SBC:\windows\system32\cmd.exe|CD||Bl|rfaw|

转换结果为:

华氏0度=摄氏T7.8度

华氏1度=摄氏T7.2度

华氏2度=摄氏-16.7度

华氏3度=摄氏-16.1度

华氏4度=摄氏T5.6度

华氏5度=摄氏-15度

华氏6度=摄氏-14.4度

华氏7度=摄氏T3.9度

华氏8度=摄氏-13.3度

华氏9度=摄氏-12.8度

华氏10度=摄氏T2.2度

华氏11度=摄氏TL7度

华氏12度=摄氏-11.1度

华氏13度=摄氏-10.6度

华氏14度=摄氏T0度

图C:\windows\system32\cmd.exe|UI||回Hw-I

华氏195度=摄氏-90.6度

华氏196度=谡氏-91.1度

华氏197度=宗氏-91.7度

华氏198度=摄氏-92.2度

华氏199度=费氏-92.8度

华氏200度=摄氏,93.3度

华氏201度=景氏-93.9度

华氏202度=索氏+94.4度

华氏203度=摄氏-95度

华氏204度=景氏-95.6度

华氏205度=摄氏+96.1度

华氏206度=费氏-96.7度

华氏207度=摄氏-97.2度

华氏208度=索氏-97.8度

华氏209度=摄氏,98.3度

华氏210度;景氏,98.9度

华氏211度二强氏-99.4度

华氏212度=摄氏+100度

请按任意键继续...

(三)第三题:编写一个程序,打印出ASCH字符集中码值为

33~126的字符的ASCH码表。要求输出十进制值、八进制值、十六进

制值以及码值所表示的字符。

1.源程序代码:

#include<iostream>

usingnamespacestd;

voidmain()

(

inta;

charw;

cout«〃字符八进制十进制十六进制\n〃;

for(a=33;a<=126;a++)

(

w=a;

cout<<w<<,,\t/z<<oct<<a<</,\t/z<<dec<<a<<,,\t,,<<hex«a<<endl;

2.实验结果:

QBC:\windows\system32\cmd.exe|

字符八进制十进制十六进制

I

,,4133

4234

433523

$443624

I_J

%453725

&463826

473927

(504028

)014129

*52422a

一53432b

?54442c

-55452d

56462e

57472f

0604830

1614931

?625032

3635133

4645234

5655335

6665436

670037

8705638

9715739

*72583a

73593b

/

\74603c▼

4nr□►

OSC:\windows\system32\cmd.exe-IlBIlrf3»l

d14410064>

e14510165

f14610266

g14710367

h15010468

i15110569

j1521066a

k1531076b

11541086c

m1551096d

n1561106e

o1571116f

p16011270

q16111371三

r16211472

s16311573u

t16411674

u16511775

v16611876

w16711977

x17012078

y17112179

z1721227a

{1731237b

1741247c

1751257d

1761267e

请按任意键继续...

*Lmi►

四、第四题:修改例11-2中的程序,重载〉运算符,使其能够直接

使用cin语句输入Date类对象。

1.源程序代码:

//日期类定义date.h

#ifndefDATE_H

#defineDATEH

Sinclude<iostream>

usingnamespacestd;

classDate

friendostream&operator<<(ostream&,constDate&);

friendistream&operator»(istream&,Date&);

intday,month,year;

voidIneDay();〃日期增加一天

intDayCalcOconst;//距基准日期的天数

staticconstintdays]];〃每月的天数

public:

Date(inty,intm,intd);〃构造函数

Date(intm,intd);〃构造函数,年默认为系统当前年份

DateO;〃构造函数,默认为系统日期

voidSystemDate();

voidSetDate(intyy,intmm,intdd);〃日期设置

voidSetDate(intmm,intdd);〃日期设置,年默认为系统年份

boolIsLeapYear(intyy)const;//是否闰年?

boolIsEndofMonthOconst;//是否月末?

voidprint_ymd()const;〃输出日期yymmdd

voidprint_mdy()const;〃输出日期mm_dd_yy

constDate&operator+(intdays);//日期增加任意天

constDate&operator+=(intdays);//日期增加任意天

intoperator-(constDate&ymd)const;//两个日期之间的天数

voidShow(Date&da);

);

#endif

//Date类成员函数定义date,cpp

Sinclude<iostream>

Sinclude<time.h>

Sinclude"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<days;i++)

IneDay();

return*this;

)

constDate&Date::operator^(intdays)

{〃重载+=

for(inti=0;i<days;i++)

IneDay();

return*this;

}

intDate::operator-(constDate&ymd)const

{〃重载-

intdays;

days=DayCalc()-ymd.DayCalc();

returndays;

)

boolDate::IsLeapYear(inty)const

if(y%400==0i|(y%100!=0&&y%4==0)

returntrue;

returnfalse;

)

boolDate::IsEndofMonth()const

{

if(month==2&&IsLeapYear(year))

returnday==29;〃二月需要判断是否闰年

else

returnday==days[month];

)

voidDate::IneDay()

(〃日期递增一天

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-l)/4;

for(inti=l;i<month;i++)

dd+=days[i];

if(IsLeapYear(year)&&(month>2))

dd++;

dd+=day;

returndd;

)

voidDate::print_ymd()const

(

cout<<year<<"-"«month<<"-"«day<<endl;

)

voidDate::print_mdy()const

char*monthName[12]={"January”,

rebruary,March,Apri1,May,June,

“July","August","September","October”,

“November","December");

cout<<monthName[month-1]<X''

«day<<"、"<<year<<endl;

)

voidDate::Show(Date&da)

(

if(day==da.day&&month==da.month)

cout<</zHappyBirthday!,z;

else

(

if(da-Date::Date()<0)

da.year++;

cout<<,zItwillbeyourbirthdayafter,z<<da-Date::Date()«z,

days!;

)

)

ostream&operator«(ostream&output,constDate&d)

(

staticchar*monthName[12]=

(

〃丁〃

January,

“February”,

“March”,

"April",

"May",

〃T〃

June,

〃July〃,

“August”,

“September”,

“October”,

“November”,

“December”

};

output«monthName[d.month-1]'<<d.day<<〃,〃<<d・year;

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类对象。

Sinclude<iostream>

Sinclude"date.h〃

usingnamespacestd;

intmain()

(

Datetoday,Olympicday(2004,8,13);

cout<<"Today(thecomputer'sday)is:/z<<today<<endl;//

today+=365;//

cout<<"After365days,thedateis:z,<<today«endl;

Datetestday(2,28);

cout<<"thetestdateis:,,«testday<<endl;//

Datenextday=testday+1;

cout<<"thenextdateis:,z«testday<<endl;//

today.SystemDateO;

cout«”theAthensOlympicGamesopendayis:/,<<01ympicday<<endl;

cout<<"Andafter〃<<Olympicday-today

«〃days,theAthensOlympicGameswillopen.z,«endl;

Datebirthday;

cout。〃输入出生年月日:〃;

cin>>birthday;

cout<<〃输入的是:/z«birthday<<endl;

return0;

)

2.实验结果:

SBC:\windows\system32\cmd.exe|o

Today(thecomputer,sday)is:April11,2014-

After365days,thedateis:April11,2015□

thetestdateis:February28,2014

thenextdateis:March1,2014

theAthensOlympicGamesopendayis:August13,2004

Andafter_3528days,theAthensOlympicGaineswillopen.

输入出生年月日:200011

输入的是:January1,2000

请按任意键继续•...

五、第五题:编写一个程序,可以读入一个C++语言的源文件,每一

行加上行号后保存到另一个后缀为.pm的同名文件中。

1.源程序代码:

Sinclude<fstream>

Sinclude<string>

#include<iostream>

usingnamespacestd;

intmain()

(

strings,name,namel;

cout«”请输入源C++文件的名称(不含有后缀名):〃;

cin>>name;

namel=name+,/.prn〃;

name+=z,.cpp〃;

ifstreamread(name.c_str());〃读取的文件,用name,cstr()是将string

的char*类型转换成const的类型,不然会出错

fstreamwrite;

write,open(namel.c_str(),ios::trunc/*创建文件*/1ios::out/*写文件

*/);〃输出的文件,创建文件并写文件

inti=0;

if(!read)

cout<<z,Cannotopeninput

return0;

}〃如果打开输入文件失败

if(!write)

cout<</zCannotopenoutputfile\n”;

return0;

}〃如果打开输出文件失败

while(getline(read,s))〃逐行读取文件中数据到字符串s中

write〈〈++i<Xs〈〈endl;〃输出读取文件的信息到目标文件

read,close();

write.close0;〃关闭文件

cout«/z目标文件生成成功!(和源文件同目录)“<<endl;

return0;

2.实验结果:

实验前:

实验后:

hao.pm-记事本

文件(B编辑但格式9)查看凹帮助(H)

2

3#include<fstream/

4usingnainespacestd;

5intmain。

6{

7charch;

8inti=l;““

9ifstreamin(//hao.cpp,y,ios::binary);

10ofstreamout(〃hao.prn");

11if(1out)

12(〃,

13cout«y/Cannotopenthefile//«endl;

14return1;

15)

16if(lin)

17{“.

18cout«”Cannotopenthethefilez/«e

19return1;

20)

21out«i«,\t";

22while(in)

23{

24in.get(ch);

25if(in)out<<ch;

26if(ch-3\n)

27{out«i+l«,\t";

28i++;

29}

30)

31out.close();

32return0;

}

六、第六题:将一个文本文件内容用凯撒尔方法加密,密钥是4。即

文本文件中字母用其后第4个字母代替,若是数字则用其后第4个数

字代替。例如文本文件原内容为“RedAndBlack2008",加密后

文本文件内容为“VihErhFpego6442”。(提示:先用记事本创

建一个文本文件,其内容应该是有意义的英文句子,然后以只读方式

打开,加密后的内容写入另一个文本文件中。)

1.源程序代码:

#include<iostream>

#include<fstream>

usingnamespacestd;

charjiami(charch);

intmain()

(

ifstreamin(〃test.txt〃);

ofstreamout("test1.txt,z);

if(!in)

(

cout«z,Cannotopenthefile.,,«endl;

return1;

)

if(!out)

{

cout<<z,Cannotopenthefile.,z«endl;

return1;

}

charch;

while(in)

(

in.get(ch);

ch=jiami(ch);

if(in)out<<ch;

)

in.closeO;

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.实验结果:

加密前:

Change[heUnchangeable.

GoodEvening,everyone.Itj-smypleasuretogivethisspeechtoday.

Thetopicofmyspeechis,changetheunchangeable.P

Asisknowntousall,wealwaysmeetwithalIkindsofdifficulties

andotherthingsthatcannotbechangedinourIife.TheyarejustIike

stumblingblocksonourroad,whichpreventusfromabetterIife.

Butdoesitmeanthatwecandonothingbutacceptthefactand

reaIizethatalIthesethingsareunchangeable?Here,Iwanttoshare

astorywithyou,whichmightgiveyoutheanswer.

HaveyoueverheardofthestoryofNickVujicis,afamousAustralia

speakerwhowasbornwithoutIimbs?WhenhewasaIittIeboy,heoften

feltverydepressedandevenwantedtosuicideforthechiIdrenaround

himoftensaidthathewasamonsterandalwaysIaughathim.Itseemed

thathiswassounluckyandnearlyeveryonethoughtthathisunfortunate

Iifewouldbeunchangeable.Butinfact,withtheencouragementofhis

parents,hesuddenlyrealizedthathecouldalsoIiveabetterIife

thanordinarypeoplealthoughhewasnotthesameasthem.Sofromthen

on,hebegantotrytodoanythingthathewantedtodo,including

writing,playingfootbalIFswimmingandmanyotherthings,whichseemed

tobeimpossibleforhim.Andintheend,hegottv/obachelorj-sdegrees

andbecameafamousspeaker.|

Thankyou!?

加密后:

GlerkiXIiYrglerkiefpi^

KsshIzirmrk,izivcsri.Mx*wqctpiev/yvixskmzixlmv/wtiigIxshec.XIixstmg

sjqcwtiigImw,glerkixliyrglerkiefpi.

Ewmworsarxsywepp,aiepaecwqiixamxleppomrhwsjhmjjmgypxmiwerhsxliv

xlmrkv/xlexgerrsxfiglerkihmrsyvpmji.XIicevinywxpmoiwxyqfpmrkfpsgowsr

syvvseh,aImgItvizirxywjvsqefixxivpmji.P

Fyxhsiwmxqierxlexaigerhsrsxlmrkfyxeggitxxlijegxerhviepmdixlex

eppxliwixlmrkweviyrglerkiefpi?Livi,Maerxxswleviewxsvcamxlcsy.aImgI

qmklxkmzicsyxlierwaiv.

LezicsyizivIievhsjxliwxsvcsjRmgoZynmgmw.ejeqsywEywxvepmewtieoiv

aIsaewfsvramxIsyxpmqfw?AlirIiaewepmxxpifsc.Iisjxirjipxzivchitviwwih

erhiziraerxihxswymgmhijsvxligImphvirevsyrhImqsjxirwemhxlexIiaewe

qsrwxiverhepaecv/peyklexImq.MxwiiqihxlexImwaewwsyrpygocerhrievpc

izivcsrixlsyklxxlexImwyrjsvxyrexipmjiasyphfiyrglerkiefpi.Fyxmrjegx.

amxlxliirgsyvekiqirxsjImwtevirxw,IiwyhhirpcviepmdihxlexIigsyphepv/s

pmziefixxivpmjixlersvhmrevctistpiepxlsyklIiaewrsxxliweqiewxliq.Ws

jvsqxlirsr.IifikerxsxvcxshsercxlmrkxlexIiaerxihxshs,mrgpyhmrk

avmxmrk,tpecmrkjssxfepp,wamqqmrkerhqercsxlivxlmrkw.aImgIwiiqihxsfi

mqtswwmfpijsvImq.Erhmrxliirh,Iiksxxasfeglipsv,v/hikviiwerhfigeqie

jeqsywwtieoiv.~

Xlerocsy!^

(七)第七题:(必作题)找出100以内的勾股数,输出到文件gouku

中。所谓勾股数指找出三个数满足A2+B2X2,并且A〈B<C。要求将三

个勾股数的计算公式A'2+B"2=C^2输出到文件中的每一行,例如

3c2+412=5”9+16=25。

1.源程序代码:

#include<iostream>

#include<fstream>

#include<iomanip>

usingnamespacestd;

intmain()

(

ofstreamout(,zgougu.txt");

if(!out)

cout«/zCannotopenthefile.\n〃;

return1;

for(inti=0;i<101;i++)

for(intj=i+l;j<101;j++)

for(intk=j+l;k<101;k++)

{

if==k*k)

(

out.setf(ios::left);

out«setw(3)«i<<setw(3)«j<<setw(3)«k;

out«,\tJ«i«,«2«?«2«?=«2«endl;

)

)

out.close();

return0;

)

2.实验结果:

P453"+4A2=5”一

512135A2+123132

68106*2+8^2=10*2^

724257^2+24^2=25*2^

815178*2+15^2=17*2^

912159^2+12^2=15*2^

940419-2+40-2=412〃

10242610^2+24*2=26^2^

1160611厂2+60-2=6厂2"

12162012A2+16320,22

12353712^2+35*2=37*2^

13848513^2+84*2=85*2^

14485014c2+483502

15202515^2+20^2=25^2^

15

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论