rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是依赖编译器上实现的,但是⼤部分编译器上是32767。
rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h
但是,rand函数⽣成的随机数是伪随机的,是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数,默认种⼦是1。
通过srand函数的参数seed来设置rand函数⽣成随机数的时候的种⼦;
如果给srand的种⼦是如果是随机的,rand就能⽣成随机数。
在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。
time函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t类型本质上其实就是32位或者64位的整型类型。
time函数的参数timer如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。
如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。
如果只是让time函数返回时间戳,我们就可以这样写:time(NULL)
time函数需要包含头⽂件:time.h
如果我们要⽣成0~99之间的随机数: rand() %100;
如果要⽣成1~100之间的随机数: rand()%100+1;
所以如果要⽣成a~b的随机数,⽅法如下:
a + rand()%(b-a+1)
#include
#include
#include
void game()
{
int r = rand()%100+1;
int guess= 0;
while(1)
{
printf("请猜数字>:");
scanf("%d", &guess);
if(guess < r)
{
printf("猜⼩了\n");
}
else if(guess > r)
{
printf("猜⼤了\n");
}
else
{
printf("恭喜你,猜对了\n");
break;
}
}
}
void menu()
{
printf("***********************\n");
printf("****** 1. play ******\n");
printf("****** 0. exit ******\n");
printf("***********************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("游戏结束\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
}while(input);
return 0;
}
• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
• 数组中存放的多个数据,类型是相同的。
eg :int math[20] ; double score[10]
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1}; //第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
第几个元素,下标就是几减一,因为下标从0开始。
用arr[m]引用数组中的元素,m为下标。
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
for(i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}
注:sizeof计算数组所占内存空间的大小,单位是字节,并非元素个数。
因此:求元素个数:
int sz = sizeof(arr) / sizeof(arr[0])
eg: int arr[3][5]
• 3表⽰数组有3⾏
• 5表⽰每⼀⾏有5个元素
若如 int arr[3][5]={1,2,3,4,5,6},则一行排满再排第二行。---1 2 3 4 5
6 0 0 0 0
0 0 0 0 0
若要按行初始化,则可int arr[3][5]={{1,2},{3,4},{5,6}};---1 2 0 0 0
3 4 0 0 0
5 6 0 0 0
另:行数可省略,int arr[ ][5]={1,2,3,4,5,6},同样一行排满再排第二行,行数为排完后行数,即2行
二维 数组的下标无论行列,都从0开始。
eg : printf("%d\n", arr[2][4])---打印第3行第5列
int main()
{
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
int i = 0; //遍历⾏
//输⼊
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
scanf("%d", &arr[i][j]); //输⼊数据
}
}
//输出
for(i=0; i<3; i++) //产⽣⾏号
{
int j = 0;
for(j=0; j<5; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
行循环套列循环。
eg : int a=o;
scanf("%d",&a);
int arr[a];
注:变长数组不能初始化,vs不支持变长数组。
注:Sleep函数---Sleep( )休眠,延迟执行,需包含头文件windows.h
system("cls")---清理屏幕内容。