C++若干復習要點重要問題及其實例解釋_第1頁
C++若干復習要點重要問題及其實例解釋_第2頁
C++若干復習要點重要問題及其實例解釋_第3頁
C++若干復習要點重要問題及其實例解釋_第4頁
C++若干復習要點重要問題及其實例解釋_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C+語言的若干重要問題及其實例解釋C+課考試范圍:第16章為主共占85分左右;第79章共占10分左右,第10章文件部分5分左右??荚囶}型:(見考試網站 單選題,填空題(一般填空、程序語句填空),程序閱讀題,1道編程題10分。1. 關于輸出格式問題cout.setf(ios:fixed); 等價于:cout<<setiosflags(ios:fixed);設置浮點數輸出格式為定點方式。cout.setf(ios:scientific); 等價于:cout<<setiosflags(ios: scientific); 設置浮點數輸出格式為科學計數法方式。cout.preci

2、sion(n); 等價于:cout<< setprecision(n);單獨使用precision(n)或setprecision(n)時,n的作用是控制浮點數輸出時保留n位有效數字。cout.precision(n); / cout<< setprecision(n);cout.setf(ios:fixed); / cout<<setiosflags(ios:fixed); cout.setf(ios:scientific); / cout<<setiosflags(ios: scientific);與配合,或與配合使用時,n的作用是控制浮點數

3、輸出時保留n位小數。例:precision(n)單獨使用,表示輸出數據取n位有效數字. double x=123.12544; cout<<"x="<<x<<endl; /不使用格式控制,則按浮點數默認輸出形式輸出。浮點數默認輸出6位有效數字,故輸出結果為:123.125 cout.precision(2); /設置輸出數據保留2位有效數字 cout<<x<<endl; /輸出結果為:1.2e+002 cout.precision(5); /設置輸出數據保留5位有效數字 cout<<x<<e

4、ndl; /輸出結果為:123.13 cout.precision(7); /設置輸出數據保留7位有效數字 cout<<x<<endl; /輸出結果為:123.1254例:precision(n)與格式控制符配合使用,表示輸出數保留n位小數。 double x=123.12544; cout.setf(ios:fixed); /設置以“定點方式”輸出 cout.precision(2); /輸出數據保留2位小數 cout<<x<<endl; /輸出結果為:123.13 cout.precision(3); /輸出數據保留3位小數 cout<

5、<x<<endl; /輸出結果為:123.125 cout.precision(6); /輸出數據保留6位小數 cout<<x<<endl; /輸出結果為:123.125440 double x=123.12544; cout.setf(ios:scientific); /設置以“科學計數法”方式輸出 cout.precision(2); /輸出數據保留2位小數 cout<<x<<endl; /輸出結果為:1.23e+002 cout.precision(3); /輸出數據保留3位小數 cout<<x<<

6、endl; /輸出結果為:1.231e+002 cout.precision(6); /輸出數據保留6位小數 cout<<x<<endl; /輸出結果為:1.231254e+002 2. 關于x+, +x或x-, -x的表達式值和變量終值問題(1)自增(自減)算符在變量后,表達式的值取變量的原值;自增(自減)算符在變量前,表達式的值取變量的終值(增減1后)。(2)無論自增(自減)算符在變量前或在變量后,變量的終值一樣。例:x+, +x;x-, -x的使用。# include <iomanip.h>void main(void) int n=0, m

7、; char c='A', d; double x=4.25, y; m=n+; d=+c; y=x-; cout<<"m="<<m<<endl; /m=0(即表達式n+的值為0) cout<<"d="<<d<<endl; /d=B (即表達式+c的值為'B') cout<<"y="<<y<<endl; /y=4.25(即表達式x-的值為4.25) cout<<"n=&quo

8、t;<<n<<endl; /n=1 (n的終值) cout<<"c="<<c<<endl; /c=B (c的終值) cout<<"x="<<x<<endl; /x=3.25 (x的終值) 若開始n=3; 則表達式(n+)+(n+)+(n+)的值是 9 ,表達式執(zhí)行后n的終值為 6 .3. 關于表達式求值、數據類型的問題(算符優(yōu)先級、結合方向)例:表達式18/4*sqrt(4.0)/8值的數據類型是(double),其值是(1.0)。解:(1)因為表達式中精度最

9、高的參數是4.0(為浮點數),而表達式的結果是取精度最高的參數的類型;另外,當結果是浮點數時,C+自動將浮點數轉化為double類型(雙精度實數類型)。(2)因18/4參與運算的兩數均為整數型,故結果也為整數型(即18/4的結果保留4,并非4.5);sqrt(4.0)為4.0開平方,即為2.0;于是18/4*sqrt(4.0)的值為4×2.08.0;故18/4*sqrt(4.0)/8的值為8.0/8=1.0。例:若有定義“int a=7; float x=2.5, y=4.7;”,則表達式x+a%3*(int)(x+y)%2/4的值是(2.5或2.500000)。解:本題涉及的算符優(yōu)

10、先級如下(從先到后):( )à (int)à *、/、 %同為2級(見主教材p27表,則根據其結合性決定先后,這3個運算符都是自左到右的結合性)à+。所以(每步先算加下劃線的):x+a%3*(int)(x+y)%2/4àx+a%3*(int)(7.2)%2/4à x+a%3*7%2/4à x+1*7%2/4à x+7%2/4à x+1/4à x+0à xà 2.5。即結果絕對值是2.5(直接輸出是2.5);如果按定點格式(fixed)輸出,浮點數的輸出默認保留6位小數,則為2.5000

11、00。例:若有定義“int m=5, y=2;”,則執(zhí)行表達式y(tǒng)+=y-=m*=y后的y值是(-16)。解:本題涉及復合賦值運算符(+=, -=, *=),它們和賦值運算符的結合性一樣,都是右結合性(自右往左)計算。計算步驟闡述如下(每步應該先計算的那部分加了下劃線突出):y+=y-=m*=y ( m*=y即為m=m*y, 此部分執(zhí)行后,m為10)à y+=y-=10 (y-=10即為y=y-10, 此部分執(zhí)行后,y為-8)à y+=-8即y=y+(-8) (注意此時的老y即右邊的y已經是-8,故得到新y即左邊的y為-16)à y=-164. 關于if語句和循環(huán)語

12、句的條件表達、循環(huán)次數的確定if (條件) 語句;for (表達式1; 條件;表達式3) 語句;下列意思等價:“條件”成立,“條件”為真,“條件”為非0值。例:下面for語句的循環(huán)次數是( 6 )次:   for (int i=0,x=0; !x&&i<=5; i+) ;解:循環(huán)條件為“!x&&i<=5”的值,當它為“真”(非0數)時執(zhí)行循環(huán)體語句。按照關系運算符、邏輯運算符的優(yōu)先級,該表達式相當于“(!x)&&(i<=5)”。即要求(!x)為非0(即x為0,這部分始終成立),同時要求“i<=

13、5”成立,才執(zhí)行循環(huán)體語句(本題的循環(huán)體語句為空語句:;)。當執(zhí)行6次循環(huán)后,i值將變?yōu)?,這時才使得條件“i<=5”首次不成立(終止循環(huán));故循環(huán)次數為6。 5. 一個指向任何數據類型的指針變量占4字節(jié)存儲空間例:寫出下面程序輸出結果:# include <iostream.h># include <iomanip.h>void main(void) char c8,*p8;/1個字符類型數據占1字節(jié),數組c有8個元素 char *p1; int *p2; float *p3; double *p4; cout<<sizeof(c) <

14、;<','<<sizeof(p)<<endl; cout<<sizeof(p1)<<','<<sizeof(p2)<<','<<sizeof(p3)<<','<<sizeof(p4)<<endl;答:8, 32(p是指針數組,有8個元素,相當于有8個指向字符型的指針變量)4,4,4,46. 字符串的長度等于其有效字符個數,字符串存儲時所占字節(jié)數等于“字符串的長度1”。注意轉義字符的表示。轉義字符是一個特殊字

15、符,用開頭,有:n、t、v、b、r、f: 換行、橫向跳格、縱向跳格、退格、回車、換頁。 :反斜杠字符本身。 :單引號字符本身。ddd :以13位8進制數ddd為ASCII碼的對應字符。xhh :以12位16進制數hh為ASCII碼的對應字符。例如:已知字符A的ASCII碼是十進制值65,則101即表示字符A (因為八進制數101等于十進制數65);同理:x41也表示字符A (因為十六進制數41等于十進制數65)。又如:字符串“LineOnex0aLineTwo12”的長度為(16)。解釋:因為x0a、12各代表1個轉義字符,故本字符串中共有2個轉義字符,其余是14個普通字符,故共有16個字符。

16、7. 函數調用中形參與實參的關系問題(同單元?異單元?)#include <iostream>#include <fstream>using namespace std;/ (1) 形參是普通變量:形參、實參對應不同內存單元,值傳遞(單向影響:實參形參)void swap(int x,int y)int t;t=x;x=y;y=t; / x,y交換,但不影響a,bvoid main() int a,b; a=5;b=6; swap(a,b); cout<<a<<','<<b<<endl; / a,b不變,故

