for,if语句的综合运用



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

以上便是本次分享的全部内容,如存在不足之处请指出,谢谢您的浏览!