第2章數(shù)據(jù)類型運算符表達式11_第1頁
第2章數(shù)據(jù)類型運算符表達式11_第2頁
第2章數(shù)據(jù)類型運算符表達式11_第3頁
第2章數(shù)據(jù)類型運算符表達式11_第4頁
第2章數(shù)據(jù)類型運算符表達式11_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章C語言基礎及順序結(jié)構程序設計【問題2】已知圓的半徑為r,用C語言編程計算圓的周長c和面積s。分析:①數(shù)學模型:圓周長c=2πr,圓面積s=πr2

②數(shù)學上,2是整數(shù),π是實數(shù),二者值固定,是常量;圓半徑r可以取任意的正數(shù),圓周長和面積為實數(shù)。③在程序中,需要考慮:常量(2和π)如何表示?半徑如何輸入?如何按公式計算,計算結(jié)果如何保存、如何輸出等?在C中,不同類型的數(shù)據(jù)其表示、存儲、加工的方法各不相同,輸入輸出的格式也不相同。

第2章基礎知識

2.1

幾個基本概念

2.2數(shù)值型數(shù)據(jù)及其輸入與輸出

2.3字符型數(shù)據(jù)及其輸入與輸出

2.4C語言的運算符和表達式

2.5不同類型數(shù)據(jù)間的混合運算和轉(zhuǎn)換

2.6順序結(jié)構程序設計

第2章基礎知識2.1

幾個基本概念

2.1.1

C的數(shù)據(jù)類型

2.1.2常量與變量的概念

2.1.3數(shù)據(jù)的輸入與輸出

2.1.4格式輸入與輸出函數(shù)簡介

在學習C語言程序設計之前,需要掌握幾個基本概念。2.1.1C的數(shù)據(jù)類型1.數(shù)據(jù)類型的概念表2-1學生個人信息數(shù)據(jù)項特征分析數(shù)據(jù)分類數(shù)據(jù)項及特征常進行的加工處理方式數(shù)值型數(shù)據(jù)年齡——整數(shù)考試成績——整數(shù)或?qū)崝?shù)學習生活費——整數(shù)或?qū)崝?shù)加、減、乘、除等數(shù)學運算字符型數(shù)據(jù)姓名——一串字符

性別——單個字符家庭住址——一串字符查找、比較等數(shù)據(jù)的這種特定的表現(xiàn)形式和加工處理方法的屬性稱為數(shù)據(jù)的數(shù)據(jù)類型。第2章基礎知識2.1.1C的數(shù)據(jù)類型2.C的數(shù)據(jù)類型單精度型float雙精度型doubleC數(shù)據(jù)類型基本類型構造類型指針類型空類型void定義類型typedef字符類型char整型實型枚舉類型enum數(shù)組結(jié)構體struct共用體union短整型short長整型long整型int數(shù)據(jù)在計算機中所占用的內(nèi)存字節(jié)數(shù)被稱為數(shù)據(jù)的“數(shù)據(jù)長度”。數(shù)據(jù)類型決定:

1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)

2.數(shù)據(jù)取值范圍

3.其上可進行的操作2.1.1常量與變量的概念

【問題2】的解答:求圓周長和面積,用C語言編寫的程序如下:#definePI3.14159

/*定義符號常量PI代表圓周率*/main(){floatr,c,s;

/*聲明r,c,s為實型變量*/

printf("r=");

/*輸出提示信息:r=*/

scanf(“r=%f”,&r);

/*從鍵盤輸入半徑值給r*/

c=2*PI*r;/*計算圓周長*/

s=PI*r*r;

/*計算圓面積*/

printf("r=%f,c=%.2f,s=%.2f\n",r,c,s);

}2和3.14159是常數(shù),直接寫出r、c、s用于存放半徑、周長和圓面積,這些稱為“變量”PI稱為“符號常量”例:符號常量舉例(ch2_1.c)#definePRICE30main(){intnum,total;num=10;total=num*PRICE;

printf(“total=%d“,total);}整型常量如:123實型常量如:1.23字符常量如:’A’字符串常量如:”abcd”1.常量>>>>(1)定義:程序運行時其值不能改變的量,即常數(shù)。(2)分類:定義格式:#define

符號常量常量如:#definePRICE30(3)符號常量:用標識符代表的常量。運行結(jié)果:total=3002.變量

(1)變量及其作用:在程序的執(zhí)行過程中,其值可以發(fā)生變化的量,稱為變量。通常,變量用于保存程序執(zhí)行過程中輸入的數(shù)據(jù)、計算的中間結(jié)果以及最終結(jié)果。變量的名字稱為變量名。變量名代表了內(nèi)存中指定的存儲單元,在這些存儲單元中,存放的是變量的值。程序通過變量名訪問變量的存儲單元,從而得到變量的值。變量、存儲單元與變量的值之間的關系如圖2-2所示:圖2-212變量名a變量的值存儲單元(2)變量名及變量的值:標識符的命名規(guī)則如下:①以字母或下劃線開頭。②在第一個符號的后面,可以跟字母、數(shù)字或下劃線。③區(qū)分字母的大、小寫。④長度一般不超過8個字符。⑤C語言的保留字不能作為標識符使用。給變量命名時,盡量做到“見名知義”,建議用小寫字母表示。例如:sum、name、age等。(3)變量的命名規(guī)則:應遵循標識符的命名規(guī)則【例2-1】試判斷下面所給出的字符序列,哪些是合法的C語言變量名。

