c语言-零基础学习第五讲-随机数+数组

1.生成随机数:

1.1.rand函数:rand( )

rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是依赖编译器上实现的,但是⼤部分编译器上是32767。

rand函数的使⽤需要包含⼀个头⽂件是:stdlib.h

但是,rand函数⽣成的随机数是伪随机的,是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数,默认种⼦是1。

1.2.srand函数:srand (unsigned int seed);

通过srand函数的参数seed来设置rand函数⽣成随机数的时候的种⼦;

如果给srand的种⼦是如果是随机的,rand就能⽣成随机数。

1.3.time函数:

在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。

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

1.4 设置随机数的范围:

如果我们要⽣成0~99之间的随机数:  rand() %100;

如果要⽣成1~100之间的随机数:  rand()%100+1;

所以如果要⽣成a~b的随机数,⽅法如下:

a + rand()%(b-a+1)

2. 猜数字游戏实现:

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

3.数组的概念:数组是⼀组相同类型元素的集合

• 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。
• 数组中存放的多个数据,类型是相同的。

4. ⼀维数组的创建和初始化:

4.1 数组创建:type arr_name[常量值]:

eg  :int math[20] ; double score[10]

4.2 数组的初始化:

//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1}; //第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};

5. ⼀维数组的使⽤:

5.1 数组下标

第几个元素,下标就是几减一,因为下标从0开始。

用arr[m]引用数组中的元素,m为下标。

5.2 数组的打印:

for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}

5.3 数组的输入:

for(i=0; i<10; i++)
{
scanf("%d", &arr[i]);
}

6. 计算数组元素个数:sizeof

注:sizeof计算数组所占内存空间的大小,单位是字节,并非元素个数。

因此:求元素个数:

int sz = sizeof(arr) / sizeof(arr[0])

7. 二维数组:

eg: int arr[3][5]

• 3表⽰数组有3⾏
• 5表⽰每⼀⾏有5个元素

7.1. 二维数组的初始化:

若如 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行

7.2  二维数组的定位:

二维 数组的下标无论行列,都从0开始。

eg : printf("%d\n", arr[2][4])---打印第3行第5列

7.3 二维函数的输入和输出:

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

行循环套列循环。

8.变长数组:

eg : int a=o;

scanf("%d",&a);

int arr[a];

注:变长数组不能初始化,vs不支持变长数组。

注:Sleep函数---Sleep(  )休眠,延迟执行,需包含头文件windows.h

      system("cls")---清理屏幕内容。


 

你可能感兴趣的:(c语言,开发语言)