C語言小白成長日記
for,if語句的綜合運用
C語言小白成長日記:記錄成長的每一天
博主為專科大一新生,初學C,以下存在不足之處還望多加指導
學完for迴圈,今天佈置了3道C語言練習題,發現有一道題很有意思,有什麼不一樣呢?下面我們來一起看看題目: 隨機產生N個【A ,B】區間的三位整數並輸出,要求N、A、B由鍵盤輸入。
題目分析:
仔細閱讀題目我們會發現題目中給出了生成隨機數的個數,限制了生成隨機數值的範圍,但是並未限制A,B的輸入範圍。所以說我們需要解決的是:
- 生成隨機數功能.
- 生成使用者輸入指定的隨機數個數.
- 生成的隨機數必須為三位整數且在輸入的區間範圍內.
此題的思路和解題方向我們已經逐漸瞭解,那麼我們該如何來一步步完成實現呢?接來我們開始逐步完成程式。
1.生成隨機數功能:
本題中因為要隨機生成三位數,因此用到 rand() 函式來實現隨機功能(並不是真正意義上的隨機,而是偽隨機)具體使用方法請移步:C語言之隨機數函式( rand() )的使用方法
以下為要用到的 time() rand() 函式需要包含標頭檔案,以及進行偽隨機數序列初始化語句:
#include <stdlib.h>//rand()函式標頭檔案
#include <time.h>//time()函式標頭檔案
srand(time(NULL));//偽隨機數序列初始化
2.生成使用者輸入指定的隨機數個數:
題目中,需要生成生成使用者指定的隨機數個數,經過分析我們知道會進行隨機數的迴圈生成和輸出,即使用者需要生成多少個隨機數,則隨機數的生成和輸出就會迴圈多少次,在這裡我們需要使用所學習的:已知次數的迴圈語句for 迴圈
for (i = 0;;)
{
num = rand() % (b - a + 1) + a;//生成指定範圍內的隨機數
printf("%d\n", num);//輸出所生成的隨機數
i++;//設定計步器,記錄迴圈次數,即記錄生成隨機數個數
if (i == n)//進行判斷生成的隨機數個數是否等於使用者輸入值
{
break ;//條件為真,則跳出迴圈.
}
}
printf("\n");
3.生成的隨機數必須為三位整數且在輸入的區間範圍內:
閱讀題目,我們會發現題要求生成三位正整數,但題中未對區間進行範圍限定,且未指明區間的資料型別。首先我們進行定義變數:
int i = 0, n,num;//i:計步、n:使用者隨機產生個數、num:隨機數
int a,b;//分別代表始末區間
區間範圍A<B(始末區間隱含條件)而不同的區間範圍則需要我們分類進行程式設計:
1.當輸入的區間,兩個數都是三位數時,隨機數範圍由使用者給出的區間進行決定。
如下:
if (a >= 100 && a <= 999 && b >= 100 && b <= 999 && a < b)
{
for (i = 0;;)
{
num = rand() % (b - a + 1) + a;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
2.當起始值A<100,B仍為一個三位數時,隨機數範圍為100~B,是使用者給出的“B”值進行決定
如下:
if (a < 100 && b >= 100 && b <= 999)
{
for (i = 0;;)
{
num = rand() % (b - 100 + 1) + 100;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
3.當起始值A<100,B>999時,隨機數範圍為100~999,不由使用者給出的區間值進行決定
如下:
if (a < 100 && b > 999)
{
for (i = 0;;)
{
num = rand() % (999 - 100 + 1) + 100;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
4.當起始值A為一個三位數時,B>999時,隨機數範圍為A~999,是使用者給出的“A”值進行決定
如下:
if (a >= 100 && a <= 999 && b > 999)
{
for (i = 0;;)
{
num = rand() % (999 - a + 1) + a;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
5.當輸入的區間不合法(A>B)或最大值小於100或最小值大於999時,則都將無法生成三位隨機數
如下:
if (a > b || b < 100 || a > 999 && b > 999)
{
printf("\n輸入錯誤!!!\n");
}
最終完整程式程式碼:
/*隨機產生N個【A ,B】區間的三位整數並輸出,要求N、A、B由鍵盤輸入。*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int i = 0, n, a, b, num;
printf("請分別輸入產生隨機數個數、始末區間數,以空格隔開: ");
scanf("%d%d%d", &n, &a, &b);
if (a >= 100 && a <= 999 && b >= 100 && b <= 999 && a < b)
{
for (i = 0;;)
{
num = rand() % (b - a + 1) + a;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
if (a < 100 && b >= 100 && b <= 999)
{
for (i = 0;;)
{
num = rand() % (b - 100 + 1) + 100;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
if (a < 100 && b > 999)
{
for (i = 0;;)
{
num = rand() % (999 - 100 + 1) + 100;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
if (a >= 100 && a <= 999 && b > 999)
{
for (i = 0;;)
{
num = rand() % (999 - a + 1) + a;
printf("%d\n", num);
i++;
if (i == n)
{
break;
}
}
printf("\n");
}
if (a > b || b < 100 || a > 999 && b > 999)
{
printf("\n輸入錯誤!!!\n");
}
return 0;
}
以上便是本次分享的全部內容,如存在不足之處請指出,謝謝您的瀏覽!