算法笔记刷题日记——2.C_C++在ACM中的常用语法

写在前面

这学期选了ACM课,但平时缺乏练习,不怎么刷题,因此期末考试成绩并不理想。考虑到之后的考研复试中包含机试,且计试可以算是非常重要的印象分,因此我打算寒假刷一下算法笔记,备战3月初的PAT甲级和3月末的CCF CSP认证考试,为后续考研复习数据结构等也算是打下一个良好的基础。

学习进度记录

今日学习了算法笔记的章节2 C/C++快速入门与章节3 入门——简单模拟(1)的部分内容,本来打算略过章节2的部分,但是想到ACM课考试的时候,就曾经有一道题因缺乏对基础C语言知识的了解做不出来,觉得还是有必要学习一下。
章节3的内容今日还未完结,打算明天刷完之后再发完整的刷题日记。

C/C++ 查漏补缺笔记

定义变量

1.int a,b=-1是正确的语法

int与long long

  • int的数据范围是[-231,231-1],大致范围是-2x109~2x109
  • long long的数据范围是[-263,263-1],大致范围是-9x1018~9x1018
  • int的数据在10^9以内
  • long long的数据范围在2147483647内,一般超过10^10就需要long long类型

对于浮点型,记住一点,不要使用float,都用double存储

char类型的数据

  • 小写字母的ASCII码值比大写字母的ASCII码值大32

强制类型转换(新类型名)变量名

宏定义的格式

  • #define pi 3.14

scanf

  • 格式scanf("格式控制",变量地址);
    | int | %d |
    | — | — |
    | long long | %lld |
    | double | %lf |
    | char | %c |
    | 字符串(char数组) | %s |

  • 除了%c,scanf对其他格式符的输入是以空白符(即空格、换行等)为结束判断标志

  • %c可以读入空格和换行

  • %s读入以空格和换行为读入结束的标志

printf

  • 格式printf("格式控制",变量名称);
    | int | %d |
    | — | — |
    | long long | %lld |
    | double | %f |
    | char | %c |
    | 字符串(char数组) | %s |

  • 实用的输出格式

    • %md,int型变量m位右对齐输出,高位空格补齐
    • %0md,高位0补齐
    • %.mf,浮点数保留m位小数输出

getchar putchar

  • getchar输入单个字符,putchar输出单个字符
  • getchar可以接收换行符和空白符
c1=getchar();
getchar();

常用<math.h>函数

  • fabs
  • floor向下取整 ceil向上取整
  • sqrt取平方根
  • pow(r,p),返回r^p
  • round用于将double型变量四舍五入,round原型return (int)(x+0.5),浮点数四舍五入需先*10/100/1000再round再/10/100/1000

数组

  • 如果数组大小较大,如10^6级别,需要在主函数外定义,否则会使程序异常退出,原因是函数内部申请的局部变量来自系统栈,允许申请的空间较小,而函数外部申请的全局变量来自静态存储区,允许申请的空间较大。

memset

  • 格式memset(数组名,值,sizeof(数组名));
  • 头文件<string.h>
  • memset按字节赋值,对每个字节赋一样的值,因此一般赋值0或-1

!!字符数组

1.字符数组的初始化

  • 初始化方式一:char arr[2]={'h','e'};
  • 初始化方式二:char arr[]="hello";,但以字符串方式赋值数组仅限于初始化
  • 比较两种方式:初始化方式一的数组长度是2,初始化方式二的数组长度是6,字符串的结尾用'\0'作为结束符,占用1 bit

2.字符数组的输入输出

  • 方式一:scanf输入,printf输出
    • scanf("%s",str[i]);
    • printf("%s",str[i]);
    • scanf方式输入的时候会自动在数组中加入'\0'作为字符串的结束标记,并占用一个字符位
    • printf通过识别'\0'作为字符串的结尾输出
  • 方式二:getchar输入,putchar输出
  • 方式三:gets输入,puts输出
    • gets用于输入字符数组
      • 需要注意的是gets识别换行符号,但可以接收空白符
      • 如果用gets接收数组前有输入换行符,需要先使用getchar
      • gets方式会自动在数组中加入'\0'作为字符串的结束标记,并占用一个字符位
    • puts用于输出字符数组,并同时输出换行符
    • puts通过识别'\0'作为字符串的结尾输出

3.特别提醒,如果不是使用scanf或gets方式输入数组,需要在每个字符串输入后,手动加入'\0',使得printf和puts能够正确识别字符串末尾,防止输出乱码

sscanf与sprintf string+scanf/printf

1.sscanf格式sscanf(str,"%d",&n),和scanf一样,从左往右传递元素
2.sprintf格式sprintf(str,"%d",n),和printf一样,从右往左传递元素

#include <iostream>
#include <string.h>
using namespace std;int main(){char str[50];cin.getline(str,50);int a,b,c;if(sscanf(str,"%d is greater than %d",&a,&b)==2){if(a>b) printf("Yes");else printf("No");}else{if(sscanf(str,"%d is equal to %d plus %d",&a,&b,&c)==3){if(a==(b+c)) printf("Yes");else printf("No");}else{printf("???");}}return 0;
}
#include <iostream>
#include <string.h>
using namespace std;int main(){char str[50];int a,b,c,d,e,f;scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f);sprintf(str,"%04d-%02d-%02d %02d:%02d:%02d",a,b,c,d,e,f);puts(str);return 0;
}

指针 引用

1.指针指向变量所在的位置
2.指针的定义int *p1,*p2;``int *p1,p2;前者定义2个指针,后者定义1个指针
3.指针赋值int* a=&b;,指针作为函数参数fun(int* a)
4.C++中的引用func(int &a)

