第3章最簡單的C程序設計-順序程序設計_第1頁
第3章最簡單的C程序設計-順序程序設計_第2頁
第3章最簡單的C程序設計-順序程序設計_第3頁
第3章最簡單的C程序設計-順序程序設計_第4頁
第3章最簡單的C程序設計-順序程序設計_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章 最簡單的C程序設計

順序程序設計王燕2/6/20231第3章順序程序設計主要內容3.1順序程序設計舉例3.2數據的表現形式及其運算3.3C語句3.4數據的輸入輸出2/6/20232第3章順序程序設計重點難點數據類型及其運算數據輸入輸出格式輸入輸出順序結構程序設計2/6/20233第3章順序程序設計3.2數據的表現形式及其運算3.2.1常量和變量3.2.2數據類型3.2.3整型數據3.2.4字符型數據3.2.5浮點型數據3.2.6怎樣確定常量的類型3.2.7運算符和表達式2/6/20234第3章順序程序設計3.2.1常量和變量1.常量:在程序運行過程中,值不能被改變的量整型常量:如1000,12345,0,-345實型常量十進制小數形式:如0.34-56.790.0指數形式:如12.34e3(代表12.34103)字符常量:如'?'轉義字符:如'\n'字符串常量:如"boy"符號常量:#definePI3.14162/6/20235第3章順序程序設計3.2.1常量和變量例符號常量的使用

#include"stdio.h"#definePRICE30voidmain(){

int

num,total; num=10;

PRICE=40; total=num*PRICE;

printf("total=%d\n",total);}運行結果:total=300說明:程序中用#define命令行定義PRICE代表常量30,此后凡在本文件中出現的PRICE都代表30,可以和常量一樣進行運算。說明:如再用賦值語句給PRICE賦值是錯的

PRICE=40;//錯誤,不能給符號常量賦值2/6/20236第3章順序程序設計3.2.1常量和變量2.變量:在程序運行期間,變量的值是可以改變的變量必須先定義,后使用定義變量時指定該變量的名字和類型變量名和變量值是兩個不同的概念變量名實際上是以一個名字代表的一個存儲地址從變量中取值,實際上是通過變量名找到相應的內存地址,從該存儲單元中讀取數據變量值是存儲單元中的數據2/6/20237第3章順序程序設計3.2.1常量和變量變量的特征(1)變量名:存儲空間的名字,通過它對變量進行訪問。一個標識符,通常用小寫字母表示;(2)變量類型:決定存儲單元的大小 整型變量、實型變量、字符型變量等(3)變量值:存儲單元中存儲的數值。如y=x+5;其中x和y都是變量,以上語句是將x+5的值賦給y2/6/20238第3章順序程序設計3.2.1常量和變量3.常變量:constinta=3;4.標識符:一個對象的名字,用來標識變量名、符號常量名、數組名、函數名等的有效字符序列。

C語言規(guī)定標識符只能由字母、數字和下劃線3種字符組成,且第一個字符必須為字母或下劃線。

sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_lingM.D.John,¥123,3D64,a>b2/6/20239第3章順序程序設計舉例programto__tofile_2ab1_c3為合法標識符yes?

123gotoa_80%if含有不合法字符“?”出現非法字符“%”標識符中不允許有空格第一個字符不能為數字與關鍵字相同2/6/202310第3章順序程序設計3.2.1常量和變量保留字:C語言規(guī)定的具有特定意義的字符串,也稱關鍵字。C語言的保留字(關鍵字)共有37個,附錄C2/6/202311第3章順序程序設計變量小結要求對所有用到的變量作強制定義,也就是“先定義,后使用”。標識符不能與C語言的保留字、系統標準庫函數同名。編譯系統將大寫字母和小寫字母認為是兩個不同的字符。建議變量名的長度最好不要超過8個字符。在選擇變量名和其它標識符時,應注意做到“見名知意”,即選用有含意的英文單詞(或其縮寫)作標識符。2/6/202312第3章順序程序設計3.2.2數據類型p43圖3.4數據類型派生類型枚舉類型enum空類型void指針類型數組類型結構體類型struct共用體類型union基本類型整型int字符型char實型(浮點型)單精度實型float雙精度實型double復數浮點型complex布爾型bool函數類型2/6/202313第3章順序程序設計3.2.3整型數據1.整型數據的分類最基本的整型類型基本整型(int型):占2個或4個字節(jié)短整型(shortint):VC++6.0中占2個字節(jié)長整型(longint):VC++6.0中占4個字節(jié)雙長整型(longlongint):C99新增的2/6/202314第3章順序程序設計3.2.3整型數據2.整型變量的符號屬性整型變量的值的范圍包括負數到正數可以將變量定義為“無符號”類型擴充的整型類型:p462/6/202315第3章順序程序設計3.3整型數據3.整型常量的表示方法整型常量即整常數。在C語言中,整常數可用以下三種形式表示:(1)十進制整數。如:123,-456(2)八進制整數,以0頭的數是八進制數。如:0123表示八進制數123,等于十進制數83,-011表示八進制數-11,即十進制數-9。(3)十六進制整數。以0x開頭的數是16進制數。如:0x123,代表16進制數123,等于十進制數291。-0x12等于十進制數-18。2/6/202316第3章順序程序設計3.3整型數據4.整型數據在內存中的存放形式數據在內存中是以二進制形式存放的。如:inti;/*定義為整型變量*/i=10;/*給i賦以整數10*/說明:內存中存儲的是000010102/6/202317第3章順序程序設計3.3整型數據5.整型變量的定義C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強制類型定義”。例如:int

