C语言学习历程

一, 随机数生成

1.rand 函数

     是可以随机生成随机数的,会返回一个伪随机数,其范围在0到RAND-MAX之间,使用时需要加上头文件 #include<stdlib.h>

原型:int rand(void);     void:无,空,表示这个函数不需要参数

 伪随机数是通过某种算法生成的,并不是真正的随机数。rand函数是对一个叫“种子”的基准值进行运算生成的随机数。之所以产生一样的结果,是因为rand函数生成的随机数的默认种子是1,如果要生成不同的随机数,就要让种子是变化的。

2. srand 函数

       用来初始化随机数的生成器的。在调用 rand 函数之前先调用 srand 函数,通过 srand 函数的参数 seed 来设置 rand 函数生成随机数的时候的种子,只要种子在变化,每次生成的随机数序列也就变化起来了。

原型:

  void srand (unsigned int seed);需要一个 unsigned int  的值 ,没有返回。

3. time 函数

 

需加上  #include <time.h>,本质上int 类型或long long 类型,但都是整形。

timet_* 是个指针

  这样就生成随机数了。srand 函数一次运行的程序只需要调用一次就可以了,不需要频繁调用。NULL是空指针的意思。

如果想设置随机数的范围

eg,rand()  % 100 ;生成0到99之间的随机数,余数范围是0到99.

      rand()  %100+1;  生成1到100之间的随机数,

      100+  rand() %(200-100+1);余数范围为0到100,再加100就是100到200

所以要生成a 到b 的随机数    a + rand()%(b-a+1)

二,猜数字游戏

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void menu ()
{
	printf("1.PLAY\n");
	printf("2.EXIT\n");
}
void game()
{
	int guess = 0;                  //生成随机数字,开始猜数字
	int r = rand() % 100 + 1;
	while(1)
	{
		printf("请猜数字");
	    scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if ( guess < r)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}
int main()
{     
	int input = 0;//菜单
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出\n");
			break;
		default:
			printf("请选择1或2");
			break;
		}
	} while (input);
	return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void menu()
{
	printf("1.PLAY\n");
	printf("2.EXIT\n");
}
void game()
{
	int guess = 0;                  //生成随机数字,开始猜数字,设置猜数字的次数
	int r = rand() % 100 + 1;
	int count = 5;
	while (count)
	{
		printf("你还有%d次机会\n",count);
		printf("请猜数字\n");
		scanf("%d", &guess);
		if (guess > r)
		{
			printf("猜大了\n");
		}
		else if (guess < r)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("YOU LOST\n");
		printf("正确答案是%d\n", r);
	}
}
int main()
{
	int input = 0;//菜单
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出\n");
			break;
		default:
			printf("请选择1或2\n");
			break;
		}
	} while (input);
	return 0;
}

 三,数组

      数组是一组相同类型元素的集合,个数不能是0,。

1.创建的语法

   type  arr_name[ 常量值 ];

【】内的数字既可以表示元素个数,又可指标号。 

2.数组的初始化

   数组的初始化一般使用{    },将数据放在大括号

如果数组初始化了省略掉数组大小,数组的大小是编译器根据初始化的内容确实的

3.数组是一种自定义类型。

4.数组的下标

     数组 1    2    3   4    5    

     下标 0   1     2   3    4

 

 指定数组元素的下标可以用变量,而创建数组时不能用下标。

5.数组的输入    scnaf(“%d”,&num1[ i] );

6.数组的存贮   

     数组再内存中是连续存放的,随着下标的增长,地址是由低到高变化的。

7. sizeof 计算数组元素个数

         sizeof (数组名)计算的是数组所占内存空间的大小,单位是字节。  每个元素的大小是4个字节。元素个数应该先以[   ]给的数为准,计算公式为[  ] * 4

        使用时如果后面是类型则括号不能省,如果是后面是变量或数组是可以省的。

   sizeof 的计算结果是size_t 类型的,size_t 是无符号的整形。

四,二维数的创建

 

1.  二维数组的每个元素是一维数组,将一维数组作为一个数组的元素就是二维数组。

type  arr _name[ 常量1(行) ][ 常量2(列) ]

2. 初始化:                                        不完全初始化           先放满一组,再接着放

完全初始化,可以选择放入  

                                                             行可以省略,列不能省略

        标号         列    0                    1                         2                           3

          行      arr[0]  arr[1] arr[ 2]

1234
2345
3456

3. 在内存中的存贮

    每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素也是相差4个字节,所以二维数组中的每个元素都是连续存放的。

五,C99中的变长数组 

 

 

 int n = a+b;

int arr [ n] ;变长数组的基本特征就是数组长度只有在运行时才能确定,所以变长数组不能初始化

  变长数组的意思是数组的大小是可以使用变量来指定的,程序运行根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的,它是不可变的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值