[啃书] 第1篇 - 输入输出/变量类型/math函数
啃书部分已单独做成Gitbook了,后续不再更新。详情访问个人网站ccoding.cn或ccbyte.github.io
说在前面
一直想刷算法找不到很适合的书,后来发现考PAT很多推荐《算法笔记》,看了一下挺不错的,因为自己很久没用C了,有些细节忘了,而这本书是从基本写起应该还不错。
- 基础部分为五章(2~6:C基础/排序/查找/递归/贪心/STL模板库)
- 提高篇有六章(7~13:栈/队列/链表/树/图/动态规划/hash和KMP)
先看基础篇吧,也恢复一下写C的手感。
基础篇内容简单一些但也挺繁杂的,尽量三篇内总结完一章,保证每一篇有一定条理吧。
最后,主要写给自己看的,方便以后查阅,毕竟不是每时每刻都抱着书的,而且书上很多东西是为了助于理解的,忘了怎么回事再回过去翻书就行了。
本篇总结自《算法笔记》2.1-2.4
正文
知识点1:C中的printf/scanf 和 C++中的cout/cin
前者较麻烦但耗时短很多,所以本书主要使用C语言来写。
两者不要同时写,可能会出错。
知识点2:程序结构
- 头文件
- #include<stdio.h> [输入输出相关]
- #include<math.h> [数学函数]
- #include<string.h> [字符串相关]
- C++标准中推荐使用#include<cstdio>、#include<cstring>和#include<cmath>等价写法
- 主函数
int main(){
int a,b; //定义整数int型]
scanf("%d%d", &a, &b); //%d是int的输入输出标识,即使把a,b作为整数输入
printf("%d", a+b); //同上,把a+b作为整数输出
return 0;
}
保存为.cpp文件,因为C++向下兼容C语言,更通用。
知识点3:变量的定义
变量类型 变量名; [可以赋初值例如 int a = 1;]
命名要求:不能是C语言标识符,首字符必须是字母或下划线,区分大小写。
知识点4:基本变量类型
这么多数字简单看看就行了,如何快速应用才是最重要的,见下方。(重点红字部分,其它了解即可)
1 整型(short/int/long long)%d
短整型short一般用不到,整型int等价于long int,长整型long long等价于long long int
整型int:占用32bit=4Byte,应用时记住绝对值在109内可以定义为int型(因为231是十位数);
长整型long long:占用64bit=8Byte,数字太大不能用整型就用long long,赋初值大于231-1则末尾要加LL;
补充:unsigned表示无符号型,可加在类型名前面,如unsigned int,范围变为0~232-1。
2 浮点型(float/double)%f
单精度float:占用32bit(1+8+23),有效精度6~7位;
双精度double:占用64bit(1+11+52),有效精度15~16位;
总结:无脑用double
3 字符型(char)%c %s
char是按ASCII码存储的:大写A=65,小写A=97,大小写差23。
char必须是单个字符,必须用单引号标注。
char定义的是字符变量而不是字符常量。
字符常量:比如一个字母'c',一个数字5,是无法被改变的,c就是c,5就是5。
转义字符:\n换行;\0空字符(不是空格)[printf(%d\n%d, a, b)输出一行a,一行b]
字符串:char str1[25]="Wo ai de ren bu ai wo"; (因为没有string类型,所以用字符数组存储字符串)
关于string类型:C++有而C中没有,但C也可以%s输入输出字符串。
4 布尔型
C++可以直接使用,而C语言需要引入stdbool.h头文件才能使用。
整形常量赋值给布尔型会自动转换(0变为false,非0都变为true;%d输出布尔型只有0或1)
知识点5:强制类型转换
(新类型名)变量名
应用:浮点数切去小数变整数,整型变成浮点型方便做除法(整数除整数只会产生整数,不会变浮点数)
注意:赋值给别的变量类型的变量时会自动转换,但计算过程中需要则必须要自己写强制转换。
知识点6:符号常量和const常量
#define 标识符 常量; [#define pi 3.14]
const 数据类型 变量名 = 常量值; [const double pi = 3.14]
补充:define可以定义任何语句或片段,如#define ADD(a,b) ((a)+(b)) 【因为要直接替换所以加两层括号,避免替换后先乘除后才加减,所以除了常量尽量少用宏定义】
知识点7:运算符
算术运算符:+ - * / % ++ --
关系运算符:< > <= >= == !=
逻辑运算符:&& || !
条件运算符:? : (C语言唯一的三目运算符)
位运算符:<< >> & | ^ ~ (后两个是位异或、位取反。都是双目运算符,两者二进制对齐后运算)
不多说,这些大部分编程语言都通用的。
知识点8:scanf函数
scanf("%d", &n);
常见的数据类型变量的scanf格式符:
int %d
long long %lld
float %f
double %lf
char %c
char数组/字符串 %s
取地址符:
其中变量n在之前定义后,才能存放输入内容,且定义时计算机会为变量n分配内存地址。
&n中的&是取地址运算符,表示得到变量n的内存地址。
[打个比方:输入时取地址相当于计算机要取到住址(内存地址)在哪,才能把快递(数据)送过来。]
使用注意:
除了char数组输入时不用加取地址符,因为数组名等价于数组的首地址,其它都要加。
输入数据后程序异常退出,检查是否漏写&。
输入格式自定义:
scanf("%d:%d:%d", &hh, &mm, &ss);
上面是一个时间输入格式,输入示例如13:45:20即可把时分秒分别保存到hh,mm,ss三个变量中。
scanf("%d, %lf, %c", &a, &b, &c);
上面是多种类型混合输入,输入示例如12, 18.23, t
scanf("%d%d", &a, &b);
上面是个常规输入,但对于输入两个数字中间用空格的分开的如“3 4”也可以如此,直接写两个%d不加空格。
原因是因为scanf对于除了%c外,其他格式符(如%d)的输入是以空白符(空格/Tab)为结束判断标志的,除非使用%c把空格/Tab/换行也读入,否则正常情况下scanf是跳过空格的。
例外:字符数组使用%s读入以空格/换行为读入结束的标志(但是也忽略空格呀)
scanf("%d%c%s", &a, &c, str);
上面是一个用%c取空格的例子,输入示例为1 a bcd,并不会取到1和a和bcd,而是1和空格和a。
知识点9:printf函数
printf("%d", n);
区别于scanf,不需要取地址符,直接变量名即可。
常见数据类型的printf格式符:
除了double变成了%f,其它与scanf一样。
转义字符:
如\n可以在引号中使用表示换行,
要输出\或%等本身有意义的符号,则要写两遍,如%%或\\写在引号中则输出一个百分号或斜杠。
三种实用的输出格式:
%md:使不足m位的int型变量以m位进行右对齐输出,其中高位用空格补齐,超过m位保持原样。
%0md:同上,不过补的不是空格,补0。
%.mf:让浮点数保留m位小数输出(四舍六入五成双)[许多题会要求精确度,则用该格式输出,若要求四舍五入则要使用round函数,后面讲]
知识点10:用getchar和putchar输入/输出字符
在scanf函数使用不便的时候可以用getchar来输入字符。
getchar会识别空格/Tab/换行符。
知识点11:typedef
有用的东东,给复杂的数据类型起一个别名。
最常用的如typeddef long long LL; 之后申明long long型就可以直接写 LL a = 123456789012345
知识点12:常用math函数(需引入math.h头文件)
fabs(double x) 绝对值
floor(double x)和ceil(double x) 上下取整
pow(double r, double p) 返回rp
sqrt(double x) 返回x的算术平方根
log(double x) 返回x以自然对数e为底的对数 [ 若要其它数为底,则必须使用换底公式logab = logeb/logea ]
sin(double x)、cos(double x)和tan(double x) 三角函数(参数要求是弧度)[ 弧度 = pi * 角度 / 180 ]
asin(double x)、acos(double x)和atan(double x) 反三角函数
round(double x) 四舍五入(也返回double型,需要强制类型转换成int)
跳过if,switch,while/do...while,for,break/continue,都是大部分编程语言通用的。
在C/C++需要注意的地方:
对于C语言,for的条件中不能定义变量,而C++中可以。[所以要保存为.cpp文件,则可以在for条件中定义变量了,如for(int i = 0; i<100; i++)];
break跳出整个循环,continue跳出本轮循环进入下一轮;
好了,到这里第二章已经快过半啦,
下一篇更新数组、函数、指针、结构体第二章就完结了。
加油。
《算法笔记》2.1-2.4
[啃书] 第1篇 - 输入输出/变量类型/math函数的更多相关文章
- [啃书] 第3篇 - 结构体及其操作/浮点数&圆周率/复杂度/测试
啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 前言 本篇总结自<算法笔记>2.8-2.10 正文 知识点1:结构 ...
- go基础知识之变量,类型,常量,函数
3 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值.在 Go 中,有多种语法用于声明变量. 声明单个变量 var name type 是声 ...
- JavaScript 变量克隆和判断变量类型
一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...
- 20151010 C# 第一篇 变量类型
20151010 变量类型: 1. 值类型:变量本身直接存储数据 整数类型:代表没有小数点的整数数值 类型 说明 范围 sbyte 8位有符号整数 -128——127 short 16位有符号整数 - ...
- C++基础知识篇:C++ 变量类型
变量其实只不过是程序可操作的存储区的名称.C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以由字母.数字和下划线字 ...
- PHP&MySQL(二)——困也得啃书
madan,所有事情都敢赶在一起...以后每天中午去学车啊,好开心..晚上好困,但是困也得啃书........ 二.PHP脚本编程语言 什么变量啊,数据类型啊,特别特别基本的不记录了,说点容易忽略的. ...
- 《C++ Primer Plus》啃书计 第1~4章
<C++ Primer Plus>啃书计 第1~4章 第一章 预备知识 1.1-1.3略过 1.4 程序创建的技巧 1. cfront,它将C++源代码翻译成C源代码,然后再使用标准C编译 ...
- CUDA1.1-函数类型限定符与变量类型限定符
这部分来自于<CUDA_C_Programming_Guide.pdf>,看完<GPU高性能变成CUDA实战>的第四章,觉得这本书还是很好的,是一种循序渐进式的书,值得看,而不 ...
- 李洪强iOS开发Swift篇---11_变量&常量&元组
李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ...
随机推荐
- 鸿蒙内核源码分析(进程镜像篇)|ELF是如何被加载运行的? | 百篇博客分析OpenHarmony源码 | v56.01
百篇博客系列篇.本篇为: v56.xx 鸿蒙内核源码分析(进程映像篇) | ELF是如何被加载运行的? | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应 ...
- 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 百篇博客分析OpenHarmony源码 | v51.04
百篇博客系列篇.本篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main | 51.c.h.o 加载运行相关篇为: v51.xx 鸿蒙内核源码分析(ELF格式篇) | ...
- YbtOJ#791-子集最值【三维偏序】
正题 题目链接:http://www.ybtoj.com.cn/contest/123/problem/1 题目大意 给出\(3\)个长度为\(n\)的排列\(A,B,C\).然后一个下标集合\(S\ ...
- easy-rule 学习
Easyrule是个规则引擎,类似于drools,我们来熟悉一下这个东西 [ ] 一个简单实例规则,这个规则会被一直触发,然后行为是打印helloWorld @Rule(name="hell ...
- Skywalking-09:OAL原理——如何通过动态生成的Class类保存数据
OAL 如何通过动态生成的 Class 类,保存数据 前置工作 OAL 如何将动态生成的 SourceDispatcher 添加到 DispatcherManager // org.apache.sk ...
- Unity——可复用背包工具
Unity可复用背包工具 Demo展示 设计思路 游戏中有非常多的背包样式,比如玩家道具背包,商城,装备栏,技能栏等:每个形式的背包都单独写一份逻辑会非常繁琐,所以需要有一套好用的背包工具: 这些背包 ...
- 一个关于MySQL指定编码实现的小坑
写在前面 环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8 场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了 那么为什么会失败呢? ...
- Hash窃取与传递
Hash窃取与传递 NTHASH(NTLM) 在 Windows中, 存储的密码Hash就叫做 NTHash,也叫做 NTLM,其中NTLM 全称是 "NT LAN Manager" ...
- bash反弹shell
part1:不求甚解的本地复现 攻击端Debian 10.x: 192.168.208.134 受害端Ubuntu : 192.168.208.135 攻击端打开(监听)某端口: 键入命令:[nc ...
- springcloud(二) 微服务架构编码构建
微服务架构编码构建 1 基础知识 1.1 版本 2 微服务cloud整体聚合父工程Project 2.1 new project 2.2 字符编码设置 utf-8 2.3 pom.xml 2.4 父工 ...