a,b;(指定變量a,b為整型)unsignedshortc,d;(指定變量c,d為無符號短整型)longe,f;(指定變量e,f為長整型)2/6/202318第3章順序程序設計3.3整型數據例整型變量的定義與使用#include<stdio.h>voidmain(){

int

a,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);}說明:不同種類的整型數據可以進行算術運算運行結果:a+u=22,b+u=-142/6/202319第3章順序程序設計3.2.4字符型數據1.字符與字符代碼大多數系統采用ASCII字符集字母:A~Z,a~z數字:0~9專門符號:29個:!"#&'()*等空格符:空格、水平制表符、換行等不能顯示的字符:空(null)字符(以'\0'表示)、警告(以'\a'表示)、退格(以'\b'表示)、回車(以'\r'表示)等2/6/202320第3章順序程序設計3.2.4字符型數據字符'1'和整數1是不同的概念:字符'1'只是代表一個形狀為'1'的符號,在需要時按原樣輸出,在內存中以ASCII碼形式存儲,占1個字節(jié)整數1是以整數存儲方式(二進制補碼方式)存儲的,占2個或4個字節(jié)0011000100000000000000012/6/202321第3章順序程序設計3.2.4字符型數據1.字符常量(1)用單引號包含的一個字符是字符型常量(2)只能包含一個字符例'a','A','1''abc'、"a"2/6/202322第3章順序程序設計3.2.4字符型數據有些以“\”開頭的特殊字符稱為轉義字符轉義字符

功能

\n回車換行符,光標移到下一行行首\r回車不換行,光標移動到本行行首\t橫向跳格(8位為一格,光標跳到下一格起 始位置,如第9或17位等)\b退一格,光標往左移動一格2/6/202323第3章順序程序設計轉義字符功能\\ 用于輸出反斜杠字符“\”\' 用于輸出單引號字符“'”\" 用于輸出雙引號字符“"”\ddd

一到三位八進制數ddd對應的ASCII碼字符\xhh

一到兩位十六進制數hh對應的ASCII碼字符\f 走紙換頁2/6/202324第3章順序程序設計舉例練習:printf("\"You\'remygoodfriend!\"\\\n");在顯示器輸出什么?"You'remygoodfriend!"\↙2/6/202325第3章順序程序設計舉例例轉義字符的使用#include<stdio.h>voidmain(){

printf("ab

c\tde\rf\tg\n");

printf("h\ti\b\bj

k\n");}運行結果:fgdehjk2/6/202326第3章順序程序設計3.2.4字符型數據2.字符變量字符型變量用來存放字符常量,在內存中占一個字節(jié),存儲的是字符的ASCII碼,與整數的存儲形式相同,只能放一個字符。字符變量的定義形式如下:charc1,c2;對c1,c2賦值:c1='a';c2='b'

;2/6/202327第3章順序程序設計3.2.4字符型數據2.字符變量字符數據與整型數據可相互賦值,直接運算。例如:charc; c=97;相當于c='a';2/6/202328第3章順序程序設計3.2.4字符型數據例向字符變量賦以整數#include<stdio.h>voidmain(){ charc1,c2; c1=97; c2=98;

printf("%c%c\n",c1,c2);

printf("%d%d\n",c1,c2);}說明:在第3和第4行中,將整數97和98分別賦給c1和c2,它的作用相當于以下兩個賦值語句:

c1='a';c2='b';

因為'a'和'b'的ASCII碼為97和98運行結果:

ab97982/6/202329第3章順序程序設計3.2.4字符型數據例大小寫字母的轉換#include<stdio.h>voidmain(){ charc1,c2;c1='a';c2='b'; c1=c1-32; c2=c2-32;

printf("%c%c",c1,c2);}說明:程序的作用是將兩個小寫字母a和b轉換成大寫字母A和B。從ASCII代碼表中可以看到每一個小寫字母比它相應的大寫字母的ASCII碼大32。運行結果:AB2/6/202330第3章順序程序設計3.2.4字符型數據3.字符串常量是一對雙引號括起來的字符序列。合法的字符串常量:"Howdoyoudo.","CHINA","a","$123.45"可以輸出字符串,如printf("Howdoyoudo.");每個字符串尾自動加一個'\0'作為字符串結束標志例字符串"hello"在內存中占內存單元不是5個字符,而是6個字符,最后一個字符為'\0'