x_01A1B_1C.1int_1aa1

ab?a-5b_1a2.ca1.txt1.doc1a__a1

解:上述字符序列里,合法的變量名是:

x_01A1B_1_1aa1b_1_a1變量的數(shù)據(jù)類型可以是C中的任何一種數(shù)據(jù)類型?;绢愋停赫?、實型、字符型。沒有字符串變量。整型數(shù)據(jù)帶符號整數(shù)整型int4B短整型short2B長整型longint4B無符號整數(shù)無符號整型unsignedint4B無符號短整型unsignedshort2B無符號長整型unsignedlong4B實型數(shù)據(jù)單精度float4B雙精度double8B長雙精度longdouble10B字符類數(shù)據(jù)字符型char1B(4)變量的類型(5)變量的定義變量定義的一般格式:

數(shù)據(jù)類型變量名1,變量名2,…,變量名n;決定了變量占用的內(nèi)存字節(jié)數(shù)必須是合法的標識符各變量之間用逗號隔開,最后是分號例:

inta,b,c;floatdata;

(6)變量的初始化定義變量時給變量賦初值,可給部分變量賦初值,也可給所有變量賦初值。

例:

inta=2,b,c=4;floatdata=3.67;charch=‘A’;

intx=1,y=1;

intx=y=1;例如,設有:int

a=1,b=-3,c;編譯程序時,其變量內(nèi)存分配情況示意如下:在C程序中,變量必須先定義,后使用。ab1-3地址…...地址c4字節(jié)…...內(nèi)存b地址a1001031101131201234字節(jié)4字節(jié)不確定輸入輸出通過調(diào)用系統(tǒng)庫函數(shù)scanf()、printf()實現(xiàn)。提供了豐富的庫函數(shù),每個函數(shù)實現(xiàn)特定的功能,可直接調(diào)用。C系統(tǒng)對庫函數(shù)進行了分類存放,同一類函數(shù)放在一個文件中,此類文件稱為“頭文件”。在編程時,用戶需要哪個函數(shù),必須用包含命令將包含該函數(shù)的頭文件包含在用戶源程序的開頭。包含頭文件的命令格式為:

#include<頭文件名>

或#include″頭文件名″2.1.3數(shù)據(jù)的輸入與輸出

1.數(shù)據(jù)輸入輸出的概念輸入外部數(shù)據(jù)計算機內(nèi)(主機)鍵盤、鼠標、磁盤等外部設備主機中的數(shù)據(jù)輸出2.C語言中數(shù)據(jù)輸入輸出實現(xiàn)的方法2.1.4格式輸入與輸出函數(shù)簡介1.格式輸出函數(shù)——printf()(1)函數(shù)的作用:按指定格式向顯示器輸出數(shù)據(jù)(2)調(diào)用的一般格式:

printf("格式控制字符串",輸出項表列);

例如:printf("%d,%d\n",a,b);printf("sum=%d\n",a+b);printf("a=%d,b=%3d,s=%5.2f\n",a,b,(a+b)/2.0);

(3)函數(shù)的執(zhí)行過程:

①先按照自右向左的順序依次計算輸出項表列;②再按照格式控制字符串中指定的格式自左向右依次輸出各輸出項的值。要輸出的數(shù)據(jù)項,當為多個時用逗號隔開(4)使用說明:指定各輸出項的輸出格式,由格式字符串和非格式字符串組成格式字符串:以%開頭的字符串。說明輸出項的類型、長度等。非格式字符串:需要原樣輸出的字符。用于提示、間隔數(shù)據(jù)。

注意:格式字符與輸出項的類型、個數(shù)要匹配,一一對應。2.格式輸入函數(shù)——scanf()(1)函數(shù)的作用:按指定的格式從鍵盤輸入數(shù)據(jù)到變量中。(2)調(diào)用的一般格式:

scanf("格式控制字符串",變量地址表列

);例如:

scanf("%d,%d",&a,&b);

scanf("a=%d,b=%d",&a,&b);

scanf("%d%d%f",&a,&b,&s);

(3)函數(shù)的功能:按照“格式控制字符串”中指定的格式從鍵盤讀取輸入的數(shù)據(jù),順序存入“變量地址表列”中對應的各變量中。scanf()函數(shù)和printf()函數(shù)中的“格式控制字符串”意義基本相同。

3.格式輸入函數(shù)與輸出函數(shù)的常用格式printf()和scanf()函數(shù)的常用格式及簡單應用,見表2-3所示。格式字符說明舉例輸出整型數(shù)帶符號%d十進制

inta=567;printf("%d",a);567無符號%u十進制

inta=567;printf("%u",a);567%o八進制

inta=65;printf("%o",a);101%x,%X十六進制

inta=255;printf("%x",a);ff長整型%ld、%lu、%lo、%lx

inta=567321;printf("%ld",a);567321字符單個字符%c單個字符

chara=65;printf("%c",a);A字符串%s字符串

printf("%s","ABC");ABC實型數(shù)單、雙精度%f,%lf十進制小數(shù)形式

floata=567.789;printf("%f",a);567.789000單精度%e,%E十進制指數(shù)形式

floata=567.789;printf("%e",a);5.677890e+02%ge和f中較短一種

floata=567.789;printf("%g",a);567.789%%%本身

