考研C语言第五章

news2024/11/26 22:32:00

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里面的字符串复制给d
    printf("%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.coloradmin.cn/o/577940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI一键抠图

前言 由于需要批量抠图&#xff0c;原本是想用MODNet的&#xff0c;可惜最新的模型官方不开源&#xff0c;旧模型扣的人物边缘有白边。最后发现了PP飞桨。 飞桨&#xff08;PaddlePaddle&#xff09;以百度多年的深度学习技术研究和业务应用为基础&#xff0c;集深度学习核心训…

【JDK】一、jdk17的下载与安装配置(图文说明超详细)

JDK17的下载与安装 前言一、JDK17下载1、官方下载地址 &#xff08; Oracle中国的官方网站&#xff09; 二、JDK17安装1、先看一下我现在的java版本和环境变量2、开始新的安装第一步&#xff1a;双击下载的jdk-17.0.7_windows-x64_bin.exe 进入到安装页面第二步&#xff1a;jdk…

内存管理之内存寻址(笔记)

计算机体系结构中的核心问题之一就是如何有效的进行内存寻址。因为所有运算的前提都是要先从内存中取地数据。所以内存寻址技术在一定程度上代表了计算机技术。 1. 图灵机和冯诺依曼体系 图灵机&#xff1a;图灵机是一种通用自动的机器模型&#xff0c;通过二段无线延申的纸带…

C++Primer——第一讲

重制CPrimer 目录 一、第一个程序 二、代码 二、题目 前言 我们会从一个C程序开始&#xff0c;这里默认您已经安装了Dev-C或其他的IDE软件。 一、第一个程序 下面这串代码是可以输出“Hello world”的代码。 #include<bits/stdc.h> using namespace std; int main(){…

Arduino+ESP8266 MCU开发板 ----带你开发DHT11温湿度开发项目

目录 PC调试过程如图 手机APP可在各大商场APP中下载 手机APP调试结果/效果如图 ESP8266 MUC介绍 ESP8266 MUC主要特点&#xff1a; 步1&#xff1a;下载Arduino&#xff0c;本次不多做说明&#xff0c;本次使用的arduino软件为老版本的&#xff0c;新版本有关的问题本人…

统计学的假设检验

假设检验的核心其实就是反证法。反证法是数学中的一个概念&#xff0c;就是你要证明一个结论是正确的&#xff0c;那么先假设这个结论是错误的&#xff0c;然后以这个结论是错误的为前提条件进行推理&#xff0c;推理出来的结果与假设条件矛盾&#xff0c;这个时候就说明这个假…

总结881

学习目标&#xff1a; 月目标&#xff1a;5月&#xff08;1800基础部分&#xff0c;背诵15篇短文&#xff09; 周目标&#xff1a;1800高等数学部分并完成错题记录&#xff0c;英语背3篇文章并回诵 每日必复习&#xff08;5分钟&#xff09; 前天错题纠错&#xff0c;线代部…

Solidity拓展:数据类型的转换

1.数据类型隐式转换 (自动) 同一类型之间的转换:由低长度转换为高长度int8-int16-int32int256,但int不能自动转换成uint&#xff0c;因为放不下负数所以直接不让转换,且 int8 不能转换成 uint256 &#xff08;因为 uint256 不能涵盖某些值&#xff0c;例如&#xff0c; -1&…

Android解决xutils数据库kotlin添加List数组问题

Android解决xutils数据库kotlin添加List数组问题 前言&#xff1a; 上一篇我们讲解了xutils中数据库版本升级的使用和问题&#xff0c;这篇博客讲解xutils中数据库添加list数据的问题&#xff0c;这个库真的是很强大&#xff0c;但是数据库的使用真不友好&#xff0c;添加一个…

从零开始手搓一个STM32与机智云的小项目——硬件介绍

文章目录 前言硬件简介选型1.主控2.电源3.电机驱动4.舵机驱动5.USB转TTL6.其他模块 原理图绘制1.STM32最小系统1.电源输入2.晶振选择3.复位电路4.BOOT选择电路5.下载电路 2.电源部分及与PC通信部分3.功能模块的实现1.串口2.定时器输入捕获与输出比较3.硬件SPI4.ADC5.温湿度传感…

学校食堂明厨亮灶 yolov8

学校食堂明厨亮灶可以yolov8网络模型技术&#xff0c;学校食堂明厨亮灶通过对厨师的穿戴情况行为举止等进行监测。YOLOv8 算法的核心特性和改动可以归结为如下&#xff1a;提供了一个全新的 SOTA 模型&#xff0c;包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的…

C++环形缓冲区设计与实现:从原理到应用的全方位解析

C环形缓冲区设计与实现&#xff1a;从原理到应用的全方位解析 一、环形缓冲区基础理论解析&#xff08;Basic Theory of Circular Buffer&#xff09;1.1 环形缓冲区的定义与作用&#xff08;Definition and Function of Circular Buffer&#xff09;1.2 环形缓冲区的基本原理&…

SAP-MM-内向外向交货单

1、内向&外向交货单概念 外向交货&#xff08;outbound delivery&#xff09;是用在客户与企业之间的交货单&#xff0c;而内向交货&#xff08;inbound delivery&#xff09;则是用在供应商与企业之间的交货单&#xff1b;换言之&#xff0c;外向交货多用于SD 模块&#…

基于MAX-10 FPGA 超声波测距模块HC_SR04

文章目录 一、介绍超声波测距模块HC_SR04二、模块框图三、模块编写1. 测距信号源2. 距离计算3. 数码管模块4. 顶层模块 四、实验现象总结 一、介绍超声波测距模块HC_SR04 HC-SR04是一种基于超声波的测距模块。该模块向前15度内发送超声波并接收回响&#xff0c;通过发出超声波…

第一章:简单的C程序设计基础

一、C语言词汇 在C语言中使用的词汇分为&#xff1a;关键字、标识符、常量、运算符、分隔符、注释符等。 1.1关键字 1.2标识符 在程序中使用的变量名或函数名等统称为标识符&#xff1b;标识符的命名规则如下&#xff1a; &#xff08;C语言区分大小写&#xff09; 不能是关…

一个简单的基于C/S模型的TCP通信实例

1 TCP协议 1.1 概念 TCP是一种面向连接的、可靠的协议&#xff0c;有点像打电话&#xff0c;双方拿起电话互通身份之后就建立了连接&#xff0c;然后说话就行了&#xff0c;这边说的话那边保证听得到&#xff0c;并且是按说话的顺序听到的&#xff0c;说完话挂机断开连接。也…

2023 华为 Datacom-HCIE 真题题库 08--含解析

单项选择 1.[试题编号&#xff1a;190385] &#xff08;单选题&#xff09;以下关于BGP/MPLSIPVPN路由交互的描述&#xff0c;错误的是哪一项? A、PE与CE之间交互的是IPv4路由信息 B、出口PE可以通过BGP、IGP或静态路由的方式向远端CE发送IPv4路由 C、入口PE将从CE接收到的I…

数组(1)

文章目录 目录1. 一维数组的创建和初始化1.1 一维数组的创建1.2 一维数组的初始化 2. 一维数组的使用3. 一维数组在内存中的存储4. 二维数组的创建和初始化4.1 二维数组的创建4.2 二维数组的初始化 5. 二维数组的使用6. 二维数组在内存中的存储7. 数组越界8. 数组作为函数参数 …

chatgpt赋能python:Python自动填表单:提高工作效率的好帮手

Python 自动填表单&#xff1a;提高工作效率的好帮手 在现代社会中&#xff0c;表单已成为我们日常工作中不可或缺的一部分。填表单虽然看似简单&#xff0c;但是时间一长&#xff0c;不仅会影响工作效率&#xff0c;还会带来心理负担。幸运的是&#xff0c;Python 自动填表单…

Linux-0.11 boot目录bootsect.s详解

Linux-0.11 boot目录bootsect.s详解 模块简介 bootsect.s是磁盘启动的引导程序&#xff0c;其概括起来就是代码的搬运工&#xff0c;将代码搬到合适的位置。下图是对搬运过程的概括&#xff0c;可以有个印象&#xff0c;后面将详细讲解。 bootsect.s主要做了如下的三件事: 搬…