第2章 順序結構程序設計_第1頁
第2章 順序結構程序設計_第2頁
第2章 順序結構程序設計_第3頁
第2章 順序結構程序設計_第4頁
第2章 順序結構程序設計_第5頁
已閱讀5頁,還剩96頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第2章順序結構程序設計2.1引例2.2數據的表現形式2.3基本運算2.4常用數學庫函數2.5數據輸入輸出2.1引例【例2.1】編寫程序,輸入一個學生的數學、英語、計算機成績,計算這位學生的總分和平均分,并輸出。(注:科目成績和總分都是整數,平均分可以保留1位小數。)【問題分析】這個問題的算法很簡單,先輸入科目成績,再將3個成績加起來求總分,再用總分除以3求平均分;最后輸出結果。這是一個簡單的順序結構。

2.1引例【例2.1】編寫程序,輸入一個學生的數學、英語、計算機成績,計算這位學生的總分和平均分,并輸出。(注:科目成績和總分都是整數,平均分可以保留1位小數。)輸入3門成績計算總分計算平均分輸出總分、平均分圖2-1算法流程圖#include<stdio.h> intmain(void) { intMaScore,EnScore,CScore,sum;

floataver; printf("InputMathscore,Englishscore,Computerscore:\n");

scanf("%d%d%d",&MaScore,&EnScore,&CScore);

sum=MaScore+EnScore+CScore;

aver=sum/3.0;

printf("Thesumis%d\nTheaverageis%.1f\n",sum,aver);

return0; }2.2數據的表現形式2.2.1標識符2.2.2數據類型2.2.3不同類型的常量2.2.4不同類型的變量2.2.5符號常量和常變量標識符標識符是一個字符序列,用來標識操作、變量、函數、數據類型等。標識符命名的規則如下: (1)標識符由英文字母(包括大小寫字母)、數字(0~9)和下劃線(_)組成,并且必須由字母或下劃線開頭。 (2)標識符中的字符個數不能超過規定長度(因系統而不同,C89規定不超過31個字符,C99規定不超過63個字符)。 (3)C語言中的標識符嚴格區分大小寫,即int和Int、INT表示不同的標識符。標識符標識符包括三類:關鍵字、預定義標識符、用戶自定義的標識符。類型名int、float屬于C語言關鍵字,表示兩種不同的數據類型,int表示整數類型,float表示單精度浮點類型;而變量名MaScore、EnScore、CScore、sum、aver屬于用戶自定義的標識符;庫函數名printf屬于預定義標識符。數據類型C語言允許使用的數據類型:基本類型整型類型基本整型短整型長整型雙長整型字符型布爾型浮點類型單精度浮點型雙精度浮點型復數浮點型數據類型C語言允許使用的數據類型:基本類型枚舉類型空類型派生類型指針類型數組類型結構體類型共用體類型函數類型算術類型純量類型【例2.2】下面這個程序用于計算并顯示每種數據類型所占內存空間的大小。#include<stdio.h>intmain(void){ printf("Datatype Numberofbytes\n"); printf("---------------------------------------\n"); printf("char %d\n",sizeof(char)); printf("int %d\n",sizeof(int)); printf("shortint %d\n",sizeof(short)); printf("longint %d\n",sizeof(long)); printf("float %d\n",sizeof(float)); printf("double %d\n",sizeof(double)); return0;}這個程序在TurboC2.0編譯環境下的運行結果如下:而在VisualC++6.0編譯環境下的運行結果如下:不同類型的常量

常量,就是在程序中不能改變其值的量整型常量 整型常量包括正整數、負整數和零在內的所有整數不同類型的常量

常量,就是在程序中不能改變其值的量2.浮點類型常量 浮點類型,也稱為實型,是帶小數點的十進制數據,它可以是包含一個小數點的數字、0或任何正數和負數。不同類型的常量

常量,就是在程序中不能改變其值的量3.字符類型常量

(1)普通字符 如’A’,’?’ (2)轉義字符 如’\n’,‘\101‘,’\x41’不同類型的常量字符常量不是任意寫一個字符,程序都能識別的。例如圓周率π在程序中就是不能識別的,我們只能使用系統的字符集(一般采用ASCII字符集)中的字符。ASCII字符集的基本集包括了127個字符。其中包括:字母:大寫英文字母A~Z,小寫英文字母a~z。數字:0~9。專門字符:29個空格符:空格、水平制表符(tab)、垂直制表符、換行、換頁(formfeed)。不能顯示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回車(以‘\r’表示)等。詳見附錄B(ASCII字符表)

