1. 程式人生 > 其它 >C語言小白成長日記

C語言小白成長日記

技術標籤:C語言學習成長日記c語言演算法

for,if語句的綜合運用

C語言小白成長日記:記錄成長的每一天
博主為專科大一新生,初學C,以下存在不足之處還望多加指導


學完for迴圈,今天佈置了3道C語言練習題,發現有一道題很有意思,有什麼不一樣呢?下面我們來一起看看題目: 隨機產生N個【A ,B】區間的三位整數並輸出,要求N、A、B由鍵盤輸入。
題目分析:

仔細閱讀題目我們會發現題目中給出了生成隨機數的個數,限制了生成隨機數值的範圍,但是並未限制A,B的輸入範圍。所以說我們需要解決的是:

  1. 生成隨機數功能.
  2. 生成使用者輸入指定的隨機數個數.
  3. 生成的隨機數必須為三位整數且在輸入的區間範圍內.

此題的思路和解題方向我們已經逐漸瞭解,那麼我們該如何來一步步完成實現呢?接來我們開始逐步完成程式。


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;
}



以上便是本次分享的全部內容,如存在不足之處請指出,謝謝您的瀏覽!