C基础-06(整型数组、字符数组与字符串、随机函数)

(内容为学习笔记,如有错误,还望指正,如有遗漏,还望补充) 

1.整型数组

1)数组的定义

        数组是一种数据结构,它可以储存多个相同类型的元素。整型数组,顾名思义就是元素是整型的数组。

2)如何定义一维整型数组

        int a[5];

        元素类型 数组名[元素个数];

3)如何初始化

        数组初始化的方式有三种,分别是完全初始化部分初始化默认初始化,前两种都需要定义数组时指明数组的元素个数,具体如下。

//完全初始化
int a[5] = {1,2,3,4,5};  //定义一个整型数组a,他有5个元素分别是1,2,3,4,5

//部分初始化
int a[5] = {1,2};  //定义一个整型数组a,他有5个元素分别是1,2,0,0,0

//默认初始化
int a[] = {0,1,2,3,4,0,4};  //定义一个整型数组a,他有7个元素分别是0,1,2,3,4,0,4

4)一维整型数组的应用

        在程序编写中,很多时候都会遇到需要定义数个相同类型变量的时候,如果这些变量的应用场景适用范围的作用没有太大的区别,通常会用数组来降低程序的理解难度。

        例如,我们需要登录十个同学的成绩,如果每个人的成绩都以他们各自的名字来命名为变量,就显得过于复杂,如果出现重名的学生也会变得很麻烦,如果每个学生都有一个属于自己的编号,即学号,那将他们的成绩都已编号的形式存在一起就会很方便,使用数组就是一个非常不错的选择。 

        以下代码反映了上述的过程,可以注意到,定义数组时写int a[10],此处的10说明了数组有10个元素,而运用数组是,数组的下标为0~9,即a[0],a[1],a[2]...a[8],a[9]。

int a[10];
for(i = 0; i < 10; i++)
{
    scanf("%d",&a[i]);  //输入每个学生成绩
}
for(i = 0; i < 10; i++)  //遍历并打印整个数组
{
    printf("%d ",a[i]);
}
printf("\n");

2.字符数组和字符串

(由于这部分涉及到一些指针的知识,可能写的不是很细)

1)字符串

在C语言中字符串常量必须由""包含,当由""包含字符串时,系统会默认在尾部加上'\0'

"hello world"//是字符串常量,12个字符,'\0'是字符串中不可缺少的字符

"w"//是字符串常量,2个字符,'w' '\0'

""//是字符串常量,1个字符 '\0'

//输出'\0'什么显式都没有。'\0'存在唯一的意义就是作为字符串的结尾。

2)字符串要点

a.'\0' 是由c编译系统自动加上的。 只要写""就会补'\0'

b.字符串常量是由双引号引起来的。

c.字符串长度 计算字符串的长度,不算结尾的 '\0' "hello" 字符串长度是5。

d.字符串占内存的大小(长度) 就是字符串在内存中移动占的字节数,要算'\0','\0'也是一个字符,只不过输出的什么都没有。"hello" 占内存6个字节。

3)字符数组初始化

char s[] = "hello"; //默认初始化,s是字符串,s中有6个元素

char a[] = {'h','e','l','l','o','\0'}; //默认初始化,a是字符串,a中有6个元素

char b[] = {'h','e','l','l','o'}; //默认初始化,b不是字符串,b中只有5个元素

char c[10] = {'h','e','l','l','o'}; //部分初始化,其他元素默认补0,c中数据是字符串,因为0就是'\0'

区分:

        0 整数零,ascii码为0。

        '\0' 字符杠零 ,ascii码为0,字符杠零就是整数零。

        '0' 字符零,就是一个普通字符,ascii码为48,和上面两者没有关系,没有任何特殊的含义。

4)字符输入输出函数

输入函数:

getchar();//从输入缓存中输入一个字符,执行一次只能输入一个字符

输出函数:

putchar();//向输出缓存输出一个字符

 例子:

int main()
{
    char a;
	a = getchar();  //输入一个字符,将输入的字符放在变量a中。
	putchar(a);  //输出一个字符a
	putchar('\n');  //再输出一个\n
	return 0;
}

5)字符串输入输出函数

输入:

gets();//相当于scanf("%s");

输出:

puts();//相当于printf("%s");

例子:

int main()
{
	char buf[100];  //字符数组用于存放我们输入的字符串
    printf("gets输入\n");	
    gets(buf);  //将输入的字符串放到数组buf中
    
    printf("puts输出\n");	
    puts(buf);  //输出数组buf中存放字符串,会在输出后自动加\n
    
    printf("scanf 输入\n");	
    scanf("%s", buf);  //将输入的字符串放到数组buf中,scanf输入字符串时,遇到空格结束
    
    printf("printf输出\n");	
    printf("%s\n", buf);  //输出数组buf中存放字符串
    return 0;
}  //数组名就是地址,只想数组首元素的地址

6)字符串处理函数

头文件:

#include<string.h>

 函数:

a.求字符串长度函数

int strlen(const char *string);
//参数:存放字符串的数组名或者字符串常量 
//返回值:字符串长度,字符串长度不包含'\0'

str[10] = "hello";
printf("%d\n",strlen(str));  //输出5

b.字符串拷贝函数:

 char *strcpy(char *strDestination, const char *strSource); 
//参数1:目标数组的数组名,要把字符串拷贝到这个数组里,我们自己保证数组得够长。 
//参数2:要拷贝的字符串,可以是存放字符串的数组名,也可以是字符串常量 
//返回值:参数1

char str[10] = "hello";
char dst[10];
strcpy(dst,str);
printf("%s\n",dst);  //输出hello

c.字符串连接函数:

 char *strcat(char* strDestination, const char* strSource); 
//参数1:存放字符串的数组,保证长度够长。将字符串拼接到这个数组中存放的字符串的后面 
//参数2:要拼接到后面的字符串,可以是存放字符串的数组名,也可以是字符串常量。 
//返回值:参数1

char str[10] = " world";
char dst[20] = "hello";
strcat(dst,str);
printf("%s\n",dst);  //输出hello world

d.字符串比较函数:

 int strcmp(const char *string1, const char *string2); 
//参数1:比较的第一个字符串,可以是存放字符串的数组名,也可以是字符串常量 
//参数2:比较的第二个字符串,可以是存放字符串的数组名,也可以是字符串常量 
//返回值:返回值不是表示真假的值,而是两个字符串中首个不相同字符的ascii码差值

char str1[10] = "hello";
char str2[10] = "helln";

printf("%d\n",strcmp(str1,str2));  //输出'o'和'n'的ascii码差值1

3.随机函数

 1)头文件

#include<stdlib.h>  //包含了很多有用的函数,包含了本次要说的随机函数
#include<time.h>

2)用法

srand();  //设置随机种子的函数,后面生成的一系列随机数,都是根据种子数计算出来的。
//seed random		set random

rand();  //random  产生一个随机数,每调用一次rand()会产生一个随机数

time(); //获得当前时间,单位是秒

        具体用法如下。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
	srand(time(0));//为了让随机看上去更加的真实,我们使用当前的时间作为种子数,time(0)是固定用法获得当前时间的功函数,时间从1970年1月1日到现在的秒数,只要程序不是在同一秒内运行,那么生成的随机数就不一样
	int i;
	for(i = 0;i < 10;i++)
	{
		int r = rand()%100;//rand生成的随机数,是无符号int全范围的数,范围太大,所以我们会使用%限制范围,%100将随机数范围限制在0~99
		printf("%d ", r);
	}
	printf("\n");
	return 0;
}

        关于rand()%100,其意义在于将随机数压缩到0~99这100个数的范围,也就是说对n求余,得到的就是0~n-1这n个数的值域范围。

        例如我想要随机数保持在-10~10这21个数之中,就可以写int r = rand()%21-10;"

小知识:

         函数time(0)返回自Unix纪元(1970年1月1日)以来的当前时间(以秒为单位)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值