不同類型的常量字符常量存儲在計算機存儲單元中時,是以整數形式(字符的ASCII代碼)存放在內存單元中的。例如:大寫字母‘A’的ASCII代碼:十進制形式為65二進制形式為1000001小寫字母‘a’的ASCII代碼:十進制形式為97二進制形式為1100001不同類型的常量特別注意:字符‘1’和整數1是不同的概念,字符‘1’只是代表一個形狀為‘1’的符號,在內存中以ASCII代碼形式存儲,占1個字節。整數1是以整數存儲方式(二進制補碼方式)存儲的,占2個或4個字節。不同類型的常量

常量,就是在程序中不能改變其值的量4.字符串常量 字符串常量是由雙撇號括起來的全部字符(不包括雙撇號本身)

如”boy”注意:單撇號內只能包含一個字符,雙撇號內可以包含任意多個字符。不同類型的變量

變量代表一個有名字的、具有特定屬性的一個存儲單元。它用來存放數據,也就是存放變量的值,其值在程序執行過程中是可以改變的。變量在使用之前必須先聲明后使用,變量聲明的一般形式為:數據類型變量名;

不同類型的變量

1.整數類型變量【例2.3】下面程序聲明了一個整型變量a,然后為其賦值為整型常量4。#include<stdio.h> intmain(void) { inta; /*聲明int類型變量a*/ a=4; /*為a變量賦值*/ printf("%d\n",a);/*將a的值在%d處替換顯示*/ return0; }不同類型的變量

2.浮點類型變量【例2.4a】下面程序聲明了一個float類型的變量a和一個double類型的變量b,然后都賦值為浮點型常量5.6。#include<stdio.h>intmain(void){ floata; /*聲明float類型變量a*/ doubleb; /*聲明double類型變量b*/ a=5.6; /*為a變量賦值*/ b=5.6; /*為b變量賦值*/ printf("%f\n%f\n",a,b);/*將a和b的值依次在%f處替換顯示*/ return0;}我們注意到,程序編譯時,會出現如下警告信息:

warningC4305:'=':truncationfrom'constdouble'to'float'

這是因為VC編譯系統把所有的實數都作為雙精度數處理,即系統將浮點型常量5.6是當做雙精度浮點類型即double類型的數據的,而變量a是單精度浮點類型即float類型變量。因此提醒用戶:將double型常量賦值給float型變量可能會造成精度損失。對于本例來說,5.6賦值給float型變量a,并沒有造成精度損失。這個警告不會影響程序運行的結果。【例2.4b】下面程序將float類型的變量a和double類型的變量b都賦值為浮點型常量.1。#include<stdio.h>intmain(void){ floata; /*聲明float類型變量a*/ doubleb; /*聲明double類型變量b*/ a=.1; /*為a變量賦值*/ b=.1; /*為b變量賦值*/ printf("%f\n%f\n",a,b);/*將a和b的值依次在%f處替換顯示*/ return0;}【運行結果】 .000000 .100006為什么將同一個實型常量賦值給單精度實型(float型)變量和雙精度實型(double型)變量后,輸出的結果會有所不同呢?這是因為float型變量和double型變量所接受的實型常量的有效數字位數是不同的。一般而言,double型數據可以接受實型常量的15-16位有效數字,而float型變量僅能接受實型常量的6-7位有效數字,在有效數字后面輸出的數字都是不準確的。不同類型的變量

3.字符類型變量【例2.5】下面程序聲明了一個字符型變量c,然后為其賦值為字符常量'a'。#include<stdio.h>intmain(void){ charc; /*聲明char類型變量c*/ c='a'; /*為c變量賦值*/ printf("%c\n",c);/*將c的值在%c處替換顯示*/ return0;}不同類型的變量

3.字符類型變量printf(“%c\n”,c);/*用%c格式輸出變量c的字符形式*/printf(“%d\n”,c);/*用%d格式輸出變量c的整數形式*/輸出結果為:

a 97不同類型的變量

3.字符類型變量也可以在一行同時輸出變量c的不同形式,如:printf(“%c,%d\n”,c,c);輸出結果為:

a,97不同類型的變量

4.聲明變量時的注意點 ①當變量類型相同時,我們可以在一行同時聲明多個變量:

doublea,b; /*變量之間用逗號分隔*/ ②不同類型的變量分別定義:

inta;doubleb; /*正確,不同類型變量聲明之間用分號隔開*/

不同類型的變量

4.聲明變量時的注意點 ③不同類型的變量不能同時聲明,以下聲明是錯誤的

inta,doubleb; /*錯誤*/ ④同一個變量只能定義一次,以下聲明是錯誤的:

