算法笔记刷题日记——Day1 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的数据在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系统的承受能力

相关推荐
周周记笔记22 分钟前
学习笔记:第一个Python程序
笔记·学习
丑小鸭是白天鹅25 分钟前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin
潘达斯奈基~26 分钟前
《大数据之路1》笔记2:数据模型
大数据·笔记
ChillJavaGuy31 分钟前
常见限流算法详解与对比
java·算法·限流算法
sali-tec34 分钟前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
..过云雨39 分钟前
05.【Linux系统编程】进程(冯诺依曼体系结构、进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
linux·笔记·学习
咸甜适中1 小时前
rust语言 (1.88) egui (0.32.2) 学习笔记(逐行注释)(二十八)使用图片控件显示图片
笔记·学习·rust·egui
一又四分之一.1 小时前
高数基础知识(下)②
笔记
Gu_shiwww1 小时前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
ZHANG8023ZHEN2 小时前
fMoE论文阅读笔记
论文阅读·笔记