高級語言程序設計 編寫程序題+答案【精選文檔】_第1頁
高級語言程序設計 編寫程序題+答案【精選文檔】_第2頁
高級語言程序設計 編寫程序題+答案【精選文檔】_第3頁
高級語言程序設計 編寫程序題+答案【精選文檔】_第4頁
高級語言程序設計 編寫程序題+答案【精選文檔】_第5頁
已閱讀5頁,還剩76頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 已知銀行整存整取存款不同期限的月息利率分別為:0。315% 期限一年0。330% 期限二年月息利率 0.345 期限三年0。375% 期限五年0。420% 期限八年要求輸入存錢的本金和期限 ,求到期時能從銀行得到的利息與本金的合計。2 輸入年份 year 和月 month,求該月有多少天 .判斷是否為閏年 ,可用如下語言表達式 :year%4=0& year%100 =0 year400=0。若表達式成立(即表達式值為 1,則 year 為閏年;否則 ,表達式不成立(即值為 0),year 為平年。3編寫一個簡單計算器程序, data1 op data2. 其中 data1 和 data2

2、 是參加運算的兩個數 ,op為運算符,它的取值只能是 +、*、/。4 輸入 n 值,輸出如圖所示矩形。5 輸入 n 值,輸出如圖所示平行四邊形。6 輸入 n 值,輸出如圖所示高為 n 的等腰三角形。7 輸入 n 值,輸出如圖所示高為 n 的等腰三角形。8 輸入 n 值,輸出如圖所示高和上底均為 n 的等腰梯形 .9 輸入 n 值,輸出如圖所示高和上底均為 n 的等腰空心梯形。10 輸入 n 值,輸出如圖所示邊長為 n 的空心正六邊型。11 輸入 n 值,輸出如圖所示圖形。12 輸入 n 值,輸出如圖所示圖形。13 輸入 n 值,輸出如圖所示圖形。14 輸入 n 值,輸出如圖所示圖形。15 輸入

3、 n 值,輸出如圖所示圖形 .16 輸入 n 值,輸出如圖所示圖形 .(例為 n=6 時)17 編寫程序,輸出如圖所示 sin(x) 函數 0 到 2的圖形。18 編寫程序,在屏幕上輸出一個由號圍成的空心圓.19 編寫程序,在屏幕上繪制如圖余弦曲線和直線 .若屏幕的橫向為 x 軸,縱向為 y 軸, 在屏幕上顯示 0360 度的 cos(x)曲線與直線 x=f(y)=45(y1)+31 的迭加圖形 .其中 cos 圖形用”表示, f(y)用+”表示,在兩個圖形的交點處則用 f(y)圖形的符號。20 編寫程序 ,輸出如圖所示高度為 n 的圖形。21 編寫程序 ,輸出如圖所示高度為 n 的圖形。22

4、 輸入 n 值,輸出如圖所示圖形 .23 輸入 n 值,輸出如圖所示的 nn(n10)階螺旋方陣。1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9圖 4。19 n=5 時的螺旋方陣24 輸入 n 值,輸出如圖所示回型方陣。25 輸出如圖所示的數字金字塔26 輸入 n 值,輸出如圖所示圖形。27 輸入頂行字符和圖形的高,輸出如圖所示圖形。28 輸入首字符和高后 ,輸出如圖所示回型方陣 .A A A A AA B B B AA B C B AA B B B AA A A A A圖 4。24 首字符為 A、高為 5 的方陣29

5、 輸入中心字符和高后,輸出如圖所示回型方陣。X X X X XX Y Y Y XX Y Z Y XX Y Y Y YX X X X X圖 4。25 中心字符為 Z、高為 5 的方陣30 編寫程序,輸出如圖所示上三角形式的乘法九九表。31 編寫程序,輸出如圖所示下三角乘法九九表.32 編寫程序,輸入三角型的三條邊長,求其面積。注意:對于不合理的邊長輸入要輸出數據錯誤的提示信息。33 編寫程序求出 555555 的約數中最大的三位數是多少 .34 編寫程序計算下列算式的值:直到某一項 A=0.000001 時為止。輸出最后的值。35 從鍵盤輸入任意的字符 ,按下列規則進行分類計數 .第一類 0,1

6、,2,3,4,5,6,7,8,9第二類 +,-,,/,,=第三類 其它字符當輸入字符 時先計數 ,然后停止接收輸入,打印計數的結果。36 對從鍵盤上輸入的行、單詞和字符進行計數。我們將單詞的定義進行化簡,認為單詞是不包含空格、制表符(t)及換行符的字符序列 .例如:” a+b+c”,認為是個單詞,它由個字符組成。又如:xy abc ,為個單詞,個字符。一般用 CTRL+D作為文件結束標記,其字符碼值為 1,當輸入 CTRL+D 時表示文件輸入結束,停止計數。37 編寫程序計算當 x=05 時下述級數和的近似值, 使其誤差小于某一指定的值 epsilon(例如:epsilon=0.000001

7、38 編寫程序計算下式的值:39 編寫程序計算下列序列的值:要求最后一項小于 0。001 時、或者當 N=20 時尚未達到精度要求,則停止計算。40 已知求正弦 sin(x)的近似值的多項式公式為:編寫程序,要求輸入 x 和,按上述公式計算 sin(x)的近似值,要求計算的誤差小于給定的.41 從鍵盤輸入十個整數,用插入法對輸入的數據按照從小到大的順序進行排序,將排序后的結果輸出。42 輸入一個正整數,要求以相反的順序輸出該數 .例如輸入 12345,輸出位 54321.43 編寫程序 ,讀入一個整數;若為非負數,則計算到之間的整數和。分別利用 for 和 while 寫出兩個程序 .2之間的

8、整數和;若為一個負數,則求到44 求解愛因斯坦數學題。有一條長階梯,若每步跨2 階,則最后剩余 1 階,若每步跨 3 階,則最后剩 2 階,若每步跨 5 階,則最后剩 4 階,若每步跨 6 階則最后剩 5 階,若每步跨 7 階,最后才正好一階不剩 .請問,這條階梯共有多少階?45 一個自然數被 8 除余 1,所得的商被 8 除也余 1,再將第二次的商被 8 除后余 7,最后得到一個商為。又知這個自然數被 17 除余 4,所得的商被 17 除余 15,最后得到一個商是的 2 倍。編寫程序求這個自然數。46 編寫程序,用二分法求一元二次方程 2x3-4x2+3x-6=0 在(10,10)區間的根。

9、47 中國古代科學家祖沖之采用正多邊形逼近的割圓法求出了的值。請編寫一程序,采用割圓法求出的值,要求精確到小數點之后的第十位。48A、B、C、D、E 五人在某天夜里合伙去捕魚,到第二天凌晨時都疲憊不堪,于是各自找地方睡覺.日上三竿 ,A 第一個醒來,他將魚分為五份,把多余的一條魚扔掉,拿走自己的一份。B 第二個醒來,也將魚分為五份 ,把多余的一條魚扔掉,拿走自己的一份。 C、D、E 依次醒來 ,也按同樣的方法拿魚 .編寫程序求出他們合伙至少捕了多少條魚.49 一輛卡車違犯交通規則,撞人逃跑 .現場三人目擊事件 ,但都沒記住車號,只記下車號的一些特征。甲說:牌照的前兩位數字是相同的 ;乙說:牌照

10、的后兩位數字是相同的;丙是位數學家,他說:四位的車號剛好是一個整數的平方。請根據以上線索求出車號。50 若一個口袋中放有 12 個球,其中有 3 個紅的, 3 個白的和 6 個黑的,每次從中任取 8 個球,編寫程序求出共有多少種不同的顏色搭配。51100 匹馬馱 100 擔貨,大馬一匹馱擔,中馬一匹馱擔,小馬兩匹馱擔。試編寫程序計算大、中、小馬的數目。52 編寫程序,輸出用一元人民幣兌換成 1 分、2 分和 5 分硬幣的不同兌換方法。53 顯示 200 以內的完全平方數和它們的個數。 (完全平方數: A2+B2=C2 ,求 A、B、C)54 設 N 是一個四位數 ,它的 9 倍恰好是其反序數(

11、例如: 123 的反序數是 321),求 N 的值.55 將一個數的數碼倒過來所得到的新數叫原數的反序數稱數。求不超過 1993 的最大的二進制的對稱數。.如果一個數等于它的反序數, 則稱它為對56 編寫程序求解下式中各字母所代表的數字. 57 一個自然數的七進制表達式是一個三位數, 而這個自然數的九進制表示也是一個三位數 ,且這兩個三位數的數碼順序正好相反,求這個三位數。58 請驗證 2000 以內的哥德巴赫猜想 ,對于任何大于 4 的偶數均可以分解為兩個素數之和。59 如果一個正整數等于其各個數字的立方和,則稱該數為阿姆斯特朗數(亦稱為自戀性數407=43+03+73 就是一個阿姆斯特朗數

12、。編寫程序求 1000 以內的所有阿姆斯特朗數 .)。如60 任意輸入一個偶數,請將它分解為兩個素數之和。61 如果整數的全部因子(包括,不包括本身)之和等于;且整數的全部因子(包括不包括本身)之和等于,則將整數和稱為親密數。求 3000 以內的全部親密數。,62 猜數游戲 .由計算機”想 一個數請人猜 ,如果人猜對了,則結束游戲,否則計算機給出提示,告訴人所猜的數是太大還是太小,直到人猜對為止.計算機記錄人猜的次數,以此可以反映出猜數者猜”的水平。63 編寫程序求出 1000!后有多少個零。64 求矩陣 A2*3 的轉置矩陣 B32。設矩陣 A 為: 1 2 3 1 4 A = B = 2

13、5 4 5 6 3 6 65 十個小孩圍成一圈分糖果,老師分給第一個小孩10 塊,第二個小孩 2 塊,第三個小孩 8 塊,第四個小孩 22 塊,第五個小孩 16 塊,第六個小孩 4 塊,第七個小孩 10 塊,第八個小孩 6 塊,第九個小孩 14 塊,第十個小孩 20 塊。然后所有的小孩同時將自己手中的糖分一半給右邊的小孩;糖塊數為奇數的人可向老師要一塊 .問經過這樣幾次調整后大家手中的糖的塊數都一樣?每人各有多少塊糖?66 輸入 55 的數組,編寫程序實現:(1)求出對角線上各元素的和;(2)求出對角線上行、列下標均為偶數的各元素的積;(3)找出對角線上其值最大的元素和它在數組中的位置。67

14、編寫程序,以字符形式輸入一個十六進制數 ,將其變換為一個十進制整數后輸出。68 編寫程序,輸入一個十進制整數 ,將其變換為二進制后儲存在一個字符數組中。69 編寫程序,輸出 1000 以內的所有完數及其因子。所謂完數是指一個整數的值等于它的因子之和,例如 6 的因子是 1、2、3,而 6=1+2+3, 故 6 是一個完數 .70 對數組 A 中的 N(0N100個整數從小到大進行連續編號,輸出各個元素的編號。要求不能改變數組中元素的順序 ,且相同的整數要具有相同的編號。例如數組是: (5,34735,6)則輸出為: (3,1,2,5,1,3,4)71 現將不超過 2000 的所有素數從小到大排

15、成第一行 ,第二行上的每個數都等于它” 右肩上的素數與”左肩上的素數之差。請編程求出:第二行數中是否存在這樣的若干個連續的整數,它們的和恰好是 1898?假如存在的話,又有幾種這樣的情況?第一行: 2 3 5 7 11 13 17 . 。.。 1979 1987 1993第二行: 1 2 2 4 2 4 . 。.。 8 672 將 1、2、3、4、5、6、7、8、9 九個數字分成三組,每個數字只能用一次 ,即每組三個數不許有重復數字 ,也不許同其它組的三個數字重復 ,要求將每組中的三位數組成一個完全平方數。73 一個自然數的七進制表達式是一個三位數 ,而這個自然數的九進制表示也是一個三位數,

16、且這兩個三位數的數碼順序正好相反,求這個三位數。74 使用數組精確計算 M/N(0MN=100) 的各小數位的值。如果 M/N 是無限循環小數,則計算并輸出它的第一循環節,同時要求輸出循環節的起止位置(小數的序號).為了實現高精度計算結果, 可將商存放在有 ( )個元素的一維數組中 ,數組的每個元素存放一位十進制數 ,即商的第一位存放在第一個元素中, 商的第二位存放在第二個元素中 ,依次類推。這樣可使用數組來表示計算的結果。75 使用數組完成兩個超長(長度小于)正整數的加法。為了實現高精度的加法,可將正整數存放在有()個元素的一維數組中,數組的每個元素存放一位十進制數,即個位存放在第一個元素中

17、,十位存放在第二個元素中,依次類推樣通過對數組中每個元素的按位加法就可實現對超長正整數的加法。.這76 使用數組完成兩個超長 (長度小于)正整數的加法。為了實現高精度的加法 ,可將正整數存放在有()個元素的一維數組中,數組的每個元素存放一位十進制數 ,即個位存放在第一個元素中 ,十位存放在第二個元素中,依次類推。這樣通過對數組中每個元素的按位加法就可實現對超長正整數的加法.77 使用數組完成兩個超長 (長度小于)正整數的乘法。78 馬步遍歷問題:已知國際象棋棋盤有 88 共 64 個格子。設計一個程序,使棋子從某位置開始跳馬,能夠把棋盤上的格子走遍 .每個格子只允許走一次 .79 八皇后問題

18、:在一個的國際象棋盤,有八個皇后,每個皇后占一格;要求棋盤上放上八個皇后時不會出現相互攻擊的現象,即不能有量個皇后在同一行、列或對角線上。問共有多少種不同的方法。80 編制一個計算函數 y=f(x)的值程序,其中 :x + 2.5 0 = x 2y= 2 1.5(x3)(x-3) 2= x 4x/2 1。5 4= x 1)請編寫遞歸程序實現 .88 編寫函數 ,采用遞歸方法實現將輸入的字符串按反序輸出。89 編寫函數,采用遞歸方法在屏幕上顯示如下楊輝三角形:11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 90 編寫函數 ,采用遞歸方法將任一整數轉換為二進制形式.9

19、1 設有字母 a、b、c,請編程用遞歸的方法產生由這些字母組成的,且長度為串.例如,輸入 n=2,則輸出 :n 的所有可能的字符aa ab ac ba bb bc ca cb cc92 將一個數的數碼倒過來所得到的新數,叫作原數的反序數,如果一個數等于它的反序數,則稱它為對稱數。編寫程序,采用遞歸算法求不超過 1993 的最大的二進制的對稱數 .93 從到 n(nmain( ) int year ;float money ,rate,total ; /* money: 本金 rate:月利率 total:本利合計 */printf( ”Input money and year = ?scanf

20、(%f%d, money, &year); /* 輸入本金和存款年限 */if(year=1) rate=0 。00315; /* 根據年限確定利率 */else if (year=2) rate=0.00330 ;else if (year=3) rate=0 。00345;else if(year=5) rate=0.00375 ;else if (year=8 ) rate=0。00420;else rate=0 。0;total=money + money * rate * 12 year; / 計算到期的本利合計 */printf( Total = % 。2fn, total);2

21、參考答案 :include main( ) int year , month, days ;printf(Enter year and month: ”);scanf(”dd, year, month);switch (month ) case 1: case 3: case 5 : case 7: case 8: case 10: case 12:days=31 ; break; /* 處理”大”月 */case 4: case 6: case 9: case 11:days=30 ; break; / 處理小月 */case 2: if (year4=0&year%100!=0 | yea

22、r 400=0)days=29 ; / 處理閏年平月 /else days=28; / 處理不是閏年平月 */break;default: printf (Input error!n ); /* 月份錯誤 */days=0;if( days!=0 )printf(”d, d is d daysn, year , month, days);3 參考答案 :#include stdio。hmain ( ) float data1 , data2; / 定義兩個操作數變量 /char op; / 操作符 /printf(Enter your expression );scanf(”%f%cf”, &

23、data1, op, data2 / 輸入表達式 /switch(op) / 根據操作符分別進行處理 / case + : /* 處理加法 */printf(”。 2f+。2f=。2fn data1, data2, data1+data2 ); break;case : /* 處理減法 */printf(”。 2f。2f=%.2fn data1, data2, data1 data2); break;case * : /* 處理乘法 */printf(.2f*%。2f=.2fn, data1 , data2, data1data2); break ;case / : / 處理除法 */if(

24、data2=0 ) / 若除數為 0 */printf(”Division by zero 。n;elseprintf( ”%.2f/%。2f=.2fn data1, data2, data1/data2);break;default : /* 輸入了其它運算符 */printf(”Unknown operater.n) ;4 分析:打印此圖形用兩重循環實現 .圖形要重復 n 行,故采用循環結構實現循環 n 次,循環體內部打印一行 號,把上述思路表示為:for(i=1 ;i=n;i+)打印一行 *號;每行有 n 個號,再采用循環結構實現 n 次循環,循環內部用格式輸出語句打印一個號,即:for

25、(j=1 ;j=n;j+)printf( ”);按照上述思路,實現打印矩形 .參考答案:main() int i,j ,n;printf(”nPlease Enter n :);scanf(”d,nfor(i=1 ;i=n;i+) for(j=1 ;j=n;j+)printf(*);printf(”n”);5 分析:此圖形和上題的區別在于在每一行先要打印空格,然后再打印n 個號,在上題第一層循環體內打印 *,由于第一層循環的控制變量 i 是逐行增 1,所號的循環前面增加一個循環打印空格。每行空格的個數是逐行減少的以用一個固定值的數減去 i 就可實現對空格個數的控制,在此題中固定值可使用變量n。

26、參考答案 :main( ) int i,j ,n;printf(nPlease Enter n: scanf(”%d,&nfor(i=1 ;i=n;i+) for(j=1;j=n-i;j+)printf(” for(j=1;j=n ;j+)printf(”*printf(n ”);6 分析:此題和上題的區別在于每行 *的數量逐行減少,可以使用上題控制空格個數的思路來控制號的個數,請注意每行 的個數都是奇數。參考答案:main( ) int i,j ,n;printf(”nPlease Enter n scanf(”%d”,&n);for(i=1;i=n;i+) for(j=1 ;j=n-i;j

27、+)printf( for(j=1 ;j=2*i1;j+)printf(*printf( ”n7 分析:此題圖形是第 3 題圖形的垂直反轉,在編程上我們可以變換一個思路。對于圖形中的第i 行(1in共需要輸出 2ni 個字符,其中前面的 i1 個字符為空格,后面的字符為 *號。按照這一思路可以編寫出如下程序。參考答案:main( ) int i,j,n;printf( ”nPlease Enter n: ”);scanf(”d, n);for( i=1 ;i=n;i+ ) /* 重復輸出圖形的 n 行 */ for( j=1 ;j=2ni;j+ ) / 重復輸出圖形一行中的每個字符/if(j=

28、i-1) printf( ); / 輸出前面的空格 /else printf (”); /* 輸出后面的號 */printf(n”);8 分析:此題和第 3 題的區別僅是每行的 *個數增加 n-1 個。參考答案 :main( ) int i,j,n ;printf(nPlease Enter n :scanf( d,&n);for(i=1;i=n;i+) for(j=1 ;j=ni;j+)printf(” ”);for(j=1;j=2i1+(n-1);j+)printf(”);printf(”n”);9 分析:對于空心圖形,我們可以在上題的基礎上,對于打印*號的循環進行修改,僅在循環開始值 (

29、j=1)和循環結的兩個循環合為束值(j=2*(i-1)+n) 時打印號,其它位置都打印空格。另一種思路是將每行打印的空格和一體考慮,在判斷出需要打印 *的兩個位置及第一行和最后一行相應位置外,其余位置都打印空格。參考答案 :main( ) int i,j,n;printf(nPlease Enter n :scanf(d”,&nfor(i=1 ;ini+1 & (i=1|i=n )) printf( ”);else printf( ” );printf( n10 分析:此圖形可以理解為兩個空心梯形反向連接而成,因此可以利用上題的思路進行輸出。參考答案:main( ) int i,j,n ;pr

30、intf(nPlease Enter n :scanf(”%d,&n);for(i=1 ;i=n;i+) /* 輸出圖形的上半部分(含中心行 ) / for(j=1;j=2 n-i-1;j+)if(j=i ) printfelse printf( printf( ”n);for(i=1;in;i+) / 輸出圖形的下半部分(不含中心行)*/ for(j=1 ;j=n+i;j+)if(j=n-i) printf (”*else printf ( printf( ”*n”);11 分析:此題與上題的區別在于打印 號的位置不同,編程時要找出應打印 *號的位置和兩個循環變量 i、j以及行數 n 的關系

31、。參考答案 :main( ) int i ,j,n;printf(nPlease Enter n:) ;scanf (”d, &nfor(i=1;i=n;i+) / 輸出圖形的上半部分 (含中心行 ) */ for(j=1;jn-i+1 & i=1) printf ();else printf( ”);printf(”n);for(i=1 ;in;i+) /* 輸出圖形的下半部分 (不含中心行) / for(j=1;ji+1 & i=n1) printf( ”*”);else printf( printf( ”*n12 參考答案:main( ) int i,j,n;printf(nPlease

32、 Enter n :);scanf(”%d,&n);for(i=1 ;i=n;i+) for(j=1 ;j=n;j+)if(j=n-i+1 i=1 | i=n) printf( else printf( ”);printf(”n13 參考答案:main( ) int i ,j,n;printf(nPlease Enter n : scanf(%d, &n);for(i=1 ;i=n;i+) /* 輸出圖形的上半部分 (含中心行 ) */ for(j=1 ;j=n-i;j+)if(j=1 | j=ni+1) printf(”* );else printf (” ”);printf( ”nfor(

33、i=1;in;i+) / 輸出圖形的下半部分 (不含中心行) */ for(j=1;j=i+1;j+)if(j=1 | j=i+1) printf (”* );else printf( ) ;printf(n) ;14 參考答案:main( ) int i,j ,n;printf(nPlease Enter n : scanf(”d&n);for(i=1;i=n;i+ ) for(j=1 ;j=n;j+)if(j=1 | j=i | j=n) printf(* ”);else printf (” printf(”n);15 參考答案:main( ) int i,j,n;printf( ”nPl

34、ease Enter n: ”);scanf(”%d”,&n);for(i=1;i=n;i+) for(j=1;jni) printf(”else printf( ” ”);printf(n ;for(i=1;in;i+) for(j=1;j=2*n-i1;j+)if(ji) printf(*) ;else printf (” );printf(n16 參考答案:main( ) int i ,j,n;printf( ”nPlease Enter n: scanf(”%dn);for(i=1;i=n;i+) for(j=1 ;j=n+i-2 ;j+)if(j=ni+1) printf( ”*el

35、se printf ( ”);printf(n);17 分析:首先對圖形進行設計,坐標的 X 軸和 Y 軸分別對應屏幕的列和行,一個正弦函數的周期為0360 度,我們把一個步長定義為 10 度,打印時每換一行等于函數的自變量增加10 度;屏幕的列寬為 80,函數值為 0 對應屏幕的第 40 列,sin(x)的值在-11,變換成列數為以 0 為中心的 3030,對應屏幕上第 1070 列.設計程序時,控制換行的自變量 i 乘以 10 得到正弦函數的 X 值,調用庫函數 sin()求出函數值再乘以 30 輸出的列寬,因為我們以屏幕的第 40 列為 0 點,故再加上 40 得到應在屏幕上顯示的點。參

36、考答案:define PAI 3 。14159include math 。hmain( ) double x ;int y,i,yy;for(i=1 ;i80;i+ ) / 打印圖形的第一行 /if(i=40 ) printf( ”*”); /* i 控制打印的列位置 */ else printf (”-;printf(”nfor(x=10。0;x=360.0 ;x+=10.) /* 從 10 度到 360 度 / y = 40+30 sin(xPAI/180.0 ); / 計算對應的列 */yy = 40 y ? 40 : y; /* 下一行要打印的字符總數 /for (i=1;i=-10;

37、y-) / 圓的半徑為 10 */ m = 2 。5 sqrt(100y*y); /* 計算行 y 對應的列坐標 m */for(x=1 ;x30m;x+)printf( ” ); / 輸出圓左側的空白 */printf(”*; /* 輸出圓的左側 /for(;xinclude math。hmain( ) double y ;int x, m, n, yy;for( yy=0;yy=20;yy+) y = 0 。1yy;m = acos(1-y)*10 ;n = 45 * (y1)+31;for( x=0;x=62;x+ )if( x=m & x=n ) printf(+”);else if

38、(x=n) printf(+;else if (x=m | x=62-m ) printf();else printf (” printf(n 20 分析:編程的關鍵為兩點,一是使用控制輸出的行和列,這方面的內容在前面已經敘述,另一點是輸出的數字和所在行、列關系。此題第一行輸出的數字恰好是列數,從第二行起每行的數字均比上一行增n。參考答案:main( ) int i ,j,n;printf(nPlease Enter n : scanf(%d ”,n);for(i=1 ;i=n;i+) for(j=1 ;j=n;j+)printf(4d”,(i1)n+jprintf(n 21 分析:此題的關鍵

39、是找到輸出數字和行、列數的關系.審查圖形中每行中數字的關系發現,右邊數字和前面數字之差逐次增 1;同列數字依然是這樣的關系 ,編程的關鍵轉換為找到每一行左方的第一個數字,然后利用行和列的循環變量進行運算就可得到每個位置的數字 .用 aij 此表示第 i 行第 j 列的數字,則 a11=1;由第 i 行第一列的數字推出第 i+1 行第一列的數字是 ai+1,1 = ai,1+i; 同樣由第 j 列推出第 j+1 列的數字是 ai,j+1 = ai,j+i+j。另外只有當 ji時才輸出數字。參考答案:main( ) int i,j ,m,n,k=1; / k 是第一列元素的值 */printf(”

40、Please enter m= scanf(%d,&m) ;for(i=1 ;i=m;i+) n=k; / n 第 i 行中第 1 個元素的值 */for(j=1 ;j=m-i+1;j+) printf (%3d”,n);n = n+i+j ; / 計算同行下一個元素的值 */printf(n);k=k+i; / 計算下一行中第 1 個元素 */22 參考答案:main( ) int i,j ,n;printf(nPlease Enter n: ) ;scanf(”%d,&n);for(i=1;i=n;i+ ) for(j=1;j=n;j+)if(j=i ) printf( ” 1);else

41、 printf (”%3d”,j-i+1);printf( ”n);23 分析:可用不同的方案解決此問題,為了開闊讀者的思路,這里給出了兩個參考答案,其中第二個答案是使用了遞歸方法 .方案一:首先尋找數字輸出數字和行列的關系。每圈有四個邊,把每邊的最后一個數字算為下邊的開始,最外圈每邊數字個數是兩個數字。n1 個,以后每邊比外邊一邊少因為數字是一行一行輸出的,再分析每行數字的規律。實際沒有的數字有三種規律:位于對角線之間的數字是上半圖增一,下半圖減一。對角線左側的各列,右側比左側增加了一圈數字,例如數字 39 和它左側的 22 比較,數字39 所在的圈每邊 4 個數字,左側 22 加上一圈 1

42、6 個數字在加 1 就是 39。同理,對角線右側的各列,則減少一圈的數字個數。根據以上分析 ,用兩個對角線將圖形分為四個區域,如下圖所示,圖中黑斜體字為對角線上的數字。1 2 3 4 5 6 724 25 26 27 28 29 823 40 41 42 43 30 922 39 48 49 44 31 1021 38 47 46 45 32 1120 37 36 35 34 33 1219 18 17 16 15 14 13為敘述方便我們稱四個區域為上、下、左、右區。設 ij 為行列號 ,n 為圖形的總行數 ,則滿足各區的范圍是 ,上區:j=i 且 j=n-i+1 ;下區: j=i 且 j=

43、n-i+1 ; 左區:ji 且 ji 且 jn-i+1 。現在問題是,如果知道一行在不同區域開始第一個位置的數字, 然后該區后續的數字就可利用前面分析的規律得到。對于右區開始各行第一個數字最易求出,為4(n1)i+1.后續一個和同行前一個數字之差是 4n-1(j-1)2+1,其中方括號內是每邊的數字個數。對角線上的數字是分區點 ,對角線上相臨數字仍然相差一圈數字個數,讀者自行分析得到計算公式。右區開始的第一個數字可以從上區結束時的數字按規律求出。下述程序用變量 s 保存分區對角線上的數字。參考答案一 :main() int i ,j,k,n,s,m,t;printf( ”Please ente

44、r n );scanf(”%dn);for(i=1;i=n;i+) s=(i=(n+1 )/2)? 1:3*(n(ni)21)+1;m=(i=(n+1)/2)? i:n-i+1 ; / m-1 是外層圈數 /for(k=1;k=n i+1 & j=i) /* 下區 */t=s-(j(ni))+1;if(j=i & j =n-i+1) /* 上區 */t=s+j-i ;if(ji jni+1) /* 右區 /t-=4*(n2(n-j+1)+1 ;if(jy) ? (y) : (x)fun ( int a11, int i, int j, int n ) int min, a22;if( i=j

45、& i= (n+1)/2 & j=(n+1)/2) min = MIN(n i+1,nj+1);else if(i(n+1 )/2 j=(n+1)/2) min = MIN(i ,n-j+1);else if(i =(n+1)/2 & j(n+1 )/2) min = MIN(n-i+1 ,j);else min = MIN (i,j);a22 = fun (a11,min,min,n);return(fun (a22, imin+1, jmin+1, n-2*(min-1);main() int a11=1, i , j, n;printf(”Enter n= ;scanf(”d”, n);

46、for(i=1; i=n; i+) for(j=1; j=n; j+)printf( ”4d, fun(a11 ,i,j,n) );printf(n”);24 分析:此題的關鍵還是要找到輸出數字aij 和行列數 i、j 的關系。為此將圖形分為四個區域如下圖:3 3 3 3 33 2 2 2 33 2 1 2 33 2 2 2 33 3 3 3 3 ( 此圖 n 為 5)在左上區域,即 i=(n+1)/2 j=(n+1/2 (n+1)/2i+1 和(n+1)/2 j+1 中的大者 ,記為 maxn+1)/2i+1,(n+1)/2 j+1;在右上區 ,即 i(n+1)/2 、j(y)?(x):(y

47、))main( ) int i ,j,n;printf(nPlease Enter n :);scanf( d,&n);for(i=1 ;i=n;i+) for(j=1 ;j=n;j+)if(i=(n+1)/2)if(j=(n+1)/2)printf( ”4d,max((n+1)/2-i+1, (n+1)/2-j+1) ;elseprintf(4d”,max((n+1)/2-i+1,j-n/2 );else if(j=(n+1 )/2)printf(%4d,max (in/2,(n+1)/2 j+1);elseprintf( 4d”,max(in/2,j-n/2 ));printf(”n);2

48、5 分析:前面我們已經見到過上下對稱的圖形 ,這是一個左右對稱的圖形,垂直中心線上的數字恰好是行號,在每行位于圖形垂直中心線左方的數字是逐漸增加的,而右方是逐漸減小的。j=i 是分區的標志,左方輸出數字就是列數 j,而右方的數字從 i 開始逐步減小 1.參考答案:main() int i,j;for(i=1;i=9;i+) for(j=1;j =9i;j+) printf (” ”);for(j=1 ;j=1;j) printf(”2d”,j);printf(n) ;26 分析:這類輸出字符的圖形和輸出數字的圖形考慮是近似的,因為字符的ASCII 碼就是一個整數 .在字符碼值的變化過程中,應該

49、注意應該判斷碼值是否超出字符的范圍個問題,在下題里對這個問題進行了處理。參考答案:,進行必要的處理,為了保持程序的簡潔 ,本題沒有考慮這main( ) char c= Z;int i,j,n;printf( ”nPlease Enter n: ”);scanf(”d,n);for(i=1;i=n;i+) for(j=1 ;j=n+i-2 ;j+)if(j=ni+1) printf( ”c”,c-);else printf( ) ;printf(cn,c-);for(i=1;in ;i+) for(j=1 ;j=2*(n 1)i;j+)if(j=i+1) printf( ”%c”,c-);els

50、e printf ( );printf(”cn”,c-);27 分析:此題與上題相近,區別在于輸出時字符的ASCII 碼值的變化在圖形的中間一行為最大,同時一行的兩個字,保證輸入的是英文字母。字符變化后進行了處理,程序中使符是相同的。程序考慮在輸入字符時設計了一個循環用條件運算 .在字符碼值增加的過程中,首先判斷是大寫還是小寫字符,然后判斷字符碼值是否超出英文字母(或Z),如果超出則重新賦為 a(或 A);在輸出圖象下半部分時, ASCII 碼值減少用同樣的思路進行判斷。在判斷字符大小寫(條件語句的第一個判斷)時,用的是兩個不同的值,請讀者自行思考為什么,用同一個值是否可以?參考答案 :mai

51、n( ) char c ;int i,j,n;do printf( ”nPlease Enter n ,char:”);scanf(”d,c”,n,&c);while(cA|cZ&ca|cz);for(i=1;i=n ;i+) for(j=1 ;j=n+i2;j+)if(j=ni+1) printf(%c ”,c);else printf (” ”);printf(”%cn,c+ );c=cZ?A:c):(cz?a:c);c=2;c=cZ?(cA?Z:c):(ca? z:c) ;for(i=1;in;i+) for(j=1;j=2*(n-1)-i;j+)if(j=i+1 ) printf(%c

52、,c);else printf ( );printf(”cn,c-);c=cZ?(c(y)?(x):(y ))main( ) char c;int i,j,n ;do printf (nPlease Enter n ,char:”);scanf(”d,%c”,&n,c);while(cZca|cz);for(i=1;iZ&ca|cz);for(i=1;i=n;i+) for(j=1;j=n;j+)if(i=(n+1)/2)if(j=(n+1)/2)printf( ” c,cmax((n+1)/2-i+1,(n+1 )/2j+1)+1) ;elseprintf( ” %c,cmax((n+1)/

53、2i+1,j-n/2)+1 );elseif(j=(n+1)/2 )printf( c”,c-max(i-n/2 ,(n+1)/2 j+1)+1) ;elseprintf( ” %c,c-max(i n/2,jn/2)+1);printf(n ”);30 參考答案:#include main() int i , j;for(i=1 ;i10;i+)printf(4d”,i);printf( ”n- -n);for(i=1 ;i10;i+) for(j=1 ;j10;j+)if(ji) printf ( ”);else printf( ”%4d” , ij);printf(n ”);31 參考答

54、案 :#include main( ) int i,j;for(i=1 ;i10;i+)printf( ”4d,iprintf(n- -n);for(i=1;i10 ;i+) for(j=1 ;j10;j+)if(jb+c ba+c | ca+b)flag=1;while(flag);s=(a+b+c )/2;printf(”S=fs=sqrt( (sa)(sb)(s-c));33 參考答案:include stdio 。hmain( ) int j;long n; /* 使用長整型變量,以免超出整數的表示范圍printf(”Please input number: scanf( ld &n/

55、for(j=999;j =100;j)/* 可能取值范圍在 999 到 100 之間,j 從大到小 */if(n%j = 0 ) / 若能夠整除 j,則 j 是約數,輸出結果 / printf(The max factor with 3 digits inld is: %d 。n”,n,j);break; / 控制退出循環 /34 參考答案 :define E 0 。000001main() float x,y=1 ,s=0;printf(Please enter x= ”);scanf(%f, xwhile(1/yE) s=s+1/y ;y=yx;printf(”S=%fn ,s35 參考答

56、案:#include main( ) int class1 , class2, class3;char ch ;class1=class2=class3=0 ; /* 初始化分類計數器 */do ch=getch ( switch(ch) case 0 : case 1 case 2: case 3: case 4:case 5: case 6: case 7: case 8: case 9:class1+ ; break; /* 對分類計數 /case +: case -: case * case / case %: case =class2+ ; break; / 對分類計數 */defa

57、ult : class3+; break; /* 對分類計數 /while (ch!= ) ; /* 字符在 C 程序中要使用轉義符 */printf( ”class1= d, class2= d, class3= dn, class1 , class2, class3) ;36 分析:程序的關鍵是怎樣判斷一個單詞。由單詞的定義已知它是用空格、制表符或換行符分隔開的,兩個字符之間沒有空格、制表符或換行符 ,則認為是一個單詞中的兩個字符。參考答案 :#define EOF -1define YES 1define NO 0#include stdio。hmain( ) /* 對輸入的行、字符和單

58、詞進行計數統計 int c, nl , nc, nw, inword;/inword=NO; /* inword=NO 已處理的最后一個字符是空格、 t 或n */ inword=YES 已處理的最后一個字符不是空格、 t 或n */nl=nc=nw=0 ; /* 行、字符、字計數器置 0 */whilec=getchar( ))!= EOF) +nc; / 進行字符計數 */if(c=n )+nl; / 進行行計數 /if(c=t c=n|c= inword=NO ;/ 如果讀入的字符是空格、 t 或n,則置 inword 為 NO */else /* 讀入的字符不是空格、 t 或n */i

59、f(inword=NO ) / 如果前一個字符是空格、 t 或n */ inword=YES; / 則讀入的字符為一個單詞的第一個字符 */+nw; /*置 inword 為 YES,進行單詞計數 /printf(Lines= dnWords=%dnChars= dn,nl,nw,nc); /* 輸出結果 /37 參考答案:define E 0 。000001#include ”math。h”main() int i ,k=1;float x,y,t=1,s,r=1 ;printf(Please enter x= scanf(f&x);for(s=x,y=x ,i=2;fabs(r)E;i+)

60、 t=t(i-1y=y*x*x ;k=k(1);r=ky/t/(2*i1s=s+r;printf(”S=fn,s);38 參考答案:main() int i;float s=0;for(i=1;i=100;i+)s=s+i;for(i=1;i0。001;i+ )s=s+1。0/i/(i+1 );printf(Result= f i=dn,s,i);40 參考答案:#include =0&aj num;j- )aj+1=aj;aj+1=num;for(i=0 ;i=2*n;i)s1=s1+i ;i=n;if(i=0)while(i=2 n)s2=s2+i ;printf( ”Result1= l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論