freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言程序設(shè)計課后習(xí)題詳細(xì)答案-資料下載頁

2025-06-28 07:58本頁面
  

【正文】 [KG*3]+[KG*3]+)for(j=0。jN。j[KG*3]+[KG*3]+){ rows[i]+[KG*3]=a[i][j]。 cols[i]+[KG*3]=a[j][i]。 }當(dāng)i=0時,rows[i]+[KG*3]=a[i][j]。通過內(nèi)循環(huán)控制變量j從0到N1的變化,把下標(biāo)為0行上的每一個元素的值累加,放入rows所指的、下標(biāo)為0的數(shù)組元素中;而cols[i]+[KG*3] =a[j][i]。 通過內(nèi)循環(huán)控制變量j從0到N1的變化,把下標(biāo)為0列上的每一個元素的值累加,放入cols所指的、下標(biāo)為0的數(shù)組元素中。其他依次類推。因為進行累加運算,注意要給每個一維數(shù)組置初值0。(5) 在diagsum函數(shù)中,通過一個for循環(huán)來求得兩對角線上元素之和:for(i=0。iN。i[KG*3]+[KG*3]+){ dg1+[KG*3]=a[i][i]。 dg2+[KG*3]=a[i][Ni1]。 }在主對角線上的元素行下標(biāo)和列下標(biāo)相同。而在從右到左對角線上的元素,行下標(biāo)從0變化到N1;對于列下標(biāo),當(dāng)行下標(biāo)為0時,列下標(biāo)為Ni1,當(dāng)行下標(biāo)為1時,列下標(biāo)也可用表達(dá)式Ni1求得,其他依此類推。(6) 。(7) 總結(jié):對二維數(shù)組的操作,一般可利用一個雙重循環(huán)來進行。本題雖然有多個任務(wù),但可用函數(shù),每個函數(shù)完成一個任務(wù),每個函數(shù)都很簡單,且都很容易讀懂;一定要避免把所有的任務(wù)混在一起?!痉治雠c解答】(1) 要進行相加的兩個矩陣(假定為a和b)的行數(shù)應(yīng)當(dāng)相等,列數(shù)應(yīng)當(dāng)相等。兩個矩陣相加就是把兩個矩陣中下標(biāo)相同的兩個元素相加,相加的和值放在第三個矩陣(假定為c)、相同下標(biāo)的元素中。即:c[i][j]=a[i][j]+b[i][j]。(2) 可以定義一個函數(shù)getms(),利用rand()函數(shù)給兩個矩陣賦值。(3) 定義addm函數(shù),對兩個矩陣相加:void addm(int (*a)[M], int (*b)[M], int (*[KG*3]c)[M])這里a、b、c是行指針,分別指向三個二維數(shù)組(N行M列),要求這三個數(shù)組的行和列數(shù)相同。和值放在c所指數(shù)組中。矩陣相加的操作放在一個雙重循環(huán)中:for(i=0。iN。i[KG*3]+[KG*3]+)for(j=0。jM。j[KG*3]+[KG*3]+)c[i][j]=a[i][j]+b[i][j]。(4) 定義output函數(shù)用以輸出矩陣:void output(int (*a)[M])用雙重循環(huán)來實現(xiàn)for(i=0。 iN。i[KG*3]+[KG*3]+){ for(j=0。jM。j[KG*3]+[KG*3]+) printf(″%4d″,a[i][j])。printf(″\[KG*3]n″)。}可調(diào)用三次分別輸出a、b、c三個矩陣。(5) 請在主函數(shù)中定義數(shù)組和所需的變量。調(diào)用getms函數(shù)得到原始數(shù)據(jù),調(diào)用addm函數(shù)實現(xiàn)矩陣相加,調(diào)用輸出函數(shù)輸出三個矩陣?!痉治雠c解答】(1) 為了輸出以上表格,需要定義一個99的二維數(shù)組。在其中存入九九表中的數(shù)據(jù)。(2) 定義函數(shù)gettab,在二維數(shù)組中存入九九表中的數(shù)據(jù):void gettab( int a[][N] )形參a是一個指向99二維數(shù)組的行指針。(3) 在gettab函數(shù)中,可用以下for循環(huán)把九九表中的數(shù)據(jù)放入數(shù)組中:for(i=0。iN。i[KG*3]+[KG*3]+)for(j=0。jN。j[KG*3]+[KG*3]+) a[i][j]=(i+1)*(j+1)。(4) 請讀者參照前面的習(xí)題,設(shè)計output函數(shù),輸出九九表。表格的第二行:(1) (2) (3) (4) (5) (6) (7) (8) (9)可用以下語句輸出:for(i=1。i[KG*3]=9。i[KG*3]+[KG*3]+) printf(″(%d) ″,i)。printf(″\[KG*3]n″)。在二維數(shù)組每一行輸出前(即內(nèi)循環(huán)之前)加語句:printf(″(%d)″,i+1)。就可得到每一行最前面的(1) 、(2)、…、(9)。(5) 輸出的格式不可能在第一次調(diào)試時就合適,一般需運行幾次進行調(diào)整。(6) 請讀者自己完成主函數(shù),定義所需的數(shù)組和變量,調(diào)用以上的函數(shù)。(7) 總結(jié):本題的算法很簡單,只包含給二維數(shù)組的賦值和表格的輸出,對于表格的格式,可以通過對程序的運行,逐步進行調(diào)整。【分析與解答】(1) 假定程序定義了M行N列的二維數(shù)組??捎胐efine命令行定義N和M來分別代表兩個常量()。(2) 程序的功能可由幾個獨立的函數(shù)來實現(xiàn)。① void getm( int (*[KG*3]p)[N] )形參p是一個行指針,指向MN的數(shù)組首地址。getm函數(shù)的功能是通過調(diào)用rand函數(shù)給二維數(shù)組賦值。② void suml(int a[][N],int *rows)形參a是一個行指針,指向MN的數(shù)組首地址,指針rows指向一個一維數(shù)組,在此數(shù)組元素中將存放每行元素之和。suml函數(shù)的功能是求出a所指二維數(shù)組中每一行元素之和并依次放在rows所指數(shù)組中。③ int getmax(int *rows)形參指針rows指向存放每行元素之和的一維數(shù)組,在此函數(shù)中將求出最大值所在的下標(biāo)作為函數(shù)值返回。④ void change(int a[][N],int k)形參行指針a,指向MN的數(shù)組首地址,k接受一維數(shù)組中最大值所在的下標(biāo)。此函數(shù)的功能是把二維數(shù)組中下標(biāo)為k的那一行、與下標(biāo)為0的行的所有元素進行對調(diào)。對調(diào)可用一個for循環(huán)來實現(xiàn):for(i=0。iN。i[KG*3]+[KG*3]+){ t=a[0][i]。 a[0][i]=a[k][i]。 a[k][i]=t。 }⑤ void output( int a[][N] )此函數(shù)的功能是輸出a所指的二維數(shù)組??稍跀?shù)組改變前后分別調(diào)用它,以判斷程序的操作是否正確。(4) 請在主函數(shù)中定義所需的數(shù)據(jù)結(jié)構(gòu):如數(shù)組、變量,并調(diào)用各函數(shù)。(5) 總結(jié):交換數(shù)據(jù)的算法應(yīng)當(dāng)已很熟悉,本題只是交換兩行中的數(shù)據(jù),這時被交換的兩個元素的行下標(biāo)不同,而列下標(biāo)相同。讀者不妨對兩列中的數(shù)據(jù)進行交換。本題中,除對二維數(shù)組中的兩行進行對調(diào)外,其他的算法在此之前都已介紹過,由此可知,應(yīng)當(dāng)積累一些基本的算法知識,程序的完成都是由一些基本算法來實現(xiàn)的。【分析與解答】(1) 在定義數(shù)組時應(yīng)該注意,進行逆置操作的矩陣必須是一個方陣,行、列數(shù)相同。(2) 在本題中給二維數(shù)組置數(shù)以及對二維數(shù)組進行輸出,在此不再重復(fù)。(3) 對矩陣進行逆置的操作可由以下函數(shù)完成:void transpose(int p[][N])形參p指向一個二維數(shù)組。逆置的過程可由雙重循環(huán)來完成:for(i=0。iN。i[KG*3]+[KG*3]+)for(j=0。ji。j[KG*3]+[KG*3]+){ t=p[i][j]。p[i][j]=p[j][i]。p[j][i]=t。 }內(nèi)循環(huán)的控制變量j的變化范圍從0到i,以對角線為界,把對稱位置上的元素值進行對調(diào)。(4) 請編寫主函數(shù),定義所需的數(shù)據(jù)結(jié)構(gòu),并調(diào)用函數(shù)來實現(xiàn)規(guī)定的操作。(5) 總結(jié):本題主要的算法也是交換算法,關(guān)鍵是需要正確確定交換的范圍。第十章 字符串習(xí)題分析與解答一、選擇題 【參考答案】 B) 【參考答案】 B) 【參考答案】 C) 【參考答案】 B) 【參考答案】 C) 【參考答案】 A) 【參考答案】 D) 【參考答案】 A) 【參考答案】 C)【參考答案】 C)二、填空題【參考答案】 GFEDCB書上(chp)改為(chp)
【參考答案】 XYZA【參考答案】 SO【參考答案】 10【參考答案】 Itis【參考答案】 [1] strlen(str) 1。 [2] j (或 j)【參考答案】 3【參考答案】 goodgood!三、編程題【分析與解答】(1) 已知gets函數(shù)的調(diào)用形式為:gets(str),str是存放所讀入字符串的起始地址,可以是字符數(shù)組名、已指向一串固定存儲單元的字符指針或數(shù)組元素的地址。gets函數(shù)從終端讀入一串字符,直到讀入一個回車換行符為止,字符串中不包括回車換行符,并在最后自動添加39。\039?,F(xiàn)在,在mygets函數(shù)中規(guī)定用getchar函數(shù)進行字符的讀入,在此前,我們已多次使用過此函數(shù),并以回車換行符作為結(jié)束輸入的條件。函數(shù)的首部如下:mygets( char *s )輸入過程如下:while((*s=getchar())!= 39。\n39。) s++。這里把讀入的字符存入s所指的存儲單元中,然后移動s,使它指向下一個存儲單元。最后當(dāng)讀入39。\039。后,結(jié)束輸入;這時,s指向存放39。\n39。的存儲單元,不要忘記在此單元中放入字符串結(jié)束標(biāo)志來替換39。\n39。:*s=0。(2) puts函數(shù)的調(diào)用形式為:puts(str),str是輸出字符串的起始地址。puts函數(shù)輸出從str地址開始的字符串,最后自動輸出一個換行符。myputs函數(shù)的首部如下:myputs(char *s)用以下循環(huán)輸出字符串中的每一個字符直到遇到字符串結(jié)束標(biāo)志:while(*s){ putchar(*s)。 s+[KG*3]+。 }當(dāng)s所指存儲單元中是字符串結(jié)束標(biāo)志時退出循環(huán),然后輸出一個換行符:putchar(39。\0[KG*3]n39。)。(3) 請編寫主函數(shù)分別調(diào)用這兩個函數(shù),并分別與gets和puts函數(shù)比較。(4) 總結(jié):在mygets函數(shù)中利用while循環(huán)輸入字符的操作在第六章中已多次用到,應(yīng)當(dāng)已經(jīng)熟練掌握;而在myputs函數(shù)中利用指針的移動來輸出所指存儲單元的數(shù)據(jù)也是應(yīng)熟練掌握的算法?!痉治雠c解答】(1) 函數(shù)首部如下:int fun( char *s)字符指針形參s指向待查字符串。(2) 定義變量i和j,使其初值分別為0和最后一個字符所在的下標(biāo),j的值可通過庫函數(shù)求得:i=0。 j=strlen(s)1。(3) 利用循環(huán),通過i++和j ,使i和j不斷分別向后和向前移動,以便引用對稱的元素進行比較,若s[i]等于s[j],則當(dāng)前符合回文條件,i和j的移動繼續(xù),否則退出循環(huán);當(dāng)i大于等于j時,說明對稱位置中的字符都已經(jīng)比較過且符合回文條件,因此也應(yīng)退出循環(huán):while(ij amp。amp。 s[i]==s[j]){ i[++。j。 }(4) 若因i大于等于j退出循環(huán),則說明是回文,返回1;反之返回0:if(ij)return 0。else return 1。(5) 請編寫主函數(shù),定義所需數(shù)據(jù)結(jié)構(gòu),輸入不同字符串,調(diào)用函數(shù)并輸出函數(shù)值,以判斷函數(shù)是否正確。(6) 總結(jié):本題的算法與逆置算法相似,只是沒有對應(yīng)位置中數(shù)據(jù)的移動,而是進行比較?!痉治雠c解答】(1) 。(2) 若函數(shù)名為delc,則函數(shù)首部可寫成:char delc(char *s, int pos)因為刪除成功要求返回被刪的字符,因此函數(shù)值的類型應(yīng)是char。形參字符指針s指向被刪字符串的開始,形參pos存放指定的刪除位置,注意被刪字符的下標(biāo)就是pos1。(3) 刪除操作實際上是從指定位置開始把字符串中的字符逐個前移,直到遇到字符串結(jié)束標(biāo)志。這一過程可用for循環(huán)來完成。先把下標(biāo)為pos中的字符前移到下標(biāo)為pos1的元素中,其他依次前移:for(i=pos。 s[i] 。i[KG*3]+[KG*3]+) s[i1]=s[i]。退出循環(huán)時s[i]中已是字符串結(jié)束標(biāo)志,不要忘記:s[i1]=s[i]。使結(jié)束標(biāo)志也向前移一位。(4) 在進行刪除操作前,需要檢查指定刪除位置pos的值是否合理,若不合理就立即返回空值:if(posstrlen(s)||pos[KG*3]=0)return 0。(5) 在刪除操作前,應(yīng)該紀(jì)錄下被刪的那個字符,以便作為函數(shù)值返回:c=s[pos1]。(6) 請編寫主函數(shù),定義所需的數(shù)組和變量,輸入字符串和輸入刪除的位置,調(diào)用函數(shù)后輸出刪除后的字符串,并對各種情況進行測試,以檢查程序是否正確。(7) 總結(jié):刪除算法是程序設(shè)計中的基本算法,雖然,在細(xì)節(jié)的要求上可能有所不同,例如對于一維數(shù)組中的數(shù)據(jù),需要變動數(shù)據(jù)的個數(shù),而字符串則要求重新設(shè)置字符串結(jié)束標(biāo)志?!痉治雠c解答】(1) 若函數(shù)名為dels,函數(shù)首部如下:void dels( char *s )形參s是一個指向字符串的指針變量。(2) 函數(shù)中先完成刪除字符串中最后的所有空格。這只要在最后一個非空格字符的后面加上字符串結(jié)束標(biāo)志(′\0′),就使得最后所有的空格都被刪除了。但完成這一操作需要通過三個步驟:第一,找到字符串的最后一個空格的位置;第二,往回找到字符串的最后一個非空格的位置;第三,在最后一個非空格的位置的后面加上字符串結(jié)束標(biāo)志。① 找到字符串的最后一個空格的位置可用以下語句來完成,函數(shù)中另定義一個指針變量p,并把s的值賦給它,使它指向字符串的開始。以下while循環(huán)和語句使p指向最后的一個字符(′\0′的前面)。while(*p) p++。p。也可以調(diào)用求字符串長度的庫函數(shù):p=s+strlen(s)1。 使p指向最后的一個字符。② 往回找到字符串的最后一個非空格的位置可用以下語句來完成:while(*p==′ ′) p。以上while循環(huán)中,只要p所指存儲單元中是空格,就使p移動指向前一個字符,當(dāng)p所指存儲單元中不是空格時立刻退出循環(huán);這時p指向字符串中最后一個非
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1