c語言之父 丹尼斯-里奇 貝爾實(shí)驗(yàn)室
C語言優(yōu)點(diǎn):運(yùn)算符豐富;數(shù)據(jù)結(jié)構(gòu)類型豐富;結(jié)構(gòu)化的控制語句;語法限制相對(duì)自由;允許訪問物理內(nèi)存,可對(duì)硬件操作;執(zhí)行效率高;移植性好。
缺點(diǎn):代碼數(shù)量多時(shí),不可控性增加,難度較大。
一、c基本變量及語法
1、C引入
編譯:gcc hello.c -o hello //生成目標(biāo)文件,必須加上hello
程序: 解析:
#include<stdio.h> //#;預(yù)處理命令
// include :頭文件包含
// < >:把括號(hào)里的內(nèi)容引入到源文件中
// stdio.h:頭文件,是計(jì)算機(jī)在帶的庫,可以直接使用
int main (int argc,char *argcv[]) //main:函數(shù)名,main()是主函數(shù),c程序源文件有且只能有一個(gè)main()函數(shù),即主函數(shù)??!C程序的入口,即所有的C程序都是從main開始執(zhí)行
// int argc :參數(shù)個(gè)數(shù)
// char *argv[]:記錄參數(shù)
{
printf("hello,world!"); //printf():庫函數(shù),包含在<stdio.h>中,按一定的格式輸出。
return 0; //return 0;返回值,函數(shù)結(jié)束。
}
ps:此程序基本決定了,C程序的框架!
2、C的數(shù)據(jù)類型
(1)基本數(shù)據(jù)類型:
整數(shù)型:
int, 基本整型
short int,短整型
long int,長整型
unsigned,無符號(hào)
singed,有符號(hào)
字符型:char
字符:由' '引起來的單個(gè)字母,數(shù)字,或者其他符號(hào),e,1,!等
getchar():獲取單個(gè)字符
putchar():輸出的單個(gè)字符
實(shí)型,浮點(diǎn)型:
float:單精度 有效位7位左右
double :雙精度 有效位15位左右
numf e/E n //n為整數(shù),科學(xué)計(jì)數(shù)法
float num=1.23E4;//num為1.23*10^4
枚舉類型:enum
構(gòu)造數(shù)據(jù)類型:
數(shù)組類型,結(jié)構(gòu)體類型(struct),聯(lián)合體類型(union)
指針類型:
空類型:void
#include<stdio.h>
//數(shù)據(jù)類型的實(shí)例
int main(int argc,char *argv[])
{
//定義整型變量,并初始化
int a=2;
//定義整型變量
int b,c,d;
//給整型變量賦值
b=12;
c=13;
d=15;
//定義多個(gè)整型并初始化
int e=11,f=10,g=9;
//無符號(hào)數(shù)據(jù)類型
unsigned h=-123;
printf("%d\n",a);
printf("%d\n",h);
printf("%d\n",d);
return 0;
}
(2)變量的定義:
<1>DataType Name1,Name2,Name3,...,Namen
可以定義多個(gè)變量,中間用“,”隔開,結(jié)尾用“;”結(jié)束。
<2>
DataType Name1;
DataType Name2;
DataType Name3;
<3>建議一行定義一個(gè)變量,并初始化?。?!
DataType Name1 = value;
3.標(biāo)識(shí)符:
包括變量名,函數(shù)名,及其他標(biāo)號(hào)等
<1>標(biāo)識(shí)符的組成
字母(A~Z,a~z),下劃線(_),數(shù)字,且規(guī)定第一個(gè)字符,不能為數(shù)字
<1>命名規(guī)則
可讀性要高,做到“見名知意”
駝峰命名法:單詞首字母大寫
杜絕使用漢語拼音!?。?/p>
4.格式輸入/輸出:printf()/scanf()
<1>printf()----按一定的格式輸出:printf(“占位符”,參數(shù)表);
一一對(duì)應(yīng)
----printf(“打印輸出的內(nèi)容”)
----%m.nf:(右對(duì)齊)
m:總位數(shù)
n:小數(shù)部分的保留位數(shù),若n+1大于m,則輸出n代表原來數(shù)值。
----%-m.nf按照左對(duì)齊。
<2>scanf()
按一定格式輸入:scanf(“占位符”,&參數(shù)表);
一一對(duì)應(yīng)
#include<stdio.h>
int main ()
{
//定義變量并初始化
float numf=1.234;
//按格式輸出numf的值
printf("numf =%f\n",numf);
//輸入numf的值,&numf為地址,將輸入的數(shù)據(jù)保存到numf對(duì)應(yīng)的空間中!
scanf("%f",&numf);
printf("numf =%5.3f\n",numf);
return 0;
}
&:取地址符號(hào)
占位符:
print() scanf()
int %d %d
char %c %c
long %ld %ld
float %f %f
double %lf %lf
字符串 %s
5.常量
數(shù)字常量:123 1 -323
字符常量:‘s’ ‘$’
實(shí)型常量:1.23 -1.234
字符串常量:有“ ”括起來的字符序列,由一個(gè)或者多個(gè)字符組成。
注意:字符串和字符的區(qū)別
‘a(chǎn)’:占用一個(gè)字節(jié)
“a”:占用兩個(gè)字節(jié)
‘\0’:字符串的結(jié)束標(biāo)志,一般不顯示
6.變量和常量的區(qū)別
變量:
其值可以更改,先定義后使用。
常量:
其值不可以更改,隨時(shí)可以使用,無需定義或聲明。
變量的初始化:
變量名=常量;//注:類型一定要一致?。?!
二、運(yùn)算符
1、sizeof()
計(jì)算大小,得出對(duì)應(yīng)變量或數(shù)據(jù)類型所占內(nèi)存空間的大小
(1)單位:字節(jié)(byte)
1字節(jié)=8位(bit)
sizeof DataType: //64位機(jī)下
sizeof(cahr)=1
sizeof(int)=4
sizeof(short)=2
sizeof(long)=8
sizeof(float)=4
sizeof(double=8
sizeof DataType:
//
32位機(jī)下
sizeof(cahr)=1
sizeof(int)=4
sizeof(short)=2
sizeof(long)=4 //只有l(wèi)ong 不同
sizeof(float)=4
sizeof(double=8
(2)對(duì)應(yīng)變量內(nèi)存打大小
sizeof(ch)=1
sizeof(short_size)=2
sizeof(int_size)=4
sizeof(long_size)=8
sizeof(float_size)=4
sizeof(double_size)=8
注意:(1)(2)的結(jié)果,對(duì)比數(shù)據(jù)類型所占大小,和其定義變量所占的內(nèi)存大小
#include<stdio.h> //sizeof實(shí)例
int main()
{
printf("sizeof DataType:\n");
printf("sizeof(cahr)=%ld\n",sizeof(char));
printf("sizeof(int)=%ld\n",sizeof(int));
printf("sizeof(short)=%ld\n",sizeof(short));
printf("sizeof(long)=%ld\n",sizeof(long));
printf("sizeof(float)=%ld\n",sizeof(float));
printf("sizeof(double=%ld\n",sizeof(double));
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));
printf("sizeof(long_size)=%ld\n",sizeof(long_size));
printf("sizeof(float_size)=%ld\n",sizeof(float_size));
printf("sizeof(double_size)=%ld\n",sizeof(double_size));
return 0;
}
2、算數(shù)運(yùn)算符(七個(gè))
加+、減-、乘×、除/、取余%
自增:++
++i //先自增后取值,
num=++i;
即:i=i+1;
num=i+1
i++ //先取值后自增
num=i++
即num=i;
i=i+1;
#include<stdio.h>
//自加運(yùn)算實(shí)例
int main()
{
int num=5;
int sum=++num + num++;
printf("sum=%d\n",sum);
int i=5;
int j=i++ + i++;
printf("j=%d,i=%d\n",j,i);
return 0;
}
#include<stdio.h>//基本算數(shù)運(yùn)算
int main()
{
int a=12;
int b=3;
int sum=a+b;
printf("%d,%d,%d\n",a,b,sum);
int min=a-b;
printf("%d,%d,%d\n",a,b,sum);
int mul=a*b;
printf("%d,%d,%d\n",a,b,mul);
int del=a/b;
printf("%d,%d,%d\n",a,b,del);
int rem=a%b;
printf("%d,%d,%d\n",a,b,rem);
return 0;
}
自減:--
--i:先自減,后運(yùn)算
i--:先取值,后自減
3、關(guān)系運(yùn)算符
大于:>
a>b:成立,返回1;不成立返回0;
小于:<
a<b:成立,返回1;不成立返回0;
等于:==
a==b:成立,返回1;不成立返回0;
大于等于:>= //a大于b,或者a=b;
a>=b:
成立,返回1;不成立返回0;
小于等于:<=
a<=b: //a小于b,或者a=b;成立,返回1;不成立返回0;
不等于:!=
a!=b:成立,返回1;不成立返回0;
4.逗號(hào)運(yùn)算符(,)
表達(dá)式1,表達(dá)式2,表達(dá)式3,...
//其中每一個(gè)表達(dá)式又可以是一個(gè)逗號(hào)表達(dá)式!
//依次計(jì)算表達(dá)式1,表達(dá)式2,表達(dá)式3,.....
//表達(dá)式的值取決于最后一個(gè)表達(dá)式的值
#include<stdio.h> //關(guān)系運(yùn)算符實(shí)例
int main()
{
int a=3;
int b=4;
printf("input a,b:");
scanf("%d,%d",&a,&b);
int res = a>b;
printf("%d>%d的結(jié)果為:%d\n",a,b,res);
res = a <= b;
printf("%d<=%d的結(jié)果為:%d\n",a,b,res);
/* printf("a>b :%d\n",a>b);
printf("a<b :%d\n",a<b);
printf("a==b:%d\n",a==b);
printf("a<=b:%d\n",a<=b);
printf("a>=b:%d\n",a>=b);
printf("a!=b:%d\n",a!=b);
*/
return 0;
}
5、使用scanf
注意事項(xiàng)
(1)一定要嚴(yán)格按照scanf()中的格式輸入變量的值?。?!
(2)使用scanf()時(shí),參數(shù)列表中的參數(shù)地址,scanf()是將輸入的值保存到變量對(duì)應(yīng)的地址中!
(3)緩存區(qū)問題-----重點(diǎn)
scanf()函數(shù)中不能使用換行符:’\n’