printf("%%");%2.2數(shù)值型數(shù)據(jù)及其輸入與輸出【案例2-2】編程求解一個簡單問題:10+20的和。整型數(shù)據(jù)包括短整型、整型和長整型三種。在程序中常以整型常量和整型變量的形式出現(xiàn)。2.2.1

整型數(shù)據(jù)的表示及其輸入與輸出程序如下:main(){ints;/*定義s為整型變量*/s=10+024;/*計算兩個整數(shù)的和并賦給變量s*/

printf("10+20=%d\n",s);/*輸出和*/}運行結(jié)果:10+20=30s為整型變量10、024為整型常量1.整型常量及其表示方法值為整數(shù)的常量稱為“整型常量”。包括正整數(shù)、零和負整數(shù)。分為基本整型和長整型。(2)長整型常量及其表示方法數(shù)值范圍超出了整數(shù)的范圍,或在整數(shù)的后面加后綴字母“l(fā)”或“L”的整數(shù),稱為長整型常量。有十進制、八進制、十六進制三種表示方法。例:12為基本整型

12L為長整型

(1)基本整型常量及其表示:有三種方法十進制整數(shù):十進制整數(shù)。如:12,-15,0八進制整數(shù):以0開頭的八進制整數(shù)。只能用數(shù)字0~7。如:014十六進制整數(shù):以0x開頭的十六進制整數(shù)。只能用數(shù)字0~9,

字母a~z或A~Z。如:0xc,0Xf課堂練習:012=()100x12=()1020=()1610170x14(3)說明:不同版本的C編譯系統(tǒng),整型數(shù)據(jù)的長度、數(shù)值范圍不一樣。2.整型變量及其定義方法

(1)整型變量的類型:

分為帶符號整型和無符號整型兩大類。見表2-5所示。無符號整型

帶符號整型數(shù)據(jù)類型數(shù)據(jù)類型標識符字節(jié)數(shù)數(shù)據(jù)類型數(shù)據(jù)類型標識符字節(jié)數(shù)無符號短整型無符號整型無符號長整型unsignedshortunsignedintunsignedlong244帶符號短整型帶符號整型帶符號長整型shortintlong244注:若不指定一個數(shù)為無符號數(shù),則默指帶符號數(shù)。

表2-5整型變量的類型及字節(jié)數(shù)3.整型數(shù)據(jù)在內(nèi)存中的存放形式

(1)無符號整數(shù)的存放:存儲字節(jié)的全部二進制位用于存放數(shù)據(jù)。(2)帶符號整數(shù)的存放:存儲字節(jié)的最高位用作符號位,0—正數(shù),1—負數(shù),其余二進制位作為數(shù)值位—存放數(shù)的大?。ㄓ醚a碼)。

短整型數(shù)據(jù)在內(nèi)存中占2個字節(jié),最高位用作符號位后,所表示的數(shù)值范圍(用十進制數(shù)表示)為:-32768~+32767;長整型數(shù)據(jù)在內(nèi)存中占4個字節(jié),表示的數(shù)值范圍(用十進制數(shù)表示)為:-231~+231-1。例如,設有以下語句:(以Turboc為例)

unsignedshorta=9;shortb=9;

intc=-9;則變量a、b、c在內(nèi)存中存放的數(shù)據(jù)形式如下所示。(注:加下劃線的位為符號位):無符號短整型變量a:900000000000010012字節(jié)帶符號短整型變量b:+900000000000010012字節(jié)整型變量c:-9111111111111111111111111111101114字節(jié)(3)整型數(shù)據(jù)輸出的附加格式字符

%md——按m位(或列)輸出整數(shù)。按右對齊輸出整數(shù)。

%-md——按m位(或列)輸出整數(shù)。按左對齊輸出整數(shù)。(2)無符號整型數(shù)據(jù)的輸出

%u——以十進制無符號形式輸出整數(shù)

%o——以八進制無符號形式輸出整數(shù)

%x或%X——以十六進制無符號形式輸出整數(shù)。

%x格式—用小寫字母a~f;%X格式—用大寫字母A~F%lu、%lo、%lx——分別以十、八、十六進制無符號形式輸出長整型4.整型數(shù)據(jù)的輸出

(1)帶符號整型數(shù)據(jù)的輸出

%d——以十進制形式輸出帶符號整數(shù)

%ld——以十進制形式輸出帶符號長整數(shù)說明:①若指定的m位>數(shù)據(jù)的實際位數(shù),按m位輸出,并按照左/右對齊方式,多余位留出空格。②若指定的m位<數(shù)據(jù)的實際位數(shù),按數(shù)據(jù)的實際位數(shù)輸出?!纠?-4】閱讀下面程序,請寫出運行結(jié)果。程序如下:

#include<stdio.h>main(){inta=-1,b=011,s;s=a+b;

printf("%d+%d=%d\n",a,b,s);}運行結(jié)果:-1+9=8【例2-5】閱讀下面程序,寫出運行結(jié)果。程序如下:

#include<stdio.h>main(){inta=123,b=-123;

printf("%d,%2d@@“,a,b);

printf("%5d,%-5d,%d",a,b,a);} 【例2-6】請將20、-1分別按帶符號數(shù),無符號數(shù)的十、八、十六進制輸出;程序如下:

#include<stdio.h>main(){inta=20,b=-1;

printf("20:%d,%u,%o,%x\n",a,a,a,a);