,但在輸出時不輸出'\0'hello\02/6/202331第3章順序程序設計3.2.4字符型數據'a'是字符常量,"a"是字符串常量。如:假設c被指定為字符變量:charc;c='a';c="a";c="CHINA";

結論:不能把一個字符串常量賦給一個字符變量。2/6/202332第3章順序程序設計3.2.5浮點型數據浮點型數據是用來表示具有小數點的實數float型(單精度浮點型)編譯系統為float型變量分配4個字節(jié)數值以規(guī)范化的二進制數指數形式存放double型(雙精度浮點型)編譯系統為double型變量分配8個字節(jié)15位有效數字longdouble(長雙精度型)2/6/202333第3章順序程序設計3.2.5浮點型數據浮點型常量的表示方法兩種表示形式小數指數0.1233e-3注意:字母e(或E)之前必須有數字,且e后面的指數必須為整數1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e

2/6/202334第3章順序程序設計3.2.5浮點型數據規(guī)范化的指數形式:在字母e(或E)之前的小數部分中,小數點左邊應有一位(且只能有一位)非零的數字。例如:123.456可以表示為:

123.456e0,12.3456e1,1.23456e2, 0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3稱為“規(guī)范化的指數形式”。2/6/202335第3章順序程序設計3.2.6怎樣確定常量的類型字符常量:由單引號括起來的單個字符或轉義字符整型常量:不帶小數點的數值系統根據數值的大小確定int型還是long型等浮點型常量:凡以小數形式或指數形式出現的實數C編譯系統把浮點型常量都按雙精度處理分配8個字節(jié)2/6/202336第3章順序程序設計變量賦初值(1)C語言允許在定義變量的同時使變量初始化,如:inta=3;//指定a為整型變量,初值為3

floatf=3.56;//指定f為浮點型變量,初值為3.56charc='a';//指定c為字符變量,初值為'a'2/6/202337第3章順序程序設計變量賦初值(2)可以使被定義的變量的一部分賦初值。如:int

a,b,c=5;表示指定a,b,c為整型變量,但只對c初始化,c的初值為5(3)如果對幾個變量賦以同一個初值,應寫成:inta=3,b=3,c=3;表示a,b,c的初值都是3。不能寫成inta=b=c=3;

注意:初始化不是在編譯階段完成的而是在程序運行時執(zhí)行本函數時賦初值的,相當于有一個賦值語句。2/6/202338第3章順序程序設計數值型數據的混合運算混合運算:整型(包括int,short,long)、浮點型(包括float,double

)可以混合運算。運算時,不同類型的數據要先轉換成同一類型,然后進行運算。說明:這種類型轉換是由系統自動進行的。2/6/202339第3章順序程序設計舉例有如下變量類型:charc;inti;floatf;doubled;計算表達式:c+f+i+dcharfloatintdoublec+f+i+d

int

double

double

double該表達式值的類型是double類型

doubledoubledouble2/6/202340第3章順序程序設計

3.2.7運算符和表達式C運算符簡介(1)算術運算符(+-*/%)(2)關系運算符(><==>=<=!=)(3)邏輯運算符(!&&||)(4)位運算符(<<>>~|∧&)(5)賦值運算符(=及其擴展賦值運算符)(6)條件運算符(?:)(7)逗號運算符(,)2/6/202341第3章順序程序設計

3.2.7運算符和表達式(8)指針運算符(*和&)(9)求字節(jié)數運算符(sizeof)(10)強制類型轉換運算符((類型))(11)成員運算符(.->)(12)下標運算符([])(13)其他(如函數調用運算符())2/6/202342第3章順序程序設計

3.2.7運算符和表達式(1)基本的算術運算符:+

(加法運算符,或正號運算符。如:3+5、+3)-(減法運算符,或負號運算符。如:5-2、-3)*(乘法運算符。如:3*5)/(除法運算符。如:5/3)%(模運算符,或稱求余運算符,%兩側均應為整型數據,如:7%4的值為3)。2/6/202343第3章順序程序設計

3.2.7運算符和表達式除法運算符“/”進行求商運算。對于不同類型的運算對象,除法表達式計算結果的類型也會不同。例:計算x/y如果x,y是整型,則結果為整型,小數部分被略去。

5/2結果為2,整型量

