算法笔记学习心得 3

版权声明:转载留名即可 ^_^ https://blog.csdn.net/qq_33375598/article/details/86504169

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

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  结束循环的当前轮回,然后进入下一个轮回

猜你喜欢

转载自blog.csdn.net/qq_33375598/article/details/86504169
今日推荐