结构体

1.结构体的定义与结构体变量的定义

  • 需要注意的是结构体变量的定义,可以在结构体的定义之后,也可以单独采用结构体名 变量名的方式定义
  • 结构体内不能定义自己,但可以定义自己的指针,下面是典型的结构体代码示例。
struct student{int age;student* stu;
}Alice,Bob,stuList[100];
student Alice;

2.结构体的访问

student Alice;
student* Bob;
Alice.age;
Bob->age;/(*Bob).age

cin与cout

1.cin与cout在考试中并不推荐,容易超时,只有在必要的时候才会使用,如对于string的处理
2.读入一整行,针对char str[50]数组,采用cin.getline(str,50);针对string容器,采用getline(cin,str),getline可以读入空格,但是不读入空行,且属于自动忽略的类型,且它会自动忽略行尾的空格

== eps取1e-8

(fabs((a-b))<1e-8)判断相等

复杂度

1.O(n^2)的算法当n为100000的时候,会超出OJ系统的承受能力,一般10^9
就属于超出时限,如图所示的例题即是在M次操作内,极端情况下可能会遍历数组,数组长度为10^5
image.png

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

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

相关文章

Flutter开发模仿百度云盘创建文件夹功能Draggable和DragTarget的混合使用

使用LongPressDraggable和DragTarget写了个类似于百度云盘管理文件和文件夹的功能&#xff08;为了避免和列表的滑动手势冲突&#xff0c;所以采用LongPressDraggable而不是Draggable&#xff09;&#xff1a; 1、拖拽文件到文件夹中 2、拖拽两个文件可以合并成一个新的文件夹…

肯尼斯·里科《C和指针》第11章 动态内存分配(1)动态内存分配的基础知识

数组的元素存储于内存中连续的位置上。当一个数组被声明时&#xff0c;它所需要的内存在编译时就被分配。但是&#xff0c;也可以使用动态内存分配在运行时为它分配内存。在本章中&#xff0c;我们将研究这两种技巧的区别&#xff0c;看看什么时候应该使用动态内存分配以及怎样…

2011-2022省级金融科技指数(基于百度搜索指数)

本文手工整理了2011-2022年金融科技相关关键词在各个省份的百度搜索指数&#xff0c;并汇总成金融科技指数。具体步骤如下。首先&#xff0c;基于商业银行小微企业信贷业务实践&#xff0c;参考沈悦和郭品&#xff08;2015&#xff09;&#xff0c;以及盛天翔和范从来&#xff…

【华为】GRE Over IPsec 实验配置

【思科】GRE Over IPsec 实验配置 前言报文格式 实验需求配置拓扑GRE配置步骤IPsec 配置步骤R1基础配置GRE 配置IPsec 配置 ISP_R2基础配置 R3基础配置GRE 配置IPsec 配置 PCPC1PC2 抓包检查OSPF建立GRE隧道建立IPsec 隧道建立Ping 配置文档 前言 GRE over IPSec可利用GRE和IP…

java入门、环境配置及其特点介绍

目录 一、java语言的重要特点 二、java开发工具包&#xff08;JDK&#xff09;及其环境配置 三、java入门代码 四、Java运行机制 五、java学习方法 一、java语言的重要特点 java是面向对象的Java是健壮性的。Java具有强类型机制、异常处理、垃圾的自动收集等特点java语言是跨…

八、并发工具(下)

九、ReentrantReadWriteLock 1&#xff09;使用 可以有多个读同时发生&#xff0c;读写不能同时发生&#xff0c;写写不能同时发生 Slf4j(topic "c.pool") public class Test7 {public static void main(String[] args) {DataContainer dataContainer new DataC…

JS(react)图片压缩+图片上传

上传dome var fileNodeTakeStock: any createRef();<inputref{fileNodeTakeStock}onChange{showPictureTakeStock}style{{ display: "none" }}id"fileInpBtn"type"file"accept"image/*" //限制上传格式multiple{false}capture&qu…

ShardingSphere 5.x 系列【1】专栏导读

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 背景2. 简介3. 适用人群4. 环境…

代码随想录算法训练营|day24

第七章 回溯算法 77.组合代码随想录文章详解总结 77.组合 以n5,k3为例 (1)for循环遍历&#xff0c;递归选择符合要求的值加入path&#xff0c;len(path)k时&#xff0c;返回 statrtIndex保证每次递归取到的值不重复 剪枝&#xff1a;i<n-(k-len(path))1 后续需要k-len(pat…

n-皇后问题(DFS)

题目 n−皇后问题是指将n个皇后放在nn的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数n&#xff0c;请你输出所有的满足条件的棋子摆法。 输入格式&#xff1a; 共一行&#xff0c;包含…

算法设计与分析实验:回溯

目录 一、组合总和 1.1 具体思路 1.2 思路展示 1.3 代码实现 1.4 复杂度分析 1.5 运行结果 二、全排列 2.1 具体思路 2.2 思路展示 2.3 代码实现 2.4 复杂度分析 2.5 运行结果 三、N皇后问题 3.1 具体思路 3.2 思路展示 3.3 代码实现 3.4 复杂度分析 3.5 运行…

WorkPlus助力企业构建高效沟通与协作的即时通讯平台

在信息高度交流的时代中&#xff0c;即时沟通和高效协作成为企业取得成功的关键因素。而即时通讯平台作为实现即时沟通和快速协作的基础工具&#xff0c;WorkPlus以其创新的设计和优质的服务&#xff0c;助力企业提升沟通效率和协作能力&#xff0c;促进创新与发展。 为何选择W…