2/5結果為0,整型量如果x,y其中一個為實型量,則結果為實型5.0/2.0結果為2.52/6/202344第3章順序程序設計

3.2.7運算符和表達式(2)算術表達式:用算術運算符和括號將運算對象(也稱操作數)連接起來的、符合C語法規(guī)則的式子,稱為C算術表達式。運算對象包括常量、變量、函數等。例如:a*b/c-1.5+'a'是一個合法的表達式。2/6/202345第3章順序程序設計

3.2.7運算符和表達式數學式子改寫成C語言表達式應注意以下幾點:乘號不能省。如:ab應寫成a*b。所有符號寫成一行。上下角標不能直接寫,需要轉換。C語言中只有圓括號,可以嵌套使用,避免兩個運算符并置。如a*b/-c應該為a*b/(-c)。調用標準數學函數時,自變量應寫在一對括號內。如:|-2163|應寫成fabs(-2163),SIN12應寫成sin(12)2/6/202346第3章順序程序設計

3.2.7運算符和表達式三角函數的自變量應使用弧度。如SIN50應寫成sin(50*3.1415926/180)要使所寫的算術表達式與數學式子等價。例3x2+4xysin56-|x-y|e2.3

3*x*x+4*x*y*sin(56*3.1415926/180)-fabs(x-y)*exp(2.3)sin

+cossin

sin(alf)+cos(alf)*sin(bate)2/6/202347第3章順序程序設計舉例一般數學式[a(b+c)+d]ac算術表達式(a*(b+c)+d)*a*c將方括號改成圓括號,*不能省略x/(x+y)+1.0/(x*y)其中不能出現分數,改用除法運算符,圓括號不能缺少3.14159*r*r/2.0其中為非字母字符,要用實型常量代替2/6/202348第3章順序程序設計

3.2.7運算符和表達式C語言規(guī)定了運算符的優(yōu)先級在表達式求值時,先按運算符的優(yōu)先級別高低次序執(zhí)行,例如先乘除后加減。C規(guī)定了各種運算符的結合方向(結合性)

算術運算符的結合方向為“自左至右”,即先左后右。2/6/202349第3章順序程序設計

3.2.7運算符和表達式(3)強制類型轉換運算符可以利用強制類型轉換運算符將一個表達式轉換成所需類型。 一般形式:(類型名)(表達式)例如:(double)a

將a轉換成double類型(int)(x+y)將x+y的值轉換成整型(float)(5%3)將5%3的值轉換成float型2/6/202350第3章順序程序設計

3.2.7運算符和表達式例強制類型轉換#include<stdio.h>voidmain(){ floatx;

inti; x=3.6; i=(int)x;

printf("x=%f,i=%d\n",x,i);}說明:有兩種類型轉換,一種是在運算時不必用戶指定,系統自動進行的類型轉換,如3+6.5。第二種是強制類型轉換。當自動類型轉換不能實現目的時,可以用強制類型轉換。運行結果:

x=3.600000,i=32/6/202351第3章順序程序設計

3.2.7運算符和表達式(4)自增、自減運算符(++--)作用是使變量的值增1或減1++i,--i(在使用i之前,先使i的值加/減1)i++,i--(在使用i之后,使i的值加/減1)2/6/202352第3章順序程序設計

3.2.7運算符和表達式i++與++i的區(qū)別:

++i是先執(zhí)行i=i+1后,再使用i的值;

i++是先使用i的值后,再執(zhí)行i=i+1。例如:假設i的值為3①j=++i;i的值先變成4,再賦給j,j的值均為4②j=i++;先將i的值3賦給j,j的值為3,然后i變?yōu)?2/6/202353第3章順序程序設計舉例intx,m,n;x=10;m=x++; n=++x;該語句執(zhí)行后,m=10,x=11該語句執(zhí)行后,n=12,x=122/6/202354第3章順序程序設計

3.2.7運算符和表達式注意:

(1)自增運算符++,自減運算符--,只能用于變量,而不能用于常量或表達式

(2)++和--的結合方向是“自右至左”自增(減)運算符常用于循環(huán)語句中使循環(huán)變量自動加1。也用于指針變量,使指針指向下一個地址2/6/202355第3章順序程序設計

3.2.7運算符和表達式(5)有關表達式使用中的問題說明①ANSIC并沒有具體規(guī)定表達式中的子表達式的求值順序,允許各編譯系統自己安排。例如:對表達式a=f1()+f2()

并不是所有的編譯系統都先調用f1(),然后調用f2(),在有的情況下結果可能不同。2/6/202356第3章順序程序設計

3.2.7運算符和表達式②C語言中有的運算符為一個字符,有的運算符由兩個字符組成,為避免誤解,最好采取大家都能理解的寫法。例如:不要寫成i+++j的形式,而應寫成

(i++)+j的形式。2/6/202357第3章順序程序設計舉例#include"stdio.h"voidmain(){

inti=1,j=2;

printf("i=%d,j=%d\n",i,j);

printf("i+++j=%d\n",i+++j); i=1;j=2;

printf("i+(++j)=%d\n",i+(++j)); i=1;j=2;

printf("(i++)+j=%d\n",(i++)+j);

printf("i=%d,j=%d\n",i,j);}2/6/202358第3章順序程序設計

3.2.7運算符和表達式③在調用函數時,實參數的求值順序,C標準并無統一規(guī)定。例如:i的初值為3,如果有下面的函數調用:printf("%d,%d",i,i++)在有的系統中,從左至右求值,輸出“3,3”。在多數系統中對函數參數的求值順序是自右而左,printf函數輸出的是“4,4”。以上這種寫法不宜提倡,最好改寫成

j=i++;

printf("%d,%d",j,i)2/6/202359第3章順序程序設計3.3C語句3.3.1C語句的作用和分類3.3.2最基本的語句—賦值語句3.3.*逗號運算符和逗號表達式2/6/202360第3章順序程序設計3.3.1C語句的作用和分類2/6/202361第3章順序程序設計3.3.1C語句的作用和分類一個C程序可以由若干個源程序文件組成一個源文件可以由若干個函數和預處理命令以及全局變量聲明部分組成一個函數由函數首部和函數體組成函數體由數據聲明和執(zhí)行語句組成C語句分為5類控制語句函數調用語句表達式語句空語句復合語句2/6/202362第3章順序程序設計3.3.1C語句的作用和分類一、控制語句:完成一定的控制功能1、if()~else條件語句 2、for()循環(huán)語句 3、while()~循環(huán)語句 4、do~while();循環(huán)語句

5、continue繼續(xù)語句6、break間斷語句7、switch()開關語句8、goto

轉向語句9、return返回語句2/6/202363第3章順序程序設計3.3.1C語句的作用和分類二、函數調用語句一個函數調用加一個分號構成一個語句printf("ThisisaCstatement.");三、表達式語句一個表達式加一個分號構成一個語句

a=3

;分號賦值表達式表達式語句+=2/6/202364第3章順序程序設計3.3.1C語句的作用和分類四、空語句:只有一個分號的語句什么也不做用來做流程的轉向點用來作為循環(huán)語句中的循環(huán)體五、復合語句:用一對{}括起來的語句 { z=x+y; t=z/100; printf("%f",t); }2/6/202365第3章順序程序設計3.3.2最基本的語句—賦值語句賦值語句是由賦值表達式加上一個分號構成例:a=100賦值表達式

a=100;賦值語句2/6/202366第3章順序程序設計3.3.2最基本的語句—賦值語句(1)賦值運算符賦值符號“=”就是賦值運算符,它的作用是將一個數據賦給一個變量。如“a=3”的作用是執(zhí)行一次賦值操作(或稱賦值運算)。把常量3賦給變量a。也可以將一個表達式的值賦給一個變量。(2)類型轉換如果賦值運算符兩側的類型不一致,但都是數值型或字符型時,在賦值時要進行類型轉換。2/6/202367第3章順序程序設計舉例#include<stdio.h>voidmain(){ unsigneda;

intb=-1; a=b;

printf("%u\n",a);}說明:“%u”是輸出無符號數時所用的格式符。如果b為正值,且在0~32767之間,則賦值后數值不變。運行結果:

655352/6/202368第3章順序程序設計3.3.2最基本的語句—賦值語句(3)復合的賦值運算符在賦值符“=”之前加上其他運算符,可以構成復合的運算符。 例如:

a+=3 等價于a=a+3 x*=y+8 等價于x=x*(y+8) x%=3 等價于x=x%32/6/202369第3章順序程序設計3.3.2最基本的語句—賦值語句C語言規(guī)定可以使用10種復合賦值運算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=注意:如果右側是包含若干項的表達式,則相當于它有括號。x%=y+3x=x%(y+3) 不要錯寫成x=x%y+32/6/202370第3章順序程序設計3.3.2最基本的語句—賦值語句(4)賦值表達式由賦值運算符將一個變量和一個表達式連接起來的式子稱為“賦值表達式”。一般形式為:

<變量><賦值運算符><表達式>

例如:“a=5”是一個賦值表達式2/6/202371第3章順序程序設計3.3.2最基本的語句—賦值語句對賦值表達式求解的過程是:

①求賦值運算符右側的“表達式”的值;②賦給賦值運算符左側的變量。例如:賦值表達式“a=3*5”的值為15,執(zhí)行表達式后,變量a的值也是15。2/6/202372第3章順序程序設計3.3.2最基本的語句—賦值語句左值(lvalue):賦值運算符左側的標識符變量可以作為左值表達式不能作為左值(如a+b)常量也不能作為左值右值(rvalue):出現在賦值運算符右側的表達式左值也可以出現在賦值運算符右側,因而左值都可以作為右值2/6/202373第3章順序程序設計3.3.2最基本的語句—賦值語句賦值表達式中的“表達式”,又可以是一個賦值表達式。例如:a=(b=5)分析:括號內的“b=5”是一個賦值表達式,它的值等于5。執(zhí)行表達式“a=(b=5)”相當于執(zhí)行“b=5”和“a=b”兩個賦值表達式。賦值運算符按照“自右而左”的結合順序,因此,“(b=5)”外面的括號可以不要,即“a=(b=5)”和“a=b=5”等價。2/6/202374第3章順序程序設計3.3.2最基本的語句—賦值語句請分析下面的賦值表達式:(a=3*5)=4*3分析:先執(zhí)行括號內的運算,將15賦給a,然后執(zhí)行4*3的運算,得12,再把12賦給a。最后a的值為12,整個表達式的值為12。可以看到:(a=3*5)出現在賦值運算符的左側,因此賦值表達式(a=3*5)是左值。不能寫成:a=3*5=4*32/6/202375第3章順序程序設計3.3.2最基本的語句—賦值語句賦值表達式也可以包含復合的賦值運算符。如:a+=a-=a*a 假設a的值為12分析:此賦值表達式的求解步驟如下①先進行“a-=a*a”的運算,它相當于a=a-a*a,a的值為12-144=-132。②再進行“a+=-132”的運算,相當于a=a+(-132),a的值為-132-132=-264。2/6/202376第3章順序程序設計3.3.2最基本的語句—賦值語句將賦值表達式作為表達式的一種,使賦值操作不僅可以出現在賦值語句中,而且可以以表達式形式出現在其他語句(如輸出語句、循環(huán)語句等)中。如:printf("%d",a=b);分析:如果b的值為3,則輸出a的值(也是表達式a=b的值)為3。在一個語句中完成了賦值和輸出雙重功能。2/6/202377第3章順序程序設計3.3.*逗號運算符和逗號表達式逗號運算符:逗號將兩個表達式連接起來,又稱為“順序求值運算符”,如:3+5,6+8一般形式:表達式1,表達式2求解過程:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。2/6/202378第3章順序程序設計3.3.*逗號運算符和逗號表達式例:逗號表達式a=3*5,a*4分析:賦值運算符的優(yōu)先級別高于逗號運算符,因此應先求解a=3*5。a的值為15,然后求解a*4,得60。整個逗號表達式的值為60。2/6/202379第3章順序程序設計3.3.*逗號運算符和逗號表達式一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式如:(a=3*5,a*4),a+5先計算出a的值等于15,再進行a*4的運算得60(但a值未變,仍為15),再進行a+5得20,即整個表達式的值為20。2/6/202380第3章順序程序設計3.3.*逗號運算符和逗號表達式逗號表達式的一般形式可以擴展為表達式1,表達式2,表達式3,……,表達式n整個逗號表達式的值為表達式n的值。逗號運算符是所有運算符中級別最低的①x=(a=3,6*3)②x=a=3,6*3賦值表達式,將一個逗號表達式的值賦給x,x的值等于18逗號表達式,包括一個賦值表達式和一個算術表達式,x的值為3,整個逗號表達式的值為18。2/6/202381第3章順序程序設計3.3.*逗號運算符和逗號表達式注意:并不是任何地方出現的逗號都是作為逗號運算符。例如函數參數也是用逗號來間隔的。如:printf("%d,%d,%d",a,b,c);printf("%d,%d,%d",(a,b,c),b,c)a,b,c并不是一個逗號表達式,它是printf函數的3個參數(a,b,c

)是一個逗號表達式,它的值等于c的值。2/6/202382第3章順序程序設計舉例例:x=0,y=100x=5*8,6+9x=1,y=99,z=(x+y)*5x=(i=10,j=5,i*j)x=i=10,j=5,i*j先后給x,y的賦值,表達式的值為100先把x賦值為40,表達式的值為15給x,y賦值后,計算z的值,表達式的值為500等價于x=50先給x,i賦值,再給j賦值,計算i*j,表達式的值為502/6/202383第3章順序程序設計3.4數據的輸入輸出3.4.1輸入輸出舉例3.4.2有關數據輸入輸出的概念3.4.3用printf函數輸出數據3.4.4用scanf函數輸入數據3.4.5字符數據的輸入輸出2/6/202384第3章順序程序設計3.4.2有關數據輸入輸出的概念(1)所謂輸入輸出是以計算機主機為主體而言的從計算機向輸出設備(如顯示器、打印機等)輸出數據稱為輸出從輸入設備(如鍵盤、磁盤、光盤、掃描儀等)向計算機輸入數據稱為輸入2/6/202385第3章順序程序設計3.4.2有關數據輸入輸出的概念(2)C語言本身不提供輸入輸出語句輸入和輸出操作是由C標準函數庫中的函數來實現的printf和scanf不是C語言的關鍵字,而只是庫函數的名字putchar、getchar、puts、gets2/6/202386第3章順序程序設計3.4.2有關數據輸入輸出的概念(3)在使用輸入輸出函數時,要在程序文件的開頭用預編譯指令

#include<stdio.h>

或#include"stdio.h"<stdio.h>只在標準庫目錄查找stdio.h

"stdio.h"先在用戶目錄查找stdio.h,再到標準庫目錄里查找2/6/202387第3章順序程序設計3.4.3用printf函數輸出數據在C程序中用來實現輸出和輸入主要是printf函數和scanf函數這兩個函數是格式輸入輸出函數用這兩個函數時,必須指定格式2/6/202388第3章順序程序設計3.4.3用printf函數輸出數據格式輸出函數函數作用:向終端(或系統隱含指定的輸出設備)輸出若干個任意類型的數據。一般格式:printf(格式控制,輸出表列)%d:以帶符號的十進制形式輸出整數%o:以八進制無符號形式輸出整數%x:以十六進制無符號形式輸出整數2/6/202389第3章順序程序設計3.4.3用printf函數輸出數據格式控制字符串:1、普通字符:原樣輸出。2、格式說明符:%[<附加格式符>]格式字符,將輸出列表中的數據轉換為指定格式輸出。例:printf("

a+b=%5.2f,x=%d\n",c,

10);格式控制字符串輸出表列輸出表列:需要輸出的數據列表,彼此間用逗號分隔??墒侨我夂戏ǖ淖兞?、常量或表達式。2/6/202390第3章順序程序設計3.4.3用printf函數輸出數據

printf("a+b=%5.2f",c);附加格式符格式符輸出表列普通字符格式說明符格式控制2/6/202391第3章順序程序設計3.4.3用printf函數輸出數據%u:以無符號十進制形式輸出整數%c:以字符形式輸出,只輸出一個字符%s:輸出字符串%f:以小數形式輸出單/雙精度數,隱含輸出六位小數%e:以指數形式輸出實數%g:選用%f或%e格式中輸出寬度較短的一種格式,不輸出無意義的0課本p70請重點學習2/6/202392第3章順序程序設計3.4.3用printf函數輸出數據舉例:讀程序,寫結果。voidmain(){inta=6,b=10;doublex=2.3,y=1.58;printf("a=%d,b=%3d\n",a,b);printf("x=%f,y=%6.2f",x,y);}運行結果:

a=6,b=10x=2.300000,y=1.582/6/202393第3章順序程序設計voidmain(){int

a,b,c,k;doublex=214.83632;charch='a';a=-3;b=8765;c=12;k=-1;

printf("%d\n",a);

printf("%d,%u\n",k,k);printf("|%-6d|\n",b);printf("%4.2f\n",x);

printf("k=%%d\n",c);

printf("%x,%o\n",ch,ch,c);}運行結果為:-3-1,65535|8765|214.84k=%d61,1412/6/202394第3章順序程序設計voidmain(){intk=017,g=111,a=4,b=7,m=7,n=4;floatx=38.4,y=6.4,z;charc='a';c--; z=m/2+n*x/y+1/2;printf("%d\n%x\n",++k,g++);printf("%d\n",(a=a+1,b+a,b+1));printf("%d\n",a=a+1,b+a,b+1);printf("%d,%c\n",c+'2'-'0',c+'9'-'6');printf("%f\n",z);}運行結果為:166f8698,c27.000000八進制2/6/202395第3章順序程序設計3.4.3用printf函數輸出數據使用說明(1)格式控制中的格式說明符,必須按從左到右的順序,與輸出表中的每個數據一一對應,否則出錯。

printf("f=%d,i=%f\n",5.6,3);

輸出結果:f=26214,i=0.000000(2)輸出%

printf("%%");2/6/202396第3章順序程序設計3.4.3用printf函數輸出數據使用說明(3)格式字符緊跟在“%”后面就作為格式字符,否則將作為普通字符使用(原樣輸出)。

printf("c=%c,f=%ff\n",'a',1.5);