17、輸出:5,6/ (2) 形參是變量的引用:形參、實參對應同一內存單元, 地址結合(雙向影響:實參形參,恒等于)void swap(int &x,int &y)int t;t=x;x=y;y=t; void main() int a,b; a=5;b=6; swap(a,b); cout<<a<<','<<b<<endl;/ a,b交換,故輸出:6,5/ (3) 形參是指針變量,實參是變量地址:值傳遞(傳遞的是一種特殊值地址值)void swap(int *x,int *y)int *t; / t也是指針變量t=x;

18、x=y;y=t; / 交換的是指針變量x與y的值void main() int a,b; a=5;b=6; swap(&a,&b); /此時實參用某已知變量的地址 cout<<a<<','<<b<<endl;/ a,b不變,故輸出:5,6/ (4) 形參是指針變量,實參是同類指針變量:值傳遞(傳遞的是一種特殊值地址值)void swap(int *x,int *y)int t; / t是整型變量t=*x;*x=*y;*y=t; / 交換的是*x與*y的值(即交換了實參a、b的值)void main() int a,

19、b,*pa,*pb; a=5;b=6; pa=&a;pb=&b; swap(pa,pb); /此時實參也用指針變量 cout<<a<<','<<b<<endl;/ a,b不變,故輸出:6,5/ (5) 形參是數組名:形參、實參對應同一內存單元, 地址結合(雙向影響:實參形參,恒等于)void swap(int x)int t; / t是整型變量t=x0;x0=x1;x1=t; / 交換x0與x1的值(同時也將交換實參a0、a1的值)void main() int a=5,6;/此時定義的實參a只有2個元素,且:a0

20、=5,a1=6 swap(a); /此時實參a也是數組名 cout<<a0<<','<<a1<<endl;/a0、a1的值交換了,故輸出:6,58. 字符變量的指針用于指向字符串void main( ) char *p="ABCD" /p初始化為字符串首地址,即p最初指向字符A char *q="ABCD" /q初始化為字符串首地址,即q最初也指向字符A cout<<"*p+="<<*p+<<endl; /先取*p的值,然后p+;故輸出

21、:A cout<<"*+q="<<*+q<<endl; /先q自增,再取*q的值;故輸出:B cout<<"*p="<<*p<<endl; /輸出:B cout<<"*q="<<*q<<endl; /輸出:B9. 二維指針加*后,變?yōu)榈戎档囊痪S指針值void main( ) / 一維地址對應教材中說的“元素地址”;二維地址對應教材中的“行地址” int a3=1,2,3,4,5,6,7,8,9; cout<<&quo

22、t;a="<<a<<endl; /二維數組的首地址(二維的) cout<<"*a="<<*a<<endl; /也是首地址(但為一維的) cout<<"(a+1)="<<(a+1)<<endl; /行標為1的行的首地址(二維的) cout<<"*a+1="<<*a+1<<endl; /一維地址(元素a01的地址)cout<<"*(*(a+1)+2)="<<

23、;*(*(a+1)+2)<<endl; /元素a12的值10. 程序閱讀題舉例例:下列程序運行后輸出的結果是( 36 )。 #include <iostream>using namespace std;float cacl(float, float);void main( ) float x; float y; x=4; y=3; y=cacl(y, x); /相當于y=cacl(3,4);而cacl(3,4)的函數值為36 cout<<y<<endl; /故輸出結果是:36float cacl(float x, float y) /形參x得到3

24、, 形參y得到4 return (2*x+3*y)*2; /表達式的值為(2*3+3*4)*2, 即36例:寫出下列程序的運行結果。#include <iostream>#include <cmath>using namespace std;char a='A' int b='B'答案為:A, XB, XAAAaavoid sub() char b='X' cout<<a<<","<<b<<'n'a+; b+; void main() in

25、t k; for (k=1;k<=2;k+) sub( ); 11. 程序語句填空題舉例這種題目一般先會給出一段文字描述程序的主要功能是什么,要充分利用這段描述文字來幫助你整體理解程序;然后理解程序的算法,再結合空白地方上下文的意思推出該處的語句。必須理解程序算法才能判斷所缺語句應該承擔的功能(類似英語的完型填空)。 例:本程序打印下列圖案所示的數字金字塔到計算機屏幕:設最下面一行左端無空格輸出,金字塔的行數由參數n決定。1121123211234321123454321#include <iostream>using namespace std;void gold_tawe

26、r(int n) int i, j;for(i=1;i<= ;i+) / n,打印n行for(j=1;j<=n-i;j+) cout<<' ' /打印每行開頭的空格for(j=1;j<= ;j+) cout<<j; / i,打印1i幾個數字for(j=i-1;j> ;j- -) cout<<j; / 0,打印i-11幾個數字cout<<'n' /光標換行void main()int n; cout<<"please input n:n"cin>>n

