首頁 - 網(wǎng)校 - 題庫 - 直播 - 雄鷹 - 團(tuán)購 - 書城 - ? - 學(xué)習(xí)通 - 導(dǎo)航 - 510 -
首頁考試吧網(wǎng)校題庫直播雄鷹510團(tuán)購書城?論壇實(shí)用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓(xùn)
專升本
自學(xué)考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點(diǎn)日語
職稱英語
口譯筆譯
申碩英語
零起點(diǎn)韓語
商務(wù)英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點(diǎn)英語
托福考試
托業(yè)考試
零起點(diǎn)法語
雅思考試
成人英語三級
零起點(diǎn)德語
等級考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會(huì)工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國際商務(wù)
心理咨詢
營 銷 師
司法考試
國際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會(huì)計(jì)職稱
法律顧問
ACCA考試
注冊會(huì)計(jì)師
資產(chǎn)評估師
高級經(jīng)濟(jì)師
審計(jì)師考試
高級會(huì)計(jì)師
注冊稅務(wù)師
國際內(nèi)審師
理財(cái)規(guī)劃師
美國注冊會(huì)計(jì)師
一級建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
注冊給排水
造價(jià)員考試
注冊計(jì)量師
環(huán)保工程師
化工工程師
暖通工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
消防工程師
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評價(jià)師
土地登記代理人
寶寶起名
繽紛校園
實(shí)用文檔
入黨申請
英語學(xué)習(xí)
思想?yún)R報(bào)
作文大全
工作總結(jié)
求職招聘 論文下載 直播課堂
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 模擬試題 > 程序員 > 正文

2014下半年軟考程序員考前最后沖刺題及答案解析(5)

