C語言教程-C語言基礎_第1頁
C語言教程-C語言基礎_第2頁
C語言教程-C語言基礎_第3頁
C語言教程-C語言基礎_第4頁
C語言教程-C語言基礎_第5頁
已閱讀5頁,還剩65頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第二章C語言基礎1進位計數制

十進制

有十個不同的記數符號:0,1…9。逢十進一

二進制數制

只有兩個記數符號,0和1。逢二進一。2

八進制

有8個不同的記數符號:0,1,2,3,4,5,6,7;逢8進1

十六進制

有16個不同的記數符號:0,1,2…9,A,B,C,D,E,F;逢16進1。

不同記數制之間的轉換

可用計算器完成3數制間的相互轉換1、十進制--------二進制整數部分:除2取余小數部分:乘2取整2、二進制--------八進制3位1位3、二進制--------十六進制4位1位(1011)2=1×23+0×22+1×21+1×20=11(125.3)8=1×82+2×81+5×80+3×8-1=85.3754十進二進八進16進1十進二進八進16進91000119100111200102210101012A300113311101113B401004412110014C501015513110115D601106614111016E701117715111117F81000108161000020105數值型數據的編碼

機器數

在計算機中,約定第一位為符號位,0表示正,1表示負。這種在計算機中連同符號一起數碼化的數稱為機器數數值是以補碼(complement)表示的

6

原碼、反碼和補碼

轉換規則原碼反碼補碼+101011001010110010101100101011-1010111010101111010100110101017非數值型數據的編碼

ASCII碼(AmericanStandardCodeforInformationInterchange)

英文字符采用ASCII碼進行編碼。

ASCII碼采用七位二進制位編碼,共可表示128個字符。A:01000001(65)a:01100001(97)89C的數據類型整型int字符型char基本類型單精度實型float實型(浮點型)數組類型結構類型struct聯合類型union枚舉類型enum雙精度實型double構造類型指針類型空類型(無值類型)void10常量

常量,程序運行過程中其值不變的量

類型

整型常量:10進制常量:如1238進制常量(數前加0):如012316進制常量(數前加0X):如0x123長整型(數后加l或L),如123456L無符號整型(數后加u或U):如123u11

實型常量:

小數記數法如:1999.35,-2001.98

指數記數法如:1.99935e3

錯誤如:3e2.5,e8

有float,double,longdouble三種類型

后面加f表浮點型:如12.3f

后面加l表長雙精度:如12.345L

不加則默認為雙精度:如123.4512例1main(){inta,b,c;a=10;b=010;c=0x10;printf("%d,%d,%d\n",a,b,c);}運行結果:10,8,16%d表示以十進制整型輸出13例2運行結果:main()1999.35,1.99935e3{floatf1;f1=1999.35;printf("%f,%e\n",f1,f1);}實數只用十進制形式表示。%f表示以小數形式輸出%e表示以指數形式輸出14

字符常量:用單引號括起來的一個字符或轉義字符。例:'A','o','1','a','\n','\0'等轉義字符含義\n換行\t橫向跳格(到下一個輸出區)\\反斜杠\'輸出單引號\ddd1--3位8進制所代表的字符\xhh1--2位16進制所代表的字符15例:main(){printf("%c,%c,%c\n",'A','\101','\x41');}運行結果:A,A,A字符數據與整型數據類似,但字符數據只占一個字節,只能存放0~255之間的整數。%c表示以單個字符輸出。16

字符串常量:用雙引號括起來的一串字符序列。例:"CHINA","BBI","Iamateacher."等。而"A"與'A'在C語言中是不同的,前者是字符串常量,后者是字符常量。'A'"A"0100000101000001\0'\0?是字符串結束標記,即空字符。輸入時系統自動加上,輸出時不輸出17

每一個字符串常量的結尾都帶一個字符’\0?,系統據此判斷字符串是否結束。C規定以字符’\0?作為字符串結束標志。

字符串常量?CHINA”,實際上在內存中是:CHINA\0它占內存單元不是5個字符,而是6個字符,最后一個字符為’\0?。但在輸出時不輸出’\0?。

可以輸出一個字符串,如printf(“Howdoyoudo.”);18符號常量#definePI3.1415926main(){floatr,s;scanf("%f",&r);s=2*PI*r;printf("s=%f\n",s);}符號常量一般用大寫,一旦定義后不可再賦其他值。若程序里多處出現,如需修改此值,僅需在預處理命令#define中作一次修改。19變量

程序執行過程中其值可以變化的量

變量代表內存中具有特定屬性的一個存儲單元,它用來存放數據,這就是變量的值。

變量名實際上是以一個名字對應一個地址,程序編譯時系統給每一個變量名分配相應的內存地址。從變量中取值,實際上是通過變量名找到相應的內存地址,從中讀取數據。20變量的起名規則大小寫字母有區別如:a1與A1不同不可用關鍵字如:int,for,if等不可出現空格如:stu1,a1等見名識意如:sum,n1,c1,s1等長度不要超過8個字符21變量的定義與初始化

在C中使用變量前一定要先定義,編譯系統對不同類型變量分配不同數量的內存單元以存放其值。如:intn1,n2;n1=n2=10;

在定義變量的同時可以初始化變量,即為變量賦初值,但不允許連續賦值。如:intn1=10,n2=10;22變量類型定義字節范圍整型inta,b;2-32768---32767短整型shortx,y;2-32768--32767無符號整型unsignedinta;20--65535長整型longl;4-231~231-1單精度實型floatf;4-3.4e38~3.4e38雙精度實型doubled;8-1.7e308~1.7e308字符型charc1,c2;10--25523

整型變量的定義與使用#include<stdio.h>voidmain(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}不同種類的整型數據可以進行算術運算24

整型數據的溢出#include<stdio.h>voidmain(){inta,b;a=32767;b=a+1;printf(“%d,%d\n”,a,b);}數值是以補碼表示的。一個整型變量只能容納-32768~32767范圍內的數,如果超出這個范圍就會發生?溢出?。25浮點型變量浮點型數據在內存中的存放形式一個浮點型數據一般在內存中占4個字節(32位)。與整型數據的存儲方式不同,浮點型數據是按照指數形式(a*2b)存儲的。系統把一個浮點型數據分成小數部分a和指數部分b,分別存放。26

浮點型數據的舍入誤差#include<stdio.h>voidmain(){floata,b;a=123456.789e5;b=a+20;printf(“%f\n”,b);}

單精度浮點型變量只能保證7位有效數字,而雙精度浮點型變量能保證15位有效數字。應當避免將一個很大的數和一個很小的數直接相加或相減,否則就會?丟失?較小的數27字符變量

字符型變量用來存放字符常量,只能放一個字符。一個字符變量在內存中占一個字節。

將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內存單元中去,而是將該字符對應的ASCII代碼放到存儲單元中。

字符型數據和整型數據之間可以通用。一個字符數據既可以以字符形式輸出,也可以以整數形式輸出。

不能把一個字符串常量賦給一個字符變量。28

向字符變量賦以整數。#include<stdio.h>voidmain(){charc1,c2;c1=97;c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}

