c語言程式設計——實驗報告五
- 實驗專案名稱:實驗5 迴圈結構程式設計(while、do-while語句的應用)
- 實驗專案型別:驗證性
- 實驗日期:2024年4月11日
一、實驗目的
- 熟練掌握三種迴圈語句並能正確運用;
- 能夠用迴圈實現一些常用演算法,如窮舉法,迭代法,遞推法等;
- 進一步學習程式除錯;
二、實驗硬、軟體環境
Windows計算機、Dev c 6.0
三、實驗內容及步驟
實驗內容:
編寫程式:
(1)用while語句計算自然數列1,2,3……,n的和,n的值在程式執行時輸入。
(2)用do-while語句計算n的階乘
(3)用while語句編寫程式求20+21+22+23+24+……+263
(4)用while語句編寫程式。輸入一行字元,求出其中字母、數字和其他字元的個數。
思考題:小明媽媽給他買了若干塊巧克力,小明第一天吃了一半,還不過癮,又多吃了一塊,第二天又將剩下的巧克力吃掉一半,又多吃一塊,以後每天都吃了前一天剩下的一半零一塊。到第10天再想吃時,只剩下一塊了。設計一個程式計算小明媽媽總共給小明買了多少塊巧克力?
實驗步驟:
專案一:用while語句計算自然數列1,2,3……,n的和,n的值在程式執行時輸入。
解題思路
- 首先,需要使用者輸入一個正整數 n。
- 使用一個變數 sum 來儲存數列的和,初始值設為 0。
- 使用一個變數 i 作為迴圈控制變數,初始值設為 1。
- 使用 while 迴圈進行迭代,每次迭代將當前迴圈變數 i 的值累加到 sum 中,並遞增 i。
- 當 i 的值超過了輸入的正整數 n 時,迴圈結束。
- 最後輸出計算得到的自然數列 1 到 n 的和。
核心程式碼
#include <stdio.h>
int main() {
int n, sum = 0;
printf("請輸入一個正整數 n:");
scanf("%d", &n);
int i = 1;
while (i <= n) {
sum += i;
i++;
}
printf("自然數列 1 到 %d 的和為:%d\n", n, sum);
printf("*****************************************\n\n");
printf("23080905040502 王永成\n\n");
printf("*****************************************");
return 0;
}
實驗截圖
專案二:用do-while語句計算n的階乘
解題思路
- 使用一個變數
jiecheng
來儲存階乘的結果,初始值為 1。 - 使用一個變數 n 輸入要計算階乘的數。
- 使用 do-while 迴圈來計算階乘:
- 迴圈體內將
jiecheng
乘以 n,然後 n 自減。 - 當 n 大於 1 時繼續迴圈。
- 輸出計算結果。
核心程式碼
#include <stdio.h>
int main() {
int n;
printf("請輸入一個整數 n:");
scanf("%d", &n);
int jiecheng = 1;
int i = n;
do {
jiecheng *= i;
i--;
} while (i > 0);
printf("%d 的階乘是:%d\n", n, jiecheng);
printf("*****************************************\n\n");
printf("23080905040502 王永成\n\n");
printf("*****************************************");
return 0;
}
實驗截圖
專案三:用while語句編寫程式求20+21+22+23+24+……+263
解題思路
- 使用一個變數 sum 來儲存求和的結果,初始值為 0。
- 使用一個變數 num 從 20 開始遞增到 263。
- 使用 while 迴圈來累加 num 到 sum 中:
- 在迴圈體內,將 num 的值加到 sum 中。
- num 每次遞增 1。
核心程式碼
#include <stdio.h>
int main() {
int num = 20;
int sum = 0;
while (num <= 263) {
sum += num;
num++;
}
printf("20+21+22+23+24+……+263 的和為:%d\n", sum);
printf("*****************************************\n\n");
printf("23080905040502 王永成\n\n");
printf("*****************************************");
return 0;
}
實驗截圖
專案四:用while語句編寫程式。輸入一行字元,求出其中字母、數字和其他字元的個數。
解題思路
- 使用三個變數
wordCount
、numCount
和otherCount
來分別表示字母、數字和其他字元的個數,初始值都為 0。 - 使用一個
while
迴圈來逐個檢查輸入的字元,並統計各類字元的個數: - 在迴圈內,根據字元的型別(字母、數字還是其他字元),分別增加相應的計數器。
- 輸入的結束條件可以是遇到換行符 \n 或者檔案結束符 EOF。
核心程式碼
#include <stdio.h>
int main() {
char ch;
int wordCount = 0, numCount = 0, otherCount = 0;
printf("請輸入一行字元:\n");
while ((ch = getchar()) != '\n') {
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
wordCount++;
} else if (ch >= '0' && ch <= '9') {
numCount++;
} else {
otherCount++;
}
}
printf("字母個數:%d,數字個數:%d,其他字元個數:%d\n", wordCount, numCount, otherCount);
printf("*****************************************\n\n");
printf("23080905040502 王永成\n\n");
printf("*****************************************");
return 0;
}
實驗截圖
專案五:思考題:小明媽媽給他買了若干塊巧克力,小明第一天吃了一半,還不過癮,又多吃了一塊,第二天又將剩下的巧克力吃掉一半,又多吃一塊,以後每天都吃了前一天剩下的一半零一塊。到第10天再想吃時,只剩下一塊了。設計一個程式計算小明媽媽總共給小明買了多少塊巧克力?
解題思路
- 使用一個變數
chocolates
來表示小明媽媽總共給小明買的巧克力的數量,初始值為未知。 - 使用一個變數
currentChocolates
來表示當前剩餘的巧克力數量,初始值為 1。 - 使用一個迴圈來模擬小明每天吃巧克力的過程,從第 10 天倒推到第 1 天:
- 在迴圈中,將當前剩餘的巧克力數量加上一塊(因為小明每天都會多吃一塊),然後乘以 2(因為小明每天都會吃掉一半)。
- 從第 10 天開始向第 1 天逐步推算,就能得到小明媽媽總共給他買了多少塊巧克力。
核心程式碼
#include <stdio.h>
int main() {
int chocolates = 1;
for (int day = 9; day >= 1; day--) {
chocolates = (chocolates + 1) * 2;
}
printf("小明媽媽總共給小明買了 %d 塊巧克力\n", chocolates);
printf("*****************************************\n\n");
printf("23080905040502 王永成\n\n");
printf("*****************************************");
return 0;
}
實驗截圖
四、實驗結果及分析
- 在思考題中我們可以將問題轉化為一個倒推的問題,從第 10 天開始,每一天的巧克力數量都是前一天數量加一後乘以 2。