考試吧整理“2014下半年軟考程序員考前最后沖刺題及答案解析(5)”供考生參考,更多2014年軟考備考資料請關(guān)注考試吧軟件水平考試網(wǎng)。

  二、程序分析

  1.main()

  { char str[]="1234567";

  int i;

  for(j=0;i<7;i十=3)

  printf("%s\n",str+i);

 。

  【解析】分析份循環(huán)語句可知,控制變量 i的值只能依次等于0、3、6。再分析輸出語句中的輸出格式,這是字符串格式,要求輸出表達(dá)式是存放字符串的首地址。而輸出表達(dá)式是“str+i”。我們針對i不同值來-一分析:i=0,str+0就是str,其中存放的字符串是“1234567”,所以第1行上的輸出就是:1234567。當(dāng) i=3時(shí),str+3,代表了數(shù)組元素str[3]的地址,從這兒開始的字符率串是“4567”,所以第2行輸出的是:4567。同樣道理,i=6時(shí), str+6是元素str[6]的地址,從該地址存放的字符率是"7",所以第3行輸出的是:7。

  【參考答案】 1234567

  4567

  7

  2.struct a{ char name[10];

  int age;

 。齛a[3]={{"abc",20},{"def",21},{"ghi",22}};

  main()

  { struct a *paa=aa;

  printf("%c%c%c",(*(paa+1)).name[0]

  (*paa++).name[1]

  (*(paa+1)).name[2]);

 。

  【解析】本程序并不復(fù)雜,關(guān)鍵在于如何使用指向結(jié)構(gòu)型數(shù)組的指針變量來引用該數(shù)組元素,以及如何引用結(jié)構(gòu)型成員是數(shù)組的數(shù)組元素。

  首先看結(jié)構(gòu)型a及對應(yīng)數(shù)組aa的定義和賦予的初值。

  結(jié)構(gòu)型a共有兩個(gè)成員,一個(gè)是字符型數(shù)組name,另一個(gè)是整型age。

  結(jié)構(gòu)型數(shù)組aa有3個(gè)元素,所賦予的初值如下:

  aa[0].name="abc" aa[0].age=20

  aa[1].name="def" aa[1].age=21

  aa[2].name="ghi" aa[2].age=22

  主函數(shù)中的第1個(gè)語句是定義結(jié)構(gòu)型指針變量paa,并且使它指向結(jié)構(gòu)型數(shù)組aa的首地址。注意,此后的*paa就是aa[0],*(paa+i)就是aa[i]。

  現(xiàn)在可以分析輸出語句了。輸出格式是3個(gè)字符格式,按照printf()函數(shù)的規(guī)定,表達(dá)式表中表達(dá)式計(jì)算順序是自右向左進(jìn)行的,下面依次討論這3個(gè)字符格式對應(yīng)的輸出表達(dá)式。

  第3個(gè)輸出表達(dá)式是“(*(paa十1)).name[2]",其中的“*(paa+1)”代表“aa[1]”,所以該表達(dá)式就是“aa[1].name[2]”,對應(yīng)的字符是'f'。

  第 2個(gè)輸出表達(dá)式是"(*paa++).name[1]”,其中“*ppa++”的“*”和“++”是同級運(yùn)算符,結(jié)合性是自右向左的,所以“++”先計(jì)算,由于是后綴,所以要先計(jì)算“*paa”,它代表“aa[0]”,所以該表達(dá)式就是“aa[0].name[1]”,對應(yīng)的字符是'b'。注意,最后要對paa進(jìn)行“++”運(yùn)算,使其指向aa[1]。

  第 1個(gè)輸出表達(dá)式是“(*(paa+1)).name[0]”,注意現(xiàn)在的paa以及指向aa[1]了,所以其中的“*(paa+1)”代表“aa[2]”,所以該表達(dá)式就是“aa[2].name[0]”,對應(yīng)的字符是'g'。

  現(xiàn)在可以得出結(jié)論:程序的輸出是 3個(gè)字符:gbf

  【參考答案】gbf

  3.main()

  { int x1,x2,x3,x4;

  x1=x2=x3=x4=1;

  switch(x1)

  { case 1:switch(x2)

  { case 0:x3++;break;

  case 1:x4--;

  }

  case 2:x3++,x4--;

 。

  printf("%d%d",x3,x4);

 。

  【解析】本題的關(guān)鍵是嵌套的多分支語句switch。注意在執(zhí)行switch語句前,變量x1、x2、x3、x4已經(jīng)賦值,他們的值均為1。執(zhí)行外層switch語句時(shí),用于控制分支選擇的變量x1的值為1,所以要執(zhí)行的是“case 1”的分支。該分支又是一個(gè)switch語句,用于控制分支選擇的變量x2的值為1,所以需要執(zhí)行的是“case 1”的分支。該分支執(zhí)行的語句是“x4--”,使得x4的值變?yōu)?。接著退出該分支,即退出內(nèi)層的switch語句。由于外層的switch語句的“case 1”分支中沒有“break”語句,所以將繼續(xù)執(zhí)行其后的“case 2”分支,即執(zhí)行“x3++,x4--;”,結(jié)果x3等于2, x4等于-1。再退出外層switch語句,執(zhí)行輸出語句,此時(shí),變量x3的值為2;變量x4的值為-1。所以輸出結(jié)果是2-1。

  【參考答案】2-1。

  4.conv(b)

  int b;

  { if(b>=2)conv(b/2);

  printf("%d",b%2);

  return;

  }

  main()

  { int d;

  scanf("%d",&d);

  conv(d);

  }

  說明:本程序執(zhí)行時(shí)從鍵盤上輸入:22后跟回車鍵。

  【解析】主函數(shù)中輸入整數(shù)22存入變量d中,然后調(diào)用函數(shù)。conv()。此時(shí)將把實(shí)參d中的22傳遞給形參b。然后再執(zhí)行函數(shù)體,函數(shù)體中前面一條語句是單分支語句,當(dāng)b>=2時(shí)再用“b/2”調(diào)用自己,顯然這是一個(gè)遞歸調(diào)用的函數(shù)。下面我們來詳細(xì)分析遞歸調(diào)用的過程:

  第1次調(diào)用函數(shù)(b=22),滿足條件,引起第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)用時(shí)的輸出語句,輸出結(jié)果為b%2=2%2=0

  執(zhí)行第4次調(diào)用的返回,執(zhí)行第3次調(diào)用時(shí)的輸出語句,輸出結(jié)果為b%2=5%2=1

  執(zhí)行第3次調(diào)用的返回,執(zhí)行第2次調(diào)用時(shí)的輸出語句,輸出結(jié)果為b%2=11%2=1

  執(zhí)行第2次調(diào)用的返回,執(zhí)行第1次調(diào)用時(shí)的輸出語句,輸出結(jié)果為b%2=22%2=0

  執(zhí)行第1次調(diào)用的返回,將返回主函數(shù),結(jié)束程序的運(yùn)行。

  所以程序運(yùn)行的輸出結(jié)果是:10110。

  【參考答案】10110。

  5.void f(p1,p2)

  int *p1,*p2;

  { int i,j;

  *p2=0;

  for(i=0;i<3;i++)

  for(j=i;j<3;j++)

  *p2+=*(pl+i*3+j);

  return;

  }

  main()

  { int a[3][3]={{1,2},{3,4},{5,6}};

  int s;

  f(a,&s);

  printf("%d",s);

 。

  【解析】本程序是由一個(gè)無返回值的函數(shù)f()和主函數(shù)組成的。先看主函數(shù),定義了一個(gè)3行3列的二維數(shù)組a,并且給a賦了初值,初值如下:

  a[0][0]=1 a[0][1]=2 a[0][2]=0

  a[1][0]=3 a[1][1]=4 a[1][2]=0

  a[2][0]=5 a[2][1]=6 a[2][2]=0

  接著調(diào)用無返回值的函數(shù)f(),然后輸出變量s中的值,顯然這個(gè)s中的值是在函數(shù)f()中獲得的。

  接下來分析函數(shù)f()。該函數(shù)有兩個(gè)形參,第1個(gè)形參是指針變量p1,對應(yīng)的實(shí)際參數(shù)是數(shù)組a的首地址,即調(diào)用該函數(shù)后,指針變量p1是指向二維數(shù)組a的首地址。第2個(gè)形參也是指針變量p2,對應(yīng)的實(shí)參是變量s的地址,即函數(shù)調(diào)用后指針變量p2是指向變量s的。再來分析函數(shù)體。前面定義了兩個(gè)變量i和j,從后面的循環(huán)語句中看出是二重循環(huán)的控制變量。接著,通過“*p2=0”,給變量s賦值0。二重for循環(huán)的循環(huán)體是“*p2+=*(p1+i*3+j)”,其中的“*p2”是代表變量s的,“*(p1+i*3+j)”是代表數(shù)組元素a[i][j],這個(gè)賦值語句是把a(bǔ)[i][j]加到變量s中(即求數(shù)組元素的和),F(xiàn)在只要分析清楚二重循環(huán)是對哪些數(shù)組元素進(jìn)行求和的就可以得出變量s的值了。

  下面是對二重循環(huán)的執(zhí)行記錄:

  i=0 j=0 對應(yīng)a[0][0],其值為1

  j=1 對應(yīng)a[0][1],其值為2

  j=2 對應(yīng)a[0][2],其值為0

  i=1 j=1 對應(yīng)a[1][1],其值為4

  j=2 對應(yīng)a[1][2],其值為0

  i=2 j=2 對應(yīng)a[2][2],其值為0

  所以,s=a[0][0]+a[0][l]+a[0][2]+a[1][1]+a[2][2]+a[2][2]= 1+2+0+4+0+0=7。

  【參考答案】7

  6. main()

  { int i,a[5];

  for(i=0;i<<5;i++)

  a[i]=9*(i-2+4*(i>2))%5;

  for(i=4;i>=0;i--)

  printf("=",a[i]);

 。

  【分析】我們可以按照程序中語句執(zhí)行的順序,記錄各個(gè)變量及數(shù)組元素值的方法來解決這種閱讀程序?qū)戇\(yùn)行結(jié)果的問題。首先執(zhí)行第1個(gè)for循環(huán)。

  i=0, i<5的條件成立,執(zhí)行循環(huán)體。

  a[0]=9*(0-2+4*(0>2))%5=9*(-2)%5=-18%5=-3

  i=1,1<5的條件成立,執(zhí)行循環(huán)體。

  a[1]=9*(1-2十4*(1>2))%5=9*(-1)%5=-9%5=-4

  1=2,i<5的條件成立,執(zhí)行循環(huán)體。

  a[2]=9*(2-2十4*(2>2))%5=9*(0)%5=0%5=0

  i=3,i<5的條件成立,執(zhí)行循環(huán)體。

  a[3]=9*(3-2+4*(3>2))%5=9*(5)%5=45%5=0

  1=4,1<5的條件成立,執(zhí)行循環(huán)體。

  a[4]=9*(4-2+4*(4>2))%5=9*(6)%5=54%5=4

  i=5,1<5的條件不成立,退出第1個(gè)for循環(huán)。

  注意,計(jì)算中的“i>2”是關(guān)系運(yùn)算,結(jié)果只能為1或0;“x%5”是模運(yùn)算,結(jié)果是x除5的余數(shù),且余數(shù)的符號和x符號相同。

  再執(zhí)行第2個(gè)for循環(huán)。

  i=4,i>=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a[4]的值,等于4

  i=3,i>=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a[3」的值,等于0

  i=2,1>=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a[2」的位,等于0

  i=1,i>=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a[1]的值,等于-4

  i=0,1>=0的條件成立,執(zhí)行循環(huán)體。輸出數(shù)組元素a[0]的值,等于-3

  i=-1,i>=0的條件不成立,退出第2個(gè)for循環(huán)。

  【參考答案】 4 0 0 -4 -3

  7.main()

  { char s[][6]={”1234”,”56789”},*p[2];

  int i,sum=0;

  p[0]=s[0],p[1]=s[1];

  for(i=0;p[0][i」!=’\0’;i++,i++)

  sum=10*sum+p[0][i]-’0’;

  for(i=1;p[1]「i」!=’\0’;i++,i++)

  sum=10*sum+p[1][i]-’0’;

  printf("%d",sum);

  }

  【解析】本程序的第1條語句是定義2行5列的二維字符型數(shù)組s,并且賦了初值如下:

  s[0][0]='1's[0][1]='2's[0][2]='3's[0][3]='4's[0][4]='\0'

  s[1][0]='5's[1][1]='6's[1][2]='7's[1][3]='8's[1][4]='9'S[1][5]='\0'

  此外還定義了字符型指針數(shù)組p,利用第3條語句賦了值,結(jié)果如下:

  p[0]指向以“s[0][i]”為數(shù)組名的一維數(shù)組首地址,即p[0][i]就相當(dāng)于s[0][i]

  p[1]指向以“s[1][i]”為數(shù)組名的一維數(shù)組首地址,即p[1][i]就相當(dāng)于s[1][i]

  第2條語句定義了整型變量i(用于單重循環(huán)的控制變量)和sum,并對sum清0。

  第4條語句是for循環(huán),控制變量i初值為0,每次加2,控制循環(huán)的條件是“p[0」[i]!='\

  0',注意其中的“p[0][i]”就是“s[0][i]”,這個(gè)控制循環(huán)的條件可以理解為“二維字符型數(shù)組元素s[0][i]不是字符串的結(jié)束標(biāo)記則繼續(xù)循環(huán)”。從控制變量i的取位來看,二維字符型數(shù)組元素只能取s[0][0]、s[0][2],因?yàn)橄乱粋(gè)數(shù)組元素是s[0][4],該元素值是'\0'。再分析循環(huán)體中的語句,其中“ p[0][i]-'0'”是將數(shù)組元素s[0][i]中存放的數(shù)組字符減去'0',結(jié)果將是該數(shù)字字符對應(yīng)的一位整數(shù),整個(gè)語句是將sum變量中的原值乘以10以后再加上當(dāng)前的數(shù)字。循環(huán)結(jié)束后的sum值就是s[0」[0」和s[0][2]中的兩個(gè)數(shù)字組成的2位十進(jìn)制數(shù),結(jié)果為13。

  按照同樣的道理,可以分析出第2個(gè)for循環(huán)作用是完全相同的,它是把s[1」[1」、s[1][3]中的兩個(gè)數(shù)字(前者為6,后者為8)拼接到sum的原值中,結(jié)果sum中值為十進(jìn)制整數(shù)1368。程序的最后一個(gè)語句就是輸出變量sum中的整數(shù)值。

  【參考答案】 1368

  8.int p(m,n)

  int m,n;

  { int i,pp;

  for(i=pp=1;i

  PP*= m;

  return(pp);

 。

  main()

  { printf("%d"、 p(3,4));

  }

  【解析】主函數(shù)中只有一條輸出語句,輸出結(jié)果是函數(shù)調(diào)用“p(3,4)”的返回值。所以本題的關(guān)鍵是函數(shù)p的功能。

  分析函數(shù)p(),有兩個(gè)參數(shù)m、n。函數(shù)體中關(guān)鍵的是for循環(huán)語句。分析這個(gè)循環(huán)語句可以看出,控制變量是i,初值為1;,終值為n,每次循環(huán)i加1。所以是標(biāo)準(zhǔn)的次數(shù)型循環(huán),共計(jì)循環(huán)n次。循環(huán)體中是將參數(shù)m的值乘到變量pp中,變量pp在開始循環(huán)時(shí)已經(jīng)設(shè)置初值為1,所以整個(gè)循環(huán)是將n個(gè)m乘到pp中。顯然循環(huán)語句的功能是計(jì)算m”。而函數(shù)的返回值正是這個(gè)變量pp中的值。

  由此分析可知,函數(shù)調(diào)用“p(3,4)”的返回值就是34。結(jié)果為 81,也就是本程序的輸

  出結(jié)果。

  【參考答案】81

上一頁  1 2 

  相關(guān)推薦:

  2014年軟件水平考試《程序員》考試講義匯總

  2014年軟件水平考試程序員考前練習(xí)題及答案匯總

  2014計(jì)算機(jī)軟考程序員考試全真模擬題及答案匯總

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧軟件水平考試網(wǎng) All Rights Reserved 
中國科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699