C语言笔记(四)----数组



来源:微信公众号「编程学习基地」

数组

数组的定义
  • 为什么要使用数组

单一的变量很难满足需求,这个时候多变量的集合数组出现了

  • 数组的定义

类型 数组名[数组大小];

	int arr[100];	//定义100个int类型的变量 

类型可以是int double float char 这些基本数据类型中的任意一种

  • 数组的初始化
	int arr[10] = {1,2,3,4,5,6,7};	//初始化
	arr[1] = 100;					//赋值
数组元素的使用
  • 数组的使用方式
	for(int i=0;i<100;i++)
    {
        arr[i]=i+1;	//给数组赋值从1到100
    }
下标运算符[]

[ ]里面的数字 称之为下标

下标从0开始

下标不能超过定义的数组大小

	int arr[4];
	arr[4] = 5;	//错误写法 arr数组只有0,1,2,3这三个下标
  • 注意事项
  1. 初始化可以给一组数据赋值,后面用{} 括起你要赋值的数据,数据用逗号隔开
  2. 赋值的个数少 未赋值的用0赋值
#include<stdio.h>
int main()
{
    int arr[10]={1,2,3,4,5,6,7};	//初始化
    for (int i = 0; i < 10; i++)
	{
		printf("%d\t", arr[i]);		//打印结果为1 2 3 4 5 6 7 0 0 0
	}
	printf("\n");
    return 0;
}
  1. 定义数组的时候可以不指定数组大小,但必须初始化,系统自动分配大小
	int arr[];				//错误  
	int arr[]={1,2,3,4,5,6};//正确
  1. 数组的大小不建议省略
循环和数组的搭配
斐波那契数列

斐波那契数列:1 1 2 3 5 8 13 21 34… 每一个元素是前两个元素之和

#include<stdio.h>
int main()
{
    int Fabo[20]={1,1};
    //循环给Fabo数组赋值
    for(int i=2;i<20;i++)
    {
        Fabo[i]=Fabo[i-1]+Fabo[i-2];
    }
    //输出斐波那契数列
    for (int i = 0; i < 20; ++i)
	{
		printf("%d\t", Fabo[i]);
	}
	printf("\n");
    return 0}
二维数组和多维数组
  • 数组的定义

类型 数组名[ 行 ] [ 列 ]

	int Arr[3][4]={ { 1, 2, 3 }, { 1, 2 }, { 2, 3, 4, 5 } };	//初始化
	Arr[0][0]=100;												//赋值
  • 数组的使用方式

    实例:杨辉三角
#include<stdio.h>
#define N 10
int main()
{
	int a[N][N]={{1},{1,1}};
	int i,j;
	for(i=2;i<N;i++)
	{
		for(j=0;j<=i;j++)
		{			
			a[i][j]=a[i-1][j]+a[i-1][j-1];	//上方和左上角之和
		}
	}
    //打印杨辉三角
	for(i=0;i<N;i++)
	{
		for(j=0;j<=i;j++)
		{
			printf("%d\t",a[i][j]);
		}
		printf("\n");
	}
}

打印效果:

1
1       1
1       2       1
1       3       3       1
1       4       6       4       1
1       5       10      10      5       1
1       6       15      20      15      6       1
1       7       21      35      35      21      7       1
1       8       28      56      70      56      28      8       1
1       9       36      84      126     126     84      36      9       1
Press any key to continue
字符数组
  • 字符串常量
  1. 什么是字符串常量

一般用一对双引号" "括起的一串字符来表示字符串常量 例如:“hello world”

  1. 字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中。
  2. %s用于打印字符串
printf("%s", "hello world");
  • 字符数组
  1. 字符串只能用字符数组存放
char str[128];	//字符数组
printf("请输入一段文字\n");
scanf("%s", str);//让用户输入一个字符串
printf("用户输入的内容是:%s", str);
  • 字符串用’\0’ 作为字符串结尾

\0 对应的ASCII码是0

一般使用字符串的时候会自动加在后面

  • 一段代码让你了解字符串

首先输入下面的代码,运行

#include<stdio.h>
int main()
{
	char arr[128];
	printf("请输入一段文字:");
	scanf("%s",arr);
	printf("%s\n",arr);
	for(int i=0;i<128;i++)
	{
		printf("%c",arr[i]);
	}
	return 0;
}

输入helloworld 运行结果

请输入一段文字:helloworld
helloworld
helloworld 烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫 烫烫烫烫蘌ress any key to continue
  1. 你输入helloworld,%s打印helloworld
  2. %c打印helloworld之后有一个空格,然后后面全是烫烫烫烫
  3. 事实表明每一个字符串后面都有一个’\0’
  4. 烫烫烫烫烫烫烫烫烫烫烫烫是没有意义的,因为他们没有赋值,换成%d打印arr里面的元素,你会发现烫烫烫对应的数字为-52,而ASCII码表只有0~128,所以显示乱码
  • 字符串的赋值方式
  1. 单个元素赋值(不推荐)
	char arr[6];
	arr[0]='h';
	arr[1]='e';
	arr[2]='l';
	arr[3]='l';
	arr[4]='o';
	arr[5]='\0';
	printf("arr字符串内容为:%s\n",arr);	//输出hello
  1. 初始化赋值字符串
	char arr[6]="hello";
	printf("arr字符串内容为:%s\n",arr);	//输出hello
  1. 中文 一个汉字需要占用两个char

汉字占用两个字节 (视为字符串) 不能用%c打印中文

  • 注意事项
  1. 输入数组的时候不用加&取地址符号,只需要输入数组名(数组名就是地址)
