C++ Primer plus 习题第六章编程题.docx
- 文档编号:23485645
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:21
- 大小:19.26KB
C++ Primer plus 习题第六章编程题.docx
《C++ Primer plus 习题第六章编程题.docx》由会员分享,可在线阅读,更多相关《C++ Primer plus 习题第六章编程题.docx(21页珍藏版)》请在冰豆网上搜索。
C++Primerplus习题第六章编程题
[C++Primerplus习题]第六章编程题
1.请编写一个程序,读取键盘输入,直到遇到@符号为止,并回显输入(数字除外),同时将大写字符转换为小写,将小写字符转换为大写(别忘了cctype函数系列)
答案:
#include
#include
usingnamespacestd;
intmain()
{
charch;
cout<<"Entersomecharacters:
"< while(cin.get(ch)&&ch! ='@') { if(! isdigit(ch)) { if(isupper(ch)) { ch+=32; cout< } elseif(islower(ch)) { ch-=32; cout< } } } cout< return0; } 2.编写一个程序,最多将10个donation值读入到一个double数组中(如果您愿意,也可以使用模板类array)。 程序遇到非数字输入时将结束输入,并报告这些数字的平均值以及数组中有多少个数字大于平均值。 答案: #include usingnamespacestd; constintMAX=10; intmain() { doubledonation[MAX]={0}; intcount=0; intnum=0; doublesum=0; doubleave=0; cout<<"Enter10donation: "< for(inti=0;i { if(! (cin>>donation[i])) { cout<<"isdigit"< break; } sum+=donation[i]; count++; cout<<"countis"< } cout<<"countis"< ave=sum/count; for(intj=0;j { if(donation[j]>ave) { num++; } } cout<<"averageis"< cout<<"Thereare"< return0; } 3.编写一个菜单驱动程序的雏形。 该程序显示一个提供4个选项的菜单——每个选项用一个字母标记。 如果用户使用有效选项之外的字母进行响应,程序将提供用户输入一个有效的字母,直到用户这样做为止。 然后,该程序使用一条switch语句,根据用户的选择执行一个简单操作。 该程序的运行情况如下: Pleaseenteroneofthefollowingchoices: c)carnivorep)pianist t)treeg)game f Pleaseenterac,p,t,org: q Pleaseenterac,p,t,org: t Amapleisatree. 答案: #include #include usingnamespacestd; intmain() { charch; boolexit=false; cout<<"Pleaseenteroneofthefollowingchoices: \n"; cout<<"c)carnivorep)pianist\n"; cout<<"t)treeg)game\n"; while(! exit&&cin>>ch) { switch(ch) { case'c': case'p': case't': case'g': cout<<"Amapleisatree."; exit=true; break; default: cout<<"Pleaseenterac,p,t,org: "; exit=false; break; } } cout< return0; } 4.加入BenevolentOrderofProgrammer后,在BOP大会上,人们便可以通过加入者的真实姓名、头衔或秘密BOP姓名来了解他(她)。 请编写一个程序,可以使用真实姓名、头衔、秘密姓名或成员偏好来列出成员。 编写该程序时,请使用下面的结构: /BenevolentOrderofProgrammersnamestructure structbop{ charfullname[strsize];//realname chartitle[strsize];//jobtitle charbopname[strsize];//secretBOPname intpreference;//0=fullname,1=title,2=bopname }; 该程序创建一个由上述结构组成的小型数组,并将其初始化为适当的值。 另外,该程序使用一个循环,让用户在下面的选项中进行选择: a.displaybynameb.displaybytitle c.displaybybopnamed.displaybypreference q.quit 注意,“displaybypreference”并不意味着显示成员的偏好,而是意味着根据成员的偏好来列出成员。 例如,如果偏好号为1,则选择d将显示程序员的头衔。 该程序的运行情况如下: BenevolentOrderofProgrammersReport a.displaybynameb.displaybytitle c.displaybybopnamed.displaybypreference q.quitx Enteryourchoice: a WimpMacho RakiRhodes CeliaLaiter HoppyHipman PatHand Nextchoice: d WimpMacho JuniorProgrammer MIPS AnalystTrainee LOOPY Nextchoice: q Bye! 答案: #include #include usingnamespacestd; constintstrsize=100; structbop{ charfullname[strsize];//realname chartitle[strsize];//jobtitle charbopname[strsize];//secretBOPname intpreference;//0=fullname,1=title,2=bopname }; intmain() { charch; boolexit=false; inti=0; intpreference=0; bopb[5]={ {"WimpMacho","wim","wi",0}, {"RakiRhodes","JuniorProgrammer","ra",1}, {"CeliaLaiter","cel","MIPS",2}, {"HoppyHipman","AnalystTrainee","Ho",1}, {"PatHand","pat","LOOPY",2}, }; cout<<"BenevolentOrderofProgrammersReport: \n"; cout<<"a.displaybynameb.displaybytitle\n"; cout<<"c.displaybybopnamed.displaybypreference\n"; cout<<"q.quit\n"; cout<<"Enteryourchoice: "; while(! exit&&(cin>>ch)) { if(ch=='q') { cout<<"Bye! ! "< break; } for(i=0;i<5;i++) { switch(ch) { case'a': cout< break; case'b': cout< break; case'c': cout< break; case'd': preference=b[i].preference; switch(preference) { case0: cout< break; case1: cout< break; case2: cout< break; } break; } } if(i==5) { cout<<"Nextchoice: "; } } return0; } 5.在Neutronia王国,货币单位是tvarp,收入所得税的计算方式如下: 5000tvarps: 不收税 5001~15000tvarps: 10% 15001~35000tvarps: 15% 35000tvarps以上: 20% 例如,收入为38000tvarps时,所得税为5000*0.00+10000*0.10+20000*0.15+3000*0.20,即4600tvarps。 请编写一个程序,使用循环来要求用户输入收入,并报告所得税。 当用户输入负数或非数字时,循环将结束。 答案: #include usingnamespacestd; constfloatrate0=0; constfloatrate1=0.1; constfloatrate2=0.15; constfloatrate3=0.2; intmain() { intincome; inttax=0; intmoney; cout<<"Pleaseinputyourincome: "; while(cin>>income&&income>0) { if(income<=5000) { tax=0; } elseif(income>=5001&&income<=15000) { tax=5000*rate0+(income-5000)*rate1; } elseif(income>=15001&&income<=35000) { tax=5000*rate0+10000*rate1+(income-15000)*rate2; } elseif(income>35000) { tax=5000*rate0+10000*rate1+20000*rate2+(income-35000)*rate3; } cout<<"Thetaxiofyourincomeis: "< cout<<"Pleaseenteryourincome(enterpostivenumberandnotnumbertoquit): "; } return0; } 6.编写一个程序,记录捐助给“维护合法权利团体”的资金。 该程序要求用户输入捐献者数目,然后要求用户输入每一个捐献者的姓名和款项。 这些信息被储存在一个动态分配的结构数组中。 每个结构有两个成员: 用来储存姓名的字符数组(或string对象)和用来储存款项的double成员。 读取所有的数据后,程序将显示所有捐款超过10000的捐款者的姓名及其捐款数额。 该列表前应包含一个标题,指出下面的捐款者是重要捐款人(GrandPatrons)。 然后,程序将列出其他的捐款者,该列表要以Patrons开头。 如果某种类别没有捐款者,则程序将打印单词“none”。 该程序只显示这两种类别,而不进行排序。 答案: #include usingnamespacestd; structDonation{ stringname; doublemoney; }; voidshow_grand(Donation*info,intnumber) { cout<<"GrandPatrons: "< intcount_grand=0; for(inti=0;i { if(info[i].money>10000) { cout< count_grand++; } } if(count_grand==0) cout<<"none"< } voidshow_other(Donation*info,intnumber) { cout<<"otherPatrons: "< intcount_other=0; for(inti=0;i { if(info[i].money<=10000) { cout< count_other++; } } if(count_other==0) cout<<"none"< } intmain() { intcount=0; cout<<"Pleaseinputthenumberofdonation: "; cin>>count; Donation*donation=newDonation[count]; cout<<"Pleaseinputthedonation'snameandmoney: \n"; for(inti=0;i { cin>>donation[i].name; cin>>donation[i].money; cout< } cout<<"Patrons"< show_grand(donation,count); show_other(donation,count); return0; } 7.编写一个程序,它每次读取一个单词,直到用户只输入q。 然后,该程序指出有多少个单词以元音打头,有多少个单词以辅音打头,还有多少个单词不属于这两类。 为此,方法之一是,使用isalpha()来区分以字母和其他字符打头的单词,然后对于通过了isalpha()测试的单词,使用if或switch语句来确定哪些以元音打头。 该程序的运行情况如下: Enterwords(qtoquit): The12awesomeoxenambled quietlyacross15metersoflawn.q 5wordsbeginningwithvowels 4wordsbeginningwithconsonants 2others 答案: #include #include usingnamespacestd; intmain() { charstr[50]={0}; intnumber_vowel=0; intnumber_consonants=0; intnumber_others=0; cout<<"Enterwords(qtoquit): "< while(cin>>str) { if(strcmp(str,"q")==0) break; charch=str[0]; if(isalpha(ch)) { switch(ch) { case'a': case'e': case'i': case'o': case'u': number_vowel++; break; default: number_consonants++; break; } } else { number_others++; } } cout< cout< cout< return0; } 8.编写一个程序,它打开一个文件,逐个字符的读取该文件,直到到达文件末尾,然后指出该文件包含多少个字符。 答案: #include #include #include usingnamespacestd; constintSIZE=128; intmain() { charfilename[SIZE]; ifstreaminFile; cout<<"Enternameofdatafile: "; cin.getline(filename,SIZE); inFile.open(filename); if(! inFile.is_open()) { cout<<"Couldnotopenthefile"< cout<<"Programterminating.\n"; exit(EXIT_FAILURE); } charvalue; intcount=0; inFile>>value; while(inFile.good()) { ++count; inFile>>value; } if(inFile.eof()) cout<<"Endoffilereached.\n"; elseif(inFile.fail()) cout<<"Inputterminatedbydatamismatch.\n"; else cout<<"Inputterminatedforunknownreason.\n"; if(count==0) cout<<"Nodataprocessed.\n"; else { cout<<"chars: "< } inFile.close(); return0; } 9.完成编程练习6,但从文件中读取所需的信息。 该文件的第一项应为捐款人数,余下的内容应为成对的行。 在每一对中,第一行为捐款人姓名,第二行为捐款数额。 即该文件类似于下面: 4 SamStone 2000 FreidaFlass 100500 TammyTubbs 5000 RichRaptor 55000 答案: #include #include #include usingnamespacestd; constintSIZE=128; structDonation{ stringname; doublemoney; }; voidshow_grand(Donation*info,intnumber) { cout<<"GrandPatrons: "< intcount_grand=0; for(inti=0;i { if(info[i].money>10000) { cout< count_grand++; } } if(count_grand==0) cout<<"none"< } voidshow_other(Donation*info,intnumber) { cout<<"otherPatrons: "< intcount_other=0; for(inti=0;i { if(info[i].money<=10000) { cout< count_other++; } } if(count_other==0) cout<<"none
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ Primer plus 习题第六章编程题 习题 第六 编程