C语言(一维数组)

如果对你有帮助,请点个免费的赞吧,谢谢汪。(点个关注也可以!)\n\n如果以下内容需要补充和修改,请大家在评论区交流~

思维导图

1.数组

由一个或多个相同的数据类型组成的集合

特点

数据类型相同

内存连续

1 . 1 一维数组

格式

存储类型 数据类型 数组名[元素个数]

int arr[5];

n\]n:只有在定义时,表示元素个数;其他任何情况下都表示索引 #### **访问** **:** 数组名\[索引\]索引从0开始 a\[0\] 第一个元素 a\[4\] 第五个元素 int a\[5\]={5,6,7,8,9}; printf("%d %d %d\\n",a\[0\],a\[2\],a\[4\]); char b\[5\]={'h','e','l','l','o'};//数据类型保持一致 #### **数组名** **:** 数组名也是数组的首地址,是一个地址常量,不能为左值(=左边),不能被修改 int a\[5\]={5,6,7,8,9}; printf("%p %p\\n",a,\&a\[0\]); //地址编号一样 #### **数组大小** **:** int a\[5\]={5,6}; 数据类型\*元素个数 4\*5=20 sizeof printf("%ld\\n",sizeof(a)); 元素个数:决定数组最多存储数据个数 #### 初始化: 1. 全部初始化 int a\[5\]={5,6,7,8,9}; 2. 部分初始化 int a\[5\]={5,6};//56000 未赋值的部分,值默认为0 int a\[5\]={}; //00000 3. 未初始化 inta\[5\]; 值为随机值 a\[0\]=5; a\[1\]=6; #### **循环遍历** **:** int a\[5\]={}; for(int i=0;i\<5;i++) scanf("%d",\&a\[i\]); for(int i=0;i\<5;i++) printf("%d\\n",a\[i\]); 打印出输入的这五个数中的最大值 思路:输入完五个数后,假设第一个数最大,暂时为max 把max和剩下的四个依次比较 比较过程中遇见了更大值,对max重新赋值 比较结束,打印max ![426f5eb5c249704f42d007f51059913c.png](https://img-blog.csdnimg.cn/img_convert/426f5eb5c249704f42d007f51059913c.png) 问题:打印出输入的这五个数中的最大值,及位置,亲们可以试试 #### **内存分配** **:** 内存连续,地址编号差值取决于数据类型的大小 char 地址差1 int 地址差4 #### 清0函数: 1.bzero #include \ void bzero(void \*s, size_t n); 功能:数组元素清零 参数:s:要清零的数组的首地址 n:字节大小 返回值:无 2.memset #include \ void \*memset(void \*s, int c, size_t n); 功能:数组元素清零 参数:s:要清零的数组的首地址 n:字节大小c:要设置的值,设置为0 返回值:清零的数组的首地址 ### **1.2字符数组** 用来存储字符串,用" "包裹,以'\\0'为结束标志 #### **输入输出** **:** 1. for for(int i=0;i\<5;i++) scanf("%c",\&b\[i\]); for(int i=0;i\<5;i++) printf("%c",b\[i\]); 2. %s char b[6]={}; scanf("%s",b); printf("b:%s\n",b); //输入helloworld时,只有hello赋值成功 //scanf默认遇到空格或回车认为赋值结束 // scanf("%[^\n]",b); 3. gets puts get: char \*gets(char \*s); 功能:终端输入字符串 参数:数组首地址 返回值:数组首地址 puts: int puts(const char \*s); 功能:终端输出字符串 参数:数组首地址 返回值:输出字符个数 char b\[33\]={}; gets(b); puts(b); 特别的输入输出 #include int main(int argc, char const *argv[]) { char b[33] = {}; int i = 0,num = 0; scanf("%[^\n]",b); while (b[i] != '\0') { // printf("%c ",b[i]); if (b[i] == 'y') { num++; } i++; } printf("%d\n",num); return 0; } ## 题目: ### 3.输出数组中的最大值 #### 1. #include int main(int argc, char const *argv[]) { int a[5] = {}; for (int i = 0; i < 5; i++) { scanf("%d", &a[i]); } int max = a[0], min = a[0]; for (int i = 1; i < 5; i++) { max = max > a[i] ? max : a[i]; min = min < a[i] ? min : a[i]; } printf("%d\n", max); return 0; } ### 7.打印斐波那契数列前10位: #### 1.先赋值再打印 #include int main(int argc, char const *argv[]) { int a[10] = {1, 1}; for (int i = 2; i < 10; i++) { a[i] = a[i - 1] + a[i - 2]; } for (int i = 0; i < 10; i++) { printf("%d ", a[i]); } printf("\n"); return 0; } #### 2.一边赋值一边打印 ![d4443fe0d32641c67b31c922325bfb1c.png](https://img-blog.csdnimg.cn/img_convert/d4443fe0d32641c67b31c922325bfb1c.png) 优化版: #include int main(int argc, char const *argv[]) { int a[10] = {1, 1}; for (int i = 0; i < 10; i++) { if (i>=2) { a[i] = a[i - 1] + a[i - 2]; } printf("%d ", a[i]); } printf("\n"); return 0; } #### 启发: 如果遍历同一个数组遍历2次范围是包含关系,可以内嵌if条件,if内条件为交集的反集 ### 8.bzero(清0的运用) #include #include int main(int argc, char const *argv[]) { int a[5] = {99,88}; for (int i = 0; i < 5; i++) { printf("%d\n",a[i]); } putchar(10); bzero(a,sizeof(a));//bzero清0 for (int i = 0; i < 5; i++) { printf("%d\n",a[i]); } return 0; } ### 9.memset #include #include int main(int argc, char const *argv[]) { int a[5] = {22,33}; memset(a,0,sizeof(a)); for (int i = 0; i < 5; i++) { printf("%d",a[i]); } putchar(10); memset(a,'c',sizeof(a)); for (int i = 0; i < 5; i++) { printf("%c",a[i]); } putchar(10); memset(a,'1',sizeof(a)); for (int i = 0; i < 5; i++) { printf("%c",a[i]); } putchar(10); return 0; } ### 11。判断如果定义字符串错过后,以下定义方法是否正确 例:判断以下三种赋值方式是否正确 char a[10]; 1)a[10]="hello"; 2)a="hello"; 3)strcpy(a,"hello"); ### 12.练习: 终端输入一个字符串,打印其中'a'出现的次数 #include int main(int argc, char const *argv[]) { char b[33] = {}; int i = 0,num = 0; scanf("%[^\n]",b); while (b[i] != '\0') { // printf("%c ",b[i]); if (b[i] == 'y') { num++; } i++; } printf("%d\n",num); return 0; }

相关推荐
chlk1237 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑7 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件8 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号17 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash21 小时前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
祈安_2 天前
C语言内存函数
c语言·后端
崔小汤呀3 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端