复习第五课 C语言-初识数组

news/2024/4/29 11:46:01/文章来源:https://blog.csdn.net/weixin_42352787/article/details/131732640

目录

【1】初识数组

【2】一维数组

【3】清零函数

【4】字符数组

【5】计算字符串实际长度

练习:


【1】初识数组

1. 概念:具有一定顺序的若干变量的集合

2. 定义格式:

数组名 :代表数组的首地址,地址常量,不能为左值

访问元素 :数组名[下标],下标从0开始,到n-1;

数组越界问题需要注意!!!

3. 特点:数据类型相同,内存连续

4. 注意:

  • 数组的类型就是数组元素的数据类型
  • 数组名符合标识符命名规则
  • 同一个函数中,数组名不能和其他变量名相同
  • 【】下标从0开始到n-1结束

【2】一维数组

1.格式

数组名: 代表数组的首地址,地址常量,不能为左值

访问元素:数组名[下标], 下标从0开始,到n-1;

数组越界问题需要注意!!!

2.初始化:

1)全部初始化:int a[5]={1,2,3,4,5}; // 1 2 3 4 52)部分初始化:未被赋初值的元素值为0int a[5]={1,2,3}; //1 2 3 0 03)未初始化:只能单个赋值,未被赋初值的元素值为随机值int a[5]; a[0]=1; a[2]=3; //1 随机 3 随机 随机

3.定义空数组:

int a[5]={0,0,0,0,0};

int a[5]={0};

int a[5]={};

4.引用

1)先定义向后引用

2)每次只能引用数组的一个元素a[i],如果想要引用所有元素,可以for循环遍历

3)防止数组越界

4)打印数组元素地址,%p

5.内存分配

5. 数组遍历

for循环,把元素下标作为循环变量,循环范围就是0~n-1

6. 数组的大小

sizeof(数组名) 数据类型的大小*元素个数

练习:计算斐波那契数列前15项并逆序输出

1 1 2 3 5 8 13 21 .....

#include <stdio.h>
int main(int argc, char const *argv[])
{int arr[15] = {1, 1};for (int i = 2; i < 15; i++){arr[i] = arr[i - 1] + arr[i - 2];}for (int i = 14; i >= 0; i--){printf("%d ", arr[i]);}return 0;
}

【3】清零函数

头文件:#include <strings.h>
void bzero(void *s, size_t n);
功能:将内存空间置零
参数:
s:要清空内存的首地址
n:要清空字节数
返回值:无
例子:
int a[5]={1,2,3,4,5};
bzero(a,sizeof(a));		//以地址a开始,将sizeof(a)个字节清空为0
头文件:#include <string.h>
void *memset(void *s, int c, size_t n);
功能:将内存空间设置为0
参数:
s:要清空内存的首地址
c:要设置的值,0
n:要清空字节数
返回值:要清空内存的首地址
例子:
int a[5]={1,2,3,4,5};
memset(a,0,sizeof(a));		//以地址a开始,将sizeof(a)个字节设置为0

【4】字符数组

1.定义方式

1)char a[]={'a','b','c'};	//sizeof(a)==3,	单个字符赋值
2)char b[]={"abc"};		//sizeof(b)==4,字符串赋值
3)char c[]="abc";			//sizeof(c)==4,字符串赋值

注意:字符串赋值经常容易忽略数组的长度,一定要注意数组越界!!!

2. 输入输出

输入:
char buf[32]={};
1)	scanf("%s",buf);		//遇到空格或\n都会认为字符串输入完成,结束scanf("%[^\n]",buf);	//直到遇到\n才会结束,字符串可以包含空格2)gets
char *gets(char *s);		//gets不会检查数组越界
功能:从终端获取字符串
参数:
s:目标数组的首地址
返回值:同参数、输出:
1)printf("%s",buf);		//打印到\0为止2)puts
int puts(const char *s);
功能:向终端输出字符串
参数:
s:要输出字符串的首地址
返回值:输出字符的个数(包括\0)

练习1:输入一串字符,计算其中空格个数

#include <stdio.h>int main() {char str[100];int count = 0;printf("请输入一串字符:");scanf("%[^\n]", str);// 遍历字符串,计算空格个数for (int i = 0; str[i] != '\0'; i++) {if (str[i] == ' ') {count++;}}printf("空格的个数为:%d\n", count);return 0;
}

练习2:将一串字符串进行倒置,例如:char buf[32]=”hello”;

#include<stdio.h>
int main(int argc, char const *argv[])
{char buf[32]="hello";char t;int n,i;for(n=0;buf[n] != '\0';n++);//n==5,实际个数for(i=0;i<n/2;i++)//交换n/2次{t = buf[i];buf[i] = buf[n-1-i];buf[n-1-i] = t;}printf("%s\n",buf);return 0;
}

【5】计算字符串实际长度

