C:面向過程-函式

C++:面向物件-類;向下相容C

程式包含標頭檔案+主函式

簡單資料型別

long long型賦超過int型範圍的初值,需要在初值後面加上LL,否則可能會編譯錯誤

不要使用float,碰到浮點型的資料直接使用double

常量可以賦值給變數

小寫字母比大寫字母的ASCII碼值大32

(新型別名)變數名 //強制型別轉換
#define 識別符號 常量 //符號常量-巨集定義
const 資料型別 變數名 = 常量; //const常量

兩個整形做除法運算會向下取整

巨集定義實現兩數取較大值:#define MAX(a,b) ((a)>(b)?(a):(b))

常用左移運算子來表示無窮大數INF:const int INF =(1<<30)-1; //0x3fffffff

C語句

%c把空白符按字元讀入;其他格式符的輸入以空白符(空格、Tab、換行)為結束判斷標誌

double型的輸入輸出格式符不同

要輸出'%''\',需要在前面再加一個符號:printf("%%");

實用的輸出格式:

printf("%5d\n",a);  //右對齊輸出,高位用空格補齊
printf("%05d\n",a); //右對齊輸出,高位用0補齊
Printf("%.3f\n",a); //保留m位小數輸出

輸入輸出字元:getchar();putchar();

常用math函式:

fabs(double x);  //取絕對值
floor(double x);ceil(double x); //向上取整和向下取整
pow(double r,double p); //r的p次方
sqrt(double x); //算術平方根
log(double x); //以自然對數為底的對數,其他為底的對數要用換底公式
sin(double x);cos(double x);tan(double x); //弧度制
asin(double x);acos(double x);atan(double x); //返回變數的反正弦值、反餘弦值、反正切值
round(double x); //四捨五入

pi可以定義為精確值:const double pi = acos(-1.0);

if語句、while條件判斷如果表示式是“!=0”,則可以忽略“!=0”;如果表示式是“==0”,則忽略並在表示式前新增“!”

陣列

陣列大小較大時(10的6次方級別),需要將其定義在主函式外面

memset(陣列名,值,sizeof(陣列名)); //對陣列每個元素賦值,按位元組賦值,建議只賦0或-1

gets識別換行符作為輸入結束,因此scanf完其他型別後,如果要使用gets,需要先用getchar接收空白符

如果不是使用scanf的%s格式或gets函式輸入字串,一定要再輸入字串的最後加入’\0‘,不然輸出字串會出現亂碼

strlen(字元陣列); 得到字元陣列第一個\0前字元的個數
strcmp(字元陣列1,字元陣列2); 比較兩個字串大小,字典序
strcpy(字元陣列1,字元陣列2); 把2複製給1
strcat(字元陣列1,字元陣列2); 把2拼接到1後面


函式

函式傳遞引數的方式是值傳遞,函式定義內的引數為形參,實際呼叫的引數為實參

陣列作為引數時,函式定義第一維不需要寫長度,實際呼叫只需要寫陣列名

在函式中對陣列元素的修改就等於對原陣列元素的修改

陣列不允許作為返回型別出現

函式的巢狀呼叫:在一個函式中呼叫另一個函式

函式的遞迴呼叫:一個函式呼叫該函式自身

指標

一個指標指向一個變數

指標是一個unsigned型別的整數

int* a; //*放在資料型別後和變數名前都可以,放在資料型別後且有多個變數時,*只作用於第一個變數名

指標變數定義時*是變數型別說明的一部分,指標變數使用時*是取出指標指向資料的鑰匙

兩個int型的指標相減,等價於在求兩個指標之間相差了幾個int;其他型別的指標同樣適用

函式引數為指標變數時,傳遞方式為地址傳遞

定義指標變數時如果沒有初始化,它存放的地址是隨機的,如果該隨機地址指向的是系統工作區間,那麼接下來變數改變時容易出錯;所以要初始化

引用:給原變數起了一個別名,對引用變數的操作就是對原變數的操作;在函式定義時把&加在變數名前面

結構體

結構體內不能定義本身型別,可以定義自身型別的指標變數

struct stu{
int id;
char name[20];
stu* next;
}stu,*p;
//訪問元素
stu.id
stu.name
(*p).id
(*p).name
p->id
p->name
//兩種寫法完全等價 //建構函式
struct stu{
int id;
char gender;
stu(){}
stu(int _id,char _gender){
id=_id;
gender=_gender;
}
};
//例項
stuInfo = stu(100,'M');

技巧

const double eps=1e-8;
const double Pi=acos(-1.0); #define Equ(a,b) ((fabs((a)-(b)))<(eps))
#define More(a,b) (((a)-(b))>(eps))
#define Less(a,b) (((a)-(b))<(-eps))
#define MoreEqu(a,b) (((a)-(b))>(-eps))
#define LessEqu(a,b) (((a)-(b))<(eps))

黑盒測試:系統後臺會準備若干組輸入資料,然後讓提交的程式去執行這些資料,如果輸出的結果與正確答案完全相同(字串意義上的比較),那麼就稱通過了這道題的黑盒測試,否則會根據錯誤型別而返回不同的結果。

單點測試:按正常邏輯執行一遍程式

多點測試

​ 1.預設讀取到檔案末尾

while(scanf("%d",&n)!=EOF){}
while(gets(str)!=null){}

​ 2.輸入資料滿足條件時停止輸入

在while...EOF內部進行判斷;直接把推出條件的判斷放到while語句中

​ 3.while(t--)