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

目录

【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.hqwc.cn/news/22751.html

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

相关文章

“AI+教育”:景联文科技高质量教育GPT题库助力教学创新

去年年底&#xff0c;OpenAI推出ChatGPT&#xff0c;掀起AI热潮&#xff0c;教育作为“AI”应用落地的关键场景&#xff0c;再次受到广泛关注。 “AI教育”的快速发展&#xff0c;是受到技术、需求和政策三重因素共同驱动的结果。 在技术方面&#xff0c;随着人工智能技术的不断…

【专题速递】在线K歌、云化XR、咔嚓剪辑和FFmpeg直播能力更新计划

// 在线K歌的技术方案选型有哪些&#xff1f;对于沉浸式XR我们又有什么新的思考&#xff1f;高性能低依赖的剪辑视频需要具备什么技术&#xff1f;7月29日LiveVideoStackCon2023上海站客户端体验与性能优化专场&#xff0c;为您解答。 客户端体验与性能优化 客户端作为直接面…

基于Python编写一个B站全自动抽奖的小程序

本文将利用Python编写一个B站全自动抽奖的小程序&#xff0c;可以实时监控自己关注的UP主&#xff0c;如果关注的UP主中有人发布了抽奖的动态&#xff0c;就自动参与这个抽奖。这样就能不错过任何一个可以暴富的机会了。需要的可以参考一下 导语 应好友邀请&#xff0c;帮他写…

Qt 桌面系统设计

文章目录 前言一、项目介绍二、界面布局三、按键图标四、桌面背景五、实现led功能总结 前言 这篇文章介绍 一个Qt 桌面系统的项目&#xff0c;大家可以在此基础上加以改进&#xff0c;实现更多的功能。 一、项目介绍 可以看到 这个桌面系统上分为两部分&#xff0c;左边是 三个…

C++虚函数学习

VC6新建一个单文档工程&#xff1b; 添加一个一般类&#xff1b; 生成的Shape.cpp保持不变&#xff1b; #include "Shape.h"#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]__FILE__; #define new DEBUG_NEW #endif// // Construction/Destruction //Shap…

基于C/S架构工作原理序号工作步骤和理论的区别

基于C/S架构工作原理序号工作步骤和理论的区别 SSH 概念 对称加密linux 系统加密&#xff0c;就是加密和揭秘都是使用同一套密钥。 非对称加密有两个密钥&#xff1a;“私钥”和“公钥”。私钥加密后的密文&#xff0c;只能通过对应的公钥进行揭秘。而通过私钥推理出公钥的…

MyBatis 的架构

MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架&#xff0c;可以将 SQL 语句和 Java 代码进行分离&#xff0c;通过 XML 或注解的方式配置 SQL 语句并执行&#xff0c;从而实现数据访问的功能。MyBatis 的架构包括以下几个部分&#xff1a; SqlSessionFactory&#xff…

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片&#xff08;Shards&#xff09;2.2、副本&#xff08;Replicas&#xff09;2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

CAD2021安装教程适合新手小白【附安装包和手册】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载文件二、使用步骤1.安装软件前&#xff0c;断开电脑网络&#xff08;拔掉网线、关闭WIFI&#xff09;2、鼠标右击【AutoCAD2021(64bit)】压缩包选择【解…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么&#xff1f; 2.为什么需要docker&#xff1f; 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images&#xff08;镜像&#xff09; Cont…

【网络安全】渗透测试工具——Burp Suite

渗透测试工具Burp Suite主要功能详解 前言一、 Proxy模块1.1 界面布局1.1.1 菜单栏&#xff08;1&#xff09; 菜单栏 Burp&#xff08;2&#xff09; 菜单栏 project&#xff08;3&#xff09; 菜单栏 Intruder&#xff08;4&#xff09; 菜单栏 Repeater&#xff08;5&#x…