版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、軟考程序員考前練習(xí)試題及答案解析(7) 二、程序分析main() char str=1234567;int i;for(j=0;i=2)conv(b/2);printf(%d,b%2);return;main() int d;scanf(%d,&d);conv(d);說明:本程序執(zhí)行時從鍵盤上輸入:22后跟回車鍵?!窘馕觥恐骱瘮?shù)中輸入整數(shù)22存入變量d中,然后調(diào)用函數(shù)。conv()。此時將把實(shí)參d 中的22傳遞給形參b。然后再執(zhí)行函數(shù)體,函數(shù)體中前面一條語句是單分支語句,當(dāng)b=2時再用“b/2”調(diào)用自己,顯然這是一個遞歸調(diào)用的函數(shù)。下面我們來詳細(xì)分析遞歸調(diào)用的過 程:第1次調(diào)用函數(shù)(b=22)
2、,滿足條件,引起第2次調(diào)用自己(b/2=11)第2次調(diào)用函數(shù)(b=11),滿足條件,引起第3次調(diào)用自己(b/2=5)第3次調(diào)用函數(shù)(b=5),滿足條件,引起第4次調(diào)用自己(b/2=2)第4次調(diào)用函數(shù)(b=2),滿足條件,引起第2次調(diào)用自己(b/2=1)第5次調(diào)用函數(shù)(b=1),不滿足條件,執(zhí)行輸出語句,輸出結(jié)果為b%2=1%2=1執(zhí)行第5次調(diào)用的返回,執(zhí)行第今次調(diào)用時的輸出語句,輸出結(jié)果為b%2=2%2=0執(zhí)行第4次調(diào)用的返回,執(zhí)行第3次調(diào)用時的輸出語句,輸出結(jié)果為b%2=5%2=1執(zhí)行第3次調(diào)用的返回,執(zhí)行第2次調(diào)用時的輸出語句,輸出結(jié)果為b%2=11%2=1執(zhí)行第2次調(diào)用的返回,執(zhí)行第1次
3、調(diào)用時的輸出語句,輸出結(jié)果為b%2=22%2=0執(zhí)行第1次調(diào)用的返回,將返回主函數(shù),結(jié)束程序的運(yùn)行。所以程序運(yùn)行的輸出結(jié)果是:10110。【參考答案】10110。void f(p1,p2)int*p1, *p2; int i,j;*p2=0;for(i=0;i3;i+)for(j=i;j3;j+)*p2+=*(pl+i*3+j);return;main() int a33=1,2 ,3,4 ,5,6;int s;f(a,&s);printf(%d,s);【解析】本程序是由一個無返回值的函數(shù)f()和主函數(shù)組成的。先看主函數(shù),定義了一 個3行3列的二維數(shù)組a,并且給a賦了初值,初值如下:a00=1
4、 a01=2 a02=0a10=3 a11=4 a12=0a20=5 a21=6 a22=0接著調(diào)用無返回值的函數(shù)f(),然后輸出變量s中的值,顯然這個s中的值是在函數(shù)f() 中獲得的。接下來分析函數(shù)f()。該函數(shù)有兩個形參,第1個形參是指針變量p1,對應(yīng)的實(shí)際參數(shù) 是數(shù)組a的首地址,即調(diào)用該函數(shù)后,指針變量p1是指向二維數(shù)組a的首地址。第2個形參 也是指針變量p2,對應(yīng)的實(shí)參是變量s的地址,即函數(shù)調(diào)用后指針變量p2是指向變量s的。 再來分析函數(shù)體。前面定義了兩個變量i和j,從后面的循環(huán)語句中看出是二重循環(huán)的控制 變量。接著,通過“*p2=0”,給變量s賦值0。二重for循環(huán)的循環(huán)體是“*p2
5、+=*(p1+i*3+j)”, 其中的“*p2”是代表變量s的,“*(p1+i*3+j)”是代表數(shù)組元素aij,這個賦值語句是把a(bǔ)ij加到變量s中(即求數(shù)組元素的和)?,F(xiàn)在只要分析清楚二重循環(huán)是對哪些數(shù)組元素進(jìn)行求和 的就可以得出變量s的值了。下面是對二重循環(huán)的執(zhí)行記錄:i=0 j=0對應(yīng)a00,其值為1j=1對應(yīng)a01,其值為2j=2對應(yīng)a02,其值為0i=1 j=1對應(yīng)a11,其值為4j=2對應(yīng)a12,其值為0i=2 j=2對應(yīng)a22,其值為0所以,s=a00+a0l+a02+a11+a22+a22= 1+2+0+4+0+0=7?!緟⒖即鸢浮?。軟考程序員考前練習(xí)試題及答案解析(8)mai
6、n() int i,a5;for(i=0;i2)%5;for(i=4;i=0;i-)printf(=,ai);【分析】我們可以按照程序中語句執(zhí)行的順序,記錄各個變量及數(shù)組元素值的方法來解 決這種閱讀程序?qū)戇\(yùn)行結(jié)果的問題。首先執(zhí)行第1個for循環(huán)。i=0,i2)%5=9*(-2)%5=-18%5=-3i=1, 12)%5=9*(-1)%5=-9%5=-41=2, i2)%5=9*(0)%5=0%5=0i=3, i2)%5=9*(5)%5=45%5=01=4, 12)%5=9*(6)%5=54%5=45,12”是關(guān)系運(yùn)算,結(jié)果只能為1或0;“x%5”是模運(yùn)算,結(jié)果是x除5的余 數(shù),且余數(shù)的符號和x
7、符號相同。再執(zhí)行第2個for循環(huán)。i=4, i=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a4的值,等于43, i=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a3的值,等于02,1=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a2的位,等于0i=1, i=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a1的值,等于-4i=0,1=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a0的值,等于-3-1, i=0的條件不成立,退出第2個for循環(huán)?!緟⒖即鸢浮? 0 0 -4 -3main() char s6=”1234”, ”56789”, *p2;int i, sum=0;P0=s0,p1=s1;for(i=0;p0i!=
8、0;i+, i+)sum=10*sum+p0i-0;for(i=1;p1i!= 0;i+, i+)sum=10*sum+p1i-0;printf(%d, sum);【解析】本程序的第1條語句是定義2行5列的二維字符型數(shù)組s,并且賦了初值如下:s00=1s01=2s02=3s03=4s04=0s10=5s11=6s12=7s13=8s14=9S15=0此外還定義了字符型指針數(shù)組p,利用第3條語句賦了值,結(jié)果如下:p0指向以“s0i”為數(shù)組名的一維數(shù)組首地址,即p0i就相當(dāng)于s0ip1指向以“s1i”為數(shù)組名的一維數(shù)組首地址,即p1i就相當(dāng)于s1i第2條語句定義了整型變量i(用于單重循環(huán)的控制變量
9、)和sum,并對sum清0。第4條語句是for循環(huán),控制變量i初值為0,每次加2,控制循環(huán)的條件是“p0i!=0,注意其中的“p0i”就是“s0i”,這個控制循環(huán)的條件可以理解為“二維字符型數(shù)組 元素s0i不是字符串的結(jié)束標(biāo)記則繼續(xù)循環(huán)”。從控制變量i的取位來看,二維字符型數(shù)組 元素只能取s00、s02,因?yàn)橄乱粋€數(shù)組元素是s04,該元素值是0。再分析循環(huán)體 中的語句,其中“ p0i-0”是將數(shù)組元素s0i中存放的數(shù)組字符減去0,結(jié)果將是該數(shù)字 字符對應(yīng)的一位整數(shù),整個語句是將sum變量中的原值乘以10以后再加上當(dāng)前的數(shù)字。循 環(huán)結(jié)束后的sum值就是s00和s02中的兩個數(shù)字組成的2位十進(jìn)制數(shù)
10、,結(jié)果為13。按照同樣的道理,可以分析出第2個for循環(huán)作用是完全相同的,它是把s11、s13 中的兩個數(shù)字(前者為6,后者為8)拼接到sum的原值中,結(jié)果sum中值為十進(jìn)制整數(shù)1368。 程序的最后一個語句就是輸出變量sum中的整數(shù)值?!緟⒖即鸢浮?3688.int p(m,n)int m, n; int i,pp;for(i=pp=1;iPP*= m;return(pp);main() printf(%d、p(3, 4);【解析】主函數(shù)中只有一條輸出語句,輸出結(jié)果是函數(shù)調(diào)用“p(3, 4)”的返回值。所以 本題的關(guān)鍵是函數(shù)p的功能。分析函數(shù)p(),有兩個參數(shù)m、n。函數(shù)體中關(guān)鍵的是for循
11、環(huán)語句。分析這個循環(huán)語句可以看出,控制變量是i,初值為1;,終值為n,每次循環(huán)i加1。所以是標(biāo)準(zhǔn)的次數(shù)型循環(huán), 共計循環(huán)n次。循環(huán)體中是將參數(shù)m的值乘到變量pp中,變量pp在開始循環(huán)時已經(jīng)設(shè)置 初值為1,所以整個循環(huán)是將n個m乘到pp中。顯然循環(huán)語句的功能是計算m”。而函數(shù) 的返回值正是這個變量pp中的值。由此分析可知,函數(shù)調(diào)用“p(3,4)”的返回值就是34。結(jié)果為81,也就是本程序的輸 出結(jié)果?!緟⒖即鸢浮?19.struct stu int num;char name10;int age;void py(struct stu *p) printf(%sn, (*p).name);main
12、() struct stu student3=1001,Sun,25,1002,Ling,23,1003,Shen,22;py(student+2);【解析】本程序是由3段組成的。第1段是結(jié)構(gòu)型stn的定義;第2段是函數(shù)py()的定義; 第3段是主函數(shù)。我們先分析主函數(shù)。首先定義了結(jié)構(gòu)型stu的數(shù)組student3,并且給3個元素的所有成 員都賦了初值。接著調(diào)用了函數(shù)py,對應(yīng)的實(shí)參是結(jié)構(gòu)型數(shù)組元素student2的地址。注意, “數(shù)組名+k”是數(shù)組元素“數(shù)組名k”的地址。再來分析函數(shù)調(diào)用py(student+2);。調(diào)用時,首先把實(shí)參傳遞給形參,即把結(jié)構(gòu)型stu 的數(shù)組元素student2的
13、地址student+2傳遞給形式參數(shù)“結(jié)構(gòu)型stu的指針變量p”。然后執(zhí)行函數(shù)體,輸出表達(dá)式是(*p).name”,這是結(jié)構(gòu)型stu的指針變量p指向的結(jié)構(gòu) 型stu數(shù)據(jù)(即結(jié)構(gòu)型stu的數(shù)組元素student2)的成員name,其值是字符串Shen。這 就是本題的答案。【參考答案】Shen10.# includestdio.hmain() char c;while(c=getchar()!= n)switch(c)case 0:case 1: putchar(c);case2: putchar(c);break;case3: putchar(c);default: putchar(c+1);b
14、reak;printf(n);假定本程序執(zhí)行時輸入:1357/(其中的/代表回車換行符)?!窘馕觥勘绢}也可以采用記錄的方法。執(zhí)行while循環(huán)。輸入第1個字符1,不是n,執(zhí)行switch語句的caseT”后的輸出語句,輸出字符1; 由于其后沒有“break”語句,貝0繼續(xù)執(zhí)行case2后的語句,輸出字符1。輸入第2個字符3, 不是n,執(zhí)行switch語句的case3”后的輸出語句,輸出字符3;由于其后沒有“break”語句, 則繼續(xù)執(zhí)行default后的語句,輸出字符4。繼續(xù)while循環(huán)。輸入第3個字符5,不是n,執(zhí)行switch語句的default”后的語句,輸出字符6。繼續(xù)while循環(huán)
15、。輸入第4個字符呼7,不是n,執(zhí)行switch語句的default”后的語句,輸出字符8。繼續(xù)While循環(huán)。輸入第5個字符n,是n,退出while循環(huán),輸出“回車換行符”。注意switch語句的執(zhí)行過程是:在每個“case”分支之后,可以有多個語句,程序?qū)⒁?次執(zhí)行這些語句,直到遇見“break”語句或者switch語句的右花括號 ”。如果某個“case” 分支的后面沒有“break”語句,它在執(zhí)行完本分支后的所有語句之后,將繼續(xù)執(zhí)行下一個分 支中的語句,直到出現(xiàn)“break”語句或者switch語句的右花括號“”后才中止本分支的執(zhí)行。【參考答案】113468軟考程序員考前練習(xí)試題及答案解析
16、(9)三、程序設(shè)計題編函數(shù)計算并返回m行6列整型數(shù)組a周邊元素之和(即第1行、第m行、第1列、第 6列上元素之和,但是重復(fù)元素只參加1次求和)。數(shù)組名a和m、n作為函數(shù)參數(shù)?!窘馕觥肯扔脝沃匮h(huán)求第1行和第m行上元素之和,控制循環(huán)的變量i對應(yīng)列下標(biāo), 依次等于0、1、5,參與求和的數(shù)組元素是a0i和 am-1i。再用單重循環(huán)求第1列和第6列上元素之和(注意排除第1行和第m行),控制循環(huán)的變量 1對應(yīng)行下標(biāo),依次等于1、m-2,參與求和的數(shù)組元素是ai0和 ai5?!緟⒖即鸢浮縤nt fun(a,m)int a6; int i,s=0;for(i=0;i6;i+)s+=a0i+am 一 1i;f
17、or(i=1;is+=ai0+ai5;return(S);編程序從鍵盤上輸入一個字符串(長度小于或等于80),分別統(tǒng)計其中的字母、數(shù)字和 其他字符的數(shù)目。本題要求用指向數(shù)組首地址的指針變量來處理字符率中的字符?!窘馕觥慷x字符型數(shù)組和指向數(shù)組首地址的指針變量。利用系統(tǒng)函數(shù)輸入一個字符串, 存入字符型數(shù)組。利用單重循環(huán)依次處理字符串中的單個字符,直到當(dāng)前字符是字符率結(jié)束 標(biāo)記符為止。在循環(huán)體中利用if-else組成的嵌套雙分支結(jié)構(gòu)處理3個分支:是字母的,則在對應(yīng)計數(shù)變量cl且中加1;是數(shù)字的,則在對應(yīng)計數(shù)變量C2中加1;其他情況,則在對應(yīng)計數(shù)變 量C3中加1。注意,這3個計數(shù)變量在循環(huán)前必須清0
18、?!緟⒖即鸢浮縨ain() char s81,*p=s;int cl,c2,c3;c1=c2=c3=0;scanf(%s,s);while(*p!=0) if(*p=a)&(*p=A)&(*p+0)&(*p=9)c2+;elsec3+;p+;printf(c1=%d c2=%d c3=%dn,c1,c2,c3);3.編寫一個模擬簡單計算器的程序,計算表達(dá)式:a1 op a2的值,要求a1、op、a2從 盤輸入。其中a1、a2(作除數(shù)時不能為0)為數(shù)值,op為運(yùn)算符+、-、*、/?!窘馕觥勘境绦蚴紫纫x相關(guān)的變量,a1和a2為單精度實(shí)型,op為字符型。接著要 輸入兩個運(yùn)算數(shù)和運(yùn)算符。最后要按照
19、運(yùn)算符進(jìn)行分支處理,由于分支的條件是運(yùn)算符op 等于不同的值,所以可以選取swtch語句來完成。其中當(dāng)op為時,要注意區(qū)分出除數(shù)a2 為0的異常情況。【參考答案】#include math.hmain() float a1,a2;char op;scanf(%f,c,f”,&a1,&op,&a2);switch(op) case+:printf(a1+a2=%fn,a1+a2);break;case-:printf(a1-a2=%fn, a1-a2); break;case*:printf(a1*a2=%fn, a1*a2);break;case/:if(fabs(a2)1e-4)printf
20、(division by zero.n);elseprintf(a1/a2=%fn, a1/a2);break;default:printf(unknown operator.n);編寫一程序,從鍵盤輸入10個實(shí)數(shù),計算并輸出算術(shù)平均值。【解析】相關(guān)的變量和數(shù)組:用來存放算術(shù)平均值的變量(例如用ave)、存放10個實(shí)數(shù) 的一準(zhǔn)數(shù)組(例如用a10)。因?yàn)閍ve要求和,所以事先要賦初值0.0。第1個次數(shù)為10的循 環(huán)用于輸入10個實(shí)數(shù)存入數(shù)組a,可以使用for循環(huán),利用下標(biāo)變量i來控制循環(huán)。第2個次 數(shù)為10的循環(huán)用于求10個數(shù)組元素之和存入變量刪,可以使用for循環(huán),利用下標(biāo)變量i來 控制循環(huán)。
21、最后是輸出結(jié)果,要注意變量ave中存放的是和,必須除10后才是平均值?!緟⒖即鸢浮縨ain() int i;float ave=0.0, a10;for(i=0;i10;i+)scanf(%f, &ai);for(i=0;i10;i+)ave+=ai;printf(.4fn,ave/10.0);.編程序輸入50個學(xué)生的學(xué)號、姓名、3門課程的成績存入一個結(jié)構(gòu)型的數(shù)組。統(tǒng)計每 個學(xué)生的總分并輸出學(xué)生的學(xué)號、姓名、總分。【解析】首先要設(shè)計一個結(jié)構(gòu)型,其成員包括學(xué)號(長整型)、姓名(字符數(shù)組)、3個成績 (實(shí)型或?qū)嵭蛿?shù)組)、總分(實(shí)型)。定義長度為50的這種結(jié)構(gòu)型數(shù)組。用單重50次的次數(shù)型循 環(huán)輸出50個學(xué)生的信息。再用次數(shù)為50的單重循環(huán)依次求出每個學(xué)生的總分(等于3科成績 之和)存入成員總分中。最后仍然用50次的單重循環(huán)輸出50個學(xué)生的學(xué)號、姓名和總分。【參考答案】main() struct long num;char name20;float score1;float score2;float score3;float total; stu50;int i;float x1,x2,x3for(i=0;i50;i+) scanf(,%s,&stui.num,stu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44639.6-2024軌道交通列車電能測量系統(tǒng)第6部分:計費(fèi)以外的要求
- 2024年度云南省高校教師資格證之高等教育法規(guī)押題練習(xí)試卷B卷附答案
- 2024年度內(nèi)蒙古自治區(qū)高校教師資格證之高校教師職業(yè)道德??碱A(yù)測題庫(奪冠系列)
- 低空經(jīng)濟(jì)產(chǎn)業(yè)園實(shí)施步驟
- 低空經(jīng)濟(jì)公司運(yùn)營管理方案
- 贛南師范大學(xué)《雕塑基礎(chǔ)》2021-2022學(xué)年第一學(xué)期期末試卷
- 阜陽師范大學(xué)《體育教師語言表達(dá)》2021-2022學(xué)年第一學(xué)期期末試卷
- 阜陽師范大學(xué)《公共設(shè)施設(shè)計》2022-2023學(xué)年第一學(xué)期期末試卷
- 福建師范大學(xué)協(xié)和學(xué)院《國際公法》2021-2022學(xué)年第一學(xué)期期末試卷
- 專題75 實(shí)驗(yàn)六:描繪小燈泡的伏安特性曲線(含答案)-十年(2014-2023)高考物理真題分項匯編(全用)
- 電商客服培訓(xùn)通用課件
- 3年級道德與法治大家的“朋友”【省一等獎】
- 鋁鎂錳屋面板施工方案
- 低鉀血癥的護(hù)理
- 顏料的微觀結(jié)構(gòu)與性能的調(diào)控
- 房屋建筑白蟻防治措施
- 成都雙流國際機(jī)場課件
- 房產(chǎn)區(qū)塊鏈智能合約研究
- 中小學(xué)安全形勢分析報告
- 物業(yè)服務(wù)收支情況公示
- 人工智能人才培養(yǎng)的智能醫(yī)學(xué)與健康大數(shù)據(jù)分析技術(shù)
評論
0/150
提交評論