c1=97;c2=98;相當于以下兩個賦值語句:因為’a?和’b?的ASCII碼為97和98c1=?a?;c2=?b?;293、二進制--------十六進制A:01000001(65)不能把一個字符串常量賦給一個字符變量。a,b,c,d均是整型變量,a=2,b=-3,c=7,逗號運算符優先級最低,結合性是自用于取內容(*)和取地址(&)二種運算。10進制常量:如123地址,程序編譯時系統給每一個變量ASCII碼(AmericanStandardCodefori++,i--(在使用i之后,使i的值加a=1,b=2,c=3;個范圍就會發生?溢出?。printf(“%d%d\n”,c1,c2);單精度浮點型變量只能保證7位有效數字,{inta,b,c;

大小寫字母的轉換#include<stdio.h>voidmain(){charc1,c2;c1=?a?;c2=?b?;c1=c1-32;c2=c2-32;printf(“%c%c”,c1,c2);}

小寫字母的ASCII碼比大寫字母大32。30運算符及其表達式算術運算符及其表達式

算術運算符:+,-,*,/,%,++,--+,-,*,/:若兩個操作數均為整型,其結果為整型;若有一個操作數為實型,則其結果為雙精度實型%(求余,模運算):兩個操作數必須為整型,其結果為余數31

算術表達式:用算術運算符將可操作對象連接起來的算式.例:a,100,a+100,a+3/2.0等均是算術表達式.

優先級高低*/%+-

結合性從左到右。即表達式中有相同優先級運算符時,要從左往右運算32a,b,c,d均是整型變量,a=2,b=-3,c=7,d=-19;試分別寫出下列各表達式的值.算術表達式等價表達式表達式的值c/b/a(c/b)/a-1d/b%a(d/b)%a0-a*d(-a)*d38a%-b*c(a%(-b))*c14a/c+-20/-a(a/c)+((-20)/(-a))10-d%c-b/a*5+5((-d)%c)-((b/a)*5)+5157-a%(3+b)7-(a%(3+b))出錯(分母為0)33例:main(){inta=1;charc1='A';floatf=100;doubled=200.0;longl=40000;printf("%f\n",a+c1+f+d);printf("%ld\n",a+l);printf("%d\n",a+c1);printf("%f\n",c1+d);}34main(){charc1,c2,c3;c1='A';c2='B';c3='C';printf("%c,%c,%c\n",c1,c2,c3);printf("%c,%c,%c\n",c1+1,c2+1,c3+1);printf("%d,%d,%d\n",c1,c2,c3);}運行結果:字符型與整型A,B,CB,C,D65,66,67可以作算術運算35main(){inta1,a2,a3;a1=97;a2=98;a3=99;printf("%c,%c,%c\n",a1,a2,a3);printf("%c,%c,%c\n",a1+1,a2+1,a3+1);}運行結果:a,b,c為‘a?,?b?,?c?的a1,a2,a3分別b,c,dASCII碼整型值可按%c格式輸出一個字符36自增、自減運算符使變量的值增1或減1。

++i,--i(在使用i之前,先使i的值加1或減1)

i++,i--(在使用i之后,使i的值加1或減1)

自增、自減運算符只能用于變量,而不能用于常量或表達式,

結合方向是?自右至左?。37i++與++i的區別:++i是先執行i=i+1后,再使用i的值;i++是先使用i的值后,再執行i=i+1。例如:①i=3;j=++i;i的值先變成4,再賦給j②i=3;j=i++;先將i的值3賦給j,然后i變為438自增(減)運算符常用于循環語句中使循環變量自動加1。C語言中有的運算符為一個字符,有的運算符由兩個字符組成,為避免誤解,最好采取大家都能理解的寫法。:例如不要寫成(i++)+j或i+(++j)的形式i+++j的形式,而應寫成39例如:i的初值為3,則下面的函數調用:printf(”%d,%d”,i,i++);在有的系統中,從左至右求值,輸出?3,3”。在多數系統中對函數參數的求值順序是自右而左,輸出的是?4,3”。最好改寫成j=i++;printf("%d,%d“,j,i);40main(){intx=100;printf("%d,%d,%d,%d\n",x++,x,--x,x);printf("%d\n",x);}運行結果:99,99,99,10010041main(){inta,b,c;a=b=c=0;a=++b+++c;a=b+++c++;b,c先相加,后均增1a=++b+c++;a=b--+--c;printf("%d,%d,%d\n",a,b,c);}b,c均先增1,后相加b先增1和c相加,后c再增1c先減1和b相加,后b減1運行結果:5,2,242

不同類型數據混合運算不同類型數據混合運算時,系統自動按以下規律轉換(即字節數少的類型轉換成字節數多的類型)doublefloatlong必unsigned轉intchar,short43

在不同類型數據的混合運算中,由系統自動實現轉換,由少字節類型向多字節類型轉換。

不同類型的量相互賦值時也由系統自動進行轉換,把賦值號右邊的類型轉換為左邊的類型。44強制類型轉換運算符可以利用強制類型轉換運算符將一個表達式轉換成所需類型。一般形式:(類型名)(表達式)例如:(double)a將a轉換成double類型(int)(x+y)將x+y的值轉換成整型(float)(5%3)將5%3的值轉換成float型45main(){inta,b;floatc;scanf("%d,%d,%f",&a,&b,&c);printf("a+b=%d\n",a+b);printf("a-b=%d\n",a-b);printf("a/c=%f\n",a/c);printf("a%%c=%d\n",a%(int)c);}強制類型轉換運算符要輸出?%”號,(類型名)(表達式)用于將一個表達式轉換成所需類型應使用?%%”46

下列程序執行后的輸出結果是:voidmain(){intx=?f?;printf(“%c\n”,(?A?+(x-?a?+1)));}

inta=7;floatx=2.5,y=4.7;則表達式x+a%3*(int)(x+y)/4的值是多少?47關系運算符用于比較運算。包括:

大于(>)小于(<)等于(==)

大于等于(>=)小于等于(<=)

不等于(!=)關系表達式由關系運算符連接起來的表達式。如:x>5,x==1,x!=0等其值為0或1,0表示假,1表示真48

邏輯運算符用于邏輯運算。包括:

與(&&)或(||)非(!)

邏輯表達式由邏輯運算符連接起來的表達式。如:x>5&&x<10,x==1||x<0等其值為0或1,0表示假,1表示真注意:在C語言中任何非0值均表示真,只有0值表示假49

||與&&的特殊性質

a||b,如果a=true,則表達式b不運算

a&&b,如果a=false,則表達式b不運算

設intm(0),n(2);則執行(m=3+7)||(n=0+7)后m,n的值?

設整型變量m,n,a,b,c,d均為1,執行(m=a>b)&&(n=a>b)后m,n的值?50

位操作運算符參與運算的量,按二進制位進行運算。包括:

位與(&)

位或(|)

位非(~)

位異或(^)

左移(<<)

右移(>>)51賦值運算符

用于賦值運算,分為:

簡單賦值(=)

復合算術賦值(+=,-=,*=,/=,%=)

復合位運算賦值(&=,|=,^=,>>=,<<=)結合性均是從右到左52在賦值符?=?之前加上其他運算符,可以構成復合的運算符。例如:

a+=3等價于a=a+3

x*=y+8等價于x=x*(y+8)

x%=3等價于x=x%3凡是二元(二目)運算符,都可以與賦值符一起組合成復合賦值符。53運算符表達式舉例=+=,-=,*=,/=,%=等<變量名>=<表達式><變量名><復合賦值運算符><表達式>a=100x+=2如果賦值運算符兩側的類型不一致,但都是數值型或字符型時,在賦值時要進行類型轉換,右邊表達式的值要適合左邊變量。54賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為?賦值表達式?。一般形式為:<變量><賦值運算符><表達式>例如:“a=5”是一個賦值表達式注意:任何一個表達式都應該有一個值,賦值表達式的值就是賦值后左邊變量的值。55左值(lvalue):賦值運算符左側的標識符

變量可以作為左值

表達式不能作為左值(如a+b=10是錯誤的)

常變量也不能作為左值(如10=a是錯誤的)右值(rvalue):出現在賦值運算符右側的表達式56賦值表達式中的?表達式?,又可以是一個賦值表達式。例如:a=(b=5)分析:括弧內的b=5是一個賦值表達式,它的值等于5。執行表達式a=(b=5)相當于執行b=5和a=b兩個賦值表達式。賦值運算符按照?自右而左?的結合順序,因此,(b=5)外面的括弧可以不要,即a=(b=5)和a=b=5等價.57將賦值表達式作為表達式的一種,使賦值操作不僅可以出現在賦值語句中,而且可以以表達式形式出現在其他語句(如輸出語句、循環語句等)中。如:printf(“%d”,a=b);分析:如果b的值為3,則輸出a的值(也就是表達式a=b的值)為3。在這一個語句中完成了賦值和輸出雙重功能。58main(){inta,b,c,d,e;a=b=c=d=30;e=32;printf("a+3=%d\n",a+=3);printf("b-3=%d\n",b-=3);printf("c*3=%d\n",c*=3);printf("d/3=%d\n",d/=3);printf("e%%3=%d\n",e%=3);}59main(){intx=2;x+=x-=x*x;printf("x=%d\n",x);}賦值和復合賦值的運行結果:結合性是自右至左x=-460

條件運算符(?:)這是一個三目運算符,用于條件求值。如:c=(a>b?a:b);61

逗號運算符

逗號運算符優先級最低,結合性是自左至右

逗號表達式

逗號表達式格式:<表達式1>,<表達式2>,…<表達式n>計算逗號表達式值是按自左至右的順序,先計算<表達式1>的值,再計算<表達式2>的值,...最后計算<表達式n>的值,而整個逗號表達式的值是最后一個<表達式n>的值.62例:逗號表達式a=3*5,a*4先求解a=3*5。a的值為15,然后求解a*4,得60。整個逗號表達式的值為60。一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式,如:先計算出a的值等于15,再進行a*4的運算得60(但a值未變,仍為15),再進行a+5得20,即整個表達式的值為20。(a=3*5,a*4),a+563逗號運算符優先級別最低例:x

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論