for,if语句的综合运用
学完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;
}
以上便是本次分享的全部内容,如存在不足之处请指出,谢谢您的浏览!