27、;gold_tawer(n);解釋:外循環(huán)(對i的循環(huán))表示對行的循環(huán),題目說打印的行數由形式參數n決定,故第空白處應該填n。外循環(huán)中嵌套的三個內循環(huán)(并列的三個對j的循環(huán))分別打印同一個第i行的開頭空格、中位數以左的數(含中位數)、中位數后面的數。據題意說最下面一行左端無空格輸出,故第i行的開頭空格數應該是n-i個,這是第1個內循環(huán)的次數(已給出);第i行中位數及其左邊的數應該依次是1,2,.,i共i個,這是第2個內循環(huán)的次數(所以空白處應該填i);第i行中位數后面的數應該依次是i-1,i-2,.,1循環(huán)變量j從初值i-1開始,逐步遞減,只要j>0就要執(zhí)行它的循環(huán)體語句cout<

28、<j;(所以空白處應該填0)。例:給二維數組a賦值為下列結果,程序關鍵代碼語句填空。答案: i= =j|j= =0 j-i+1或者aij-1+1 ai-1j+ai-1j-1 1 2 3 4 5 6 1 1 2 3 4 5 1 2 1 2 3 4 1 3 3 1 2 3 1 4 6 4 1 2 1 5 10 10 5 1for (i=0; i<6; i+) for (j=0; j<6; j+) if ( ) aij=1; /注意i= =j不能寫成i=j,/對角線上的元素滿足條件i= =j,最開頭那一列元素滿足j= =0 else if (i<j) aij= ;/對角線上方

29、元素i<j else aij= ; /對角線下方元素i>j cout<<setw(6)<< aij; cout<<endl; 12. 編程題:熟悉常用算法(基本上限定為下列9類算法)(1)累加 例:求指定區(qū)間N,M之間偶數之和,寫函數(N,M為形參)。 解:long f(Int N, Int M) int i; / i表示區(qū)間所有整數,做循環(huán)變量 long s; / s存結果,與函數值同類型long s=0; / 存放累加和的變量應初始化為0for (i=N;i<=M;i+) if ( i%2=0) s=s+i; return s; (2)

30、計數(類似于累加) 例:求指定區(qū)間N,M之間有多少自然數滿足條件:能被5整除但不能被7整除,寫函數(N,M為形參),結果由函數值返回。 解:long f(int N, int M) int i; / i表示區(qū)間所有整數,做循環(huán)變量 long n; / n存結果,與函數值同類型long n=0; / 存放計數的變量應初始化為0for (i=N;i<=M;i+) if ( i%5=0 && i%7!=0) n=n+1; / n=n+1亦可n+ return n; (3)連乘 例:求具有N個元素的數組a中偶數下標元素的乘積,寫函數(N,a 為形參),結果由函數值返回。 解:lo

31、ng f(int N, int a ) int i; / i表示所有元素下標,做循環(huán)變量 long s; / s存結果,與函數值同類型long s=1; / 存放連乘的變量應初始化為1for (i=0; i<N; i+) if ( i%2=0 ) s=s*ai; return n; (4)最大、最小值問題 例:對給定的一維數組a及其元素個數n兩個參數,找出數組中的最小元素及其下標,最小值由全局變量minnum存儲,對應元素下標由函數值返回。如果a中有多個并列最小的元素,以第一次出現的元素為準。long minnum; /全局變量minnum定義在函數外int f(long a, int

32、n) int i, minI; minnum=a0; for(i=1; i<n; i+) if ( ai<minnum ) minnum = ai; minI = i ; return minI; (5)判斷指定數N是否為素數或某種特殊數例:對給定的n位正整數N(假定數的位數n不超過5位),判斷N是否為“回文數”,回文數是指正讀和反讀都一樣的正整數,如34143就是一個4位的回文數。如果N是回文數,則函數返回值為1;否則,函數返回值為0。int f(int n, int N) int i,M,a5; M=N; for (i=0;i<n;i+) /此循環(huán)求出N的各位數字存放在數組a中 ai=M%10 ; /第i位數字存于ai中,最低位i=0 M=M/10; /老M去掉第i位數字后,剩余數位構成新M /以下循環(huán)求出N的反序數,結果存放在M中 M=0; for (i=0;i<n;i+) M=M*10+ai; /以下判斷N的反序數M是否與N相等 if (M= =N) return 1; else return 0;(6)查找問題例:給定一維數組a及某個指定數x,找出數組a中元素值等于x的元素個數,以及值為x且下標最小的那個元素的下標。下標最小的那個元素的下標在函數中輸出;而元素值等于x的元素個數作為函數值返回。i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論