亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      自考

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

      排行熱點

      自學考試《C語言程序設(shè)計》練習題及答案_第5頁

      來源:華課網(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ù)組元素的值。當輸入的元素值小于0時,應(yīng)當跳過后面的語句,取下一個數(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)當是計算迭代值x1=(x0+a/x0)/2。按照求平方根的要求,當?shù)木炔荒軡M足"(fabs(x1-x0)>0.00001)"時,則要繼續(xù)迭代,因此②處應(yīng)當填寫"a,x1"。程序中調(diào)用了求絕對值的庫函數(shù)fabs( )。

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

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

        age(n) = 10 (n=1)

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

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

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

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

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

        sum(n)=1 當n=1時

        sum(n)=sun(n-1)+n 當n>1時

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

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

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

        n!=1 當n=1時

        n!=n*(n-1) 當n>1時

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

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

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

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

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

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

        則 串長=0

        否則 串長 = 1+除第一個字符之外的剩余字符串的串長

        因此,在①的位置上應(yīng)當填寫"*str=='\0'",以判斷當前字符(*str)是否是串結(jié)束標記'\0'。在②的位置應(yīng)當是根據(jù)上面的遞歸算法進行遞歸調(diào)用,因此應(yīng)當填寫"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個字符c。

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

        注釋:這顯然是一個遞歸問題,首先要對原來的數(shù)學函數(shù)定義形式進行變形,推導出原來函數(shù)的等價遞歸定義。可以推導出原來函數(shù)的遞歸定義如下。

        y(x,n)=x 當n=0時

        y(x,n)=sqrt(x+y(x,n-1)) 當n>0時

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

        注釋:在遞歸算法中,指針s指向字符串首部要反向的字符,即要將指針s所指向的字符與指針p 所指向的字符串尾的字符('\0')進行交換,在交換過程中,將尚沒有交換的字符串的中間部分作為一個整體,進行遞歸處理。程序中首先執(zhí)行"c=*s",將首字符存入臨時變量;然后執(zhí)行"*s=*p",將尾字符存入串首;執(zhí)行"revstr(s+1)"是遞歸處理串的中間部分,這時,在②處應(yīng)當填入"*p='\0'",即存入串結(jié)束標記。這是這一程序中的關(guān)鍵所在。在③處要完成將存在臨時變量c中的字符存入串尾的工作,應(yīng)當填寫"*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的兩個形參的含義是:對指針p和指針q之間的數(shù)據(jù)進行排序。由語句"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是指向當前最大值的指針,則當找到新的最大值時,max中保存的應(yīng)該是新的最大值的指針,因此②處應(yīng)填"max=s"。

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

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

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

        【3.37】答案:① s

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

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

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

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

        【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

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

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

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

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

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

        程序中內(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

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

        【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)存開辟指定字節(jié)數(shù)的存儲空間,并將此存儲空間的地址返回賦給尾指針tail,但是此地址為void型,應(yīng)將其強制轉(zhuǎn)換為所要求的結(jié)構(gòu)指針類型。

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

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

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

        注釋:FILE 是文件結(jié)構(gòu)類型名。feof()是測試文件結(jié)束標志的函數(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為命令行中字符串的個數(shù),此程序運行時輸入的字符串有可運行程序名、文件1和文件2,故argc不應(yīng)小于3。字符串指針argv[0]指向可運行程序名、字符串指針argv[1]指向輸入文件名、字符串指針argv[2]指向輸出文件名,由上所述②處給出循環(huán)條件是輸入文件是否結(jié)束,③處需要填出輸出文件名。最后兩處是關(guān)閉兩個文件,原則上關(guān)閉文件沒有順序要求,但習慣上是后打開的文件先關(guān)閉。

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

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

        【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

      責編:zhangjing0102