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

相关推荐
---学无止境---15 分钟前
Linux中dcache和inode缓存回收函数的实现
linux
Мартин.17 分钟前
[Meachines] [Hard] Pollution MyBB+Redis_session+PHP-Filter+PHP-FPM+prototype
linux
总有刁民想爱朕ha19 分钟前
银河麒麟v10 Mysql8部署教程(小白版)
linux·mysql数据库备份
czy878747522 分钟前
用C语言实现原型模式
c语言·原型模式
czy878747524 分钟前
用C语言实现原型模式时,如何确定需要深拷贝还是浅拷贝?
c语言·原型模式
LCG元1 小时前
性能排查必看!当Linux服务器CPU/内存飙高,如何快速定位并"干掉"罪魁祸首进程?
linux·后端
会飞的小新1 小时前
C 标准库之 <errno.h> 详解与深度解析
c语言·开发语言
christine-rr2 小时前
MySQL数据库管理、DDL、DQL、DML、DCL等总结
linux·数据库·mysql
奥尔特星云大使2 小时前
CentOS 7 上通过 RPM 包安装 Zabbix 4.x
linux·centos·zabbix
程序员勾践2 小时前
安装nginx
linux·nginx·centos