桐桐上幼儿园了,学会了 1 位数字的加法运算,妈妈想考核桐桐的运算能力,于是每次给出一个四位数的整数,让桐桐计算出各位上的数字的和。妈妈想请你帮她写一个程序,能够随机产生一个四位数的整数,同时给出其各位上的数字的和,这样她就能够一边做自己的事,一边考核桐桐了。
输入:随机产生一个四位数整数。
输出:输出整数和其各位数字的和。
1) 首先用 C语言的数学库函数 rand( ) 产生一个随机的四位数整数。
rand( ) 函数能够生成在 0~RAND_MAX 的任意整数。rand( ) 函数和常量 RAND_MAX 均在库文件 stdlib.h 中定义,一般 RAND_MAX 的默认值为最大的 int 整型数 32767。要生成 a~b 的任意整数(包含 a 和 b),可以用以下方式:
a + rand( ) % (b + 1 - a); //rand( ) % (b + 1 - a) 的最大值是 b + 1,最小值是 0
因而,要生成任意四位整数就可以用 1000+rand( )%9000 实现。
事实上,rand( ) 函数产生的是一个伪随机数,重复调用该函数所产生的随机数字是相同的。要想每次执行产生不同的随机数,就需要用 srand( ) 函数进行随机初始化。
随机初始化函数 srand( ) 可以设置随机数生成器的种子,不同的种子将产生不同的随机数。在程序运行过程中时间是一直变化的,所以我们可以借助 time.h 库中的 time(NULL) 函数返回计算机当前的时间数,把它作为随机数生成器的种子,从而在每次执行 rand( ) 函数时产生一个不同的随机数。
将当前时间设置为随机数生成器种子的代码如下:
srand(time(NULL));
2) 拆分这个四位整数,获得其各位上的数字。
拆分一个数可以利用%和/运算符实现。假设 a、b、c、d 分别表示四位整数 number 的个、十、百、千位上的数,则它们的值可以分别表示为:
a = number % 10; //个位数 b = bumber / 10 % 10 //十位数 c = number / 100 % 10 //百位数 d = number / 1000 //千位数
图 1 展示了从一个四位数中拆分出其各位上的数字的过程。
代码清单 1:C语言程序源代码(数字分离)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( )
{
system("color 70");
int number,a,b,c,d,s;
srand(time(NULL));
number = rand()%9000+1000;
a = number % 10;
b = number / 10 % 10;
c = number / 100 % 10;
d = number / 1000;
s = a + b + c + d;
printf("随机生成四位整数:%d\n",number);
printf("各位数字的和:%d + %d + %d + %d = %d\n",d,c,b,a,s);
system("pause");
return 0;
}
运行结果:
随机生成四位整数:9493
各位数字的和:9 + 4 + 9 + 3 = 25