高級語言程序設計課程第四次個人作業
高級語言程序設計課程第四次個人作業
-
這個作業屬于哪個課程:
https://edu.cnblogs.com/campus/fzu/2024C -
這個作業要求在哪里:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293
-
學號:102400108
-
姓名:王馨怡
作業內容: -
- 編寫并運行書本第6章6.16編程練習題目中的第1,5,7,8,9,10,12,13,15,16,18題。
-
- 編寫并運行書本第7章7.12編程練習題目中的第1,2,4~11題。
一、編寫并運行書本第6章6.16編程練習題目中的第1,5,7,8,9,10,12,13,15,16,18題。
6.16.1
題目:編寫一個程序,創建一個包含26個元素的數組,并在其中儲存26個小寫字母,然后打印所有內容。
問題:無
解決:無

6.16.5
題目:編寫一個程序,提示用戶輸入大寫字母。使用嵌套循環以下面的金字塔的格式打印字母:
-----A
----ABA
---ABCBA
-ABCDCBA
ABCDEDCBA
打印這樣的圖形,要根據用戶輸入的字母來決定。例如,上面的圖形是在用戶輸入E后的打印結果。
問題:1.每行空格漏了一個
2.逆序打印時,每行多打了一個字母
解決:1.將 i<n-p-1 改為正確的 i<n-p
2.將 m=65+p 改為 m=65+p-1

6.16.7
題目:編寫一個程序把一個單詞讀入一個字符數組中,然后倒序打印這個單詞。提示:strlen()函數(第4章介紹過)可用于計算數組最后一個字符的下標。
問題:使用strlen函數,逆序打印時,亂碼了
解決:發現初始化 i=strlen(a) 數組多算了一個-->改為 i=strlen(a)-1 結果正確

6.16.8
題目:編寫一個程序,要求用戶輸入兩個浮點數,并打印兩數之差除以兩數乘積的結果。在用戶輸入非數字之前,程序應循環處理用戶輸入的每對值。
問題:無
解決:無

6.16.9
題目:修改練習8,使用一個函數返回計算的結果。
問題:無
解決:無

6.16.10
題目:編寫一個程序,要求用戶輸入一個上限整數和一個下限整數,計算從上限到下限范圍內所有整數的平方和,并顯示計算結果。然后程序繼續提示用戶輸入上限和下限整數,并顯示結果,直到用戶輸入的上限整數小于下限整數為止。程序的運行示例如下:
Enter lower and upper integer limits: 5 9
The sums of the squares from 25 to 81 is 255
Enter next set of limits: 3 25
The sums of the squares from 9 to 625 is 5520
Enter next set of limits: 5 5
Done
問題:發現無論怎么輸入,第二個答案的值總是錯誤的。
解決:調試代碼,發現sum未重置=0,所以輸第二個答案時,sum=第一個的sum+第二個的sum-->在每次重置sum=0,問題解決。

6.16.12
題目:考慮下面兩個無限序列:
1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + …
1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + …
編寫一個程序計算這兩個無限序列的總和,直到到達某次數。提示:奇數個-1 相乘得-1,偶數個-1相乘得1。讓用戶交互地輸入指定的次數,當用戶輸入0或負值時結束輸入。查看運行100項、1000項、10000項后的總和,是否發現每個序列都收斂于某值?
問題:發現輸入的時候二者都不收斂。
解決:結果是自己的sum1、sum2都又又又沒有初始化?。。?->每次都初始化sum1、sum2,問題解決。

6.16.13
題目:編寫一個程序,創建一個包含8個元素的int類型數組,分別把數組元素設置為2的前8次冪。使用for循環設置數組元素的值,使用do while循環顯示數組元素的值。
問題:新的a[i]中,總是只有a[0]是正確的,其他都錯誤
解決:又是老問題,n沒有重置為1,所以答案才會錯誤-->在每次重置n=1,問題解決。

6.16.15
題目:編寫一個程序,讀取一行輸入,然后把輸入的內容倒序打印出來??梢园演斎雰Υ嬖赾har類型的數組中,假設每行字符不超過255。回憶一下,根據%c轉換說明,scanf()函數一次只能從輸入中讀取一個字符,而且在用戶按下Enter鍵時scanf()函數會生成一個換行字符(\n)。
問題:運行正常,但編譯框發出警告
解決:發現用了strlen函數,但忘記加 <string.h> 的頭文件了!-->添加頭文件后,不再發出警告,問題解決。

6.16.16
題目:Daphne以10%的單利息投資了100美元(也就是說,每年投資獲利相當于原始投資的10%)。Deirdre以 5%的復合利息投資了 100 美元(也就是說,利息是當前余額的 5%,包含之前的利息)。編寫一個程序,計算需要多少年Deirdre的投資額才會超過Daphne,并顯示那時兩人的投資額。
問題:無
解決:無

6.16.18
題目:Rabnud博士加入了一個社交圈。起初他有5個朋友。他注意到他的朋友數量以下面的方式增長。第1周少了1個朋友,剩下的朋友數量翻倍;第2周少了2個朋友,剩下的朋友數量翻倍。一般而言,第N周少了N個朋友,剩下的朋友數量翻倍。編寫一個程序,計算并顯示Rabnud博士每周的朋友數量。該程序一直運行,直到超過鄧巴數(Dunbar’s number)。鄧巴數是粗略估算一個人在社交圈中有穩定關系的成員的最大值,該值大約是150。
問題:無
解決:無

