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

相关推荐
牧以南歌〆2 小时前
在Ubuntu主机中修改ARM Linux开发板的根文件系统
linux·arm开发·驱动开发·ubuntu
jz_ddk2 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
夜月yeyue3 小时前
设计模式分析
linux·c++·stm32·单片机·嵌入式硬件
kfepiza3 小时前
Debian的`/etc/network/interfaces`的`allow-hotplug`和`auto`对比讲解 笔记250704
linux·服务器·网络·笔记·debian
无小道3 小时前
c++-引用(包括完美转发,移动构造,万能引用)
c语言·开发语言·汇编·c++
cuijiecheng20184 小时前
Ubuntu下布署mediasoup-demo
linux·运维·ubuntu
FirstFrost --sy5 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森5 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
独行soc6 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网
java龙王*6 小时前
开放端口,开通数据库连接权限,无法连接远程数据库 解决方案
linux