關於C語言的幾個考試編程題目


 

 

提交要求:
1:郵件名稱:學號后三位-題目編號-姓名-期中考試。例如:098-1-沈苗-期中考試
2:不用附件提交,直接寫郵件,內容包括編程思路(寫一段自己對題目的認識、思路、技術細節等)、源代碼、運行結果分析和截圖

題目:

1.編程先由計算機“想”一個1到100之間的數請人猜,如果人猜對了,則結束游戲,並在屏幕上輸出人猜了多少次才猜對此數,以此來反映猜數者“猜”的水平,否則計算機給出提示,告訴人所猜的數是太大還是太小,最多可以猜10次,如果猜了10次仍未猜中的話,則結束游戲。

編程思路

 1)計算機“想”一個1-100的數,則需要程序在運行的時候隨機產生一個1-100之間的自然數,需要使用rand()srand((int)time(0))函數;

 2)猜數者“猜”數:則是用戶每次輸入的數字與隨機產生的數進行比較,使用if..else..進行判斷;

 3)  猜數者只有10次機會,則需要使用forwhile循環進行控制次數,本程序選擇使用for循環;

 4)另外程序結束和程序判斷,需要引入returnbreakcouture等配合;

源代碼

 

#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..caseif..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值大小是不包含運費在內的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM