




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基本類型數據及其運算C的數據類型數據類型基本類型整型字符型實型(浮點型)單精度型雙精度型枚舉類型構造類型數組類型結構體類型共用體類型指針類型空類型2.1C語言的數據類型
數據的值有兩種不同的表現形式:常量和變量。
C語言提供了豐富的運算符和表達式,以完成各種數值計算和非數值計算。
2.1C語言的數據類型
本章將著重介紹基本數據類型中的整型、實型和字符型數據,數據的運算及輸入輸出。
2.1C語言的數據類型
2.2常量與變量
2.3整型數據
2.4實型數據
2.5字符型數據
2.2.1標識符
在C語言中,標識符就是常量、變量、數組、函數、類型和語句的名稱,分為關鍵字、預定義標識符和用戶標識符3種類型。2.2.1標識符
1.關鍵字ANSIC標準C共有32個關鍵字,1999年ISO推出的C99標準新增了5個關鍵字(見附錄C)。
根據關鍵字的作用,可以將關鍵字分為數據類型關鍵字和流程控制關鍵字兩大類。1).數據類型關鍵字
(1)基本數據類型(5個)
void char int
float
double
(2)類型修飾關鍵字(4個)
short
long
signed
unsigned2.2.1標識符
(3)復雜類型關鍵字(5個)
struct
union
enum
typedef
sizeof
(4)存儲級別關鍵字(6個)
auto
static
register
externconst
volatile2).流程控制關鍵字
(1)跳轉結構(4個)
return
continue
break
goto
(2)分支結構(5個)
if
else
switch
case
default
(3)循環結構(3個)
for
do
while
C99新增5個關鍵字:
inline,restrict,_bool,_Complex,_Imaginary2.2.1標識符2.預定義標識符
預定義標識符通常包括C編譯系統提供的標準庫函數名(如printf、scanf等)和編譯預處理命令名(如define、include等)。2.2.1標識符
在C語言中,預定義標識符也有特定的含義。雖然預定義標識符也可以作為用戶標識符使用,但這樣會失去系統規定的原意。3.用戶標識符
C程序中用于標識變量、符號常量、數組、函數和數據類型等對象的一個字符序列,統稱為用戶定義標識符。
C語言規定用戶標識符只能由字母、數字和下劃線組成,且以字母或下劃線開頭。2.2.1標識符
2.2.1標識符
說明:
(1)C語言中同一字母的大小寫,被認為是兩個不同的字符。例如:
total、TOTAL、ToTaL、tOtAl不同的用戶標識符。
(2)C語言的關鍵字不能用作用戶標識符。例如:
int不合法
Int、INT、iNt合法(3)用戶標識符的命名要見名知意。
例如:
name/xm(姓名)、sex/xb(性別)、
age/nl(年齡)。2.2.1標識符
(4)避免使用易混字符。
例如:
1、l、i;0、o、O;p、P;x、X;2、z、Z等。file6、stu_name、DeFault、_9、xandy正確6file、stu-name、default、-9、x&y不正確
在程序運行過程中,其值不能被改變的量稱為常量。
常量分為直接常量和符號常量。2.2.2常量
直接常量的類型從字面上就能夠區分出來,如:
125為整型常量,12.56為實型常量,
'a'為字符常量,"china"為字符串常量。1.直接常量
直接常量即常數,分為整型常量、實型常量、字符常量和字符串常量。
#include<stdio.h>#definePRICE100//定義符號常量voidmain(){ intsum; sum=PRICE*20; printf("%d\n",sum);}2.符號常量
#defineNUMBER10main(){ inttotal; NUMBER=20; total=0; total=total+number; printf(“%d,%d”,number,total);}有關常量的用法:習慣上,符號常量名用大寫,變量名用小寫。2.2.3變量
變量代表內存中具有特定屬性的一個存儲空間來放數據,其中的數據稱為變量的值。在程序運行期間,變量值是可以改變的。
編譯系統將對每一個變量根據它的類型分配相應字節的連續內存單元,稱為變量存儲空間。
每個變量都必須有一個名字,變量名實際上是以一個名字代表一個內存地址。
把這幾個內存單元地址中較低的地址稱為變量地址。變量地址可用“&變量名”求得。有關變量的用法:main(){ intx; y=‘a’; printf(“%d”,x);}在c語言中,要求對所用到的變量作強制定義,即“先定義,后使用”undeclaredidentifier2.2.3變量
變量名、變量地址、變量存儲空間和變量值之間的關系:2.2.3變量
1.變量定義
在C語言中,要求對所有用到的變量必須先定義、后使用。
變量定義的一般格式如下:
類型說明符變量名1[,變量名2,…,變量名n];
例如:
inti,j,k;
floatx,y,z;2.2.3變量
2.變量賦值
變量賦值有如下幾種方式。
(1)變量賦初值。定義變量時直接賦值,也稱為變量的初始化。例如:
inta=10,b=9,c=6;
floatx=3.0,y=1.0,z=2.0;
注:不能將同初值的變量賦初值時寫成以下形式:
inta=b=c=6;
只能寫成:
inta=6,b=6,c=62.2.3變量
2.變量賦值
變量賦值有如下幾種方式。
(2)用賦值語句賦值。例如:
floatx;
x=10.0;2.2.3變量
2.變量賦值
變量賦值有如下幾種方式。
(3)從鍵盤輸入數據給變量賦值。例如:
inta;
scanf("%d",&a);
2.2.3變量
2.變量賦值
變量賦值有如下幾種方式。
(4)從磁盤文件讀數據給變量賦值。2.1C語言的數據類型
2.2常量與變量
2.3整型數據
2.4實型數據
2.5字符型數據
整型數據整型常量整型變量2.3整型數據
2.3.1整型常量整型常量即整數,整型數據在C語言中可用三種形式表示:
(1)十進制。例如10、36。
(2)八進制(以數字0開頭)。例如012,
0478則是非法的。
(3)十六進制(以數字0+字母x(X)開
頭)。
例如0x36、-0X8aC。編碼正數表示方法負數表示方法原碼最高位為符號位(0-正數,1-負數)。其他位為此數絕對值的二進制表示。反碼同原碼最高位為符號位(1),其他位為原碼表示的各位取反。補碼同原碼最高位為符號位(1),其他位為原碼表示的各位取反再末位加1。2.3.2整型變量
1.整型數據存放形式
整型數據在內存中以二進制補碼形式存放。
例如:求-10的補碼表示(按16位存儲)。-10的原碼1000000000001010絕對值各位取反1111111111110101末位加11111111111110110則得到-10的二進制補碼的表示。有關整型數據的用法:inti;i=5;inti;i=-5;0000000010100000原補碼相同11111111110111112.3整型數據
2.整型變量的分類
根據占用內存字節數的不同,整型變量分為:
(1)基本整型(類型關鍵字為int)。
(2)短整型(類型關鍵字為short[int])。
(3)長整型(類型關鍵字為long[int])。
TurboC2.0和TurboC++3.0為short和int分配2個字節,為long分配4個字節;
VC++6.0為short分配2個字節,為int和long分配4個字節。
2.3整型數據
3.整型變量的符號屬性
(1)有符號整型數據。
有符號整型數據的最高位為符號位,符號位為0表示正數,符號位為1表示負數。
有符號型又分為:
有符號基本整型([signed]int)
有符號短整型([signed]short[int])
有符號長整型([signed]long[int])
2.3整型數據
(2)無符號整型數據。
無符號整型數據表示的都是正數,其最高位不是符號位而是數值位。
無符號型又分為:
無符號基本整型(unsigned[int])
無符號短整型(unsignedshort[int])
無符號長整型(unsignedlong[int])
2.3整型數據
4.整型數據值域
整型數據所占字節數和數值范圍:2.3整型數據
有符號和無符號整型數據在2個字節中存放形式#include<stdio.h>voidmain(){ inta,b; a=32767; b=a+1; printf("%d\n%d",a,b);}3278732768運行結果改為21474836472147483647-2147483648運行結果2.1C語言的數據類型
2.2常量與變量
2.3整型數據
2.4實型數據
2.5字符型數據
實型數據實型數據實型常量實型變量單精度浮點型雙精度浮點型復數浮點型2.4實型數據
2.4.1實型常量
有兩種表示形式:
1.小數形式
實型常量的小數形式由數字序列和小數點組成,小數點不能省略。
例如:
3.1415926、-0.15、0.15、.15、2.0、2.
2.4實型數據
2.指數形式實型常量的指數形式如:
123.456e2或123.456E2,相當于123.456×102
e或E前面必須有數字,后面的指數必須為整數。
0.235e4、24458.6e-4、5.7854e7合法125e4.5、e4、.e4、e不合法2.4實型數據
123.456可以寫成:
123.456e0、12.3456e1、1.23456e2、
0.123456e3、1234.56e-1等。其中:
1.23456e2規范化的指數形式2.4實型數據
2.4.2實型變量1.實型數據的存放形式實數可以寫成:N=±M×2E
其中:M稱為N的尾數,E稱為N的階碼,
M前面的正、負號稱為數符。
系統把實型數據的數符、尾數和階碼分別存放。以float型為例,實型數據在其中存放形式:2.4實型數據
2.實型變量分類
C語言中實型變量有3種類型:
(1)單精度型。類型關鍵字為float。
(2)雙精度型。類型關鍵字為double。
(3)長雙精度型。類型關鍵字為longdouble。
實型數據所占字節數及數值范圍:
實型數據的舍入誤差2.1C語言的數據類型
2.2常量與變量
2.3整型數據
2.4實型數據
2.5字符型數據
2.5字符型數據1.普通字符能在屏幕上顯示的字符稱為普通字符,可直接將這類字符用單引號擴起來,例如:
'A'、'8'、'+'2.轉義字符
以反斜杠“\”開頭后跟規定的單個字符或數字的轉義字符。注意:如果反斜杠、雙引號或單引號本身作為字符常量,必須使用轉義字符,即:
'\\'、'\"'、'\''
。2.5字符型數據
常用轉義字符表:‘\40’表示空格字符,‘\101'表示字符‘A'‘\x20’表示空格字符,‘\x41'表示字符‘A'printf("\"A\102\x43\"");
輸出結果:"ABC"2.5.2字符類型——變量變量值的存儲以ASCII碼存儲,占一個字節charc1,c2;unsignedcharc1,c2;舉例字符變量ch中存放字符'a',其ASCII碼為97,在內存中以二進制形式存放,其格式如下:01100001ch字符型變量特性
字符數據在內存中存儲的是字符的ASCII碼──一個無符號整數,其形式與整數的存儲形式一樣,所以C語言允許字符型數據與整型數據之間通用。注意:字符型數據與整型數據在存儲方式上的相似性使得兩者之間可以通用。但字符型數據的表示范圍是:0~255。(1)一個字符型數據,既可以字符形式輸出,也可以整數形式輸出。
main()
{charch1;intch2;ch1='a';ch2=98;printf(“ch1=%c,ch2=%c\n”,ch1,ch2);
printf(“ch1=%d,ch2=%d\n”,ch1,ch2);
}
(2)允許對字符數據進行算術運算,此時就是對它們的ASCII碼值進行算術運算。#include<stdio.h>voidmain()
{charch1,ch2;
ch1='a';ch2='B';
printf("ch1=%c,ch2=%c\n",ch1-32,ch2+32);
/*用字符形式輸出一個大于256的數值*/ printf("ch1+256=%d\n",ch1+256);
printf("ch1+256=%c\n",ch1+256);
}
ch1=A,ch2=bch1+256=353ch1+256=a字符型數據和整型數據進行運算時,是其ASCII碼值參與運算?!瓵’+3//值為68,對應字符'D'‘5’-‘0’//值為55+‘0'//值為53,對應字符'5'2.5.3字符串常量字符串常量的概念和字符串長度
字符串常量是用一對雙引號括起來的若干字符序列。 字符串中字符的個數稱為字符串長度。長度為0的字符串(即一個字符都沒有的字符串)稱為空串,表示為“”(一對緊連的雙引號)。字符串的存儲
C語言規定:在存儲字符串常量時,由系統在字符串的末尾自動加一個‘\0’作為字符串的結束標志。
不要將字符常量與字符串常量混淆。charc;c='a';c="a";字符串"CHINA",在內存中是:CHINA\0占用6字節而非5字節內存空間思考?1、字符串常量"Howdoyoudo."的長度是多少?2、字符串C:\msdos\v6.22和Isay:"Goodbye!"在C語言中的字符串常量形式如何表示?14"C:\\msdos\\v6.22"和"Isay:\"Goodbye!\""2.9順序結構程序設計
2.6運算符與表達式
2.7數據的類型轉換
2.8數據的輸入與輸出
2.6運算符與表達式
2.6.1運算符概述
理解和掌握以下C語言運算符的概念:
(1)運算符功能。
(2)運算符與運算對象(即操作數)的關系。①運算對象個數。
單目運算符、雙目運算符和三目運算符。②運算對象類型。2.6運算符與表達式
所謂結合性是指當一個運算對象兩側的運算符具有相同的優先級時,該運算對象是先與左邊的運算符結合,還是先與右邊的運算符結合。自左至右的結合方向,稱為左結合性,反之,稱為右結合性。(3)運算符優先級
運算符優先級分為15個級別,從1-15
(4)運算符結合性
2.6運算符與表達式
2.6.2 表達式概述用運算符和括號將運算對象(常量、變量和函數等)連接起來并符合C語言語法規則的式子,稱為表達式。
求表達式值時,從左往右逐步執行。如果一個運算對象兩側的運算符優先級不同,則按運算符的優先級高低次序執行。如果一個運算對象兩側的運算符優先級相同,則按結合性進行。2.6運算符與表達式
結合性是C語言的獨有概念。除單目運算符、賦值運算符和條件運算符是右結合性外,其它運算符都是左結合性。a–b*ca–b+c1、算術運算符+-*/%2、關系運算符><==>=<=!=
3、邏輯運算符!&&||4、位運算符<<>>~|^&5、賦值運算符=及其擴展賦值運算符6、條件運算符?:7、逗號運算符,8、指針運算符*&9、求字節數運算符sizeof10、強制類型轉換運算符(類型)11、分量運算符.
12、下標運算符[]13、其他如函數調用運算符()分類運算符2.6.3算術運算符與算術表達式
1.算術運算符2.6.3算術運算符與算術表達式
除法運算符/
:當兩個操作數均為整數時,運算結果為整數(即小數部分被舍棄),否則結果為實數。例如:5/2=2而5.0/2=2.5。求余數運算符%:求兩個數相除的余數,要求兩側的運算對象必須為整型數據。例如:5%2=15%-2=1-5%2=-1-5%-2=-12.6.3算術運算符與算術表達式
2.算術表達式用算術運算符將運算對象連接起來的合法式子稱為算術表達式。例如:3+6*9、(x+y)/3-1注意:
x2+3x+5寫成C語言表達式為:
x*x+3*x+5。
2.6.3算術運算符與算術表達式
3.算術運算類型轉換
如果一個運算符兩側的運算對象的數據類型不同,則系統首先將兩側數據自動轉換成同一類型,然后在同一類型數據間進行運算。intunsignedlongdouble低高char,shortfloat必定的轉換2.6.3算術運算符與算術表達式
例如:charch;inti;shorts;floatf;doubled;ch/s+f*i-dintintintintintdoubledoubledoubledoubledouble2.6.4賦值運算符和賦值表達式
1.賦值運算符(1)簡單賦值運算符“=”
一般形式為:變量=表達式功能:先求“=”號右側表達式的值,然后將這個值存入左側變量所占的存儲單元中,即給變量賦值。例如:
x=5//將常量5賦值給變量x。2.6.4賦值運算符和賦值表達式
(2)復合賦值運算符
C語言有10種復合賦值運算符:+=、-=、*=、/=、%=;//復合算術運算符&=、^=、|=、<<=、>>=、 //復合位運算符2.6.4賦值運算符和賦值表達式
一般形式為:
變量雙目運算符=表達式└──┬──┘復合賦值運算符等價于:變量=變量雙目運算符(表達式)例如:x+=3 //等價于x=x+3y*=x+6 //等價于y=y*(x+6)而不是:y=y*x+62.6.4賦值運算符和賦值表達式
例如:
a=5//a的值5就是賦值表達式a=5的值。賦值運算符的優先級為14,結合方向為自右至左。
a=b=8%3//表達式的值為2
2.賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子,稱為賦值表達式。
被賦值變量的值就是賦值表達式的值。2.6.4賦值運算符和賦值表達式
inta=6a-=a*=a+4//等價于:a=a-(a=a*(a+4))其求解過程為:
(1)先運算a+4的值為10,a的值不變仍為6;
(2)再運算a=a*10,因此a=6*10,a的值為60;
(3)最后運算a=a-60,因此a=60-60,a的值為0注意:左值問題賦值運算符左側的標識符稱為“左值”。表達式和常量不能作為左值。凡是左值都可以做右值。a=3*5=4*32.6.4賦值運算符和賦值表達式
3.賦值類型的轉換
轉換規則如下:(1)整型數據與實型數據之間類型轉換①整型數據賦給實型變量時,數值上不發生任何變化,但以浮點型數據存儲到變量中。例如:
floatf=100;結果:100.0,再以指數形式存到f所占存儲單元中。②實型數據賦給整型變量時,小數部分將被舍棄。例如:
inta=3.6415;結果:3。(2)實型數據之間類型轉換①float數據賦給double變量時,數值不變,有效數據擴展到16位。②double數據賦給float變量時,截取前面7位有效數據。2.6.4賦值運算符和賦值表達式
(3)整型數據之間、整型數據與字符型數據之間類型轉換①短的→長的變量需要進行符號位擴展。
將數據賦給變量的低字節,如果數據的符號位為0,則變量的高字節補0;反之,變量的高字節補1,以保持數值不改變。如圖2-12所示。2.6.4賦值運算符和賦值表達式
2.6.4賦值運算符和賦值表達式
短的無符號→長的變量將數據賦給變量的低字節,高字節補0。2.6.4賦值運算符和賦值表達式
②長的→短的變量截取低字節數據。2.6.4賦值運算符和賦值表達式
③長度相同的變量,原樣賦值。2.6.5自增、自減運算符
++、--是單目運算符,運算對象只能是變量,優先級為2,結合方向為自右至左。自增、自減運算符有兩個功能:
(1)取由該運算符構成表達式的值
(2)實現變量(運算對象)自身的加1或減1運算2.6.5自增、自減運算符
自增、自減運算符都有兩種用法:(1)前置運算──例如:++i、--i先加減、后求值。(2)后置運算──例如:i++、i--先求值、后加減。2.6.5自增、自減運算符
i=2;j=i++;//相當于:j=i;i=i+1;j=++i;//相當于:i=i+1;j=i;2.6.5自增、自減運算符
自增、自減運算符的用法#include<stdio.h>intmain(){intx=6,y;printf("x=%d\n",x); y=++x; printf("y=++x:x=%d,y=%d\n",x,y);y=x--; printf("y=x--:x=%d,y=%d\n",x,y); return0;}運行結果:x=6y=++x:x=7,y=7y=x--:x=6,y=72.6.5自增、自減運算符
說明:(1)C編譯系統在處理表達式時,盡可能多地(自左而右)將若干個字符組成一個運算符
i+++j
(i++)+j(2)自增、自減運算符不能用于常量和表達式,例如:
5++、--(a+b)等都是非法的表達式。(3)最好避免這種用法,例如:(i++)+(i++)+(i++)
#include<stdio.h>intmain(){inti,j,k,a,b;i=j=k=0;a=(i++)+(++j);b=a+i+j-(k++);printf(“%d%d%d\n”,i,j,k);printf(“a=%db=%d\n”,a,b);return0;}2.6.6逗號運算符、逗號表達式
用逗號運算符“,”連接起來的式子,稱為逗號表達式,一般形式為:
表達式1,表達式2,……,表達式n
逗號運算符的優先級為15,結合方向為自左至右。
逗號表達式求解過程為:自左至右,依次計算各表達式的值,“表達式n”的值作為整個逗號表達式的值。2.6.6逗號運算符、逗號表達式
a=3*5,a*4a=3,a*4,a++//逗號表達式的值為60。//逗號表達式的值為3。注意:并不是任何地方出現的逗號,都是逗號運算符。很多情況下,逗號僅用作分隔符,例如:printf("%d%d%d",a,b,c);
2.9順序結構程序設計
2.6運算符與表達式
2.7數據的類型轉換
2.8數據的輸入與輸出
2.7數據的類型轉換
數據的類型轉換有隱式類型轉換和強制類型轉換兩種。
當出現下述情況時將進行隱式類型轉換:
運算轉換--不同類型數據混合運算時進行轉換;
賦值轉換--把一個值賦給與其類型不同的變量時進行轉換;
輸出轉換--輸出時轉換成指定的輸出格式2.7數據的類型轉換
數據類型強制轉換的一般格式為:
(數據類型)(表達式)例如:(double)a(float)5/2(float)(5/2)//將變量a的值轉換成double型//將5轉換成5.0,再除以2(=2.5)//將5整除2的結果(2)轉換成浮點型(2.0)2.7數據的類型轉換
注意:(1)強制轉換類型得到的是一個所需類型的中間量,原表達式類型并不發生變化,例如:inta=3;(double)a;
(2)如果被轉換表達式不是簡單表達式時,外邊的一對圓括號不能省,例如:
(int)(5.8+3.4)2.9順序結構程序設計
2.6運算符與表達式
2.7數據的類型轉換
2.8數據的輸入與輸出
2.8數據的輸入/輸出
輸入是由輸入設備向計算機主機輸入數據。
輸出是指由計算機主機向輸出設備輸出數據。
通常輸入設備為鍵盤,輸出設備為顯示器。磁盤文件即是輸入設備又是輸出設備。2.8數據的輸入/輸出
在C語言中,沒有專門的輸入輸出語句,所有的輸入輸出操作都是通過調用標準輸入、輸出庫函數來完成的。在調用標準輸入輸出函數時需要用到頭文件“stdio.h”,因此在程序開頭應該有以下的預編譯命令:
#include"stdio.h"或#include<stdio.h>//標準方式2.8.1格式化輸出函數printf
printf一般格式為:
printf(格式控制,輸出項列表)
例如:printf(”i=%d,c=%c\n”,i,c);格式聲明2.8.1格式化輸出函數printf
printf一般格式為:
printf(格式控制,輸出項列表)
例如:printf(”i=%d,c=%c\n”,i,c);普通字符2.8.1格式化輸出函數printf
printf一般格式為:
printf(格式控制,輸出項列表)
例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、變量或表達式2.8.1格式化輸出函數printf
輸出項與前面的“輸出格式說明”必須由左至右一一對應,例如:2.8.1格式化輸出函數printf
1.輸出格式說明輸出格式說明一般形式為:
%[<修飾符>]<格式字符>
格式控制是用雙引號括起來的字符串,它包括兩部分內容:
1.普通字符與轉義字符
printf(”i=%d,c=%c\n”,i,c);2.輸出格式說明,以“%”開始,后跟格式字符,(1)格式字符用于指定輸出數據按何種形式輸出。格式字符及其作用如表所示
2.8.1格式化輸出函數printf
(2)修飾符。修飾符用于指定輸出數據所占的寬度、對齊方式以及保留小數位數等,修飾符可以省略。2.8.1格式化輸出函數printf
2.整型數據輸出
1)d──以帶符號的十進制整數形式輸出。%d,按整型數據實際長度輸出%mdm為指定的輸出字段的寬度,如果數據的位數小于m,則左端補以空格,若大于m,則按實際位數輸出%-md
同上,但右端補空格。%ld:長整型數據%lld:雙長整型#include<stdio.h>int
main(){intn1=123;
printf("n1=%d,n1=%5d,n1=%-5d,n1=%2d\n",
n1,n1,n1,n1);return0;}
程序運行結果如下:num1=123,num1=□□123,num1=123□□,num1=123 2.8.1格式化輸出函數printf
整型數據可以用格式符d、u、o、x輸出,例如:inta=-1;printf(“%d%u%o%x\n",a,a,a,a);運行結果:-1429496729537777777777ffffffff2.8.1格式化輸出函數printf
說明:在VC++6.0中,給a分配4個字節,將-1的補碼存儲到a所占的存儲單元中,存放形式如圖所示。2.8.1格式化輸出函數printf
3.字符型數據輸出字符型數據即可按字符形式輸出,也可按整數形式輸出,例如:charc='A';printf("字符=%cASCII=%d",c,c);運行結果:字符=AASCII=652.8.1格式化輸出函數printf
4.實型數據輸出實型數據(float型和double型)即可用格式符f以小數形式輸出,也可用格式符e以指數形式輸出,例如:
floatf=12.3456789;printf("f=%f,f=%e\n",f,f);運行結果:
f=12.345679,f=1.234568e+001例如:類型轉換字符f的使用。#include<stdio.h>intmain(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);return0;}
程序運行結果如下:
123.456001,□□123.456001,□□□□□□123.46,
123.46□□□□□□,123.46d1+d2=3333333333333.3330102.8.1格式化輸出函數printf
2.8.1格式化輸出函數printf
2.8.1格式化輸出函數printf
8.輸出轉換注意:(1)較長型數據→短型數據,輸出時其值不能超出短型數據允許的值范圍。例如:
inta=65536;printf("%hd",a);在VC++6.0中,輸出結果為0。2.8.1格式化輸出函數printf
(2)輸出的數據類型與輸出格式不符時會產生錯誤的結果。例如,下面兩例均輸出錯誤的結果。
intd=9;printf("%f",d);或
floatc=3.2;printf("%d",c);
切記整型數據不能按實型數據輸出,實型數據也不能按整型數據輸出。2.8.2格式化輸入函數scanf
函數scanf一般格式為:
scanf(格式控制,地址列表);
地址列表是若干輸入項的地址,各地址之間用逗號“,”分隔。在變量名前加取地址運算符“&”表示該變量地址。2.8.2格式化輸入函數scanf例如:
intm;floatx;scanf("%d%f",&m,&x);不能寫成:
scanf("%d%f",m,x);2.8.2格式化輸入函數scanf
格式控制用于指定數據的輸入格式,是用雙引號括起來的一個字符串,由格式說明和普通字符兩部分組成。(1)格式說明格式說明規定了數據以何種類型的數據格式被輸入。一般形式是:
%[<修飾符>]<格式字符>scanf中格式字符與printf中的格式字符相同。scanf中修飾符有:m、h、l2.8.2格式化輸入函數scanf(2)普通字符格式控制字符串中的普通字符在輸入數據時要照原樣輸入。例如:
inta,b;scanf("a=%d,b=%d",&a,&b);則輸入應為:a=5,b=6↙輸入數據時不能規定精度例如,scanf("%7.2f",&a)是不合法的。2.8.2格式化輸入函數scanf1.輸入數據的結束標志(1)空白字符:空格鍵、Enter鍵和Tab鍵例如:
intyear,month,day;scanf("%d%d%d",&year,&month,&day);可以輸入為:
2012910↙也可以輸入為:
2012↙910↙不能輸入為:2012,9,102.8.2格式化輸入函數scanf(2)指定數據寬度例如:
intyear,month,day;scanf("%4d%2d%2d",&year,&month,&day);可以輸入為:
20121221↙則將2012→year,12→month,21→day。注意:也可以用空格、Enter鍵或Tab鍵作為分隔,即可以輸入為:
20121221↙2.8.2格式化輸入函數scanf(3)指定數據分隔符用普通字符作為輸入數據的分隔符,例如:
scanf("%d-%d-%d",&year,&month,&day);
輸入應為:
2012-12-12↙如果輸入為:
2012,12,12則2012→year由于沒有遇到“-”,scanf函數就結束執行,month和day的值不變。2.8.2格式化輸入函數scanf(4)遇到非法字符,例如:
scanf("%d",&m);若輸入:12o9↙由于12之后遇到字符'o',第1個數據到此結束,所以把12賦給m。2.8.2格式化輸入函數scanf2.格式說明%c
格式說明%c用于輸入單個字符,從鍵盤上輸入的空白字符將作為有效字符讀入,例如:
charch1,ch2,ch3;scanf("%c%c%c",&ch1,&ch2,&ch3);如果輸入:
abc↙則將'a'賦給ch1,'b'賦給ch2,'c'賦給ch3。如果輸入:
a↙bc↙則將'a'賦給ch1,'↙'賦給ch2,'b'賦給ch3。2.8.2格式化輸入函數scanf3.格式說明的類型與輸入項的類型必須匹配在scanf函數中,格式說明的類型必須與輸入項的類型由左至右一一對應匹配,如果不匹配,輸入項將不能得到正確的值.例如:
inta; floatm; scanf("%d%d",&a,&m);在程序中有3個scanf函數調用語句,要使a=5,b=10,m=4.5,n=-7.6,ch1='A',ch2='a'。#include<stdio.h>intmain(){ inta,b; floatm,n; charch1,ch2; scanf("%d%d",&a,&b);
scanf("m=%f,n=%f",&m,&n);
scanf("%c%c",&ch1,&ch2);
printf("a=%d,b=%d\n",a,b); printf("m=%f,n=%f\n",m,n);
printf("ch1=%c,ch2=%c\n",ch1,ch2); return0;}如果輸入:510↙m=4.5,n=-7.6↙運行結果:a=5,b=10m=-107374176.000000,n=-107374176.000000ch1=,ch2=m2.8.2格式化輸入函數scanf
若在程序中連續調用多個scanf函數,應消除前一行輸入的“回車”符,解決辦法是在下一個scanf函數的格式字符串中開始加一個空格符來抵消上一行輸入的“回車”,即改為:scanf("m=%f,n=%f",&m,&n);
scanf("%c%c",&ch1,&ch2);注意:執行該程序時,也可以輸入為:510m=4.5,n=-7.6Aa↙2.8.3字符輸出函數putchar
功能:向屏幕上輸出一個字符。其調用格式為:
putchar(ch)ch為輸出項,可以是字符型表達式或整型表達式。例如:putchar('a');putchar(65);putchar('a'-32);putchar('\101');
2.8.4字符輸入函數getchar
功能:從鍵盤輸入一個字符。其調用格式為:
getchar();執行getchar()函數時,等待輸入字符,直到按Enter鍵才結束。輸入的第一個字符被getchar()函數接收,并作為該函數的返回值。輸入一個字符,并將該字符輸出#include"stdio.h" voidmain(){charch;printf("Pleaseinputtwocharacter:");ch=getchar(); //輸入1個字符并賦給ch
putchar(ch);putchar('\n');putchar(getchar());//輸入一個字符并輸出
putchar('\n');} 輸入:abc↙運行結果:ab
思考如果輸入數據如下:a↙b↙會如何?程序運行情況如下:
Pleaseinputtwocharacters:a↙a↙↙2.9順序結構程序設計
2.6運算符與表達式
2.7數據的類型轉換
2.8數據的輸入與輸出
2.9簡單程序設計——順序結構程序設計
2.9.1C語句
C語句可以分為5類:控制語句、函數調用語句、表達式語句、空語句、復合語句。2.9簡單程序設計——順序結構程序設計
(1)控制語句??刂普Z句用于控制程序的執行流程,共有9種語句,可分為3類:選擇語句,循環語句,輔助語句。
選擇語句:if...else...、switch
循環語句:for...、while...、do...while
輔助語句:continue、break、goto、return例如:
if(x>y)z=x;elsez=y;2.9簡單程序設計——順序結構程序設計
(2)函數調用語句:由一個函數調用加一個分號構成,格式為:
函數名(參數表);例如:
printf("ThisisaCstaement.");2.9簡單程序設計——順序結構程序設計
(3)表達式語句:表達式后加一分號“;”,就構成表達式語句例如:
a=3和i=i+1是賦值表達式,但不是語句,而
a=3;和i=i+1;則是賦值語句。2.9簡單程序設計——順序結構程序設計
(4)空語句。只有一個分號的語句:
;常用在循環語句或函數體中。(5)復合語句。將多個語句用花括號括起來的語句,語法上作為一個語句,例如:if(a>b){t=a;a=b;b=t;}2.9.2順序結構程序設計
一個C語言程序可由順序、選擇、循環三種基本控制結構組成。
順序結構表示程序中的各個操作是按照它們出現的先后順序執行的。2.9.2順序結構程序設計
選擇結構表示程序的處理步驟出現了分支,需要根據某一特定的條件選擇其中的一個分支執行。
循環結構表示程序反復執行某個或某些操作,直到某條件為假(或為真)時才可終止循環。選擇結構(分支結構)的處理過程為:先判斷一個條件,然后根據條件是否成立,執行不同的代碼。
選擇結構程序設計C語言提供了作為判斷條件的關系表達式和邏輯表達式,還有實現分支結構的if語句和switch語句。3.1關系運算符和關系表達式關系運算符:比較兩個量的運算符關系表達式:用關系運算符將運算對象 連接起來的式子在C語言中,關系運算符有六種3.1.1關系運算符優先級相同
(高)①<
(小于)②<=(小于或等于)③>
(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)優先級相同
(低)運算符優先級的高低次序3.1.1關系運算符結合性為自左至右關系表達式是用關系運算符將運算對象連接起來的式子。
運算對象可以是常量、變量或表達式。3.1.2關系表達式例如:
3>7a<=ba%2==0a+b>=c-d關系表達式求解的結果:成立或不成立,即“真(true)”或“假(flase)”。
在C語言中,用“1”代表“真”,用“0”代表“假”。3.1.2關系表達式例如:
inta=7,b=4,c=1,d;a%2==0a%2==0的值為0a%b<a/ba%b<a/b的值為03.1.2關系表達式例如:
inta=7,b=4,c=1,d;d=a>bd=a>b的值為1(d=a)>b(d=a)>b的值為1d=a>b>cd=a>b>c的值為0注意:在C語言中要判斷a大于b且b大于c時,寫成邏輯表達式a>b&&b>c,其中&&是邏輯與運算符。3.2.1邏輯運算符
在C語言中,邏輯運算符有三種
3.2邏輯運算符和邏輯表達式運算符優先級的高低次序3.1.1關系運算符結合性為自右至左結合性為自左至右邏輯表達式:用邏輯運算符將關系表達式或邏輯量連接起來的式子。
邏輯表達式的值是一個邏輯值,即“真”或“假”。
C語言中,以1表示“真”,以0表示“假”。3.2.2邏輯表達式邏輯運算的真值表3.2.2邏輯表達式
運算對象,可以是任意類型的數據,以非0表示真,以0表示假
運算結果,以1表示“真”,以0表示“假”邏輯量的真假判定──0和非0C語言用整數“1”表示“邏輯真”、用“0”表示“邏輯假”。但在判斷一個數據的“真”或“假”時,卻以0和非0為根據:如果為0,則判定為“邏輯假”;如果為非0,則判定為“邏輯真”。例如,假設num=12,則:!num的值,num>=1&&num<=31的值,num||num>31的值。011
注意!3.2.2邏輯表達式對于&&,如果其左側表達式的值為假,則右側表達式不進行求解(即不執行)。
對于||,如果其左側表達式的值為真,則右側表達式不進行求解。例如,假設n1、n2、n3、n4、x、y的值分別為1、2、3、4、1、1,則求解表達式“(x=n1>n2)&&(y=n3>n4)”后,x的值變為,而y的值等于!01C99所增加的一種數據類型類型標識符:_Boolstdbool.h頭文件中,把bool定義為該類型的別名
#definebool
_Bool同時定義:#definetrue
1
#definefalse
0
【注】在不支持c99標準的編譯器上(如VC++6.0)不能使用。#include<stdio.h>intmain(){
_Boolb; b=2000; printf("%d\n",b); return0;}13.3.1if語句的形式3.3if語句C語言中的if語句有三種基本形式。1.單分支if語句一般形式: if(表達式)
語句例如: if(x>y) printf("%d",x);表達式語句假真【例3-1】求x的絕對值。3.3.1if語句的形式思路:先求解表達式x<0的值,判斷x是否為負數,如果結果為真,則執行內嵌的語句x=-x;,否則不執行該語句。掌握if語句的一般形式與求解過程。3.3.1if語句的形式【例3-1】求x的絕對值。#include<stdio.h>
intmain()
{ intx; scanf("%d",&x); if(x<0) x=-x;//if的內嵌語句 printf("|x|=%d\n",x); return0;}
運行一次,輸入:-10運行結果:|x|=10再運行一次,輸入:-10運行結果:|x|=10【例3-2】輸入兩個整數,按由小到大的順序輸出這兩個數。3.3.1if語句的形式本題要點: 1.交換變量內容的方法 2.復合語句使用3.3.1if語句的形式【例3-2】輸入兩個整數,按由小到大的順序輸出這兩個數。#include<stdio.h>
intmain()
{ intx,y,t; scanf("%d,%d",&x,&y); if(x>y) {t=x;x=y;y=t;}//復合語句 printf("%d,%d\n",x,y); return0;}
運行一次,輸入:10,5運行結果:5,10思考:
去掉{},程序結果?xyt87878voidmain(){inta,b,c,temp;printf("Pleaseinputthreenumbers:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){temp=a;a=b;b=temp;}if(b>c){temp=b;b=c;c=temp;}if(a>b){temp=a;a=b;b=temp;}printf("%d,%d,%d\n",a,b,c);} 輸入任意三個數a、b、c,按從小到大的順序排序輸出。2.雙分支if語句3.3.1if語句的形式一般形式: if(表達式)
語句1 else
語句2例如: if(x>0) printf("%d",x); else printf("%d",-x);表達式語句1語句2真假【例3-3】求兩個數中較大者。3.3.1if語句的形式
使用雙分支if語句實現。3.3.1if語句的形式【例3-3】求兩個數中較大者。#include<stdio.h>
intmain()
{ intx,y,max; scanf("%d,%d",&x,&y); if(x>y) max=x;//if的內嵌語句 else max=y;//else的內嵌語句 printf("max=%d\n",max); return0;}
運行一次,輸入:5,10運行結果:Max=10
注意!3.2.2邏輯表達式
else不能作為語句單獨使用,它必須是if語句的一部分,與if配對使用。例如: if(x>y) {x=y;y++;} else {y=x;x--;}如果寫成: if(x>y) x=y;y++; else {y=x;x--;}語法錯誤3.多分支if語句3.3.1if語句的形式多分支if語句可以看成雙分支if語句的擴展形式,即在雙分支if語句中,else的內嵌語句是另一個雙分支的if語句。一般形式: if(表達式1)語句1 elseif(表達式2)語句2 elseif(表達式3)語句3 …… else語句n多分支if語句的執行過程:3.3.1if語句的形式如果表達式1的值為真,則執行語句1,否則判斷表達式2。如果表達式2的值為真,則執行語句2,否則判斷表達式3,依次類推。如果所有表達式的值都為假,則執行語句n?!纠?-4】輸入一個百分制的分數,輸出相應的等級。3.3.1if語句的形式要求如下:
成績>=90,輸出A 89>=成績>=80,輸出B 79>=成績>=70,輸出C 69>=成績>=60,輸出D
成績<60,輸出E本題要求使用多分枝if語句實現。3.3.1if語句的形式【例3-4】輸入一個百分制的分數,輸出相應的等級。#include<stdio.h>
intmain()
{ intscore; scanf("%d",&score); if(score>=90)printf("scoregradeisA\n");elseif(score>=80)printf("scoregradeisB\n");elseif(score>=70)printf("scoregradeisC\n");elseif(score>=60)printf("scoregradeisD\n");elseprintf("scoregradeisE\n");return0;}
運行一次,輸入:85運行結果:scoregradeisB再運行一次,輸入:55運行結果:scoregradeisE在if語句中,if和else的內嵌語句可以是任何語句,如果又是if語句,則稱為if語句的嵌套。3.3.2if語句的嵌套3.3.2if語句的嵌套例如:if(a>b) if(b>c) printf("%disbiggest\n",a);elseprintf("%disnotbiggest\n",a);以上代碼中else與哪個if配對?3.3.2if語句的嵌套C語言規定:else總是與它上面最近的未曾配對的if配對。即:if(a>b) if(b>c) printf("%disbiggest\n",a); else printf("%disnotbiggest\n",a);else與這個if配對if(a>b){ if(b>c) printf("%disbiggest\n",a);} else printf("%disnotbiggest\n",a);else與這個if配對3.3.2if語句的嵌套【例3-5】求三個數中最大者。本題使用嵌套if語句實現。3.3.1if語句的嵌套【例3-5】求三個數中最大者。#include<stdio.h>
intmain()
{ intx=4,y=5,z=2,max; max=x; if(z>y) {if(z>x) max=z; } else if(y>x) max=y; printf("max=%d",max); return0;}運行結果:max=5或者寫為:……if(num1>num2)
max=num1;
else
max=num2;if(num3>max)
max=num3;……或者max=num1;if(num2>max)max=num2;3.4switch語句switch語句是專門用于處理多分支結構的條件選擇語句,又稱開關語句。一般形式為: switch(表達式) { case常量表達式1:語句1;[break;] case常量表達式2:語句2;[break;] ……. case常量表達式n:語句n;[break;] [default:語句n+1;[break;]] }3.4switch語句switch語句的執行過程:首先求解switch后面括號中表達式的值,然后用此值依次與各個case后面的常量表達式的值進行比較。
若括號中表達式的值與某個case后面的常量表達式的值相等,則執行此case后面的語句。語句執行后若遇到break語句或switch的結束符“}”就終止switch語句,否則就繼續執行下一個case后面的語句,依次類推。
若括號中表達式的值與所有case后面的常量表達式都不相等,則執行default后面的語句n+1,然后終止switch語句,程序流程轉向開關語句的下一條語句。3.4switch語句例如:執行以下程序代碼intno;scanf("%d",&no);switch(no){case1:printf("first\n");break;case2:printf("second\n");case3:printf("third\n");}運行一次:輸入:1運行結果:first再運行一次:輸入:2運行結果:secondthird3.4switch語句說明:(1)case和常量表達式之間要有空格,常量表達式只起語句標號作用,跳出switch必須用break語句。如果每個case和default后面都有break語句,則它們出現的次序不影響執行結果。例如:switch(no){ default:printf("last\n");break; case2:printf("second\n");break; case1:printf("first\n");break; case3:printf("third\n");break;}3.4switch語句說明: (2)case后面常量表達式的值必須互不相同。(3)多個case可共用一組執行語句,case后可包含多個可執行語句,且不必加“{}”,進入某個case后,會順序執行本case后面的所有語句。(4)default部分可以省略。如果省略,當switch后面括號中表達式的值與所有case后面的常量表達式的值都不相等時,則不執行任何一個分支直接退出switch語句。(5)switch語句可以嵌套。3.4switch語句【例3-6】將例3-4進行修改,用switch語句實現。輸入一個百分制的分數,輸出相應的等級。
比較switch語句與嵌套if語句
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年綠色消費趨勢下消費者行為引導與品牌建設研究報告
- 教育行業2025年人才流失風險與吸引力建設報告
- 二手奢侈品鑒定技術2025年市場應用與行業規范標準完善報告
- 家居市場新風口:2025線上線下融合模式創新驅動因素報告
- 2025年智慧公交系統智能交通與城市交通安全評估報告
- 2025年環境保護公眾參與機制優化與生態環境保護公眾滿意度提升策略報告
- 2025年商業銀行金融科技人才綜合素質培養策略研究報告
- 2025年教育信息化2.0推動下教師信息技術與教育實踐融合研究報告
- 2025年教育直播平臺企業培訓與人才培養研究報告
- 2025年工業互聯網平臺云計算資源動態分配在智慧教育領域的創新應用報告
- 夜場水煙合作協議書
- 河南省青桐鳴大聯考普通高中2024-2025學年高三考前適應性考試地理試題及答案
- 管道勞務分包協議書
- 2025-2030中國鋰電子電池行業市場深度調研及前景趨勢與投資研究報告
- 江蘇省南京市建鄴區2023-2024學年八年級下學期期末考試物理試題【含答案解析】
- 公立醫院與民營醫院醫聯體合作協議書(2篇)
- 25《慢性子裁縫和急性子顧客》核心素養公開課一等獎創新教學設計
- 退出聯合診所協議書
- 物業管理服務交接方案
- 港股通知識測試題及答案
- 組織學與胚胎學知到課后答案智慧樹章節測試答案2025年春浙江中醫藥大學
評論
0/150
提交評論