二、編寫并運行書本第7章7.12編程練習題目中的第1,2,4~11題。
7.12.1
題目:編寫一個程序讀取輸入,讀到#字符為止,然后報告讀取的空格數、換行符數和所有其他字符的數量。
問題:無論怎么輸入,答案第二、三個的值都為0
解決:發現一個低級錯誤?。懙氖莄h= 而非ch== -->改正為ch== 結果正確。

7.12.2
題目:編寫一個程序讀取輸入,讀到#字符停止。程序要打印每個輸入的字符以及對應的ASCII碼(十進制)。每行打印8個“字符-ASCII碼”組合。
建議:使用字符計數和球磨運算符(%)在每8個循環周期時打印一個換行符。
問題:無
解決:無

7.12.4
題目:使用if else語句編寫一個程序讀取輸入。讀到#停止。用感嘆號替換句號,用兩個感嘆號替換原來的感嘆號,最后報告進行了多少次替換。
問題:不理解“用兩個感嘆號替換原來的感嘆號”的意思,導致不會寫
解決:詢問同學,他們認為是當ch==‘!’時,ch=‘!’。

7.12.5
題目:使用switch重寫練習4。
問題:無
解決:無

7.12.6
題目:編寫程序讀取輸入,讀到#停止,報告ei出現的次數。用“Receive your eieio award”的輸入來測試。
問題:一開始寫,本來想構建兩個字符數組,分別存儲第奇數個和第偶數個字符。后來發現行不通,因為‘e’不一定在奇數位,‘i’也不一定在偶數位。
解決:所以,我構建了一個足夠大的字符數組,并逐個判斷前一個字符和后一個字符的關系,計算次數。

7.12.7
題目:編寫一個程序,提示用戶輸入一周工作的小時數,然后打印工資總額、稅金和凈收入。
1.基本工資 = 10美元/小時。2.加班(超過40小時)= 1.5倍時間。3.稅率:前300美金為15%,續150美元為20%,余下的為25%。
問題:無
解決:無

7.12.8
題目:使用switch完成工資等級選擇。如果選擇1~4其中的一個數字,程序應該詢問用戶工作的小時數。程序要通過循環運行,除非用戶輸入5。
問題:無
解決:無


7.12.9
題目:編寫一個程序,只接受正整數輸入,然后顯示所有小于或等于該數的素數。
問題:無
解決:無

7.12.10
題目:988年的美國聯邦稅收計劃是近代最簡單的稅收方案,它分為4個類別,每個類別有兩個等級。下面是該稅收計劃的摘要(美元數為應征稅的收入):
類別 稅金
單身 17850美元按15%計,超出部分按28%計
戶主 23900美元按15%計,超出部分按28%計
已婚,共有 29750美元按15%計,超出部分按28%計
已婚,離異 14875美元按15%計,超出部分按28%計
例如,一位工資為20000美元的單身納稅人,應繳納稅費0.15×17850
+0.28×(2000-17850)美元,編寫一個程序,讓用戶指定繳納稅余的種類和應納稅收入,然后計算稅金。程序應通過循環讓用戶可以多次輸入
問題:無
解決:無


7.12.11
題目:ABC郵購雜貨店出售的洋薊售價為2.05美元/磅,甜菜售價為1.15美元/磅,胡蘿卜售價為1.09美元/磅。在添加運費之前,100美元的訂單有5%的打折優惠。少于或等于5磅的訂單收取6.5美元的運費和包裝費,5磅~20磅的訂單收取14美元的運費和包裝費,超過20磅的訂單在14美元的基礎上每續重Ⅰ磅增加0.5美元。編寫一個程序,在循環中用switch語句實現用戶輸入不同的字母時有不同的響應,即輸入a的響應是讓用戶輸入洋薊的磅數,b是甜菜的磅數,c是胡蘿卜的磅數,q是退出訂購。程序要記錄累計的重量。即,如果用戶輸入4磅的甜菜,然后輸入5磅的甜菜,程序應報告9磅的甜菜。然后,該程序要計算貨物總價、折扣(如果有的話)、運費和包裝費。隨后,程序應顯示所有的購買信息:物品售價、訂購的重量(單位:磅)、訂購的蔬菜費用、訂單的總費用、折扣(如果有的話)、運費和包裝費,以及所有的費用總額。
問題:發現除了輸入‘q’,無論怎么輸入,都會輸出“請輸入字符a,b,c,q: ”
解決:發現在while循環的條件中,我竟然括號位置錯掉了(讓我好找,我以為是程序設計的問題),把((ch=getchar()!='q'))改為正確的((ch=getchar())!='q')答案終于正確了。


- 總結思考:
1.首先,依舊是重置(初始化)某個變量的問題,若不初始化,則結果很難正確。一定一定要記得初始化變量!!
2.其實在寫if-else 的時候,我很容易寫錯 == ,從而使程序錯誤,這也是個亟待改正的問題。
3.在寫題的時候,我發現我還是容易犯低級錯誤,如括號闊錯位置、==寫成=,初始化問題(出現三次了!?。。?/strong>......這些都需要極度重視和解決
4.在書本上看到的知識,運用錯誤。如把islower()當成了映射函數使用(其實tolower()才是映射函數)。所以,還是需要加強對書本的消化和理解。
5.for循環的嵌套使用還是不夠熟練,還需加強對基礎題的練習。

浙公網安備 33010602011771號