C語言代碼撰寫規范
第一個:注意縮進
用tab鍵縮進對齊
第二個:適當的空行
第三個:注釋,簡明扼要
C語言注釋只有兩種寫法:
第一種:單行注釋 //注釋文字
第二種:塊注釋 /* 注釋的內容 */,塊注釋不能嵌套
尤其是重要的核心代碼必須寫注釋
第四個:命名,通俗易懂,英文,千萬不要用拼音
C語言中的運算子
算術運算子 + - * / % (取余)
關系運算子 > < == != >= <=
邏輯運算子 ||邏輯或 &&邏輯與 !邏輯非
指標運算 * &
三目運算子 ?:
求資料型別大小,變數大小 sizeof
位運算 & | ~ ^
組合運算 += -= *= \= &= |=
移位運算 >> <<
自增自減 ++ --
(1) 除法
情況一:
兩個整數相除,結果取整,而且不會四舍五入
情況二:
除法運算中有一個是小數
1/2 --》結果不是0.5 是0
16/3 --》5
2/3 --》
#include <stdio.h> int main() { //int a=1/3; int a=2/3; float b=2/3; float c=2.0/3; // 2/3.0 2.0/3.0 int d=2.0/3; printf("%d\n",a); printf("%f\n",b); printf("%f\n",c); printf("%d\n",d); }
結果如下:
0 0.000000 0.666667 0
(2)取余,計算余數
只能用于整數運算 15%2 余數1
15.0%2 不對的,小數不能參與取余運算
實際開發作用:
除法和取余配合實作獲取一個數的各個位
任意輸入一個整數,編程得到這個整數總共多少位,各個位分別是多少
7545
(3)邏輯運算,跟條件判斷配合在一起使用
if(a>b)
數學中: 10<x<100
C語言中: if(x>10 && x<100)
if(姓名==zhang || 姓名==王) //或者
if(姓名==zhang && 富二代) //并且
重點:區分==和=
==用來判斷變數是否相同 if(a==b)
= 賦值運算子號
C語言規定的真和假
非零就是真 1 18 -9
零就是假
運算式一 || 運算式二 || 運算式三 //從左到右,有一個條件為真,后面的都不用運算了,整個運算式都為真
運算式一 && 運算式二 && 運算式三 //從左到右,有一個條件為假,后面的都不用運算了,整個運算式都為假
if(有房&&有車&&帥)
邏輯非 真--》假
假--》真
#include<stdio.h> int main() { int a=78; int b=8; if(!(a<b)) printf("a>b\n"); }
結果如下:
a>b
(4) 三目運算子
運算式1?運算式2:運算式3
判斷運算式1是否為真
為真 --》執行運算式2
為假 --》執行運算式3
#include <stdio.h> int main() { int a,b; printf("請輸入兩個整數!\n"); //scanf("%d",&a); //獲取鍵盤輸入整數保存到變數a的地址中 //scanf("%d",&b); scanf("%d%d",&a,&b); //用三目運算子比較他們的大小 int ret=(a>b)?a:b; printf("%d和%d中較大的一個數是:%d\n",a,b,ret); }
結果如下:
請輸入兩個整數! 15 20 15和20中較大的一個數是:20
(5)位運算(重點)
對整數的二進制進行運算
按位與 & 只要有一個是0結果就是0,全部都是1,結果就是1
比如: 18&16結果是多少? int a=89; int b=96; a&=b; //等價于 a=a&b;
18 --》二進制 10010
16 --》二進制 10000
10000
特點: 任意一個整數要求把它的第三位二進制置0,其它位不允許改變
125--》二進制1111101 --》最終希望的結果1111001
1111101 --》125
1111011 &
1111001
任何二進制位跟1進行按位與運算結果保持不變
任何二進制位跟0進行按位與運算結果一定是0
按位或 | 只要有一個是1,結果就是1,全部都是0,結果就是0
比如: 18|16結果是多少?
18 --》二進制 10010
16 --》二進制 10000
10010
特點:實際開發中,用位或運算去設定某一位二進制為1
int a=785;
785
00000.....100 或
任何二進制位跟0進行按位或運算結果保持不變
任何二進制位跟1進行按位或運算結果一定是1
按位異或 ^ 相同為0,相異為1
比如: 18^16結果是多少?
18 --》二進制 10010
16 --》二進制 10000
00010
特點:實際開發中我想把某個數的二進制取反
比如: int a=785 第三位二進制取反
785
0000........100 異或
一個數跟自己異或,結果為0 a^a結果為0
異或滿足交換律 a^b^a等價于 a^a^b
一個數跟0異或,結果保持不變 a^0結果為a
按位取反 ~ 0變成1 1變成0
比如: ~18結果是多少?
18 --》二進制 10010
~18 --》 01101
(6)組合運算(復合運算)
+= a+=10; //等價于 a=a+10;
(7)移位
左移 << 把一個整數的二進制整體向左移動若干位,低位補0
18<<2; //18左移2位
0000000000.........10010<<2
特點:一個數左移n位,相當于乘以2的n次方
右移 >> 把一個整數的二進制整體向右移動若干位,高位補什么??
算術右移: 高位補符號位
邏輯右移: 高位補0
特點:一個數右移n位,相當于除以2的n次方
(8)自增和自減
a++ 后置++ 先使用a原本的值,然后再把a加1賦值給自己
++a 前置++ 先把a加1,然后再使用加一之后的a
a-- 后置-- 先使用a原本的值,然后再把a減1賦值給自己
--a 前置-- 先把a減1,然后再使用減一之后的a
#include <stdio.h> int main() { int a=78; //int b=a++; //后置++ int b=++a; //前置++ int c=a++; printf("b is:%d a :%d c:%d\n",b,a,c); }
結果如下:
b is:79 a :80 c:79
練習:
1. float a=1.6;
if(a==1.6) //請問這個條件是否成立,為什么
#include <stdio.h> int main() { float a=1.6; //不能精準表示,整數部分和小數部分 float b=1.5; //可以精準表示 if(b==1.5) printf("b==1.5\n"); else printf("b!==1.5\n"); if(a==1.6) //某些小數在計算機中是無法精準表示的 //左邊的a是個變數,它里面存放的是1.6的二進制的近似值 //右邊的1.6是個常量,精度高一些 printf("a==1.6\n"); else printf("a!==1.6 a is:%f\n",a); }
結果如下:
b==1.5 a!==1.6 a is:1.600000
2. int a=10;
int b=6;
if((a<2)||(b=18))
printf("a ,s:%d b is:%d\n",a,b);
if((a<12)&&(a>b)&&(a=96))
printf("a ,s:%d b is:%d\n",a,b);
#include <stdio.h> int main() { int a=10; int b=6; if((a<2)||(b=18)) //判斷a<2或者18賦值給b printf("a is:%d b is:%d\n",a,b); if((a<12)&&(a>b)&&(a=96)) printf("a ,s:%d b is:%d\n",a,b); }
結果如下:
a is:10 b is:18
3. 用三目運算子實作三個整數求最大值
#include <stdio.h> int main() { int a,b,c; printf("請輸入三個整數!\n"); scanf("%d%d%d",&a,&b,&c); //scanf("%f",&m); //分步驟寫 int firstmax=(a>b)?a:b; int max=(firstmax>c)?firstmax:c; //合并寫 //int result=((a>b)?a:b)>c?((a>b)?a:b):c; printf("最大值result is:%d\n",max); }
結果如下:
請輸入三個整數! 5 9 4 最大值result is:9
總結按位或,按位異或的特點
完成任意一個整數m,要求把它的第三位二進制置零,置一,取反,其它二進制位不允許改變
將這個數&0xfffb,將第三位置0;
將這個數|0x0004,將第三位置1;
將這個數^0x0004,將第三位取反;

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/47165.html
標籤:C
上一篇:C語言學習(1)
下一篇:最長公共子串、旋轉骰子題解
