华南俳烁实业有限公司

自考

各地資訊
當(dāng)前位置:華課網(wǎng)校 >> 自考 >> 模擬試題 >> 工學(xué)類 >> C語(yǔ)言程序設(shè)計(jì) >> 文章內(nèi)容

排行熱點(diǎn)

  • 歷年真題
  • 模擬試題
  • 自考自答

自學(xué)考試《C語(yǔ)言程序設(shè)計(jì)》練習(xí)題及答案_第5頁(yè)

來(lái)源:華課網(wǎng)校  [2017年1月31日]  【

  【程序填空題參考答案】

  【3.1】答案: ① a+b ② a-b ③ a-b

  【3.2】答案:① 1.0/(float)(i*i) ② sqrt(6*s)

  【3.3】答案:① *k=p

  【3.4】答案:① t=t*i ② t=t>0?-1:1

  【3.5】答案:① d=1 ② k++ ③ k<=n

  【3.6】答案: ① x>=0 ② x

  【3.7】答案: ① 2 ② 2

  【3.8】答案:① m=n ② m>0 ③ m=m/10

  【3.9】答案:① i==j ② k!=i&&k!=j

  【3.10】答案:① i<=9 ② j%3!=0

  【3.11】答案:① m=n ② r!=0 ③ return(n)

  【3.12】答案:① float a[10],x ② i<=9 ③ i<=8 ④ j<=9-i

 、 a[j]>a[j+1] ⑥ a[j]=a[j+1] ⑦ i<=9 ⑧i%5==0

  【3.13】答案:① &a[i] ② continue

  注釋:①是基本概念,使用scanf函數(shù)輸入數(shù)組元素的值。當(dāng)輸入的元素值小于0時(shí),應(yīng)當(dāng)跳過(guò)后面的語(yǔ)句,取下一個(gè)數(shù),所以②要填入continue。

  【3.14】答案:① s[j++]=s[i] ② s[j]=s[i]

  【3.15】答案:① s[j++]=s[i]

  【3.16】答案:① x[i++]

  【3.17】答案:① i=strlen(a);i>=j;i-- ② a[i+1]=a[i]

  【3.18】答案:① '\0' ② str1[i]-str2[i]

  【3.19】答案:① j++ ② '\\' ③ j++ ④ '\\' ⑤ j++ ⑥ '\0'

  【3.20】答案:① t[k]!= '\0' ② t[k]== '\0'

  【3.21】答案:① <=n ② s ③ 0 ④ fun(k)

  【3.22】答案:① a[fmax(a,N)] ② k=p

  【3.23】答案:① last*n%1000 ② x!=min-x ③ flag=0

  【3.24】答案:① (x0+a/x0)/2 ② a,x1

  注釋:根據(jù)迭代公式,①處應(yīng)當(dāng)是計(jì)算迭代值x1=(x0+a/x0)/2。按照求平方根的要求,當(dāng)?shù)木炔荒軡M足"(fabs(x1-x0)>0.00001)"時(shí),則要繼續(xù)迭代,因此②處應(yīng)當(dāng)填寫(xiě)"a,x1"。程序中調(diào)用了求絕對(duì)值的庫(kù)函數(shù)fabs( )。

  【3.25】答案:① 2+age(n-1) ② age(5)

  注釋:由于程序是遞歸算法,因此首先要建立問(wèn)題的遞歸數(shù)學(xué)模型。根據(jù)原題的描述可以寫(xiě)出如下遞歸公式:

  age(n) = 10 (n=1)

  age(n) = 2+age(n-1) (n>1)

  對(duì)照程序和遞歸公式可以看出:n的含義是第n位學(xué)生。很顯然,要求第5位學(xué)生的年齡,②處應(yīng)當(dāng)是調(diào)用函數(shù)age,實(shí)參的值應(yīng)當(dāng)是5。在①處應(yīng)該是函數(shù)的遞歸調(diào)用,根據(jù)遞歸公式,應(yīng)當(dāng)填寫(xiě):2+age(n-1)。

  【3.26】答案:① return(1) ② return (sum(n-1)+n)

  注釋:按照常規(guī)的編程方法,此問(wèn)題可采用一個(gè)循環(huán)語(yǔ)句實(shí)現(xiàn)。閱讀程序,沒(méi)有發(fā)現(xiàn)循環(huán)語(yǔ)句,這時(shí),應(yīng)當(dāng)認(rèn)為原來(lái)的編程者使用的是非常規(guī)的算法。對(duì)于這樣常規(guī)算法需要用循環(huán)實(shí)現(xiàn)而沒(méi)有使用循環(huán)的程序,就可以肯定地認(rèn)為,一定是使用了遞歸算法。

  將問(wèn)題"求1~n的累加和"的公式寫(xiě)成遞歸定義,可以是如下形式;

  sum(n)=1 當(dāng)n=1時(shí)

  sum(n)=sun(n-1)+n 當(dāng)n>1時(shí)

  根據(jù)此遞歸定義,可以很容易完成程序。

  【3.27】答案:① return(1) ② n*facto(n-1)

  注釋:我們熟悉的求n!的算法一般是采用循環(huán)語(yǔ)句實(shí)現(xiàn),但在此程序中根本沒(méi)有循環(huán)語(yǔ)句。這時(shí)我們應(yīng)該想到:是采用遞歸算法實(shí)現(xiàn)的。首先寫(xiě)出求n!的遞歸公式;

  n!=1 當(dāng)n=1時(shí)

  n!=n*(n-1) 當(dāng)n>1時(shí)

  根據(jù)此遞歸定義,可以很容易完成程序。

  【3.28】答案:① com=n ② com=combin(n-1,m-1) + combin(n-1,m)

  注釋:題目的說(shuō)明中已經(jīng)給出組合問(wèn)題的遞歸定義,不需要讀者自己尋找遞歸表達(dá)式。程序中的語(yǔ)句"if (n<2*m) m=n-m;"完成了題目中敘述的"用公式(1)進(jìn)行簡(jiǎn)化"的工作。

  【3.29】答案:① *str=='\0' ② 1+strlen(str+1)

  注釋:求串長(zhǎng)算法的關(guān)鍵是確定串結(jié)束標(biāo)記'\0'的位置。根據(jù)求串長(zhǎng)的方法,可以得到如下遞歸算法:指針str指向字符串的首字符

  如果 當(dāng)前字符(*str)== 串結(jié)束標(biāo)記'\0'

  則 串長(zhǎng)=0

  否則 串長(zhǎng) = 1+除第一個(gè)字符之外的剩余字符串的串長(zhǎng)

  因此,在①的位置上應(yīng)當(dāng)填寫(xiě)"*str=='\0'",以判斷當(dāng)前字符(*str)是否是串結(jié)束標(biāo)記'\0'。在②的位置應(yīng)當(dāng)是根據(jù)上面的遞歸算法進(jìn)行遞歸調(diào)用,因此應(yīng)當(dāng)填寫(xiě)"1+strlen(str+1)"。

  【3.30】答案:① &n ② m%10 ③ m/10 ④ m>0 ⑤ r(m)

  【3.31】答案:① prt(c, n-1) ② prt(' ' , n-i) ③ prt('*', i)

  注釋:函數(shù)prt的功能是輸出n個(gè)字符c。

  【3.32】答案:① y(x, n-1)

  注釋:這顯然是一個(gè)遞歸問(wèn)題,首先要對(duì)原來(lái)的數(shù)學(xué)函數(shù)定義形式進(jìn)行變形,推導(dǎo)出原來(lái)函數(shù)的等價(jià)遞歸定義?梢酝茖(dǎo)出原來(lái)函數(shù)的遞歸定義如下。

  y(x,n)=x 當(dāng)n=0時(shí)

  y(x,n)=sqrt(x+y(x,n-1)) 當(dāng)n>0時(shí)

  【3.33】答案:① p-- ② *p='\0' ③ *p=c ④ p-- ⑤ *s++

  注釋:在遞歸算法中,指針s指向字符串首部要反向的字符,即要將指針s所指向的字符與指針p 所指向的字符串尾的字符('\0')進(jìn)行交換,在交換過(guò)程中,將尚沒(méi)有交換的字符串的中間部分作為一個(gè)整體,進(jìn)行遞歸處理。程序中首先執(zhí)行"c=*s",將首字符存入臨時(shí)變量;然后執(zhí)行"*s=*p",將尾字符存入串首;執(zhí)行"revstr(s+1)"是遞歸處理串的中間部分,這時(shí),在②處應(yīng)當(dāng)填入"*p='\0'",即存入串結(jié)束標(biāo)記。這是這一程序中的關(guān)鍵所在。在③處要完成將存在臨時(shí)變量c中的字符存入串尾的工作,應(yīng)當(dāng)填寫(xiě)"*p=c"。

  【3.34】答案:① str+1 ② return ①改為 n-2

  【3.35】答案:① p>=q ② max=s ③ p,max

 、 p+1,q ⑤ &array[0], &array[9]

  注釋:本程序中的排序部分采用的是遞歸算法。函數(shù)sort的兩個(gè)形參的含義是:對(duì)指針p和指針q之間的數(shù)據(jù)進(jìn)行排序。由語(yǔ)句"for( s=p+1; s<=q; s++)"中指針p和指針q之間的關(guān)系可以得出:指針p不應(yīng)在指針q之后,因此①處應(yīng)填"p>=q"、⑤處應(yīng)填"&array[0],&array[9]"。

  由于變量max是指向當(dāng)前最大值的指針,則當(dāng)找到新的最大值時(shí),max中保存的應(yīng)該是新的最大值的指針,因此②處應(yīng)填"max=s"。

  當(dāng)調(diào)用函數(shù)swap交換兩個(gè)變量值的時(shí)候,要求實(shí)參是變量的地址,因此,③處應(yīng)填"p,max"將最大值存入指針p所指的單元。

  由于問(wèn)題的要求是"從大到小"排序,通過(guò)執(zhí)行一次函數(shù)sort使最大值已經(jīng)放到了指針p所指的單元中,因此,下一遍排序的時(shí)候,只要對(duì)指針p之后的元素進(jìn)行即可,所以④處應(yīng)填"p+1,q"。

  【3.36】答案:① a+1 ② n%10+'0'

  【3.37】答案:① s

  【3.38】答案;①*(p+4*i+j)

  注釋:p是一個(gè)一級(jí)指針,賦值后保存二維數(shù)組a的首地址,做加法運(yùn)算加1時(shí),實(shí)際地址增加一個(gè)它所指向的數(shù)據(jù)類型的長(zhǎng)度。在C語(yǔ)言中,多維數(shù)組在計(jì)算機(jī)中是按行存儲(chǔ)的,所以在本題中要通過(guò)指針訪問(wèn)二維數(shù)組中的數(shù)據(jù),必須將二維下標(biāo)轉(zhuǎn)換為一維下標(biāo)。

  【3.39】答案:① '\0' 或 0 ② ++

  注釋:在C語(yǔ)言中,進(jìn)行字符串處理時(shí),必須注意串結(jié)束標(biāo)記'\0',它是在進(jìn)行串處理時(shí)的最基本的要求,所以①中要填入'\0'。為了使用putchar輸出一個(gè)字符串,則必須有改變指針的運(yùn)算,這里只能使用++運(yùn)算。

  【3.40】答案:① p++ ② w[i+1]=w[i]

  【3.41】答案:① && ② *a<*b ③ *a++, *b++ ④ ==

 、 != ⑥ '\0' ⑦ w=s ⑧ n++

 、 t=s[i];s[i]=s[j];s[j]=t; ⑩ s3[0]

  【3.42】答案:① *++pa ② *++pa ③ *pa

  ④ return(total) ⑤ n<=2 || n>=MAXNUM+1 ⑥ num+n

  【3.43】答案:① stu.name ② &stu.score ③ p->name ④ p->score

  注釋:這是結(jié)構(gòu)中的最基本概念。

  【3.44】答案:① struct student ② strcmp(stu[i].name,str)==0 ③ break

  注釋:程序的主體是一個(gè)二重循環(huán),內(nèi)層for循環(huán)完成查找學(xué)生的工作。①處是進(jìn)行結(jié)構(gòu)數(shù)組說(shuō)明并初始化,按照結(jié)構(gòu)變量說(shuō)明的格式規(guī)定,應(yīng)該填寫(xiě):strcut student。②處為if語(yǔ)句的邏輯條件,應(yīng)當(dāng)是當(dāng)查找到指定的學(xué)生后輸出學(xué)生的情況,因此應(yīng)當(dāng)填寫(xiě):strcmp(stu[i].name,str)==0。③處應(yīng)當(dāng)將控制退出內(nèi)層的for循環(huán),只能選擇break語(yǔ)句。

  【3.45】答案:① p+n ② gets(p->name) ③ p+n

  注釋:本程序是通過(guò)函數(shù)完成對(duì)于結(jié)構(gòu)數(shù)組的輸入和輸出操作。函數(shù)data_in和data_out十分相似,都是通過(guò)結(jié)構(gòu)指針p和結(jié)構(gòu)指針q來(lái)操作結(jié)構(gòu)數(shù)組的元素。由于指針q在兩個(gè)函數(shù)中的作用相同,所以①和③填寫(xiě)的內(nèi)容也應(yīng)該是相同的;由for語(yǔ)句中的循環(huán)終止條件"pname)。

  【3.46】答案:① j=i-1 ② > ③ j-- ④ j+1 ⑤ j+1

  注釋:程序的基本思想是:對(duì)于輸入的第i個(gè)整數(shù)num,從數(shù)組array中已有的元素中倒序開(kāi)始查找。若數(shù)組array中的第j個(gè)元素的值大于num,則將數(shù)組中的元素j向后移動(dòng)一個(gè)位置;否則,就應(yīng)將num插入到當(dāng)前位置作為元素j。因此,程序的基本設(shè)計(jì)思想就是插入排序。

  程序中內(nèi)層的for循環(huán)完成查找插入位置的工作,因此答案①、②和③有密切的關(guān)系,要統(tǒng)一考慮。同樣,程序中的答案④和⑤也有密切的關(guān)系,要統(tǒng)一考慮。

  【3.47】答案:① != '\n' ② p=top

  【3.48】答案:① p1->next

  【3.49】答案:① head ② p ③ p=head

  注釋:程序在從鍵盤接受字符的同時(shí)就在建立起鏈表,所建立的鏈表本身就已經(jīng)是反序排列的,因此在反序輸出字符串的時(shí)候?qū)嶋H只需沿著鏈表的第一個(gè)結(jié)點(diǎn)開(kāi)始,順序操作即可。

  【3.50】答案:① return ② (struct data *) malloc(sizeof(struct data))

 、 input( ) ④ p!=NULL ⑤ p=p->next

  【3.51】答案:① (struct student *) ② tail=tail->next ③ head

  注釋:①malloc函數(shù)的作用是在內(nèi)存開(kāi)辟指定字節(jié)數(shù)的存儲(chǔ)空間,并將此存儲(chǔ)空間的地址返回賦給尾指針tail,但是此地址為void型,應(yīng)將其強(qiáng)制轉(zhuǎn)換為所要求的結(jié)構(gòu)指針類型。

 、谛麻_(kāi)辟的結(jié)點(diǎn)的內(nèi)存地址存于tail所指向的已建立的鏈表的尾結(jié)點(diǎn)的結(jié)構(gòu)成員next,新結(jié)點(diǎn)連入鏈表以后,尾指針tail應(yīng)指向新的結(jié)點(diǎn)。

  【3.52】答案:① (struct student *) ② (struct list *) ③ return(head)

  【3.53】答案:① FILE ② !feof(fp)

  注釋:FILE 是文件結(jié)構(gòu)類型名。feof()是測(cè)試文件結(jié)束標(biāo)志的函數(shù)。

  【3.54】答案:① "second.txt" ② fclose(fp)

  【3.55】答案:① 3 ② !feof(f1)或feof(f1)==0 ③ f2 ④ fclose(f2) ⑤ fclose(f1)

  注釋:程序中使用了帶參數(shù)的main函數(shù),其中整型參數(shù)argc為命令行中字符串的個(gè)數(shù),此程序運(yùn)行時(shí)輸入的字符串有可運(yùn)行程序名、文件1和文件2,故argc不應(yīng)小于3。字符串指針argv[0]指向可運(yùn)行程序名、字符串指針argv[1]指向輸入文件名、字符串指針argv[2]指向輸出文件名,由上所述②處給出循環(huán)條件是輸入文件是否結(jié)束,③處需要填出輸出文件名。最后兩處是關(guān)閉兩個(gè)文件,原則上關(guān)閉文件沒(méi)有順序要求,但習(xí)慣上是后打開(kāi)的文件先關(guān)閉。

  【3.56】答案:① *argv[1] ② (*funcp)(n) ③ s+=i

  注釋:程序執(zhí)行時(shí)輸入的命令及參數(shù)的個(gè)數(shù)(操作系統(tǒng)規(guī)定用空格表示字符串的分隔)由系統(tǒng)賦給主函數(shù)的形數(shù)argc,輸入的命令和參數(shù)以字符串的格式保存,字符串的首地址分別賦給指針數(shù)組argv的各個(gè)元素,其中argv[1]是'+'或'-',分別表示累加或階乘。程序根據(jù)argv[1]所指向的字符串的內(nèi)容給指向函數(shù)的指針變量funcp賦值。②處要求的語(yǔ)句是根據(jù)指向函數(shù)的指針變量的內(nèi)容對(duì)相應(yīng)的函數(shù)實(shí)現(xiàn)調(diào)用,所以選擇A或B是錯(cuò)誤的;據(jù)funcp是被調(diào)函數(shù)的地址,*funcp實(shí)現(xiàn)了對(duì)函數(shù)的調(diào)用,根運(yùn)算符的結(jié)合性,(*funcp)表示取funcp的目標(biāo),而*funcp(n)則funcp先和(n)結(jié)合,funcp就被解釋為函數(shù)名,顯然是錯(cuò)誤的。

  【3.57】答案:① "w" ② -32 ③ "r"

  【3.58】答案:① "bi.dat" ② &j ③ fp

  【3.59】答案:① fgetc(fp))!=EOF ② &keyword[i].word[0]

 、 s++; q++; ④ *s==*q ⑤ (word=getword(cp))!=NULL

  【3.60】答案:① "a+" ② rewind(fp) ③ !=NULL ④ flag=0 ⑤ ferror(fp)==0

責(zé)編:zhangjing0102
工布江达县| 松溪县| 漳州市| 浠水县| 远安县| 雷波县| 安龙县| 浙江省| 台湾省| 临沧市| 长兴县| 大厂| 筠连县| 衢州市| 新龙县| 临高县| 彭泽县| 岑溪市| 改则县| 竹北市| 额敏县| 西乌| 洛南县| 东丽区| 浑源县| 广汉市| 开远市| 辰溪县| 平江县| 临泉县| 吉林市| 伊宁市| 商水县| 平乐县| 台北县| 长乐市| 井研县| 罗平县| 永德县| 定日县| 剑川县|