c語言之父:丹尼斯.里奇
c語言的優缺點:看書查找
1.c的引入:
gcc編譯的格式:gcc hello.c -o hello -o是目標的意思object;
hello world程序的解析:
< #>:預處理命令 include:頭文件的包含 <>:把括號里的內容引入到源文件中
<stdio.h>:標準輸入輸出頭文件,是計算機自帶的庫,可以直接使用
< main>:函數名,main()是主函數,c程序源文件有且只能有一個main()函數!!!c程序的入口,即所有的c程序都是從
main函數開始執行;
int argc:參數的個數; char *argv[]:記錄參數
printf():是庫函數,包含在<stdio.h>中;
return 0:返回,或者函數結束;
注:以上內容基本決定了程序的框架;
c的數據類型:
基本數據類型:
int:基本整型
short int:短整型
long int:長整型
unsigned :無符號
signed:有符號
char 字符型 getchar 只能得到一個字符
float 單浮點類型:小數點后6位
double 雙浮點類型: 小數點后15位
numf e/E n :e為10的n次方
例:12.2E3<=====>12.2*10^3
enum 枚舉類型
構造數據類型:
數組類型,結構體(struct),聯合體(union)
指針類型:
空類型: void
2.變量的定義:
data:數據
type:類型
value:值
DataType Name1,Name2,......,Numen;
可以定義多個變量,中間用逗號隔開,結尾用分號結束??!
DataType Name; 一行定義一個變量最好
DataType Name1;
建議一行定義一個變量并初始化
3.標識符:
包括變量名,函數名,及其它標號等;
(1)標識符的命名要求
字母(A~Z,a~z),下劃線(_),數字組成;
且規定:第一個字符不能為數字;
(2)命名規則:
可讀性要高,做到“見名知義”
駝峰命名法;
盡量不要用漢語拼音?。?!
4.格式輸入\輸出:scanf()\printf()
printf("占位符",參數):按一定格式輸出,一一對應??!
也可以直接輸出printf("====")
%m.nf:m代表總位數(%5.3f=3.142 包含小數點加起來共五位數,小數點后面三位),n小數部分保留幾位
%-m.n:左對齊! %m.n:右對齊! 正負決定左右對齊;
scanf("占位符",參數): 按一定格式輸入,一一對應!!
&(取地址符):取相應地址
#######include<stdio.h>
int main()
{
float numf=1.234;
//按一定格式輸出
printf("numf=%f\n",numf);
//輸入numf的值,&numf為取地址符,將輸入的 數據保存
//到numf對應的內存空間中!
scanf("%f",&numf);
printf("numf=%5.3f",numf);
}
\
#######include<stdio.h>
int main()
{
int numt=123;
float numf=1.23;
printf("input two num:\n");
//printf給的什么格式scanf就按一定格式輸入
scanf("%d,%f",&numt,&numf);
printf("numt=%d\tnumf=%f\n",numt,numf);
//\t 制表符;
return 0;
}
占位符:
printf scanf
int %d %d
char %c %c
long %ld %d
float %f %f
double %lf %f
字符串 %s
5.常量
數字常量:123 1 567 -234
字符常量:'d' '$' '?' 'A'
實型常量:1.234 3.1415926 -1.423
字符串常量:由雙引號括起來的字符序列(由一個或多個字符組成的)
注意:字符串和字符的區別
'a':字符 占一個字節
"a":字符串 占兩個字節 默認結束標志為‘\0’, 一般不顯示
表示形式: "ahsoifhaiu" "asdf?<@sdaf"
6.變量和常量的區別:
變量:
其職可以更改!
先定義,后使用!
常量:
其值不可更改!
隨時可以使用,無需定義或聲明!
#include<stdio.h>
int main()
{
int numt=34; //變量先定義后使用
//常量名=值
printf("numt=%d,888=%d\n",numt,888);
return 0;
}
二、運算符
1.sizeof():計算大小,得出對應變量或數據類型所占內存空間大小
單位:字節(byte) 1字節=8位(bit)
sizeof DataType:
64位機下:
#######include<stdio.h>
int main()
{
printf("sizeof DataType:\n");
printf("sizeof(char)=%ld\n",sizeof(char)); =1
printf("sizeof(int)=%ld\n",sizeof(int)); =4
printf("sizeof(short)=%ld\n",sizeof(short)); =2
printf("sizeof(long)=%ld\n",sizeof(long)); =8
printf("sizeof(float)=%ld\n",sizeof(float)); =4
printf("sizeof(double)=%ld\n",sizeof(double)); =8
return 0;
}
、
#######include<stdio.h>
int main()
{
char ch;
short short_size;
int int_size;
long long_size;
float float_size;
double double_size;
printf("sizeof(ch)=%ld\n",sizeof(ch));
printf("sizeof(short_size)=%ld\n",sizeof(short_size));
printf("sizeof(int_size)=%ld\n",sizeof(int_size));
return 0;
}
注意:對比數據類型所占大小,和其定義的變量所占內存的大小!
2.算數運算符(七個)
加:+ 減:- 乘:* 除:/ 取余:% a%b求余 6%4余2
#include<stdio.h>
int main()
{
int a=12;
int b=3;
int sum=a+b;
//或者:int sum;
printf("%d,%d,%d\n",a,b,sum);
return 0;
}
#include<stdio.h>
int main()
{
int a=12;
int b=3;
int sum=a-b;
int c=a*b;
int d=a/b;
//或者:int sum;
printf("%d,%d,%d,%d,%d\n",a,b,sum,c,d);
return 0;
}
自增:++
++i :num=++i; i=i+1; num=i;
i++ : num=i; i=i+1;
#include<stdio.h>
int main()
{
int num=5;
int sum=++num + ++num; 6+6
printf("sum=%d\n",sum);
int i=5;
int j=i++ + i++; 5+5
printf("i=%d j=%d\n",i,j);
}
自減:-- --i i--
#include<stdio.h>
int main()
{
int num=5;
printf("%d\n",++num);6
printf("%d\n",num++);6
printf("%d\n",num--);7
printf("%d\n",++num);7
printf("%d\n",num++);7
}
關系運算符:(結果成立為1 不成立為0)
大于:>
小于:<
等于等于:==
大于或者等于:>=
小于或者等于:<=
不等于:!=
#######include<stdio.h>
int main()
{
int a=3;
int b=4;
printf("a>b:%d\n",a>b); =0
printf("a<b:%d\n",a<b); =1
printf("a==b:%d\n",a==b); =0
printf("a<=b:%d\n",a<=b); =1
printf("a>=b:%d\n",a>=b); =0
printf("a!=b:%d\n",a!=b); =1
}
逗號運算符(,):
表達式1,表達式2,表達式3;
其中每個表達式又可以是一個逗號表達式!
一次計算表達式1,表達式2,表達式3的值,整個逗號表達式的值取決于最后一個表達式的值
#include<stdio.h>
int main()
{
int a=4;
a+2,a3,a-5;
printf("a=%d\n",a); a=4
(a=a+3,a2),a/3; //有等于號才賦值 這里a=a+3
printf("%d\n",a); a=7
}
使用scanf()注意事項
(1) 一定要嚴格按照scanf()中的格式輸入變量的值??!
(2) 使用scanf()時,取參數列表中參數的地址,scanf()是將輸入的值保存到變量對應的地址中!
(3) 緩存區問題
scanf() 函數中不能使用換行符:\n;