提交要求:
1:郵件名稱:學號后三位-題目編號-姓名-期中考試。例如:098-1-沈苗-期中考試
2:不用附件提交,直接寫郵件,內容包括編程思路(寫一段自己對題目的認識、思路、技術細節等)、源代碼、運行結果分析和截圖
題目:
1.編程先由計算機“想”一個1到100之間的數請人猜,如果人猜對了,則結束游戲,並在屏幕上輸出人猜了多少次才猜對此數,以此來反映猜數者“猜”的水平,否則計算機給出提示,告訴人所猜的數是太大還是太小,最多可以猜10次,如果猜了10次仍未猜中的話,則結束游戲。
編程思路:
1)計算機“想”一個1-100的數,則需要程序在運行的時候隨機產生一個1-100之間的自然數,需要使用rand()和srand((int)time(0))函數;
2)猜數者“猜”數:則是用戶每次輸入的數字與隨機產生的數進行比較,使用if..else..進行判斷;
3) 猜數者只有10次機會,則需要使用for或while循環進行控制次數,本程序選擇使用for循環;
4)另外程序結束和程序判斷,需要引入return、break、couture等配合;
源代碼:
#include <stdio.h> #include <stdlib.h> #include<time.h> /* Author:南非波波 E-mail:qingbo.song@gmail.com github:@swht */ /* *產生1-n之間的隨機數 *注意:請配合srand((int)time(0)); */ int RandNum(n) { return rand()%n + 1; } int main() { srand((int)time(0)); //設置隨機數種子 int num = RandNum(100),int_num,i,min=0,max=100; printf("%d\n",num); for(i=1;i<=10;i++) { printf("===============第%d次=======================\n",i); printf("請輸入一個幸運數字:"); scanf("%d",&int_num); if (int_num >100 || int_num < 1) { printf("你輸入的數為%d,不在1-100之間.請重試!\n",int_num); continue; }else if(int_num == num){ printf("恭喜你猜中幸運數字,你猜中的幸運數字為:%d,第%d次猜中.\n",int_num,i); return 0; }else{ printf("你猜的幸運數字不正確,請重試!\n"); if(int_num > num ) { max=int_num; printf("幸運數字范圍縮小為%d-%d!\n",min,max); }else{ min=int_num; printf("幸運數字范圍縮小為%d-%d!\n",min,max); } continue; } } printf("你猜數字次數已達10次上限,很抱歉你未能猜中幸運數字,程序退出!\n"); return 0; }
輸出截圖:
運行結果分析:
該源碼程序會在第一行提示當前為第幾次輸入,提示用戶輸入的幸運數字縮小的范圍,最終用戶正確猜中顯示用戶猜中的數字和當前次數,或者用戶輸入達到10次,程序遺憾退出!
2.
題目描述:任意給定n個整數,求這n個整數序列的和、最小值、最大值
輸入描述:輸入一個整數n,代表接下來要輸入的整數個數,n<=100,接着輸入n個整數
輸出描述:輸出整數序列的和、最小值和最大值,用空格隔開,占一行
樣例輸入:
2
1 2
樣例輸出:
3 1 2
編程思路:
1)用戶輸入的元素個數不定,需要引入數組的概念進行實現;
2)求和,既是轉變成數組元素遍歷,元素值累加,求和,使用for循環進行處理;
3)求最小數,既是轉變成元素遍歷,比較各元素大小,求出最小值,使用for循環嵌套if判斷進行處理;
4)求最大數,既是轉變成元素遍歷,比較各元素大小,求出最大值,使用for循環嵌套if判斷進行處理;
源代碼:
#include <stdio.h> #include <stdlib.h> /* Author:南非波波 E-mail:qingbo.song@gmail.com github:@swht */ int MaxNum(int num[],int n) /* *傳入一個整數型數組和對應數組的長度,輸出數組元素值最大的下標 */ { int i,maxnum=num[0],maxi=0; for(i=0;i<n;i++) { if(num[i]>maxnum) { maxnum=num[i]; maxi=i; } } return maxi; } int MinNum(int num[],int n) /* *傳入一個整數型數組和對應數組的長度,輸出數組元素值最小的下標 */ { int i,minnum=num[0],mini=0; for(i=0;i<n;i++) { if(num[i]<minnum) { minnum=num[i]; mini=i; } } return mini; } int SumNum(int num[],int n) /* *傳入一個整數型數組和對應數組的長度,輸出數組所有元素的和 */ { int i,sum=0; for(i=0;i<n;i++) { sum +=num[i]; } return sum; } int main() { int num[100],i,n,imax,imin,sum; printf("請輸入即將要輸入整數的個數(1-100):"); scanf("%d",&n); if(n>100||n<1) { printf("你輸入的數值不正確,整數個數數值要求在1-100以內!程序退出!"); return 0; } printf("請依次輸入%d個整數:",n); for(i=0;i<n;i++) { scanf("%d",&num[i]); } imax = MaxNum(num,n); imin = MinNum(num,n); sum = SumNum(num,n); printf("%d,%d,%d\n",sum,num[imin],num[imax]); return 0; }
截圖:
運行結果分析:
在運行結果正確的情況下,對程序進行優化處理,將數組求和、求最小數、求最大數封裝成函數,只要傳入整數型數組和數組的長度,即可實現函數返回數據元素和、數組最小元素下標和數組最大元素下標;
增加判斷用戶輸入即將要輸入的元素個數進行判斷,大於100和小於1的進行異常退出操作;
如果用戶輸入的元素不足,則程序不會退出,知道用戶輸入元素個數滿足之前預定的數值,回車才能進行后續處理:
對於輸入元素個數超出之前預定個數,則按照順序僅取前n個元素值:
3.
外賣費。上了一上午的課,終於到了午飯時間,大家討論中午吃什么,有人說吃食堂蓋飯,有人說吃海底撈,最后宿舍長大人一拍桌子,說:叫外賣!於是開始打電話叫外賣,規則如下:每單少於20元(不含)不予以送餐,每單在20(含)到30(不含)元之間收取8塊錢送餐費,每單在30(含)到40(不含)元之間收取5元送餐費,每單在40(含)元以上免費送餐,請你計算這頓午餐的全部費用。
輸入格式:輸入共2行,第一行包括一個整數n(n>=1&&n<=20),表示這一單一共要了幾個菜,第2行有n個浮點數,以空格分開,表示每個菜的價格
輸出格式:輸出1行,包含一個浮點數,表示全部外賣費,保留小數點后面2位,當不夠送餐服務時,輸出error
輸入樣例:
3
10.5 11.5 10.5
輸出樣例:
37.50
編程思路:
1)分階段收取配送費,選擇使用switch..case或if..else..語句進行判斷;
2)輸入菜品個數不定,使用數組的概念,加入for循環遍歷數組讀取輸入的值;
源代碼:
#include <stdio.h> #include <stdlib.h> /* Author:南非波波 E-mail:qingbo.song@gmail.com github:@swht */ int main() { int n,i; double sum,totalsum,num[100]; printf("請輸入預定餐品數量:"); scanf("%d",&n); printf("請輸入每個餐品的價格:"); for(i=0;i<n;i++) { scanf("%lf",&num[i]); sum += num[i]; } if(sum >= 20 && sum < 30) { totalsum=sum+8; printf("你此次外賣費(包含運費8元):%.2lf\n",totalsum); }else if(sum>=30 && sum < 40) { totalsum=sum+5; printf("你此次外賣費(包含運費5元):%.2lf\n",totalsum); }else if(sum >= 40) { totalsum = sum +0; printf("你此次外賣費(免運費):%.2lf\n",totalsum); }else{ printf("你此次外賣費小於20元,不予配送,感謝你的支持!"); } return 0; }
截圖:
運行結果分析:
一定要注意用戶輸入的個數和輸入價格不符的情況,否則引起程序異常。另外需要注意在計算sum值的時候,比較sum值大小是不包含運費在內的。