![《C++程序設(shè)計語言》習題答案_第1頁](http://file4.renrendoc.com/view/dc7bc6d54a0a6c779cd633d30257482d/dc7bc6d54a0a6c779cd633d30257482d1.gif)
![《C++程序設(shè)計語言》習題答案_第2頁](http://file4.renrendoc.com/view/dc7bc6d54a0a6c779cd633d30257482d/dc7bc6d54a0a6c779cd633d30257482d2.gif)
![《C++程序設(shè)計語言》習題答案_第3頁](http://file4.renrendoc.com/view/dc7bc6d54a0a6c779cd633d30257482d/dc7bc6d54a0a6c779cd633d30257482d3.gif)
![《C++程序設(shè)計語言》習題答案_第4頁](http://file4.renrendoc.com/view/dc7bc6d54a0a6c779cd633d30257482d/dc7bc6d54a0a6c779cd633d30257482d4.gif)
![《C++程序設(shè)計語言》習題答案_第5頁](http://file4.renrendoc.com/view/dc7bc6d54a0a6c779cd633d30257482d/dc7bc6d54a0a6c779cd633d30257482d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《C++程序設(shè)計語言》習題答案PAGEPAGE9第一章練習題1.簡述C++語言的特點。答:C++語言的主要特點如下:以C作為其子集,兼取了C語言簡潔、相對低級的特性,但摒棄掉了C語言中若干不安全的特性,其語言表現(xiàn)力遠遠強于C語言;是一種強類型語言;具有較高的可移植性和可維護性;適合于大部分系統(tǒng)程序及應用程序的開發(fā);是一種不限定應用領(lǐng)域的一種通用程序設(shè)計語言;是一種能支持面向過程、面向模塊、面向?qū)ο蠛皖悓俪绦蛟O(shè)計范型的混合型程序設(shè)計語言。2.C++語言支持哪幾種程序設(shè)計范型?答:是一種能支持面向過程、面向模塊、面向?qū)ο蠛皖悓俪绦蛟O(shè)計范型的混合型程序設(shè)計語言。3.C++中有哪些重要的程序設(shè)計理念?《C++程序設(shè)計語言》習題答案全文共63頁,當前為第1頁。答:C++中提供了以下這些重要的程序設(shè)計理念:類、派生類、繼承、抽象類、接口與實現(xiàn)的分離及模板等重要的面向?qū)ο罄砟??!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第1頁。第二章練習題:編寫一個輸出字符串“WelcometoC++!”的程序(參照2.1.3節(jié)程序)。解1:#include<iostream>#include<string>usingnamespacestd;intmain(){stringss;ss=“WelcometoC++!”;cout<<ss<<endl;return0;}解2:#include<iostream>usingnamespacestd;intmain(){cout<<“WelcometoC++!”<<endl;return0;}解3:#include<iostream>usingnamespacestd;intmain(){char*cc;cc=“WelcometoC++!”;cout<<cc<<endl;return0;}什么是程序設(shè)計范型?答:所謂程序設(shè)計范型(ProgrammingParadigm)是人們在程序設(shè)計時所采用的基本方式模型。程序設(shè)計范型決定了程序設(shè)計時采用的思維方式、使用的工具,同時又有一定的應用范疇(即受一定的應用領(lǐng)域約束)。過程程序設(shè)計、模塊化程序設(shè)計、函數(shù)程序設(shè)計、邏輯程序設(shè)計、面向?qū)ο蟪绦蛟O(shè)計等,都是我們常見的、不同的程序設(shè)計范型。什么是面向過程、面向模塊、面向?qū)ο蠹邦悓俪绦蛟O(shè)計范型?它們各自的特點是什么?答:所謂過程程序設(shè)計范型即:確定程序中所需要的過程;采用過程處理中所找到的最好的算法。它的特點是:過程程序設(shè)計的核心是確定程序設(shè)計時所需的過程(Procedure),其程序的組件粒度是過程,每個過程是語言中的過程(Procedure)或函數(shù)(Function)單元,它完成某一個/類特定的任務(wù)。該范型的側(cè)重點在于處理過程——執(zhí)行預期計算所需要的算法。模塊化程序設(shè)計范型是:確定程序中所需要的模塊;將程序劃分成模塊,使得數(shù)據(jù)隱藏在程序的各模塊之中。它的特點是:程序組件粒度是模塊,將相關(guān)的數(shù)據(jù)和過程/函數(shù)聚集在某一模塊中,模塊對外只提供接口/界面,將其實現(xiàn)隱藏起來,其它模塊不能隨意訪問該模塊中的內(nèi)容?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第2頁。面向?qū)ο蟪绦蛟O(shè)計范型中程序設(shè)計的理念是:確定程序中所需要的類;為每一個類提供一組完整的操作集;用繼承性將類之間的共性顯式地表示出來。它的特點是:同時支持ADT和繼承性的程序設(shè)計范型,支持軟件的快速開發(fā),而且大大提高了軟件的重用(Reuse),特別是極大地增強了軟件的可擴充性和可維護性?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第2頁。類屬/通用程序設(shè)計范型的理念是:確定程序中所需要的算法;將它們參數(shù)化,使之能適用于各種類型和數(shù)據(jù)結(jié)構(gòu)。它的特點是:用模板抽象具有共性的類或函數(shù),是代碼的重用性更高。C++語言支持哪幾種程序設(shè)計范型?相應的語言支持機制是什么?答:C++語言是一種支持多種程序設(shè)計范型的語言,它支持:面向過程程序設(shè)計范型、面向模塊程序設(shè)計范型;面向?qū)ο蟪绦蛟O(shè)計范型;類屬/通用程序設(shè)計范型。C++語言支持過程程序設(shè)計范型的主要語言機制有:函數(shù)、向函數(shù)傳遞參數(shù)及從函數(shù)返回值;變量的定義與聲明;算術(shù)運算與關(guān)系運算(符);條件判斷語句與循環(huán)語句;指針與數(shù)組。C++中支持模塊化程序設(shè)計范型的主要機制有:名字空間(Namespace),一種模塊機制(Mechanism)分別編譯(SeparateCompilation),模塊的接口和實現(xiàn)可分別編譯范圍解析(::),如Stack::push(charc)和Stack::pop()異常處理(Exceptionhandling)C++中支持面向?qū)ο蟪绦蛟O(shè)計范型的主要機制有:Classes(一般意義上的類)Concretetypes(有實例的類,即可以產(chǎn)生對象的類)Abstracttypes(抽象類,即無實例的類(只定義了結(jié)構(gòu)和接口的類))Virtualfunctions(虛擬函數(shù))Derivedclasses(派生類)《C++程序設(shè)計語言》習題答案全文共63頁,當前為第3頁。C++中支持類屬/通用程序設(shè)計范型的主要機制是模板(Template)。《C++程序設(shè)計語言》習題答案全文共63頁,當前為第3頁。第三章練習題:定義聲明一個月Month枚舉類型。解:enumMonth{Jan=1,Feb=2,Mar=3,Apr=4,May=5,Jun=6,Jul=7,Aug=8,Sep=9,Oct=10,Dec=11,Mov=12};定義一些基本類型的變量,并打印輸出其存儲空間大小。解:#include<iostream>usingnamespacestd;intmain(){inti=5;charc=‘A’;floatf=5.21f;doubled=8.23;boolbb=false;cout<<“i=“<<i<<“;”<<”Memoryspace:“<<sizeof(int)<<endl;cout<<“c=“<<c<<“;”<<”Memoryspace:“<<sizeof(char)<<endl;cout<<“f=“<<f<<“;”<<”Memoryspace:“<<sizeof(float)<<endl;cout<<“d=“<<d<<“;”<<”Memoryspace:“<<sizeof(double)<<endl;cout<<“bb=“<<bb<<“;”<<”Memoryspace:“<<sizeof(bool)<<endl;return0;}3.定義各種整數(shù)類型的變量并賦初值,然后分別用八進制、十進制和十六進制打印輸出其值。解:#include<iostream>usingnamespacestd;intmain(){intii=85;shortintsi=45;longintli=75;unsignedintui=65;unsignedshortus=41;unsignedlongul=456;cout<<"八進制ii="<<oct<<ii<<endl <<"十進制ii="<<dec<<ii<<endl <<"十六進制ii="<<hex<<ii<<endl;cout<<"八進制si="<<oct<<si<<endl <<"十進制si="<<dec<<si<<endl <<"十六進制si="<<hex<<si<<endl;cout<<"八進制li="<<oct<<li<<endl <<"十進制li="<<dec<<li<<endl <<"十六進制li="<<hex<<li<<endl;cout<<"八進制ui="<<oct<<ui<<endl <<"十進制ui="<<dec<<ui<<endl <<"十六進制ui="<<hex<<ui<<endl;cout<<"八進制us="<<oct<<us<<endl <<"十進制us="<<dec<<us<<endl <<"十六進制us="<<hex<<us<<endl;cout<<"八進制ul="<<oct<<ul<<endl《C++程序設(shè)計語言》習題答案全文共63頁,當前為第4頁。cout<<"十進制ul="<<dec<<ul<<endl《C++程序設(shè)計語言》習題答案全文共63頁,當前為第4頁。 cout<<"十六進制ul="<<hex<<ul<<endl; return0;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第5頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第5頁。第四章練習題1.為下面的各表達式加上適當?shù)睦ㄌ?,然后給表達式中各變量賦以相應的初值,判斷各表達式的結(jié)果,并用程序驗證其結(jié)果的正確性。a=b+c*d<<2&8a&077!=3a==b||a==c&&c<5c=x!=00<=i<7a=-1++b5a=b==c++x*=*b?c:*d*2a-b,c=d2.編寫從鍵盤輸入一個年份,判斷其是否為閏年的程序。#include<iostream>usingnamespacestd;boolisleap(int&n){if(n%400==0||(n%4==0)&&(n%100!=0))returntrue;returnfalse;}intmain(){cout<<"請輸入一個年份(大于0):\n";inta;cin>>a;if(a<=0){cout<<"inputerror!!\n";return0;}if(isleap(a))cout<<"year:"<<a<<"isleapyear!\n"<<endl;elsecout<<"year:"<<a<<"isnotleapyear!\n";system("pause");return0;}3.編寫估算數(shù)學常量e的值程序。要求其精度達到小數(shù)點后5位。e的計算公式如下:#include<iostream>usingnamespacestd;intmain(){floatsum=0,a=1,i=0;while(a>1e-5){ sum+=a; i+=1; a=a/i;}cout<<sum<<endl;system("pause");《C++程序設(shè)計語言》習題答案全文共63頁,當前為第6頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第6頁。編寫統(tǒng)計輸出輸入字符串中英文字母總數(shù)、數(shù)字總數(shù)和其它字符個數(shù)的程序。#include<iostream>#include<string>usingnamespacestd;intmain(){ stringstr; ints[3]={0,0,0}; cout<<"輸入一個字符串:"; cin>>str; for(unsignedinti=0;i<str.size();i++){ if(str[i]>='A'&&str[i]<='z') s[0]++; elseif(str[i]>='0'&&str[i]<='9') s[1]++;else s[2]++; } cout<<"統(tǒng)計結(jié)果如下:\n" <<"字符串中字母個數(shù):"<<s[0]<<"\n" <<"字符串中數(shù)字個數(shù):"<<s[1]<<"\n" <<"其他:"<<s[2]<<endl; system("pause");}編寫打印輸出2~32767之間的素數(shù)。解:#include<iostream>#include<cmath>usingnamespacestd;constintMax=32767;boolissu(intn){ if(n==1)returntrue;for(inti=2;i<=(int)sqrt(n);i++){ if(n%i==0) returnfalse;}returntrue;}intmain(){inti=2,j=1;for(;i<Max;i++){ if(issu(i)){cout<<i<<";"; j++; }if(j%10==0)cout<<'\n';//每10個一行輸出}system("pause");return0;}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第7頁?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第7頁。6.打印輸出楊輝三角形(x+y)n的展開式的各項系數(shù)。系數(shù)n(亦即打印的行數(shù))由用戶從鍵盤輸入。楊輝三角形前幾行的值為:111 2 11 3 3 11 4 6 4 1解:#include<iostream>usingnamespacestd;constintMa=66;voidprint(inta[]){ inti=0; for(;;i++){ if(a[i]==0) break; cout<<a[i]<<''; } cout<<endl;}intmain(){inta1[Ma],a2[Ma];//滾動數(shù)組 a1[0]=a2[0]=1; for(inti=1;i<Ma;i++) a1[i]=a2[i]=0; cout<<"請輸入打印的行數(shù):"<<endl; cin>>n; intn,flg=0; intj,k; for(j=0;j<n;j++){ if(flg==0){ print(a1); for(k=1;k<n+2;k++) a2[k]=a1[k]+a1[k-1]; flg=1; } else{ print(a2); for(k=1;k<n+2;k++) a1[k]=a2[k]+a2[k-1]; flg=0; } } system("pause"); return0;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第8頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第8頁。第五章練習題1.寫出以下定義聲明:一個字符指針變量;一個其元素為10個整數(shù)的一維數(shù)組;一個整型變量的引用;一個字符串指針;一個浮點型常量;一個指向常量字符串的常量指針;一個指向返回類型為int,參數(shù)為空的函數(shù)指針。并為每個聲明做初始化。解:略。2.從輸入讀入一系列單詞,使用quit作為輸入的結(jié)束單詞。按照讀入的順序打印出這些單詞,但同一個單詞不要打印兩次,另外,對單詞進行排序后輸出。#include<iostream>#include<cstdlib>#include<string>usingnamespacestd;constintMax=100;voidsort(strings[],int&n){//由小到大排序選擇排序; intb,c,a; strings1;for(a=0;a<=n-2;a++){ c=a; for(b=c;b<n;b++){ if(s[b]<s[c]) c=b; } s1=s[a]; s[a]=s[c]; s[c]=s1; }}intmain(){strings0="quit";strings[Max],s1; cout<<"inputsomewords:"; inti=0,j; for(;;){ intflag=0;//flag是做標記的 cin>>s1; if(s1==s0) break; for(j=0;j<i;j++){ if(s[j]==s1){ flag=1; break; } } if(flag==0){ s[i]=s1; i++; } } for(intk=0;k<i;k++) cout<<s[k]<<""; cout<<endl; sort(s,i);《C++程序設(shè)計語言》習題答案全文共63頁,當前為第9頁。 for(intk=0;k<i;k++)《C++程序設(shè)計語言》習題答案全文共63頁,當前為第9頁。 cout<<s[k]<<""; cout<<endl; system("pause"); return0;}3.定義一個學生結(jié)構(gòu)數(shù)組,輸入其值,并以學號從小到大的順序依次輸出各學生的信息。#include<iostream>#include<string>usingnamespacestd;constintM=50;structstu{ stringname; doubleid; intage; charc;};voidsort(stus[],int&n){//由小到大排序選擇排序算法; intb,c,a; stus1;for(a=0;a<=n-2;a++){ c=a; for(b=c;b<n;b++){ if(s[b].id<s[c].id) c=b; } s1=s[a]; s[a]=s[c]; s[c]=s1; }}intmain(){ stus[M]; cout<<"您要輸入多少個學生的信息:"; intn,i; cin>>n; for(i=0;i<n;i++){ cout<<"輸入學生的姓名:";cin>>s[i].name; cout<<"輸入學生的學號:";cin>>s[i].id; cout<<"輸入學生的性別[F/M]:";cin>>s[i].c; cout<<"輸入學生的年齡:";cin>>s[i].age; } cout<<"信息如下:"<<endl; sort(s,n); for(i=0;i<n;i++){ cout<<s[i].id<<""<<s[i].name<<"" <<s[i].c<<""<<s[i].age<<endl; } system("pause"); return0;}將一字符串字面值賦給一個字符數(shù)組,用指針操作遍歷該字符串,統(tǒng)計輸出其中元音及輔音字母的個數(shù)?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第10頁?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第10頁。#include<iostream>#include<string>usingnamespacestd;constintMax=100;intmain(){ strings; cout<<"inputastring:"; cin>>s; charc[Max]; unsignedinti; for(i=0;i<Max;i++) c[i]='\0'; for(i=0;i<s.size();i++) c[i]=s[i]; char*p; p=c; intn1=0,n2=0; for(;*p!='\0';p++){ if(*p=='a'||*p=='e'||*p=='i'||*p=='o'||*p=='u') n1++; else n2++; }cout<<"原音字母個數(shù):"<<n1<<"\n輔音字母個數(shù):"<<n2<<endl;cout<<p<<endl;system("pause");return0;}4.用引用實現(xiàn)二字符串的交換程序。#include<iostream>#include<string>usingnamespacestd;voidswap(string&a,string&b){ strings0; s0=a; a=b; b=s0;}intmain(){ strings1="Iloveyou!",s2="metoo."; cout<<s1<<'\n'<<s2<<endl; swap(s1,s2); cout<<s1<<'\n'<<s2<<endl; system("pause"); return0;}6.將鍵盤輸入的若干個單詞放入一個指針數(shù)組中,對它實現(xiàn)以下操作:a.查找某個單詞;b.修改某個單詞;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第11頁。c.刪除某個單詞;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第11頁。d.復制某個單詞;e.排序這些單詞并打印輸出。#include<iostream>#include<string>usingnamespacestd;constintMs=50;//輸入字符串的個數(shù)的最大值voidsort(string*s[],intn){ inti,j; for(i=0;i<n-1;i++)for(j=i;j<n-1;j++){ if(*(s[j])>*(s[j+1])){ strings1; s1=*(s[j]); *(s[j])=*(s[j+1]); *(s[j+1])=s1; } } for(intk=0;k<n;k++) if(*(s[k])!="") cout<<*(s[k])<<""; cout<<endl;}voidsearch(string*s[],intn){ stringa; cout<<"輸入要查詢的字符串:"; cin>>a; inti=0,k=0; for(;i<n;i++) if(*(s[i])==a) k=1; if(k==1) cout<<"找到了該字符串?。n"; else cout<<"沒有找到這個字符串?。n";}voidmodify(string*s[],intn){cout<<"輸入要修改的串:"; stringa; cin>>a; inti=0,k=0; for(;i<n;i++) if(*(s[i])==a) k=i; if(k==0) cout<<"沒有該字符串,不能修改??!\n"; else{ charc; cout<<"確認要修改嗎?[Y/n]"<<endl; cin>>c; if(c=='y'||c=='Y'){ cout<<"輸入修改后的字符串:"; cin>>*(s[k]);《C++程序設(shè)計語言》習題答案全文共63頁,當前為第12頁。 }《C++程序設(shè)計語言》習題答案全文共63頁,當前為第12頁。 else cout<<"退出!"<<endl; }}voiddelet(string*s[],intn){ cout<<"輸入要刪除的字符串:"; stringa; cin>>a; inti=0; for(;i<n;i++) if(*(s[i])==a) *(s[i])="";}intmain(){ string*c[Ms]; string*p; cout<<"要輸入的字符串的個數(shù):"; intn,i; cin>>n; for(i=0;i<n&&i<Ms;i++){ p=newstring; cout<<"輸入單詞:"; cin>>*p; c[i]=p; } cout<<"輸入完畢!!\n\n";loop: cout<<"a.查找某個單詞\n" <<"b.修該某個單詞\n" <<"c.刪除某個單詞\n" <<"q.退出??!\n" <<"d.排序這些單詞并打印輸出\n請選擇!"<<endl; charc0; cin>>c0; switch(c0){ case'a':search(c,n);break; case'b':modify(c,n);break; case'c':delet(c,n);break; case'd':sort(c,n);break; case'q':exit(0); default:cout<<"輸入有誤?。。n";break; } gotoloop; system("pause");《C++程序設(shè)計語言》習題答案全文共63頁,當前為第13頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第13頁。第六章練習題:從鍵盤輸入10個浮點數(shù),編寫計算求其和及平均值的函數(shù)。#include<iostream>usingnamespacestd;constintsize=10;floatsum(floata[]){ floatsum=0; for(inti=0;i<size;i++) sum+=a[i]; returnsum;}floataverage(floataa[]){ floataverage=sum(aa)/size; returnaverage;}intmain(){ floatnum[size]; cout<<"請輸入十個數(shù):"<<endl; for(inti=0;i<size;i++) cin>>num[i]; cout<<"這十個數(shù)的和是"<<sum(num)<<endl; cout<<"這十個數(shù)的平均值是"<<average(num)<<endl; return0;}采用遞歸方式,編寫將一輸入字符串逆序輸出的函數(shù)。#include<iostream>#include<string>usingnamespacestd;voidff(stringss,inti){ if(i!=0){ cout<<ss[i-1]; i--; ff(ss,i); }}intmain(){ stringss; cout<<"輸入一字符串:"<<endl; cin>>ss; inti=ss.size(); ff(ss,i); cout<<endl; system("pause"); return0;}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第14頁?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第14頁。編寫一個與C標準庫printf函數(shù)功能相同的自己的My_printf函數(shù)。#include<iostream>#include<cstdlib>#include<cstdarg>#include<cstring>#include<conio.h>usingnamespacestd;intMy_printf(constchar*format,...){ if(format==NULL) return-1; intn=0; va_listmarker; va_start(marker,format); for(inti=0;;i++){ charc=format[i]; if(c=='\0') gotoend; elseif(c=='%'){ i++; c=format[i]; intd,m; char*pc; switch(c){ case's': pc=va_arg(marker,char*); if(pc!=NULL){ for(intj=0;;j++){ c=pc[j]; if(c=='\0') break; putch(c); n++; } } else{//如果對于%s的實參是空串,將打印輸出(null) cout<<"(null)"<<endl; n+=6; } break; case'c': c=va_arg(marker,char); putch(c); n++; break; case'd': d=va_arg(marker,int); charbuf[32]; buf[31]='\0'; itoa(d,buf,10); m=(int)strlen(buf); for(intj=0;j<m;j++) putch(buf[j]);《C++程序設(shè)計語言》習題答案全文共63頁,當前為第15頁。 n+=m;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第15頁。 break; default: putch('%'); putch(c); c+=2; break; } } else{ putch(c); n++; } }end: va_end(marker); returnn;}intmain(){ intn; n=My_printf("test"); cout<<"\t"<<n<<endl; n=My_printf("Strin%c",'g'); cout<<"\t"<<n<<endl; n=My_printf("S%s","tudent"); cout<<"\t"<<n<<endl; n=My_printf("%d%c%c%d%s",2,'0','1',2,"year"); cout<<"\t"<<n<<endl; system("pause"); return0;}采用函數(shù)過載機制,編寫能進行兩個整數(shù)、浮點數(shù)的相加及兩個字符串連接的一組過載函數(shù)。#include<iostream>#include<string>usingnamespacestd;voidsum(stringss1,stringss2){ stringss3=ss1+ss2; cout<<"字符串"<<ss1<<"和"<<ss2<<"相加得"<<ss3; cout<<endl;}voidsum(floatff1,floatff2){ floatff3=ff1+ff2; cout<<"浮點數(shù)"<<ff1<<"和"<<ff2<<"相加得"<<ff3; cout<<endl;}voidsum(intii1,intii2){ intii3=ii1+ii2; cout<<"整數(shù)"<<ii1<<"和"<<ii2<<"相加得"<<ii3; cout<<endl;}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第16頁?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第16頁。intmain(){ stringss1,ss2; cout<<"輸入兩個字符串"<<endl; cin>>ss1>>ss2; intii1,ii2; cout<<"輸入兩個整數(shù):"<<endl; cin>>ii1>>ii2; floatff1,ff2; cout<<"輸入兩個浮點數(shù):"<<endl; cin>>ff1>>ff2; sum(ss1,ss2); sum(ff1,ff2); sum(ii1,ii2); system("pause"); return0;}采用函數(shù)參數(shù)缺省值機制,編寫能分別打印輸出十進制((默認)、八進制和十六進制數(shù)的函數(shù)。#include<iostream>usingnamespacestd;voidoutput(intvalue,intbase=10){ switch(base){ case10:cout<<value<<"十進制是:"<<value<<endl;break; case8:cout<<value<<"八進制是:"<<oct<<value<<endl;break; case16:cout<<value<<"十六進制是:"<<hex<<value<<endl;break; default:cout<<"輸入錯誤"<<endl; }}intmain(){ intii; cout<<"輸入您想打印的數(shù):"<<endl; cin>>ii; cout<<"您是否采用默認進制(10)?Y/N"<<endl; charj; cin>>j; intjz; if(j=='N'||j=='n'){ cout<<"輸入您的進制,10或者16:"<<endl; cin>>jz; output(ii,jz); } else{ output(ii); }system("pause"); return0;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第17頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第17頁。第七章練習題:1.簡述Using聲明與Using指令的區(qū)別。答:Using聲明是將某一名字空間中的名字引入(Introduce)到一個局部范圍內(nèi),使其名字在該范圍內(nèi)無需名字空間的約束便可見、可用。而Using指令是將特定名字空間中的所有名字引入到一作用域內(nèi)。2.采用模塊化及結(jié)構(gòu)化異常處理機制進行小型桌面計算器的設(shè)計與實現(xiàn)。#include<iostream>#include<string>#include<map>#include<cctype>usingnamespacestd;map<string,double>table;//符號表namespaceLexer{//詞法分析模塊enumToken_value{ NAME,NUMBER,END,PLUS='+',MINUS='-',MUL='*',DIV='/', PRINT=';',ASSIGN='=',LP='(',RP=')' };//枚舉類型,枚舉語言中的終結(jié)符Token_valuecurr_tok=PRINT;doublenumber_value;stringstring_value;Token_valueget_token();}namespaceError{//錯誤處理模塊 structZero_divide{}; structSyntax_error{ constchar*p; Syntax_error(constchar*q) {p=q;}};}namespaceParser{//語法分析模塊doubleexpr(boolget);doubleterm(boolget);doubleprim(boolget); usingnamespaceLexer; usingnamespaceError;}namespaceDriver{//驅(qū)動模塊 intno_of_errors; std::istream*input; voidskip();}Lexer::Token_valueLexer::get_token(){//Lexer模塊的get_token實現(xiàn) charch;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第18頁。 cin>>ch;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第18頁。 switch(ch){ case'#': returncurr_tok=END; case';': case'*': case'/': case'+': case'-': case'(': case')': case'=': returncurr_tok=Token_value(ch); case'0': case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': case'9': case'.': cin.putback(ch); cin>>number_value; returncurr_tok=NUMBER; default: if(isalpha(ch)){ cin.putback(ch); cin>>string_value; returncurr_tok=NAME; } throwError::Syntax_error("badtoken"); returncurr_tok=PRINT; }}doubleParser::expr(boolget){//Parser模塊的expr實現(xiàn) usingnamespaceLexer; doubleleft=term(get); for(;;) switch(curr_tok){ casePLUS: left+=term(true); break; caseMINUS: left-=term(true); break; default: returnleft; }}doubleParser::term(boolget){//Parser模塊的term實現(xiàn) usingnamespaceLexer; doubleleft=prim(get); for(;;)《C++程序設(shè)計語言》習題答案全文共63頁,當前為第19頁。 switch(curr_tok){《C++程序設(shè)計語言》習題答案全文共63頁,當前為第19頁。 caseMUL: left*=prim(true); break; caseDIV: if(doubled=prim(true)){ left/=d; break; } throwError::Zero_divide(); default: returnleft; }}doubleParser::prim(boolget){//Parser模塊的prim實現(xiàn) usingnamespaceLexer; if(get)get_token(); switch(curr_tok){ caseNUMBER:{ doublev=number_value; get_token(); returnv; } caseNAME:{ double&v=table[string_value]; if(get_token()==ASSIGN)v=expr(true); returnv; } caseMINUS: return-prim(true); caseLP:{ doublee=expr(true); if(curr_tok!=RP)throwError::Syntax_error(")expected"); get_token(); returne; } caseEND: return1; default: throwError::Syntax_error("primaryexpected"); }}voidDriver::skip(){//Driver模塊的skip實現(xiàn) no_of_errors++; while(*input){ charch; input->get(ch); switch(ch){ case'\n': case';': return; } }}intmain(intargc,char*argv[]){《C++程序設(shè)計語言》習題答案全文共63頁,當前為第20頁。 cout<<"歡迎使用桌面計算器"<<endl;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第20頁。 cout<<"注意:1.如果輸入了一個以字母開頭的標識符";cout<<"請在標識符的后面加上一個空格,否則程序?qū)鲥e"<<endl; cout<<"2.若輸入了一個表達式,切記在后面加上;號"<<endl; cout<<"3.若想退出程序,請輸入#"<<endl; Driver::input=&cin;table["pi"]=3.1415926535897932385;//符號表賦初值table["e"]=2.7182818284590452354; while(*Driver::input){ try{ Lexer::get_token(); if(Lexer::curr_tok==Lexer::END)break; if(Lexer::curr_tok==Lexer::PRINT) continue; cout<<Parser::expr(false)<<endl; } catch(Error::Zero_divide){ cerr<<"attempttodividebyzero"<<endl; if(Lexer::curr_tok!=Lexer::PRINT) Driver::skip(); } catch(Error::Syntax_errore){ cerr<<"syntaxerror:"<<e.p<<endl; if(Lexer::curr_tok!=Lexer::PRINT) Driver::skip(); } } if(Driver::input!=&std::cin)deleteDriver::input;cout<<"謝謝使用!"<<endl; returnDriver::no_of_errors;}3.將堆棧封裝成一模塊,調(diào)試與測試之。#include<iostream>#include<string>usingnamespacestd;namespacestack{ classStack{ public: enum{Max=10}; Stack(){ top=-1; }; voidpush(intn);//壓棧操作 intpop();//彈棧操作 boolisEmpty();//判斷棧是否為空? boolisFull();//判斷棧是否滿? voiddump();//自棧頂向下讀取堆棧中的元素 ~Stack() {}; private: inttop;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第21頁。 intarray[Max];《C++程序設(shè)計語言》習題答案全文共63頁,當前為第21頁。 };//Stack類的接口}voidstack::Stack::push(intn){ if(isFull()) cout<<"Error,theStackisfull\n"; else{ top++; array[top]=n; }}intstack::Stack::pop(){ if(isEmpty()) cout<<"Error,theStackisempty!\n"; else returnarray[top--];}boolstack::Stack::isFull(){ if(top==Max-1) returntrue; else returnfalse;}boolstack::Stack::isEmpty(){ if(top==-1) returntrue; else returnfalse;}voidstack::Stack::dump(){ for(inti=top;i>=0;i--) cout<<array[i]<<"";}intmain(){//測試模塊棧 usingnamespacestack;constintM=10; Stacks1; inta[M]; cout<<"輸入十個數(shù)字進行類的測試工作:\n"; for(inti=0;i<M;i++) { cin>>a[i]; s1.push(a[i]); } cout<<"再壓進一個數(shù)看看:"<<endl; intb; cin>>b; s1.push(b); cout<<"以下是你輸入的十個數(shù)的展示:"<<endl; s1.dump(); cout<<"\n進行彈棧操作,以下是彈出的數(shù)字:"<<endl; for(intj=0;j<M;j++)《C++程序設(shè)計語言》習題答案全文共63頁,當前為第22頁。 cout<<s1.pop()<<""《C++程序設(shè)計語言》習題答案全文共63頁,當前為第22頁。 cout<<"\n再進行一次彈棧操作:"<<endl; s1.pop(); cout<<"測試工作結(jié)束"<<endl; system("pause"); return0;}將隊列封裝成一模塊,調(diào)試與測試之。//該方法使用數(shù)組來實現(xiàn)的,當然可以直接實現(xiàn)queue讀者自己實現(xiàn)#include<iostream>#include<cstdlib>usingnamespacestd;namespacequeue{classList{//List類的接口protected:enum{LEN=20}; intelemnum;intelems[LEN]; inthead,tial;public: List(); voidaddhead(intx); voidaddtial(int&y); intdelhead(); intdeltial(); intget_num(){returnelemnum;}};List::List(){elemnum=0;head=0;tial=elemnum;}voidList::addhead(intx){inti;if(elemnum>=LEN){cout<<"isfull!!!\n";}elsefor(i=elemnum-1;i>=0;i--) elems[i+1]=elems[i];elems[head]=x;elemnum++;tial=elemnum;}voidList::addtial(int&y){if(elemnum>=LEN){cout<<"isfull!!!\n";}elems[tial]=y;tial++;elemnum++;}intList::delhead(){《C++程序設(shè)計語言》習題答案全文共63頁,當前為第23頁。if(elemnum==0){《C++程序設(shè)計語言》習題答案全文共63頁,當前為第23頁。cout<<"nomemeber"<<endl;return-1;}else{ inti=0,s; s=elems[head]; for(;i<tial;i++) elems[i]=elems[i+1]; elemnum--; tial--; returns;}}intList::deltial(){if(elemnum==0){cout<<"isfall!!!\n";return-1;}else{ints;s=elems[tial-1]; tial--; elemnum--; returns;}}//classstack:publicList{//讀者可以參考stack類。該類從List繼承//public:// //stack():List(){}// voidpush(intx);// intpop();// intgetdeep();//};//voidstack::push(intx)//{addtial(x);}//intstack::pop()//{returndeltial();}//intstack::getdeep()//{returnget_num();}classQueue:publicList{//queue繼承自Listpublic://Queue():List(){}//可要可不要voidenqueue(intx); intdelqueue(); intgetqueuenum();};voidQueue::enqueue(intx){addtial(x);}intQueue::delqueue(){returndelhead();}intQueue::getqueuenum(){returnget_num();}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第24頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第24頁。intmain(){usingnamespacequeue;Listl1;for(inti=12;i<23;i++) l1.addhead(i);cout<<l1.get_num()<<""<<l1.delhead()<<endl;cout<<l1.deltial()<<endl;cout<<l1.get_num()<<endl;Queueq;inth,a;cout<<"thisisaqueue'test:\nit'slengthis:";for(h=45;h<56;h++) q.enqueue(h);a=q.getqueuenum();cout<<a<<endl;for(h=0;h<a;h++) cout<<q.delqueue()<<"";cout<<endl;system("pause");return0;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第25頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第25頁。第八章練習題1.編寫程序完成如下功能:1)實現(xiàn)如下函數(shù)intatoi(constchar*str)//將參數(shù)傳入的整數(shù)字符串轉(zhuǎn)換成一個整數(shù)#include<iostream>#include<cmath>usingnamespacestd;intAtoi(constchar*str){ intresult=0; intsize=0; for(inti=0;str[i]!='\0';i++) size++; for(inti=size-1;i>=0;i--) result+=(str[i]-'0')*static_cast<int>(pow(10,static_cast<double>(size-i-1))); cout<<result<<endl; system("pause"); return0;}2)寫一測試程序,將命令行中傳入的字符串調(diào)用atoi函數(shù)將其轉(zhuǎn)換成整數(shù)并輸出。#include<string>#include"atoi.h"intmain(){stringstr;inti=0;cin>>str;cout<<Atoi(str.c_str())<<endl;return0;}2.將第7章桌面計算器的程序的每一個模塊寫成一個C++源文件,然后采用分別編譯技術(shù)和#include指令將其組裝起來?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第26頁。請參照第7章桌面計算器程序完成,略?!禖++程序設(shè)計語言》習題答案全文共63頁,當前為第26頁。第九章練習題:什么是類(class)?在類的定義中,類由哪兩部分組成?每一部分各表示什么?答:一個C++類(class)是一個用戶自定義(User-defined)類型。類由數(shù)據(jù)成員和成員函數(shù)組成。其中數(shù)據(jù)成員即類中各變量/對象的定義部分,它們描述了該類對象所具有的屬性,各數(shù)據(jù)成員值集的笛卡爾積構(gòu)成了該類型的值集。成員函數(shù)即類中所有函數(shù)的集合,它描述了對該類對象所能進行的操作,它們構(gòu)成了該類的操作集。給定以下程序:#include<iostream>usingnamespacestd;voidmain(){ cout<<″Hello,welcomeyoustudyC++!\n″);}在不修改main函數(shù)的前提下,修改上述程序使之產(chǎn)生如下輸出:InitializeHello,welcomeyoustudyC++!Cleanup解:#include<iostream>usingnamespacestd;classC{public: C(); ~C();private: inta;};C::C(){ cout<<"Initialize\n";}C::~C(){ cout<<"Cleanup"<<endl;}Ca;intmain(){ cout<<"Hello,welcomeyoustudyC++!\n"; return0;}設(shè)計并實現(xiàn)一個整型堆棧類(Stack),該類具有以下操作:voidpush(intn);//壓棧操作intpop();//彈棧操作boolisEmpty();//判斷棧是否為空?boolisFull();//判斷棧是否滿?voiddump();//自棧頂向下讀取堆棧中的元素《C++程序設(shè)計語言》習題答案全文共63頁,當前為第27頁。解:《C++程序設(shè)計語言》習題答案全文共63頁,當前為第27頁。#include<iostream>#include<string>usingnamespacestd;classStack{//類的接口public:enum{Max=10}; Stack() { top=-1; }; voidpush(intn);//壓棧操作 intpop();//彈棧操作 boolisEmpty();//判斷棧是否為空? boolisFull();//判斷棧是否滿? voiddump();//自棧頂向下讀取堆棧中的元素~Stack(){};private: inttop; intarray[Max];};//類的實現(xiàn)voidStack::push(intn){ if(isFull()) cout<<"Error,theStackisfull\n"; else{ top++; array[top]=n; }}intStack::pop(){ if(isEmpty()) cout<<"Error,theStackisempty!\n"; else returnarray[top--];}boolStack::isFull(){ if(top==Max-1) returntrue; else returnfalse;}boolStack::isEmpty(){ if(top==-1) returntrue; else returnfalse;}voidStack::dump(){ for(inti=top;i>=0;i--) cout<<array[i]<<"";《C++程序設(shè)計語言》習題答案全文共63頁,當前為第28頁。}《C++程序設(shè)計語言》習題答案全文共63頁,當前為第28頁。intmain()//測試棧{constintM=10; Stacks1; inta[M]; cout<<"輸入十個數(shù)字進行類的測試工作:\n"; for(inti=0;i<M;i++) { cin>>a[i]; s1.push(a[i]); } cout<<"再壓進一個數(shù)看看:"<<endl; intb; cin>>b; s1.push(b); cout<<"以下是你輸入的是個數(shù)的展示:"<<endl; s1.dump(); cout<<"\n進行彈棧操作,以下是彈出的數(shù):"<<endl; for(intj=0;j<M;j++) cout<<s1.pop()<<""; cout<<"\n再進行一次彈棧操作:"<<endl; s1.pop(); cout<<"測試工作結(jié)束"<<endl; return0;}設(shè)計并實現(xiàn)一個和基本類型int功能類似的MyInteger類,該類對外提供如下操作:intadd(intx1,intx2);//加法操作intsub(intx1,intx2);//減法操作intmul(intx1,intx2);//乘法操作intdiv(intx1,intx2);//除法操作intmod(intx1,intx2)
;//求余操作注意:實現(xiàn)類時,對某些操作應做相應的異常處理。解:#include<iostream>usingnamespacestd;constintMax=32767;constintMin=-32768;classMyInteger{public: MyInteger(intx){ result=x; } MyIntegeradd(MyIntegerx);//加法操作 MyIntegersub(MyIntegerx);//減法操作 MyIntegermul(MyIntegerx);//乘法操作 MyIntegerdiv(MyIntegerx);//除法操作 MyIntegermod(MyIntegerx);//求余操作 ~MyInteger(){};private: intresult;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第29頁。};《C++程序設(shè)計語言》習題答案全文共63頁,當前為第29頁。MyIntegerMyInteger::add(MyIntegerx){ inti=result; result+=x.result; cout<<i<<"和"<<x.result<<"這兩個數(shù)的和是"<<result<<endl; returnresult;}MyIntegerMyInteger::sub(MyIntegerx){ inti=result;if(i>Max||i<Min){cout<<"越界!"<<endl;return0;} result-=x.result; cout<<i<<"和"<<x.result<<"這兩個數(shù)的差是"<<result<<endl; returnresult;}MyIntegerMyInteger::mul(MyIntegerx){ inti=result;if(i>Max||i<Min){cout<<"越界!"<<endl;return0;} result*=x.result; cout<<i<<"和"<<x.result<<"這兩個數(shù)的積是"<<result<<endl; returnresult;}MyIntegerMyInteger::div(MyIntegerx){ inti=result; if(i>Max||i<Min){cout<<"越界!"<<endl;return0;} if(x.result==0){ cout<<"Error,除數(shù)不能為"<<endl;returnNULL; } else result/=x.result; cout<<i<<"和"<<x.result<<"這兩個數(shù)的商是"<<result<<endl; returnresult;}MyIntegerMyInteger::mod(MyIntegerx){ inti=result; if(i>Max||i<Min){cout<<"越界!"<<endl;return0;} if(x.result==0){ cout<<"Error,被mod的數(shù)不能為"<<endl; returnNULL; }《C++程序設(shè)計語言》習題答案全文共63頁,當前為第30頁。 result%=x.result;《C++程序設(shè)計語言》習題答案全文共63頁,當前為第30頁。 cout<<i<<"和"<<x.result<<"這兩個數(shù)的余數(shù)是"<<result<<endl; returnresult;}intmain(){ MyIntegerm1(12),m2(6); m1.add(m2);MyIntegerm3(45),m4(8);m3.sub(m4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 華師大版數(shù)學八年級下冊17.1《變量與函數(shù)》(第2課時)聽評課記錄
- 湘教版數(shù)學八年級上冊2.3《等腰(邊)三角形的性質(zhì)》聽評課記錄2
- 浙教版數(shù)學七年級上冊5.4《一元一次方程的應用》聽評課記錄
- 人教版地理八年級上冊《土地資源》聽課評課記錄
- 人教版九年級數(shù)學上冊聽評課記錄本《一元二次方程 四種解法》
- 五年級上冊數(shù)學口算500題
- 青島版八年級上冊數(shù)學聽評課記錄《5-1定義與命題》
- 企業(yè)煤氣管道工程安裝合同范本
- 高檔小區(qū)豪華裝修房屋買賣合同范本
- 2025年度企業(yè)內(nèi)部停車位使用及管理協(xié)議模板
- 復旦中華傳統(tǒng)體育課程講義05木蘭拳基本技術(shù)
- GB/T 13234-2018用能單位節(jié)能量計算方法
- (課件)肝性腦病
- 北師大版五年級上冊數(shù)學教學課件第5課時 人民幣兌換
- 工程回訪記錄單
- 住房公積金投訴申請書
- 高考物理二輪專題課件:“配速法”解決擺線問題
- 檢驗科生物安全風險評估報告
- 京頤得移動門診產(chǎn)品輸液
- 如何做一名合格的帶教老師PPT精選文檔
- ISO9001-14001-2015內(nèi)部審核檢查表
評論
0/150
提交評論