1.通过for循环,直到\0为止2. #include <string.h>
size_t strlen(const char *s);
功能:计算字符串实际长度,不计算\0
参数:
s:要计算的字符串首地址
返回值:实际长度
例如:char buf[32]="hello";
int t = strlen(buf);		//t == 5

区分strlen和sizeof

1. strlen是函数;sizeof是关键字

2. strlen是用来计算字符串的实际长度;sizeof计算数据所占空间大小

3. strlen不计算\0,sizeof计算\0,字符数组省略元素个数时,sizeof比strlen大1

练习:

1.在终端输入大写字母、小写字母、空格、数字,分别在终端输出他们的个数

#include <stdio.h>int main() {char ch;int uppercaseCount = 0;int lowercaseCount = 0;int spaceCount = 0;int digitCount = 0;printf("请输入一串字符,以回车结束:\n");while ((ch = getchar()) != '\n') {if (ch >= 'A' && ch <= 'Z') {uppercaseCount++;} else if (ch >= 'a' && ch <= 'z') {lowercaseCount++;} else if (ch == ' ') {spaceCount++;} else if (ch >= '0' && ch <= '9') {digitCount++;}}printf("大写字母个数:%d\n", uppercaseCount);printf("小写字母个数:%d\n", lowercaseCount);printf("空格个数:%d\n", spaceCount);printf("数字个数:%d\n", digitCount);return 0;
}

2.编写一个程序,找出1000以内所有的完数,所谓完数就是一个数恰好等于它的因子之和,

例如6=1+2+3,6就是一个完数。

