算法笔记 心得3

1,6种位运算符

>>    右移     a<<x    整数a按二进制位右移x位 (算数移位 左0 右1 正数 原码 负数 补码)
<<    左移     a>>x    整数a按二进制位左移x位
&      位与     a&b      整数a、b按二进制位对齐,按位进行与运算(除了11得1,其余为0)
|       位或      a|b       整数a、b按二进制位对齐,按位进行或运算(除了00得0,其余为1)
^       位异或  a^b      整数a、b按二进制位对齐,按位进行异或运算(相同为0,不同为1)
~       位取反  ~a       整数a的二进制的每一位进行0变1、或1变0操作
 
2,条件运算符
(   ?   :    )
格式:A?B:C;
条件A为真,返回B的结果,条件A为假,返回C的结果;
宏定义 定义MAX(a,b)
#define  MAX(a,b)  ((a)>(b)?(a):(b))
 
3,赋值表达式
赋值运算符可以通过将其他运算符放在前面实现赋值运算的简化
eg. n+=1    等价于n=n+1
      n/=(m+1)    等价于n=n/(m+1)
赋值符合运算可以加快编译速度,提高代码可读性
 
4,输入
scanf函数:
格式:scanf(“格式控制”,变量地址);
eg. scanf(“&d”,&n);
& 取地址运算符
 
数据类型                          格式符          eg
int                                     %d               scanf(“%d”,&n);
long  long                         %lld             scanf(“%lld”,&n);
float                                  %f                scanf(“%f”,&fl);
double                              %lf               scanf(“%lf”,&db);
char                                  %c               scanf(“%f”,&c);
字符串(char数组)        %s                scarf(“%s”,str);
 
数组名称本身就代表了这个数组的第一个元素的地址,所以不用再加取地址运算符
在scanf中除了char数组整个的输入输出情况不加&,其他变量类型都需要加&
 
scanf的双引号就是整个输入,只不过不数据换成对应的格式符,并把变量的地址按次序写在后面而已。
 
除%c以外,scanf对其他格式符(如%d)的输入都是以空白符(即空格,Tab)为结束标志判断标志的
字符数组%s,读入的时候,以空格或换行为读入结束的标志
 
scanf的%c可以读入空格跟换行的,
 
要输入两个入”3 4”隔开的字符,两个%d中间可以不加空格
 
5,输出
格式:printf(“格式控制”,变量名称);
 
 
数据类型                  格式        
int                             %d
long long                  %lld  
float                           %f
double                       %f
char                           %c
字符串(char数组) %s
 
实用的输出格式:
%md      可以使不足m位的int型变量,以m位进行有对齐输出,其中高位用空格补齐;如果本身超过m位则保持原样
%0md    区别与上面的是不足m位时,在前面补足够数量的0,而不是空格
%.mf      让浮点数保留m位小数输出。
 
6,使用getchar、putchar输入输出字符
用来输入输出单个字符,
eg,a=getchar();
getchar 可以识别和储存换行符
 
 
7,int main(int argc, char const *argv[])    表示用命令行处理参数
 
Int main() 表示不打算用命令行处理参数,可以完全省略
argc是命令行传递到程序中的参数个数
一个字符串数组(字符指针),表示命令行上提供的各个参数
argv [0]中的第一个条目是程序名称,其余的是参数名称,因此程序至少有一个参数,最小值argc为1
屏幕快照 2019-01-07 下午12.07.25.png
 
8,注释
1)使用/**/
注释/*   */之间的内容
 
2)使用//
注释一行中,该符号后的内容
 
9,typedef
给复杂的数据类型取别名
Eg. typedef long long LL;
 
10,常用math函数
fabs(double x)
对double型变量x取绝对值
 
floor(double x)
对double型变量x向下取整
 
ceil(double x)
对double型变量x向上取整
 
pow(double r, double p)
用于返回r^p,要求r、p都是整数
 
sqrt(double x)
用于返回double型变量额算数平方根
 
log(double x)
用于返回double型变量以自然数为底的对数
C语言中,没有对任意底数求对数的函数,必须使用换底公示 logab=logeb/longea
 
pi定义为精确值acos(-1.0)          (因为cos(pi)=-1)
const  double pi=acos(-1.0);
 
round(double x)
将double类型变量四舍五入
 
10,选择结构 if语句
 
if(A){
 
}else if(B){
 
}else{
 
}
先判断条件A,再判断条件B,如果都不成立执行else的内容
 
如果if的条件是"!=0”,可以省略”!=0”
eg,if(n)就等价于if(n!=0)
 
如果if的条件是”==0”,则省略”==“,并在表达式前面添加非运算符”!”
Eg,if(!n)就表示if(n==0)
 
11,switch
在条件比较多的情况下,会显得比较精练
格式:
switch(表达式){
        case  常量表达式1:
        …
        break;
        case  常量表达式2:
        …
        break;
        case  常量表达式n:
        …
        beak;
        default:
        ...
}
 
beark的作用在于结束当前的switch语句
 
12,while语句
while(A){
...
}
 
do{
...
}while(A)
先执行省略号中的内容一次,再来判断条件A是否成立
 
13,for语句
for(表达式A;表达式B;表达式c){
….
}
a,在for循环开始前,首先执行表达式A
b,判断表达式B是否成立:若成立,执行省略号的内容;否则退出循环
c,在表达式执行完毕后,执行表达式C,然后返回b
注意⚠️:c语言中不允许在A中,定义变量,如(int i的写法是不允许的)
 
for(循环初始条件;循环条件;循环变量改变){
...
}
 
for语句下如果只有一个语句块,可以不加大括号
 
14,break continue
continue  结束循环的当前轮回,然后进入下一个轮回
 
posted @ 2019-01-16 11:16  韩江雪  阅读(...)  评论(...编辑  收藏