inta; doublea,b; /*錯誤,a重復定義*/不同類型的變量

變量的初始化 聲明一個變量后,第一次為該變量指定值稱為變量的初始化,如果沒給變量初始化,那么它的值是不確定的。 ①先聲明變量,再使用賦值語句給變量賦初值。 例如:

inta,b; a=3; b=2;不同類型的變量

變量的初始化 ②在聲明變量的同時指定初值。例如:

inta=3,b=2; intc=4; ③用從外部讀入數據存入指定的變量中。例如:

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

符號常量和常變量

【例2.6a】編程從鍵盤輸入圓的半徑,計算并輸出求圓的周長和面積。 #include<stdio.h>intmain(void){ doubler,circum,area; printf("Inputr:"); scanf("%lf",&r); circum=2*3.14*r; area=3.14*r*r; printf("circumference=%f\n",circum); printf("area=%f\n",area); return0;}符號常量和常變量

#include<stdio.h>#definePI3.14intmain(void){ doubler,circum,area; printf("Inputr:"); scanf("%lf",&r); circum=2*PI*r; area=PI*r*r; printf("circumference=%f\n",circum); printf("area=%f\n",area); return0;}符號常量符號常量和常變量

#include<stdio.h>intmain(void){

constdoublePI=3.14; doubler,circum,area; printf("Inputr:"); scanf("%lf",&r); circum=2*PI*r; area=PI*r*r; printf("circumference=%f\n",circum); printf("area=%f\n",area); return0;}常變量2.3基本運算

2.3.1算術運算符和表達式2.3.2賦值運算2.3.3自動類型轉換與強制類型轉換2.3.4C語言的其它運算運算符和表達式1.基本的算術運算符:+:正號運算符(單目運算符)-:負號運算符(單目運算符)*:乘法運算符/:除法運算符%:求余運算符+:加法運算符-:減法運算符運算符和表達式運算符和表達式例如,在下面的語句中

a=-5*3+1-4等價于:

a=(-5)*3+1-4而不等價于

a=-(5*3+1-4)運算符和表達式說明:兩個整數相除的結果為整數如5/3的結果值為1,舍去小數部分%運算符要求參加運算的運算對象(即操作數)為整數,結果也是整數。如8%3,結果為2運算符和表達式運算結果

5/225.0/22.59.3/3.13.0

運算結果

7%317.0%3系統報錯【例2.7】計算并輸出一個三位整數的個位、十位和百位數字之和。【問題分析】要計算一個三位整數的個位、十位和百位數字值,首先必須從一個三位整數中分離出它的個位、十位和百位數字,我們可以巧妙利用整數除法和求余運算符解決這個問題。例如: 整數357的個位數字是7,它剛好是357對10求余的余數,即357%10=7

整數357的百位數字是3,它剛好是357整除100的結果,即357/100=3

而中間的十位數字5可以通過兩種方法得到: (357-3*100)/10=57/10=5或(357/10)%10=35%10=5 #include<stdio.h>intmain(void){ intn,a,b,c,sum; n=357; a=n/100; /*計算百位數字*/ b=(n-a*100)/10; /*計算十位數字*/ c=n%10; /*計算個位數字*/ sum=a+b+c; printf("n=%d,sum=%d\n",n,sum);

return0;}運算符和表達式2.自增、自減運算符:作用是使變量的值增1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1inti=3,j;j=++i;printf("%d,%d\n",i,j);輸出的是4,4運算符和表達式2.自增、自減運算符:作用是使變量的值增1或減1++i,--i:在使用i之前,先使i的值加(減)1i++,i--:在使用i之后,使i的值加(減)1inti=3,j;j=i++;printf("%d,%d\n",i,j);輸出的是4,3運算符和表達式2.自增、自減運算符:m=-n++;該語句等價于

m=-(n++);而不等價于

m=(-n)++;這是一個不合法的操作,因為不能對表達式進行自增操作。賦值運算符和表達式由賦值運算符“=”和操作數組成的合法表達式稱為賦值表達式。例如 a=3是一個賦值表達式,而一個賦值表達式加一個分號稱為賦值語句,那么 a=3;就稱為一條賦值語句。 賦值運算符和表達式 賦值運算符“=”的左邊必須是一個變量。判斷以下的表達式是否正確: x=x+3 a+b=8 3=x–4 y=c+5