#include <stdio.h>
void findPerfectNumbers(int limit) {int i, j, sum;printf("1000以内的完数有:\n");for (i = 2; i <= limit; i++) {sum = 1; // 初始化因子之和为1for (j = 2; j <= i / 2; j++) {if (i % j == 0) {sum += j; // 累加因子}}if (sum == i) {printf("%d ", i);}}printf("\n");
}
int main() {int limit = 1000;findPerfectNumbers(limit);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_331163.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符函数和内存函数(二)

目录 一、strtok函数 二、strerror函数 三、memcpy函数 3.1memcpy函数的认识 3.2memcpy函数的模拟实现 四、memmove函数 4.1memmove函数的认识 4.2memmove函数的模拟实现 五、memcmp函数 5.1memcmp函数的认识 5.2memcmp函数的模拟实现 六、memset函数 七、字符分类函…

PyCharm 自动添加作者信息、创建时间等信息

PyCharm 自动添加作者信息、创建时间等信息‘ 第一步 找到settings 第二步&#xff0c;找到下图所示位置输入下面代码&#xff0c;作者改成你自己的缩写&#xff0c;你也可以添加其他的 Project &#xff1a;${PROJECT_NAME} File &#xff1a;${NAME}.py IDE &…

【技能实训】DMS数据挖掘项目-Day09

文章目录 任务9【任务9.1.1】升级DataBase类为可序列化的类&#xff0c;以便在文件保存或网络中传递【任务9.1.2】升级LogRec类为可序列化的类&#xff0c;以便在文件保存或网络中传递【任务9.1.3】升级MatchedLogRec类为可序列化的类&#xff0c;以便在文件保存或网络中传递【…

StringBuffer类 StringBuilder 类

StringBuffer类 介绍 StringBuffer是一个容器&#xff0c;代表可变的字符序列&#xff0c;可以对字符串内容进行增删。 StringBuffer是可变长度的。 实现了序列化接口&#xff0c;可实现串行化&#xff08;可以将内容保存至文件或者网络传输&#xff09;&#xff1a; Serial…

关于Java的网络编程

网络的一些了解 网络通信协议 链路层&#xff1a;链路层是用于定义物理传输通道&#xff0c;通常是对某些网络连接设备的驱动协议&#xff0c;例如针对光纤、网线提供的驱动。网络层&#xff1a;网络层是整个TCP/IP协议的核心&#xff0c;它主要用于将传输的数据进行分组&…

华为申请注册盘古大模型商标;京东推出言犀大模型,率先布局产业应用

7月14日科技新闻早知道&#xff0c;一分钟速览。 1.华为申请注册盘古大模型商标&#xff1a; 据天眼查 App 显示&#xff0c;7 月 7 日&#xff0c;华为技术有限公司申请注册“华为云盘古”、“Huawei Cloud Pangu Models”文字及图形商标&#xff0c;国际分类为网站服务、社…

文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;59&#xff09;-- 算法导论6.4 3题 三、对于一个按升序排列的包含 n 个元素的有序数组 A 来说&#xff0c;HEAPSORT 的时间复杂度是多少?如果 A 是降序呢? 文心一言&#xff1a; 对于一个按升序排列的包含 n 个元素的有序数组…

C++图形开发(14):游戏完善——无限空中起跳解决

文章目录 1.问题描述2.如何解决&#xff1f;3.整段代码 1.问题描述 在游玩过程中&#xff0c;我们肯定发现了之前所给出的游戏源码中的一个小bug&#xff1a; 小球可以空中无限起跳&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

【Linux操作系统】多线程抢票逻辑——学习互斥量(锁)函数接口

文章目录 1.进程线程间的互斥相关背景概念2.联系代码学习同步互斥问题3.互斥量&#xff08;锁&#xff09;的函数接口3.1初始化互斥量3.2销毁互斥量3.3互斥量加锁和解锁3.4改进多线程抢票代码 1.进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执行流共享的资源就叫…

在UI中使用SpriteMask裁减任意shader的粒子效果

前言 由于我们需要在Mask中对粒子效果进行裁减。但是我们的的特效同事不愿意每个shader都去添加Stencil。所以使用SpriteMask方式进行裁减。 使用步骤 1. 添加SpriteMask Component 更具你需要的Mask形状设置精灵图片。又因为实际是精灵&#xff0c;并不属于UI系统&#xff…

静态库 的制作与使用

文章目录 重要命令程序组成静态库制作流程静态库的使用 gcc main.c -o APP -I(i) 头文件路径 -l(L) 库名字&#xff08;xxx) -L 库路径 重要命令 gcc -o -I(大写i) -l(小写L) -L cp&#xff1a;复制文件 -r 递归&#xff0c;用于复制文件夹所有文件 mv&#xff1a;移动文件 程…

【ArcGIS Pro二次开发】(46):要素类从上到下、从左到右排序

要素类经过编辑之后&#xff0c;【OBJECTID】字段会变得不规律。应部分网友要求&#xff0c;做了这个从上到下、从左到右排序的工具。 不过后来在ArcGIS Pro中发现了一个【排序】工具&#xff0c;已经可以完美实现这个功能需求&#xff0c;发现自己做了个白工。 不过做了不能白…

【统计函数3】——excel常见函数

相关数据资料来源于网易 函数一览&#xff1a; rank、rand、randbetween、floor、int rank函数: 求某单元格在某区域内的排名 RANK(数值,引用区域,降序0/升序1)范围多指定&#xff1a; 分开的范围之间可用逗号隔开&#xff0c;最后再用一个小括号括起来。F4可以快速锁定行和列。…

20230714----重返学习-DOM-diff算法-构建工具-包管理工具-Vite基本使用-Vue3新特性

day-112-one-hundred-and-twelve-20230714-DOM-diff算法-构建工具-包管理工具-Vite基本使用-Vue3新特性 DOM-diff算法 vue2中diff算法 同级比对&#xff0c;跨级比对性能差。而且采用的方式是递归比对&#xff0c;更差一点。根节点只能有一个&#xff0c;比对的时候会从根节…

MySql5.6版本开启慢SQL功能

文章目录 1引言1.1目的1.2注意点说明1.3 操作步骤1.3.1 临时生效操作步骤1.3.2 永久生效操作步骤1.3.3 按日期生成日志文件1.3.4 执行成功后验证功能是否开启 1.4 慢SQL日志记录内容介绍1.5 Shell脚本 1引言 1.1目的 开启 MySQL 的慢查询日志&#xff08;Slow Query Log&…

【Distributed】分布式Ceph存储系统

文章目录 一、存储基础1. 单机存储设备1.1 DAS1.2 NAS1.3 SAN1.4 单机存储的问题1.5 商业存储解决方案 2. 分布式存储&#xff08;软件定义的存储 SDS &#xff09;分布式存储的类型 3. Ceph 简介4. Ceph 优势5. Ceph 架构6. Ceph 核心组件7. OSD 存储后端7.1 Filestore7.2 Blu…

微服务架构+创建微服务工程(商品/订单)

目录 1.微服务架构 1.1.单体应用架构 1.2.微服务应用 1.3 微服务架构的优势 1.4.微服务架构的缺点(挑战) 1.5. SpringCloud与微服务关系 1.6.SpringBoot和SpringCloud关系 2. 创建微服务工程 2.1.数据库 2.2.搭建父工程 2.2 创建公共模块 2.3.商品系统 2.4.订单微…

在Linux中使用curl访问EasyCVR页面,返回报错Unauthorized是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比如&#xff1a;视…

检测到错误页面web应用服务器版本信息泄露

详细描述 Web服务器未能正确处理异常请求导致Web服务器版本信息泄露&#xff0c;攻击者收集到服务器信息后可进行进一步针对性攻击。 解决办法 临时修复建议如下&#xff1a; 1、关闭web服务器错误提示。 2、关闭运行平台的错误提示。 3、建立错误机制&#xff0c;不要把真实…

力扣 198.打家劫舍【中等】

198.打家劫舍 1 题目2 思路3 代码4 结果 1 题目 题目来源&#xff1a;力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/house-robber 题目&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃…