大小写字母的ascll值相差32
枚举(最大公约数)
-
设t=2
-
如果u和v都能被t整除,则记下这个t
-
t加1后重复第二步,直到t=u或v
-
那么,曾经记下的最大的可以同时整除u和的t就是gcd;
辗转相除法
-
如果b=0,计算结束,a就是最大公约数;
-
否则,计算a/b的余数,让a=b,而b=那个余数;
-
回到第一步;
数据类型
1. 整数
-
char, short, int, long, long long
2.浮点数
-
float double long double
3.逻辑
-
bool
4.指针
###5.自定义类型
类型名称: int 、long 、 double 输入输出时的格式化:%d %ld %lf 所表达的数的范围: char < short < int < float < double 内存中所占大小: 1-16字节 内存中的表达形式: 二进制数、编码
sizeof
-
给出某个类型或变量在内存中所占的字节数
sqrt,pow 函数在开平方根时都可以发挥作用
-
a=pow(b,0.5);
-
a=sqrt(b);
整数的输入与输出:int或long long
-
%d: int
-
%u: unsigned
-
%ld: long long
-
%lu: unsigned ;long long
8进制和16进制:
-
一个以0开始的数字字面量是8进制 %o
-
一个以0x开始的数字字面量是16进制 %x
-
8进制和16进制只是如何把数字表达为字符串,与内部如何表达数字无关
选择整数类型
-
没有特殊需要,就选择int
浮点类型
类型 | 字长 | 范围 | 有效数字 |
---|---|---|---|
float | 32 | 7 | |
double | 64 | 15 |
-
输入与输出
类型 | scanf | printf |
---|---|---|
float | %f | %f,%e |
double | %lf | %f,%e |
(%e为科学计数法)
超过范围的浮点数
-
printf输出inf表示超过范围的浮点数:正无穷或负无穷
-
printf输出nan表示不存在的浮点数
浮点运算的精度
-
带小数点的字面量是double而非float
-
float需要用f或F后缀来表明身份
-
两个浮点数运算 f1 == f2 可能失败
-
用 fabs(f1 - f2) < 1e-12
选择浮点类型
-
如果没有特殊需要,只使用double
字符类型
-
char 是一种整数,也是一种字符
-
用单引号表示的字符字面量:'a','1'
-
"也是一个字符
-
printf 和 scanf 里面用 %c输出和输入字符
字符的输入与输出
char c,d; c=1; d='1'; if("c==d){ printf("相等\n"); }else{ printf("不相等\n"); } printf("c=%d\n d=%d\n", c, d);
字符计算
char c='A'; c++; printf("%c\n", c); printf("%d\n", i);
-
一个字符加一个数字得到ASCLL码表中那个数之后的字符
-
两个字符的减,得到它们在表中的距离
大小写转化
-
字母在ASCLL码表中是顺序排列的
-
大写字母和小写字母是分开排列的,并不在一起
-
'a' - 'A'可以得到两段之间的距离,于是
-
A +'a'-'A'可以把大写字母变成小写字母,
-
a +'A'-'a'可以把小写字母变成大写字母
-
逃逸字符
-
用来表达无法打印出来的控制字符或特殊字符,它由一个反斜杠“\”开头,后面跟上另一个字符,这两个字符合起来,组成了一个字符
printf("\"5 7\"");
逃逸字符
字符 | 意义 | 字符 | 意义 |
---|---|---|---|
\b | 回退一格 | \" | 双引号 |
\t | 到下一个表格 | \' | 单引号 |
\n | 换行 | \\ | 反斜杠本身 |
\r | 回车 |
制位表
-
每行固定的位置
-
一个\t使得输出从下一个制位表开始
-
用\t才能使上下两行对齐
自动类型转换
-
当运算符的两边出现不一致的类型时,会自动转换成较大的类型
-
大的意思是能表达的数范围更大
-
char -> short -> int ->long -> long long
-
int -> float -> double
-
对于printf, 任何小于int的类型会被转换成int; float会被转换成double
-
但是scanf不会,要输入short,需要%hd
强制类型转换
-
要把一个量强制转换成另一个类型(通常是较小的类型),需要:
-
(类型)值
-
比如:
-
(int)10.2
-
(short)32
-
-
注意这时候的安全性,小的变量不总能表达大的量
-
(short)32768 (强制类型转换只是从那个变量计算出了一个新的类型的值,它并不改变那个变量,无论是值还是类型都不改变)
-
-
double a =1.0; double b =2.0; int i = (int)(a/b);
-
强制类型转换的优先级高于四则运算
bool
-
#include <stdbool.h>
-
之后就可以使用bool和true、false
逻辑运算
-
逻辑运算是对逻辑量进行的运算,结果只有0或1
-
逻辑量是关系运算或逻辑运算的结果
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
! | 逻辑非 | !a | 如果a是true结果就是false,如果a是false结果就是true |
&& | 逻辑与 | a && b | 如果a和b都是true,结果就是true;否则就是false |
| '||' | 逻辑或 | 'a || b' | 如果a和b有一个是true,结果为true; 两个都是false,结果为false |
-
表达数学中的区间,
-
如:x>4 && x<6 (逻辑)
-
-
如何判断一个字符c是否是大写字母?
-
c>='A' && c<='Z'
-
eg:
-
age >20 && age <30
-
index < 0 || index >99
-
(! age < 20)
短路
-
逻辑运算是自左向右进行的,如果左边的结果已经能够决定结果了,就不会做右边额度计算
-
a == 6 && b == 1
-
a == 6 && b += 1
-
对于&&,左边是false时就不做右边了
-
对于||,左边是true时就不做右边了 不要把赋值,包括复合赋值组合进表达式!
-
条件运算符
-
count = (count > 20)? count - 10 :count + 10
-
条件、条件满足时的值和条件不满足时的值
-
条件运算符的优先级高于赋值运算符,但是低于其他运算符
if ( count >20) count = count - 10; else count = count + 10;
嵌套条件表达式
-
count = (count>20)?(count<50)?count-10:count-5:(count<10)?count+10:count+5;
-
条件运算符是自右向左结合的
逗号
-
在for中使用
-
eg:
for ( i=0,j=10;i<j;i++,j-- )
double中保留有效数字用%g eg:(保留三位)%.3g