printf("-1:%d,%u,%o,%X\n",b,b,b,b);}運行結(jié)果(vc++6.0):20:20,20,24,14-1:-1,4294967295,37777777777,FFFFFFFF運行結(jié)果:123,-123@@123,-123,123【思考】若將a、b的初值改為:-0x1、11,程序的運行結(jié)果會是什么?運行結(jié)果:-1+11=105.整型數(shù)據(jù)的輸入(1)帶符號整數(shù)的輸入:

%d——以十進制帶符號形式輸入整數(shù)(2)無符號整型數(shù)據(jù)的輸入:

%u——以十進制無符號形式輸入整數(shù)

%o——以八進制無符號形式輸入整數(shù)

%x或%X——以十六進制無符號形式輸入整數(shù)(3)整數(shù)常用輸入格式及方法:以給整型變量a、b分別輸入11、23為例:①scanf(“%d,%d”,&a,&b);正確的輸入為:11,23↙②scanf("%d%d",&a,&b);正確的輸入為:1123↙③scanf("a=%d,b=%d",&a,&b);正確的輸入為:a=11,b=23↙④scanf("%d%d",&a,&b);正確的輸入為:1123↙

或11Tab鍵23↙或11↙23↙

⑤scanf(“%2d%2d”,&a,&b);正確的輸入為:1123或112345↙⑥scanf("%o,%x",&a,&b);正確的輸入為:13,17↙說明:從鍵盤以%o、%x格式輸入整數(shù)時,整數(shù)前不需要加前綴0或0x,即直接輸入八進制或十六進制數(shù)據(jù)?!纠?-7】請編程實現(xiàn):從鍵盤以十進制輸入任意兩個整數(shù),按加法表達式輸出這兩個整數(shù)及其和。例如:1+2=3。程序如下:

#include<stdio.h>main(){inta,b;

scanf("%d,%d“,&a,&b);

printf("%d+%d=%d\n",a,b,a+b);}運行程序,輸入:1,2↙輸出:1+2=3【思考】①若想計算12+34,請問如何正確輸入數(shù)據(jù)?②若將語句scanf("%d,%d",&a,&b);

改為:scanf("%d%d",&a,&b);

數(shù)據(jù)如何正確輸入?③若要按八進制或十六進制輸入數(shù)據(jù),語句如何修改、數(shù)據(jù)如何輸入?2.2.2實型數(shù)據(jù)的表示及其輸入與輸出1.實型常量及其表示方法(1)十進制的一般形式:由+/-號、整數(shù)部分、小數(shù)點和小數(shù)部分組成,而且必須有小數(shù)點。(2)十進制的指數(shù)形式:用科學計數(shù)法表示實型常量。例如:12.245-123.45

0.618

.123

123.例如:數(shù)學上123.456可以表示成:1.23456×1022.實型變量(1)實型變量的分類:按存放數(shù)據(jù)的有效位分為三類

單精度(float)——4字節(jié)雙精度(double)——8字節(jié)長雙精度(longdouble)——10字節(jié)(2)實型變量的定義及初始化方法:舉例如下:

floatx,y=12.34,s=0.0;doublef1=456.789,f2=1.23456e+7;在C程序中表示成:1.23456E+2

或1.23456E2例如:數(shù)學上-123.456可以表示成:-1.23456×102在C程序中表示成:-1.23456E+2

或-1.23456E2數(shù)學上:±尾數(shù)×10±2(+可省略)在C程序中:±尾數(shù)E±指數(shù)(+可省略,不能有空格,指數(shù)應為整數(shù))【例2-9】設有下列數(shù)據(jù)需要存放,請按照需要定義變量并且完成初始化工作。

12,-23,45000,34.56,0.0 定義及初始化如下:

inta=12,b=-23;longc=45000;floatx=34.56,y=0.0;3.實型數(shù)據(jù)的輸入與輸出(1)實型數(shù)據(jù)的輸入格式字符

%f——以十進制小數(shù)/指數(shù)形式輸入實數(shù)給float類型變量

%lf——以十進制小數(shù)/指數(shù)形式輸入實數(shù)給double類型變量

%e、%E、%g、%G——作用同%f(2)實型數(shù)據(jù)的輸出格式字符

%f

或%lf——以十進制小數(shù)形式輸出實數(shù)(單精度和雙精度)

%e、%E——以十進制指數(shù)形式輸出實數(shù)

%g、%G——自動選用%f

或%e

格式中輸出寬度較短的一種(3)實型數(shù)據(jù)輸出的附加格式字符

%m.nf——以十進制小數(shù)形式輸出實數(shù),數(shù)據(jù)的總寬度為m位,小數(shù)位為n位。若數(shù)據(jù)的實際位數(shù)大于m位時,整數(shù)部分按實際位數(shù)輸出,小數(shù)位數(shù)仍按n位輸出。說明:①若用%E、%G格式,輸出時指數(shù)用大寫字母E,否則用小寫字母e表示。②實型數(shù)據(jù)在輸入時,沒有%m.nf格式?!纠?-8】請編程實現(xiàn):從鍵盤輸入任意兩個實數(shù)求其和。程序如下:

#include<stdio.h>main(){floata,b;

scanf("%f,%f",&a,&b);

