考研C语言第五章

news/2025/1/16 0:04:17/

5.2

数组基础知识
在这里插入图片描述
在这里插入图片描述
注意要点:
1.下标0开始
2.没有定义的地方是0

5.3

数组访问越界与数组传递
在这里插入图片描述
访问越界,定义超过前面定义的数组长度,占据了后面定义数据的地方
非常危险!
在循环里面往往容易造成越界

数组传递
1.函数引用时直接放数组名字

int main() {int a[9]={1,2,3,4,5,7};for(int i=0;i<sizeof(a)/sizeof(int);i++){printf("%d\n",a[i]);}
//    print(a);return 0;
}

这样可以正常输出:
在这里插入图片描述
但是把它放到上面函数里面就只能输出1,2

#include <stdio.h>
void print(int a[])
{for(int i=0;i<sizeof(a)/sizeof(int);i++){printf("%d\n",a[i]);}}
int main() {int a[9]={1,2,3,4,5,7};print(a);return 0;
}

数组放在函数体里面时,相当于弱化为指针,指针是八个字节,所以在函数体里面不能用sizeof
8/4(int)=2也就是只输出两个
在这里插入图片描述
这时我们就需要一个新的参数把数组长度传过去
length

#include <stdio.h>
void print(int a[],int length)
{for(int i=0;i<length;i++){printf("%d\n",a[i]);}}
int main() {int a[6]={1,2,3,4,5,7};int length=6;print(a,length);return 0;
}

5.4字符数组

在这里插入图片描述
要注意:后面有八个字母,但是最后还有\0所以要至少有九个位置

#include <stdio.h>int main() {char c[10]="Iamhappy";printf("%s\n",c);return 0;
}

%s是输出字符串
在这里插入图片描述

在这里插入图片描述
当数组没有将\0包含进去,数组危险,可能读到一些其他的数据
在这里插入图片描述
换成【6】就没事了
输出字符串乱码时,要去看字符数组中是否存储了结束符‘\0’

模仿%s的功能函数

#include <stdio.h>void print(char d[])
{int i=0;while(d[i]){printf("%c",d[i]);//当取到终止符得时候,循环结束i++;}printf("\n");}
int main() {char c[10]="Iamhappy";print(c);return 0;
}

读取字符串

#include <stdio.h>//scanf读取字符串
int main() {char c[10];scanf("%s",c);//数组名c中存储了数组的起始地址,因此不需要取地址了printf("%s\n",c);return 0;
}

在这里插入图片描述
而且数组不读回车和空格,读到就停止

#include <stdio.h>//scanf读取字符串
int main() {char c[10];char d[10];scanf("%s%s",c,d);//数组名c中存储了数组的起始地址,因此不需要取地址了printf("%s %s\n",c,d);return 0;
}

在这里插入图片描述

5.5gets与puts函数

gets自由读取

#include <stdio.h>int main() {char c[20];gets(c);//gets中放入数组名字printf("%s\n",c);return 0;
}

在这里插入图片描述
puts里面只能放字符数组名字

#include <stdio.h>int main() {char c[20];gets(c);//gets中放入数组名字puts(c);//等价于printf("%s\n",c);return 0;
}

str系列字符串操作函数
在这里插入图片描述
strlen计算长度

#include <stdio.h>
#include <string.h>int main() {int len;char c[20];char d[20]="world";gets(c);puts(c);len=strlen(c);//统计字符串的长度printf("%d\n",len);return 0;
}

在这里插入图片描述
模仿strlen函数

#include <stdio.h>
#include <string.h>int mystrlen(char c[])
{int i=0;while(c[i]){i++;}return i;
}int main() {int len;char c[20];char d[20]="world";gets(c);puts(c);len=strlen(c);//统计字符串的长度printf("len=%d\n",len);len= mystrlen(c);printf("my len=%d\n",len);return 0;
}

strcat拼接

int main() {int len;char c[20];char d[20]="world";gets(c);puts(c);strcat(c,d);//把d里面的字符拼接到c里面printf("%s\n",c);return 0;
}

strcpy复制

int main() {int len;char c[20];char d[20]="world";gets(c);puts(c);strcat(c,d);//把d里面的字符拼接到c里面printf("%s\n",c);strcpy(d,c);//把c里面的字符串复制给dprintf("%s\n",d);return 0;
}

strcmp比大小
比靠前的字符的ASCII码大小

int main() {int len;char c[20];char d[20]="world";gets(c);puts(c);puts(d);printf("%d\n", strcmp(c,d));//前面大正值,后面大负值,一样大0}

在这里插入图片描述
oj作业
第一题:
在这里插入图片描述

正确代码:

#include <stdio.h>
#include <string.h>int main() {int a[100];int n;int j=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);}for(int z=0;z<n;z++){if(a[z]==2){j++;}}printf("%d\n",j);return 0;
}

一开始写的错误代码:

#include <stdio.h>
#include <string.h>int main() {int a[100];int n;int j=0;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&a[i]);}for(int z=0;z<n;z++){if(a[z]==2){j++;}}printf("%d\n",j);return 0;
}

第二题:
在这里插入图片描述

(中间有些东西没有考虑到,一遍一遍的改错:( )

#include <stdio.h>
#include <string.h>int main() {char a[20];gets(a);char b[20];for(int i=0;i< strlen(a);i++){b[strlen(a)-1-i]=a[i];}int result=strcmp(a,b);if(result>0){printf("%d\n",1);}else if(result<0){printf("%d\n",-1);}else{printf("%d\n",0);}return 0;
}

http://www.ppmy.cn/news/97082.html

相关文章

HDFS基础架构以及部署

HDFS基础架构以及部署 一、HDFS基础简介 什么是HDFS HDFS全称&#xff1a;Hadoop Distributed File System是Hadoop三大组件&#xff08;HDFS,MapReduce,YARN&#xff09;之一可在多台服务器上构建集群&#xff0c;提供分布式数据存储能力 HDFS中的架构角色有哪些 NameNode&a…

Mybatis 框架 ( 三 ) Mybatis-Plus

4.Mybatis-plus 官网 : https://www.baomidou.com/ MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上封装了大量常规操作&#xff0c;减少了SQL的编写量。 4.1.Maven依赖 使用时通常通过Springboot框架整合使用 并且使用Lombok框架简化实体类 <…

持续集成/持续交付——JenkinsFile详细使用教程

JenkinsFile详细使用教程 一、BlueOcean1、BlueOcean 概念2、BlueOcean 特性3、BlueOcean 安装 二、Pipeline 简介1、Jenkins Pipeline 概念2、Jenkinsfile 语法类型&#xff1a;3、采用Jenkins 任务页面输入a. Jenkins中创建一个 pipeline 任务b. Definition 中选择 Pipeline …

基于技能的工程方法及其在I4.0 中的应用

工业4.0 组件描述了两种架构&#xff0c;一种是面向服务的紧耦合分层系统架构&#xff0c;另一种基于协议的同层架构&#xff08;peer-to-peer&#xff09;。传统的工业自动化系统几乎都是分层架构。例如现场设备&#xff08;PLC&#xff09;将数据传送到控制中心&#xff0c;S…

1、Ovirt 开源虚拟化平台安装

ovirt官网 一、资源规划介绍 1.1、服务规划 ovirt版本 ovirt engine 4.3.10 ovirt node 4.3.10 ovirt.node01.opsvv.com 负责托管引擎服务 1.2、资源划分 1.2.1、节点划分 密码均为&#xff1a;12345678 Node02无法开启虚拟化&#xff0c;只演示加入集群节点使用 节点…

ThingsBoard教程(五五):规则节点解析 REST接口调用 REST API Call Node,发送邮件Send Email Node

REST接口调用 REST API Call Nod Since TB Version 2.0 调用外部 REST 服务器的 REST API。 配置: 端点 URL 模式 - 可以是静态字符串,也可以是使用消息元数据属性解析的模式。例如 ${deviceType}。请求方法 - GET、POST、PUT、DELETE头 - 请求头,头或值可以是静态字符串…

软件外包开发代码管理工具

软件代码规范是为了提高代码质量、可读性和可维护性而制定的一系列编程规则和约定。代码管理工具则是用于协助团队成员共享、跟踪和合并代码的工具。今天和大家分享这方面的知识&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&a…

cf1627 D 思维

题意&#xff1a;https://www.luogu.com.cn/problem/CF1627D 思路&#xff1a;因为gcd只会越来越小&#xff0c;所以我们可以枚举所以数&#xff0c;看它最后是否会被加入集合。check的方法就是看所以集合中是i倍数的数的gcd是否最终等于i&#xff0c;是的则会。 /*keep on g…