賦值表達式的值與類型賦值表達式也有值和類型賦值表達式的值就是“=”左側變量的值,其類型與變量的類型一致。例:a=b=5+(c=d=10)復合賦值運算復合賦值運算符是在賦值運算符“=”前面加上另一個運算符構成的。 例:a+=b 中的“+=”就是復合賦值運算符 等同于a=a+b復合賦值運算復合賦值運算復合賦值運算符的優先級很低,結合方向為從右向左。假如定義變量: inta=4,b=5,c=6; 執行下列語句后,變量a的值為多少?

a*=b-=c+3;自動類型轉換與強制類型轉換

表達式中的自動類型轉換 假設已定義變量inti=3;floatf=4.5;doubled=6.9;分析以下表達式的結果類型: ‘a’+10+i*f-d/3圖2-7自動類型轉換規則自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(1)將浮點型(float、double)數據賦給整型變量,將浮點型數據轉換成整型,去掉其小數部分,再賦予整型變量。如:

intx;x=4.6;自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(2)將整型數據賦值給浮點型(float、double)變量,保持整型數據數值不變,轉換成浮點型(float、double)數據,再賦值給整型變量。如:

floatf;f=100;自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(3)將float類型數據賦值給double類型變量,保持float類型數據數值不變,將其轉換成double類型,即擴展至8個字節存儲空間,有效位數擴展到15位,再賦值給double類型變量。

自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(4)將double類型數據賦值給float類型變量,將double類型轉換為float類型,即只取6~7位有效數字,存儲到float類型變量的4個字節中。應注意double類型數值大小不能超出float類型變量的數值范圍,如:doubled=1.100000000004e100;floatf;/*定義float類型變量f*/f=d;/*將d的值賦給變量f,錯誤*/自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(5)將字符型數據(char)賦給整型變量,將字符的ASCII碼賦給整型變量,如:

inti;/*定義整型變量i*/i=‘a’;/*將’a’的ASCII碼97賦給i,i值為97*/自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(6)將較短的整型數據(包括字符型)賦給較長的整型變量,如將shortint型數值賦給longint型,擴展較短整型數的表示位數再賦值

自動類型轉換與強制類型轉換

2.賦值運算中的自動類型轉換(7)將較長整型數據賦值給較短整型變量或字符變量,如將int型數據賦值給char型變量,發生截斷操作,只保留其低字節,舍棄高位部分。

自動類型轉換與強制類型轉換

3.強制類型轉換形式如下:(數據類型)表達式inti=1,j=5;doublef=4.5;f=(double)i/j;i=(int)4.3%(int)f+3;

C語言的其它運算

(1)算術運算符+-*/%+(正號)-(負號)(2)自增自減運算符++--(3)關系運算符><==>=<=!=(4)邏輯運算符!&&||(5)賦值運算符=+=-=*=/=%=以及其它擴展復合賦值運算(6)位運算符<<>>~|∧&(7)條件運算符?:(8)逗號運算符,(9)指針運算符*&(10)求字節數運算符sizeof()(11)成員運算符.->(12)下標運算符[]2.4常用數學庫函數2.4常用數學庫函數【例2.8】已知直角三角形的兩直角邊長a和b,計算斜邊長度的公式為:

c=【問題分析】將計算斜邊的數學公式寫成如下合法的C語言表達式:

c=sqrt(pow(a,2)+pow(b,2))見附錄E2.4常用數學庫函數【例2.8】已知直角三角形的兩直角邊長a和b,計算斜邊長度的公式為:

c=【解題步驟】輸入兩個直角邊長a和b;利用公式計算斜邊長度c; c=sqrt(pow(a,2)+pow(b,2))3.輸出三邊長a,b,c2.4常用數學庫函數#include<stdio.h>#include<math.h>/*使用數學庫函數,要包含math.h頭文件*/intmain(void){ doublea,b,c;a=3; b=4; c=sqrt(pow(a,2)+pow(b,2));

printf("a=%f,b=%f,c=%f\n",a,b,c);

return0;}2.5數據的輸入輸出2.5.1格式化輸出函數printf()2.5.2格式化輸入函數scanf()2.5.3字符數據的輸入輸出函數格式化輸出函數printf()函數printf()的一般形式printf(格式控制字符串,輸出值參數列表)例如:printf(“a=%d,b=%f\n”,a,b)格式化輸出函數printf()【例2.9】在屏幕輸出如下一行歡迎信息。

Welcome!【程序代碼】#include<stdio.h>intmain(void){printf(“Welcome!\n”);return0;}格式化輸出函數printf()【例2.10】輸出不同類型的數據。【程序代碼】#include<stdio.h>intmain(void){ inta=4; floatb=5.2; charc='M'; printf("a=%d,b=%f,c=%c\n",a,b,c);return0;}格式化輸出函數printf()2.格式聲明格式聲明的形式為:

%附加字符格式字符格式化輸出函數printf()(1)d格式字符【例2.11】用%d格式符輸出帶符號十進制整數。#include<stdio.h>intmain(void){ inta=123,b=-456; charc='M'; printf("%d,%d,%d.\n",a,b,c);

printf("%5d,%5d,%5d.\n",a,b,c); printf("%-5d,%-5d,%-5d.\n",a,b,c); printf("%5d,%5d,%5d.\n",123,-456,'M');

return0;}格式化輸出函數printf()(2)c格式字符【例2.12】用%c格式符輸出字符。#include<stdio.h>intmain(void){ charc='M'; inta=77; intb=333; printf("%c,%c,%c.\n",c,a,b);

printf("%5c,%5c,%5c.\n",c,a,b);

return0;}格式化輸出函數printf()(3)f格式字符【例2.13】用%f格式符以小數形式輸出浮點數。#include<stdio.h>intmain(void){ floata=5432.16; floatb=2.123456789; doubled=2.123456789; printf("%f,%f,%f.\n",a,b,d);

printf("%6.4f,%20.15f,%20.15f.\n",a,b,d); printf("%-6.4f,%-20.15f,%-20.15f.\n",a,b,d);

return0;}格式化輸出函數printf()

(4)e格式字符【例2.14】用%e格式符以指數形式輸出浮點數#include<stdio.h>intmain(void){ doubled=123.765; printf("%e\n",d); printf("%15.2e\n",d); return0;}格式化輸入函數scanf()

1.函數scanf()的一般形式

scanf(格式控制字符串,地址列表)格式化輸入函數scanf()

【例2.15】輸入不同類型的數據。#include<stdio.h>intmain(void){ inta;floatf; charc; doubled; scanf("%d%f%c%lf",&a,&f,&c,&d);

printf("a=%d,f=%f,c=%c,d=%f.\n",a,f,c,d);

return0;}格式化輸入函數scanf()

2.格式控制字符串與printf()函一樣,scanf()函數的格式控制字符串中,格式聲明如下:%附加字符格式字符格式化輸入函數scanf()

3.用scanf()函數輸入數據應注意的問題(1)scanf函數中的“格式控制”后面應當是變量地址,而不是變量名。(2)如果格式控制字符串中只有格式聲明,輸入的時候要注意: 輸入數值時,要在兩個數值之間插入空格(或其他分隔符),以使系統能區分兩個數值。 輸入字符時,不要再插入空格(或其他分隔符),因為空格(或其他分隔符)會當做輸入的字符存儲到字符變量中。例如:scanf("%d%f%c%lf",&a,&f,&c,&d);若輸入

12.3M4.56(4個數據之間都有一個空格)就出錯了格式化輸入函數scanf()

3.用scanf()函數輸入數據應注意的問題(3)格式控制字符串中除了格式字符和附加字符,還可以有一些普通字符。

scanf(“a=%d,f=%f,c=%c,d=%lf”,&a,&f,&c,&d);執行時應輸入:

a=1,f=2.3,c=M,d=4.56正確若輸入:

a=1f=2.3c=Md=4.56錯誤格式化輸入函數scanf()

3.用scanf()函數輸入數據應注意的問題(4)使用指定域寬輸入數據。 如該scanf語句改為:

scanf(“%2d%3f%3lf”,&a,&f,&d);執行時輸入:

123.45.6(按指定域寬輸入數據,正確)格式化輸入函數scanf()

3.用scanf()函數輸入數據應注意的問題(5)輸入數值數據時,輸入非數值字符,認為該數據結束。如:

scanf(“%d%d”,&a,&b);執行時輸入:

123o則1賦給變量a,23賦給變量b,字符’o’認為數據結束。若輸入:

123o格式化輸入函數scanf()

3.用scanf()函數輸入數據應注意的問題(6)輸入字符型數據時,空格字符和轉義字符中的字符都作為有效字符輸入

scanf(“%c%c%c”,&c1,&c2,&c3);

printf(“c1=%c\nc2=%c\nc3=%c\n”,c1,c2,c3);執行時輸入:

abc(字符間沒有空格,正確)輸出為: c1=a c2=b c3=c若輸入: abc(字符間插入空格,賦值錯誤)則輸出為:c1=a c2=□(□表示空格)

c3=b

字符數據的輸入輸出函數

用putchar函數輸出一個字符 putchar函數的作用是向顯示器輸出單個字符常量或字符變量的值,它的一般形式為: putchar(字符常量或變量)【例2.16】用pu

溫馨提示

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

評論

0/150

提交評論