printf("%f+%f=%f\n",a,b,a+b);}運行程序,輸入:1.1,2.2↙輸出:1.1+2.2=3.3000004.實型數(shù)據(jù)在內(nèi)存中的存放形式及輸出有效位實型數(shù)據(jù)在計算機中用二進制來表示,系統(tǒng)是將其轉(zhuǎn)換成指數(shù)形式來存放的,指數(shù)部分和小數(shù)部分被分別存儲。①單精度實型數(shù)據(jù)在內(nèi)存中占4個字節(jié),按指數(shù)形式存放,有效位7位,小數(shù)位保留6位(十進制數(shù)位)。②單精度實型數(shù)據(jù)若整數(shù)部分的位數(shù)>7位,保留前7位不變,第8位由其后數(shù)值四舍五入得來,第9位以后數(shù)字無意義(不確定的數(shù)字)。③單精度實型數(shù)據(jù)若整數(shù)部分的位數(shù)<7位,則整數(shù)位加上小數(shù)位共7位有效,第8位數(shù)仍由其后數(shù)值四舍五入得來。④單精度實數(shù)若數(shù)字<1為純小數(shù),此時保留6位小數(shù),第6位小數(shù)由其后數(shù)值四舍五入得來。⑤雙精度實型數(shù)據(jù)在內(nèi)存中一般占8個字節(jié),按指數(shù)形式存放,最多16

位有效位,6位小數(shù)。②例如:1234567890.0按單精度類型存儲,則為:1234567936.000000(注:“36”兩位不確定)。③例如:123.456708999按單精度類型存儲,則為:123.456711【例2-10】閱讀下面程序,寫出運行結(jié)果。程序如下:

main(){floatx1=11.23,x2=1122.23456789,s;s=x1+x2;

printf("x1=%f,x2=%f,s=%e\n",x1,x2,s);}④例如:0.123456789按單精度類型存儲,則為:0.123457運行結(jié)果:x1=11.230000,x2=1122.234619,s=1.133465e+0032.3字符型數(shù)據(jù)及其輸入與輸出

2.3.1字符型數(shù)據(jù)的表示及其輸入與輸出①只能是單個字符,只可以用單引號括起來。②可以是字符集中的任意字符。但數(shù)字被定義為字符常量之后,就不再表示原值。③在內(nèi)存中占據(jù)一個字節(jié)的存儲空間,在這個字節(jié)中,存放的是該字符的ASCII碼值,而不是該字符本身。④大寫字母和小字母是不同的字符常量。注意:''和''不同,''是空字符,''是空格字符......53...65...97...‘a(chǎn)’‘5’‘A’例如,5和‘5’不同。‘a(chǎn)’和‘A’不同。51.字符常量52.轉(zhuǎn)義字符

對一些不可顯示的字符,比如換行符、回車符、退格符等,還有一些有特殊意義的字符如單引號、雙引號等,需要用轉(zhuǎn)義字符來表示。轉(zhuǎn)義字符ASCII碼值含義\n10回車換行\(zhòng)t9橫向跳到下一制表位置\v11豎向跳格\b8退格\r13回車\a7鳴鈴\f12走紙換頁\\92反斜線符"\"\'39單引號符\"34雙引號符\ddd1~3位八進制數(shù)所代表的字符\xhh1~2位十六進制數(shù)所代表的字符強調(diào):轉(zhuǎn)義字符不論形式上有幾個字符,其本質(zhì)上是一個字符。所以,用單引號前后括住,也就形成了一個字符常量。3.字符變量及其定義方法

(1)字符變量:用于存放字符常量的變量稱為字符變量。(2)字符變量類型聲明符:char(3)一個字符變量在內(nèi)存中占1字節(jié),存放的是該字符的ASCII值。例如:

charc1='A',c2='4';...............‘A’65C1C2‘4’524.用scanf()和printf()函數(shù)輸入輸出字符型數(shù)據(jù)

常用格式符:

%c——輸入或輸出單個字符

%d——按十進制格式輸出字符的ASCII碼值【例2-12】將整數(shù)100和字符常量9按照十進制和字符兩種格式輸出。程序如下:

#include<stdio.h>main(){printf("l00:%d,%c\n",100,100);

printf("\'9\':%d,%c\n",'9','9');}運行結(jié)果:l00:100,d'9':57,95.字符型數(shù)據(jù)與整型數(shù)據(jù)之間的關系(1)一個字符型數(shù)據(jù)既可按字符格式輸出,也可按整型格式輸出。(2)允許對字符型數(shù)據(jù)進行算術運算,實際是按其ASCII碼值進行算術運算。說明:大小寫字母轉(zhuǎn)換的一般方法為:大寫字母+32轉(zhuǎn)換為相對應的小寫字母小寫字母–32轉(zhuǎn)換為相對應的大寫字母【例2-11】把字符'A'、'a'和'A'+32的值按整型格式輸出。程序如下:

main(){printf("'A'=%d,'a'=%d,'A'+32=%d\n",'A','a','A'+32);}【例2-12】從鍵盤輸入一個任意的小寫字符,輸出該字符對應的大小寫字符及ASCII碼值。程序如下:

main(){charc1;

scanf("%c",&c1);

printf("%c,%c\n",c1,c1+32);

printf("%d,%d\n",c1,c1+32);}運行程序,輸入:d↙運行結(jié)果:d,D100,68運行結(jié)果:'A'=65,'a'=97,'A'+32=976.字符輸入與輸出函數(shù)(1)putchar()

函數(shù)功能:輸出一個字符到顯示器的當前光標位置。調(diào)用格式:

putchar(c);

c可以是字符型或整型的常量、變量或表達式。(2)getchar()

