提交要求:
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值大小是不包含運費在內的。
