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

相关推荐
南风与鱼3 分钟前
Linux 线程池
linux·线程池
houliabc10 分钟前
C语言个人笔记
c语言·数据结构·笔记·算法
Mazy.v22 分钟前
Linux图形化界面
linux·运维·数据库
Linux技术芯22 分钟前
#Linux内存管理# 在ARM32系统中,页表是如何映射的?在ARM64系统中,页表又是如何映射的?
linux
小王努力学编程32 分钟前
【Linux网络编程】UDP Echo Server的实现
linux·运维·服务器·网络·c++·学习·udp
想睡hhh32 分钟前
Leetcode12 13——罗马数字与整数之间的转换
linux·运维·服务器
阿里云云原生36 分钟前
如何使用通义灵码玩转Linux - AI编程助手提升效率
linux
Peter_chq37 分钟前
selenium快速入门
linux·开发语言·chrome·python·selenium
双叶83642 分钟前
(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)
c语言·开发语言·c++·单片机·嵌入式硬件·microsoft·51单片机
Dklau-c1 小时前
『Linux_网络』 第一章 网络基础概念
linux·服务器·网络