函數(shù)功能:從標準輸入設備(一般指鍵盤)輸入一個字符。調(diào)用格式:

getchar();

該函數(shù)是無參函數(shù)。常用:c=getchar();

/*c為字符變量*/(3)說明:①使用putchar()和getchar()函數(shù),應在源程序的開頭加上文件包含命令:

#include<stdio.h>②getchar()函數(shù)只能接受一個字符(包括控制字符),得到的字符可以賦給一個字符型變量或整型變量,也可作為表達式的一部分?!纠?-14】輸入一個字符,然后輸出該字符及其ASCII碼值。程序如下:

#include<stdio.h>main(){charc;c=getchar();

putchar(c);putchar('\n');

printf("%c,%d\n",c,c);}運行程序,輸入:A↙輸出:AA,652.3.2字符串常量1.字符串常量(1)定義:用一對雙引號括起來的一個字符序列,可以是0個或多個字符。(2)字符串常量的長度:字符串常量中所包含的有效字符個數(shù)。轉(zhuǎn)義字符應當作一個字符來計算。(3)存放形式:在內(nèi)存中占用一片連續(xù)的單元,按順序依次存放,一個字符占一個字節(jié),存放該字符的ASCⅡ值,最后放一個字符串結(jié)束標記‘\0’?!甛0’是一個ASCII碼值為0的空操作符。字符串常量在內(nèi)存中占用的字節(jié)數(shù)是:

字符串長度+1或有效字符個數(shù)+1

2.字符串的輸入與輸出使用printf()函數(shù)輸出一串字符的方法:(1)使用非格式字符輸出一串字符。(2)使用格式控制字符:%s——輸出一串字符。【例2-15】分別用上述兩種方法輸出字符串。程序如下:#include<stdio.h>main(){printf("ABCDEF\n");

printf("%s\n","abcdef");

printf("%s=%d\n","12+34",12+34);}運行結(jié)果:ABCDEFabcdef12+34=46例如,"\\A\102"代表的字符串是"\AB",故它的長度為3。例如:"ABCD","China"、"1+2"等。在字符串常量中,可以使用轉(zhuǎn)義字符。例如:“ABC0123”在內(nèi)存中的存放如右圖所示。...A65B66C67048149250351\00...2.4C語言的運算符和表達式我們將學到:(1)運算符(2)運算對象(3)運算規(guī)則(4)表達式及表達式的值(5)優(yōu)先級(6)結(jié)合性

注意以下幾點:①運算符的功能;②運算量的個數(shù);③運算對象的類型;④運算符的優(yōu)先級、結(jié)合性⑤運算結(jié)果的類型;2.4.1算術運算符和算術表達式1.基本算術運算符

(1)基本算術運算符:對象數(shù)目名稱運算符運算規(guī)則運算對象類型運算結(jié)果類型結(jié)合性單目正+取正值整型或?qū)嵭驼突驅(qū)嵭妥杂蚁蜃筘?取負值雙目加+加法自左向右減-減法乘*乘法除/除法模%整除取余整型整型1)單目運算符(+/-):出現(xiàn)在運算對象的前面,稱前綴運算符,運算規(guī)則同一般的正、負號。2)雙目運算符中的+、-、*運算同數(shù)學上的加法、減法、乘法。3)雙目除運算(/):運算結(jié)果與運算對象的數(shù)據(jù)類型有關。

整型數(shù)據(jù)/整型數(shù)據(jù),做整除運算,結(jié)果取商的整數(shù)部分。②整型數(shù)據(jù)/實型數(shù)據(jù)

實型數(shù)據(jù)/整型數(shù)據(jù)

實型數(shù)據(jù)/實型數(shù)據(jù)做一般的除法,結(jié)果為實型。(2)基本算術運算說明例如:+5的運算結(jié)果是正整數(shù)5--5的運算結(jié)果也是正整數(shù)54)雙目模運算(%):求兩個整數(shù)相除之后的余數(shù)。

要求兩個運算對象必須是整型,結(jié)果是整除后的余數(shù),符號與被除數(shù)相同。5)優(yōu)先級:

單目正、負號(+/-)高于雙目運算符(*、/、%)高于

+、-6)結(jié)合性:

同級單目:自右向左;同級雙目:自左向右。例如:14/3結(jié)果為414/(-3)結(jié)果為-414/3.0結(jié)果為4.666667例如:1+4%3-2*3+5/2結(jié)果為:-21+1-6+2例如:14%3結(jié)果為214%(-3)結(jié)果為2-14/3結(jié)果為-214%3.0錯2.自增、自減運算符

前綴++i

:先使i值增1,后使用增1后的i值

--

i

:先使i值減1,后使用減1后的i值后綴i++

:先使用i的值,后使i值增1。

i--

:先使用i的值,后使i值減1。表達式運算前的值運算后的值運算后表達式的值abab++a344--a322b++787b--767a+(++b)373811(a++)-(--b)3746-3【例2-17】計算過程及結(jié)果自增、自減運算符是單目運算符優(yōu)先級高于雙目(+、-、*、/、%)結(jié)合性:自右向左

只能對變量,不能對常量和表達式。7++、(a+b)++【例2-17】設有:inta=3,b=7;下面表達式運算之后,表達式和變量的值各為多少?表達式:++a、--a、b++、b--、a+(++b)、(a++)-(--b)2.4.2賦值運算符和賦值表達式1.賦值運算符2.賦值表達式