char str[128];	//字符数组
scanf("%s", str);//让用户输入一个字符串
  1. 字符数组单个元素赋值一定要加’\0’否则会出现乱码 “烫烫烫”
  2. 尽量保证字符数组足够大,否则输入的内容大于字符数组大小会出现越界。
char arr[10] = "helloworld";	//数组大小太小了 会报错
字符数组和字符串的区别
  1. 多个字符,不一定代表一个字符串,他可能是一个字符数组,而不是字符串
  2. 字符数组:他是不包含末尾结束符’\0’
  3. 字符串:多个字符,但是它的末尾是有结束符’\0’
	char name[5]={'a','b','c','d','e'};	//字符数组
	char name[5]={'a','b','c','d','\0'};//字符数组
  1. 通过双引号"hello world"在末尾自动加上’\0’ ‘\0’占一个位置
字符串函数
字符串输入输出函数
  • gets

用法:gets(字符数组名) 用于输入一个字符串

  • puts

用法:puts(数组名) 用于输出一个字符串

字符串处理函数

需要加头文件#include<string.h>

  • strcmp

用法:strcmp(字符串,字符串2) 比较两个字符串

#include<stdio.h>
#include<string.h>
int main()
{
	char a[20],b[20];
	puts("请输入字符串a:");
	gets(a);
	puts("请输入字符串b:");
	gets(b);
	int temp=strcmp(a,b);
	if(temp==0)
		printf("这两个字符串相同\n");
	else if(temp>0)
		printf("字符串a比b大");
	else if(temp<0)
		printf("字符串a比b小");
	return 0;
}

需要注意的是比较规则不是看ASCII码值的大小

  • strcpy

用法:strcpy(字符数组1,字符串2 ) 将字符串2复制到字符数组1中去(覆盖)

	char str1[10]="hello";
	char str2[10];
	str2=str1;	//没有这种语法,会报错
	
	char str3[10];
	str3="hello";`//左值地址是不能修改的 会报错
  • strcat

用法:strcat(字符数组1,字符数组2) 将字符串2拼接到字符数组1中去(追加)

	char str1[10]="hello",str2[]="world";
	strcat(str1,str2);	//str1的内容是"helloworld"
  • strlen

用法:strlen(字符串) 求字符串长度(\0前面有效字符的个数)

	printf("字符串的长度为:%d",strlen("hello"));	
	//打印字符串的长度为:5
  • 不常用函数
函数作用
strstr(字符串1,字符串2)断一个字符串里面是否含有某个字符
strlwr(字符串)将字符串中大写字母转换成小写字母
strupr(字符串)将字符串中小写字母转换成大写字母
sprintf()格式化输出

strstr使用示例

	if (strstr("张三李四王五", "四王") != 0)	//字符串2属于字符串1返回不为0的数,否则返回0
	{
		puts("字符串1中含有字符串1");
	}
	else
	{
		puts("字符串1中不含字符串2");
	}

sprintf()的使用示例

这个函数很实用,对于计算机软件专业的来说用的特别多

//简单使用的示例,我必须说明额是它的功能很强大
#include<stdio.h>
int main()
{
  int a;
  char arr[100];
  scanf("%d",&a);
  sprintf(arr,"我有%d亿人民币",a);
  printf("%s",arr);
  putchar(10);
  return 0;
}
注意事项
  1. gets和scanf的区别

同样是输入字符串,gets输入的字符串可以包含空格scanf遇空格结束输入

  • 示例
#include<stdio.h>
int main()
{
	char arr[128];
	printf("请输入字符串:");
	gets(arr);
	printf("你输入的字符串为:%s\n",arr);

	printf("请输入字符串:");
	scanf("%s",arr);
	printf("你输入的字符串为:%s\n",arr);
	return 0;
}

输入输出:

请输入字符串:hello world
你输入的字符串为:hello world
请输入字符串:hello world
你输入的字符串为:hello
Press any key to continue
  1. 字符串处理函数一定要加头文件
#include<stdio.h>
  1. strcpy,strcat这两个函数要注意字符数组的大小
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是一种广泛应用于计算机科学和软件开发的编程语言。它具有强大的功能和灵活性,适用于开发各种类型的应用程序。 C语言专题精讲篇是一个对C语言进行深入学习和讲解的系列文章或课程。它汇总了C语言相关的重要知识点和技巧,旨在帮助学习者更好地理解和运用C语言。 这个专题中的笔记涵盖了C语言的各个方面,包括基本语法、数据类型、运算符、流程控制、函数、数组、指针、结构体、文件操作等。通过系统性的学习和总结,这些笔记可以帮助学习者逐步掌握C语言的核心概念和常用技巧。 在这个专题中,学习者可以学到如何编写简单的C程序,如何使用变量和运算符进行计算,如何使用条件和循环语句控制程序流程,如何使用函数进行代码的模块化,如何使用数组和指针进行数据的处理,如何使用结构体组织复杂数据,如何进行文件的读写等等。 C语言专题精讲篇的目的是帮助学习者全面、深入地了解C语言的各个方面,并能够独立编写和调试简单到中等难度的C程序。通过反复实践和练习,学习者可以逐渐提高自己的编程能力,并为进一步学习更高级的编程语言打下坚实的基础。 总之,C语言专题精讲篇的笔记汇总是一份重要的学习资料,可以帮助学习者系统地学习和掌握C语言的基础知识和常用技巧,为他们未来的编程之路打下坚实的基石。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeRoy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值