其中的第一個c和f,第三個f,都是普通字符。(4)格式字符除x、e、g以外,其它格式字符必須用小寫字母。如:%f不能寫成%F。2/6/202397第3章順序程序設計3.4.4用scanf函數輸入數據格式輸入函數函數作用:按照變量在內存的地址將變量值存進去。一般格式:scanf(格式控制,地址表列)同printf函數是由若干個地址組成的表列,可以是變量的地址,或字符串的首地址2/6/202398第3章順序程序設計3.4.4用scanf函數輸入數據#include<stdio.h>voidmain(){

int

a,b,c;

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

printf("%d,%d,%d\n",a,b,c);}運行情況:

345 (輸入a,b,c的值)

3,4,5 (輸出a,b,c的值)&是地址運算符,不能少!格式控制地址列表2/6/202399第3章順序程序設計3.4.4用scanf函數輸入數據使用scanf函數時應注意的問題:(1)scanf函數中的“格式控制”后面應當是變量地址,而不應是變量名。(2)如果在“格式控制”字符串中除了格式說明以外還有其他字符,則在輸入數據時在對應位置應輸入與這些字符相同的字符。(3)在用“%c”格式輸入字符時,空格字符和“轉義字符”都作為有效字符輸入。(4)在輸入數據時,遇以下情況時認為該數據結束:①遇空格,或按“回車”或“跳格”(Tab)鍵;②按指定的寬度結束,如“%3d”,只取3列;③遇非法輸入。2/6/2023100第3章順序程序設計其他說明格式符中無普通字符時,可用空格、Tab鍵、回車鍵作分隔符如:scanf("%d%d%d",&a,&b,&c);輸入:10(空格)20(空格)30(回車鍵)

10(回車鍵)20(回車鍵)30(回車鍵)

10(tab鍵)20(tab鍵)30(回車鍵) 則:10a20b30c,以回車鍵代表輸入結束。但是輸入:10,20,30 (回車鍵) 則:a=10b=64c=3129(b,c中的值是隨機值)2/6/2023101第3章順序程序設計其他說明用c格式符輸入字符時,空格、回車、轉義字符等均為有效字符。

例:chara,b,c;

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

鍵入ABC

則a='A',b='B',c='C'

若鍵入:ABC

則a='A',b=''(空格),c='B'

若鍵入ABC未送,系統已經認為輸入結束了,則:a='A',b='\n'(換行符),c='B'2/6/2023102第3章順序程序設計其他說明若不同類型的數據混合輸入時如scanf("%d%f%c",&n,&f,&c);

使n=1234f=123.26c='a'

若輸入:1234123.26a

則1234n,123.26f,'a'c2/6/2023103第3章順序程序設計其他說明在格式控制中除格式說明符外若還有其它字符,則應按順序原樣輸入。例:scanf("%d,%f",&a,&b);必須輸入:21,28.5又如:scanf("a=%d,

b=%d,

c=%d",&a,&b,&c);

必須輸入:a=34,b=58,

c=1002/6/2023104第3章順序程序設計其他說明可以指定輸入數據所占列數,系統自動按它截取所需數據。如:scanf("%3d%3d",&a,&b);

輸入:123456

則:123a,456b scanf("%3c",&ch)

輸入abc

,則'a'

ch2/6/2023105第3章順序程序設計其他說明%后的“*”附加說明符,用來表示跳過相應的數據。如:scanf("%2d%*3d%2d",&a,&b);

輸入1234567則將12a,67b,345被跳過輸入數據時不能規(guī)定精度。 如:scanf("%7.2f",&a);錯誤2/6/2023106第3章順序程序設計3.4.4用scanf函數輸入數據3.使用scanf函數時應注意的問題scanf("%f%f%f",a,b,c);錯scanf("%f%f%f",&a,&b,&c);對對于scanf("a=%f,b=%f,c=%f",&a,&b,&c);

132↙

a=1,b=3,c=2↙

a=1b=3c=2↙

錯2/6/2023107第3章順序程序設計3.4.4用scanf函數輸入數據3.使用scanf函數時應注意的問題對于scanf("%c%c%c",&c1,&c2,&c3);

abc↙

abc↙

錯對于scanf("%d%c%f",&a,&b,&c);若輸入

1234a123o.26↙2/6/2023108第3章順序程序設計舉例p83,5題用下面的scanf輸入數據,使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a',問在鍵盤上如何輸入?voidmain(){ int

a,b; floatx,y; charc1,c2;

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

scanf("%f%e",&x,&y); scanf("%c%c",&c1,&c2);}a=3b=78.571.82Aa2/6/2023109第3章順序程序設計3.4.5字符數據的輸入輸出一、字符輸出函數一般形式:putchar(c)函數作用:向終端輸出一個字符(1)c可以是字符常量、字符變量或整型變量。(2)該函數包含在stdio.h庫中,因此應在使用該函數的程序開頭加入:

溫馨提示

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

評論

0/150

提交評論