“=”即賦值運算符,是一個雙目運算符,進行的是賦值操作,而不是數(shù)學上的“等號”。 3.優(yōu)先級和結(jié)合性

優(yōu)先級較低,低于算術運算符、關系運算符和邏輯運算符。

結(jié)合性是自右向左變量=表達式3

左邊只能是變量,右邊可以是任意合法的C表達式。功能:先計算右邊表達式的值,再把計算的結(jié)果賦給左邊的變量。4.賦值表達式的值

賦值表達式的值取左邊變量的值5.賦值語句變量=表達式3

;

例如:a=5s=a+ba=a+1s=s+x

a+b=2+510=2+x例如:a=5;s=a+b;a=a+1;s=a=5;

a=2+y=5a=2+(y=5)5.算術自反賦值運算符(復合運算符)運算符:+=、-=、*=、/=、%=【例2-22】設有:intx=8,y=8,z=8;執(zhí)行了x-=y–z+3;語句后,變量x,y,z的值各是多少?運算規(guī)則,舉例如下:

a+=b+c

等價于a=a+(b+c)

a-=b+c

等價于a=a-(b+c)

a*=b+c

等價于a=a*(b+c)

a/=b+c

等價于a=a/(b+c)

a%=b+c

等價于a=a%(b+c)注意:自反賦值運算符之間不能有空格。解:語句等同于:

x=x-(y-z+3);故3個變量的值為:

x=5,y=8,z=8。(1)逗號表達式:用逗號運算符把多個表達式“連接”起來,構成的一個完整表達式。(2)逗號表達式的一般形式為:【例2-25】執(zhí)行下面程序后,輸出結(jié)果是什么?main(){intx=10,y;y=(x+4,x+10);

printf("x=%d,y=%d\n",x,y);}2.4.3逗號運算符和逗號表達式【思考】若把y=(x+4,x+10);變成:y=x+4,x+10;程序的輸出結(jié)果又是什么?表達式1,表達式2,表達式3,…,表達式n(3)逗號表達式的值:例如:a=5,b=2,s=0(逗號表達式)

a=(5,b=2,s=0)(賦值表達式)(4)逗號表達式的值:優(yōu)先級最低,結(jié)合性為自左向右。注意:賦值表達式和逗號表達式的不同。逗號表達式的值取最后邊表達式的值分析:

y=(x+4,x+10)的右邊是一個逗號表達式,所以輸出結(jié)果是:x=10,y=202.4.4常用數(shù)學函數(shù)和表達式1.常用數(shù)學及其它函數(shù)數(shù)學形式C語言形式函數(shù)原型函數(shù)功能頭文件|x|abs(x)intabs(intx)求整數(shù)x的絕對值math.hfabs(x)doublefabs(doublex)求x的絕對值sqrt(x)doublesqrt(doublex)的值,x的值≥0exexp(x)doubleexp(doublex)求ex的值lnxlog(x)doublelog(doublex)求lnx的值sinxsin(x)doublesin(doublex)計算sinx的值(弧度)cosxcos(x)doublecos(doublex)計算cosx的值(弧度)timetime()time_ttime(NULL)取系統(tǒng)的當前時間time.h隨機數(shù)rand()intrand(void)產(chǎn)生0~32767間的隨機整數(shù)stdlib.h隨機數(shù)種子數(shù)randomize()voidrandomize()產(chǎn)生一個隨機數(shù)的種子數(shù),可使rand()函數(shù)在每次運行程序時產(chǎn)生的隨機數(shù)不同初始化隨機數(shù)發(fā)生器srand()voidsrand(unsignedint)注:①在TurboC中,可以使用randomize()函數(shù)、srand()函數(shù)作隨機數(shù)初始化發(fā)生器。②在VisualC++6.0中,使用srand()函數(shù)作隨機數(shù)初始化發(fā)生器。③有關其它函數(shù)參見附錄4。在使用這些函數(shù)時,要注意以下幾點:函數(shù)的功能;函數(shù)的類型;函數(shù)形參的類型;函數(shù)形參的單位;函數(shù)的頭文件?!纠?-28】產(chǎn)生一個0~100之間的隨機整數(shù),輸出這個數(shù)及它的平方根(保留小數(shù)2位)。程序如下:

#include<stdio.h>

#include<math.h>/*sqrt()函數(shù)的頭文件*/#include<stdlib.h>/*rand()、srand()函數(shù)的頭文件*/#include<time.h>/*time()函數(shù)的頭文件*/main(){intx;floatx_sqrt;

srand((unsigned)time(NULL));x=rand()%100;

x_sqrt=sqrt(x);

printf("x=%d,x_sqrt=%.2f\n",x,x_sqrt);}運行結(jié)果:(僅供參考,因是隨機數(shù),每次的運行結(jié)果不一樣)x=41,x_sqrt=6.402.將數(shù)學式子轉(zhuǎn)化為C的合法表達式轉(zhuǎn)換的原則大致如下:(1)當分子或分母是表達式時,要加圓括號;(2)函數(shù)轉(zhuǎn)換時,自變量一定要加圓括號;(3)左右括號要對稱,當有多重括號時,只能使用圓括號嵌套配對;(4)三角函數(shù)的自變量要變換為弧度;(5)適當轉(zhuǎn)換數(shù)據(jù)類型,以免產(chǎn)生誤差?!纠?-30】將下列數(shù)學式子轉(zhuǎn)化為C語言合法表達式。(1)

(2)

解:C語言合法表達式如下:(1)(x+y)/(4*(a+b))+(x+y)*sin(30*3.14159/180)(2)x1=(-b+sqrt(b*b-4*a*c))/(2*a)2.5不同類型數(shù)據(jù)間的混合運算和轉(zhuǎn)換2.5.1表達式計算中的數(shù)據(jù)類型轉(zhuǎn)換

C語言允許不同類型的數(shù)據(jù)混合運算,每個運算符兩邊的運算量必須是同一型。所以在表達式混合運算時存在著兩種轉(zhuǎn)換:隱式轉(zhuǎn)換、顯式轉(zhuǎn)換。1.隱式轉(zhuǎn)換當表達式中的運算存在混合運算時,系統(tǒng)會自動轉(zhuǎn)換,這種轉(zhuǎn)換被稱為隱式轉(zhuǎn)換。隱式轉(zhuǎn)換的規(guī)則如下:(1)若參與運算的對象類型不同時,則先轉(zhuǎn)換成同一類型。(2)轉(zhuǎn)換時按數(shù)據(jù)長度長的類型進行轉(zhuǎn)換,以保證精度不降低。(3)float型參與運算時,必須先轉(zhuǎn)換成double型。(4)char型和short型參與運算時,必須先轉(zhuǎn)換成int型,結(jié)果為int型。

double float 高

longunsigned

int char、short 低

2.強制類型轉(zhuǎn)換

將一個表達式的值強制轉(zhuǎn)換成指定類型,這種轉(zhuǎn)換被稱為顯式轉(zhuǎn)換。強制類型轉(zhuǎn)換的一般形式為:

功能:把表達式的運算結(jié)果強制轉(zhuǎn)換成類型說明符所表示的類型。例如:

(float)a——把a的值強制轉(zhuǎn)換為實型

(int)(x+y)——把x+y的結(jié)果強制轉(zhuǎn)換為整型,轉(zhuǎn)換時不進行四舍五入

(int)x+y——把x的值強制轉(zhuǎn)換為整型,然后加y的值有關強制轉(zhuǎn)換運算的說明:①類型說明符和表達式都必須加括號,若表達式為一個常量或變量時可以不加括號。②把實型強制轉(zhuǎn)換為整型時,不進行四舍五入。③無論是強制轉(zhuǎn)換或是自動轉(zhuǎn)換,都只是為了本次運算的需要而對數(shù)據(jù)進行的臨時性轉(zhuǎn)換,它產(chǎn)生一個臨時的中間值去參與運算,而不改變原數(shù)據(jù)及其類型。例如:設有變量聲明語句:floatx=3.78;則表達式:2+(int)x運算之后,表達式的值是5(為整型),變量x的值和類型不變,仍是3.78和float型。如(int)(x+y)與(int)x+y是完全不同的兩種結(jié)果?!纠?-32】強制類型轉(zhuǎn)換的應用。

main(){floatf1=5.75,f2;f2=(int)f1;

printf("f1=%f,f2=%f,(int)f1=%d\n",f1,f2,(int)f1);}運行結(jié)果:f1=5.750000,f2=5.000000,(int)f1=5

(類型說明符)表達式2.5.2賦值運算中的數(shù)據(jù)類型轉(zhuǎn)換

在進行賦值運算時,若“=”兩邊的數(shù)據(jù)類型不一致,系統(tǒng)會自動把“=”右邊表達式的數(shù)據(jù)類型轉(zhuǎn)換成左邊變量的類型,然后賦給左邊的變量。例如:

intx;

x=7.8;【例2-33】計算圓面積,把圓面積分別按整型、實型格式存儲并輸出。

#include<stdio.h>#definePI3.14159main(){intr=10,s1;floats2;

s1=r*r*PI;

s2=r*r*PI;

printf("s1=%d,s2=%f\n",s1,s2);}運行結(jié)果:s1=314,s2=314.15900x為int類型故將7.8轉(zhuǎn)換為7(只取整,不四舍五入)然后賦給x,x的值為7將(r*r*PI)的結(jié)果(實型)int

類型賦值給S1變量(s1為int類型)S2變量為實型2.6順序結(jié)構程序設計2.6.1結(jié)構化程序設計的三種基本結(jié)構

結(jié)構化程序設計,使程序具有良好的可讀性、可靠性、可維護性以及良好的結(jié)構。結(jié)構化程序由順序、選擇、循環(huán)三種基本控制結(jié)構構造。1.順序結(jié)構

順序結(jié)構表示程序中的各操作是按照它們出現(xiàn)的先后順序執(zhí)行,程序從入口處開始,按順序執(zhí)行所有操作,直到出口處,所以稱為順序結(jié)構。2.選擇結(jié)構

選擇結(jié)構表示程序的處理步驟出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個分支執(zhí)行,有單分支、雙分支和多分支三種形式3.循環(huán)結(jié)構

循環(huán)結(jié)構表示在某一條件下反復執(zhí)行一段程序的操作。循環(huán)結(jié)構有當型和直到型兩種形式,根據(jù)條件的判定順序每種又分前測型和后測型。成立不成立圖2-5

選擇結(jié)構條件P塊A塊B塊A塊B圖2-4順序結(jié)構條件P塊A不成立成立

圖2-

溫馨提示

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

評論

0/150

提交評論