




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C程序設計第1章C語言概述第2章數據類型與數據對象第3章運算與操作第4章根本程序結構第5章分支結構第6章分支結構C程序設計第1章C語言概述提綱1.1C語言簡介1.2C語言的關鍵字和標識符1.3C程序根本結構1.4C程序開發流程1.5TurboC3.0上機環境與根本操作1.6VisualC++6.0上機環境與根本操作1.1C語言簡介C語言歷史Ritchie&Kernighan〔BellLabs.〕從B語言脫胎而來為開發UNIX而設計C語言標準ANSIC標準化委員會:1983ANSIC:C89ISO/IEC9899:1990:C90C99C語言特點中級語言:介于高級語言與低級語言之間高級語言的結構化與模塊化低級語言的控制性與靈活性結構化順序結構、分支結構、循環結構模塊化函數、函數庫可移植性1.2C語言的關鍵字和標識符字符集〔ASCII碼字符集〕大小寫英文字母數字特殊符號標識符關鍵字預定義標識符標識符標識符定義以下劃線或英文字母開頭區分大小寫例:Prog
與prog
是兩個不同的標識符除了開頭字母,標識符中其他字符可以使用下劃線、字母、數字按照任意形式書寫,不允許空格有效標識符:programming、_id_、Windows_Vista無效標識符:0xff、標識符定義技巧使用下劃線增強可讀性:a_very_long_identifierC未規定標識符長度,建議不超過31個字符,并盡可能簡短標識符不允許同名標識符的命名應盡可能表達其意義,增強程序可讀性關鍵字關鍵字定義程序中預先定義的標識符,在語言中具有特殊意義不允許定義與關鍵字同名的標識符關鍵字列表預定義標識符:庫函數名與預編譯指令define、undef、include、ifdef、ifndef、endif、lineautobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile1.3C程序根本結構編寫程序,顯示字符串"HelloWorld!"#include<stdio.h>intmain(){printf("HelloWorld!\n");return0;}主函數的函數頭,全局惟一預編譯指令,包含標準頭文件函數體,花括號內為語句序列標準庫函數,在輸出設備〔一般為屏幕〕上輸出一行文本函數調用,需要了解該函數原型,即函數如何使用的細節信息;printf函數原型位于"stdio.h"中,故需包含該頭文件雙引號內為字符串內容;‘\n’為轉義字符,表示換行分號表示語句結束函數結束執行,程序退出數據對象編寫程序,計算用戶輸入的兩個整數之和#include<stdio.h>intmain(){inta,b,sum;printf("Theprogramaddstwointegers.\n");printf("Thefirstnumber:");scanf("%d",&a);printf("Thesecondnumber:");scanf("%d",&b);sum=a+b;printf("%d+%d=%d\n",a,b,sum);return0;}數據的輸入與存儲absum數據的輸入與存儲1absum數據的輸入與存儲12absum數據的輸入與存儲123absumC程序結構特點由一個或多個函數組成具有惟一一個主函數main程序執行由主函數開始,其他函數由主函數調用或間接調用程序執行流程與函數定義順序無關每個函數包含函數頭與函數體兩局部C標準庫包含大量庫函數,程序員可直接使用庫函數原型位于相應頭文件中,使用函數前必須包含該頭文件1.4程序設計的根本流程1.5TurboC環境TurboC集成開發環境文件的創立和保存源文件的編輯編譯與鏈接程序的執行TurboC用戶界面文件的創立和保存使用File|New命令創立文件新文件缺省名noname00.cpp,使用你的文件名代替,擴展名使用.c,確保系統按照C語言而不是C++格式編譯源文件創立文件新文件缺省名noname00.cpp保存文件使用你的文件名代替,擴展名使用.c,確保系統按照C語言而不是C++格式編譯源文件翻開文件輸入目錄和文件名,或者選擇目錄和文件名,翻開指定的源文件或頭文件編輯文件使用Edit菜單編輯和修改源文件編輯文件使用Edit菜單編輯和修改源文件注意:TurboC環境中的快捷鍵與Windows操作系統不同查找文件使用Search菜單查找和替換文本內容編譯和鏈接文件使用Compile菜單編譯和鏈接程序Compile:只編譯;Make:編譯和鏈接;Link:鏈接;Buildall:強制編譯和鏈接全部文件運行程序使用Run菜單運行程序Run:直接運行;Gotocursor:運行到光標處停止;Traceinto:進入函數內部調試;Stepover:直接運行函數體,跳過其調試VisualC++集成開發環境TurboC集成開發環境文件的創立和保存源文件的編輯編譯與鏈接程序的執行VisualC++用戶界面文件的創立和保存編譯和鏈接作業第18頁第2、3題C程序設計第2章數據類型與數據對象提綱2.1數據類型概述2.2整數類型2.3實數類型2.4字符類型2.5常數2.6變量2.7常量2.8用戶自定義類型2.1數據類型概述2.2整數類型整數類型定義a為整數:inta;整數的符號:確定是否表示負數signed、unsigned定義b為無符號整數:unsignedintb;整數的長短:確定整數取值范圍的大小long、short定義c為短整數:shortintc;整數的取值范圍類型標識符名字長度(位)取值范圍int整型16或32-215~215-1或-231~231-1singnedint(同int)有符號整型16或32-215~215-1或-231~231-1unsignedint無符號整型16或320~216-1或0~232-1shortint(同short)短整型16-215~215-1signedshortint(同short)有符號短整型16-215~215-1unsignedshortint無符號短整型160~216-1longint(同long)長整型32-231~231-1singnedlongint(同long)有符號長整型32-231~231-1unsignedlongint無符號長整型320~232-12.3實數類型單精度實數:float有效位數:7雙精度實數:double有效位數:16實數的取值范圍最小數與最大負數,0,最小正數與最大數最大負數與0以及0與最小正數之間的數無法表示建議使用double,不要使用floatdouble類型的使用編寫程序,計算用戶輸入的兩個實數之和#include<stdio.h>intmain(){doublea,b,sum;printf("Theprogramaddstworealnumbers.\n");printf("Thefirstrealnumber:");scanf("%lf",&a);//使用“%lf〞處理雙精度實數printf("Thesecondrealnumber:");scanf("%lf",&b);sum=a+b;printf("%lf+%lf=%lf\n",a,b,sum);return0;}float類型的使用編寫程序,計算用戶輸入的兩個實數之和#include<stdio.h>intmain(){floata,b,sum;printf("Theprogramaddstworealnumbers.\n");printf("Thefirstrealnumber:");scanf("%f",&a);//使用“%f〞處理單精度實數printf("Thesecondrealnumber:");scanf("%f",&b);sum=a+b;printf("%f+%f=%f\n",a,b,sum);return0;}2.4字符類型字符類型定義格式:charch;實際存儲時字符類型量存儲字符的對應ASCII值可使用signed與unsigned修飾字符類型字符類型的取值范圍類型標識符名字長度(位)取值范圍char字符型8字符代碼unsignedchar無符號字符型80至255signedchar有符號字符型8-128~127ASCII碼表01234567890\0??????\a\b\t10\n\v\f\r??????20?§_?↑↓→←┗?30▲▼(Space)!"#$%&'40()*,./015023456789:;60<=>?@ABCDE70FGHIJKLMNO80PQRSTUVWXY90Z[\]^_`abc100defghijklm110nopqrstuvw120xyz{|}~DEL字符類型的使用編寫程序,接受用戶輸入的某個字符并輸出#include<stdio.h>intmain(){charc;printf("Theprogramgetsandprintsacharacter.\n");printf("Pleaseinputacharacter:");scanf("%c",&c);//字符輸入輸出使用“%c〞printf("You'vejustinputedthecharacter'%c'.\n",c);return0;}2.5常數定義:程序中單獨出現的值,也稱文字例:3.14、100
等整數類型常數十進制、十六進制、八進制浮點類型常數字符類型常數字符串類型常數整數類型常數十進制表示:普通整數表示十六進制表示:逢十六進一,無正負號以“0x〞或“0X〞開頭的0~9、A/a~F/f序列例:0x55、0X1F、0x2a0x5516=8510八進制表示:逢八進一,無正負號以“0〞開頭的0~7序列例:0550558=4510注意不要與十進制混淆!浮點數類型常數一般形式:小數表示法由整數局部、小數點與小數局部組成例:3.1416、–2.718281828指數形式:科學計數法由尾數局部、字符‘E’/‘e’與指數局部組成例:3.14e3=3.14103、–2.7E–2=–2.710–2字符類型常數單引號引起來的單個字符例:'C'、'a'單引號是字符常數的界定符,不是內容!字符常數的值:該字符對應的ASCII值可以像普通整數參與運算例:c='A'+2;
//c為字符型變量,結果為'C',值67字符串類型常數雙引號引起來的字符序列例:"ProgramminginC"、"HelloWorld!\n"雙引號是字符串常數的界定符,不是字符串的內容!轉義序列字符串不僅可以包含可打印字符,也可以包含表示特殊活動的特殊字符格式:使用反斜杠開始轉義序列,后跟一個或多個字符轉義序列整體作為單個字符進行處理,樣式固定例:"\n"、"\\"
C語言預定義的轉義序列轉義序列功能與意義\a響鈴\b退格\f換頁\n換行\r返回到當前行首\t水平制表鍵\v垂直制表鍵\0ASCII碼0\\反斜杠字符自身\’單引號字符(僅在字符常數中需要使用此方式)\"雙引號字符(僅在字符串常數中需要使用此方式)\ddd“ddd”表示八進制的該字符ASCII碼值\xhh“hh”表示十六進制的字符ASCII碼值,x為十六進制標志符號常數符號常數的宏定義#define指令:預處理命令格式:#define符號常數常數例:#definePI3.14宏定義不是常量!目的與意義增強程序可讀性使用有意義的名字命名增強程序的可維護性將值定義為符號常數,那么程序中僅需要修改一次#include<stdio.h>#definePI3.1416intmain(){doubleradius,area;//......scanf("%lf",&radius);area=PI*radius*radius;printf("%lf",area);return0;}變量變量的定義變量的使用變量的特征變量的賦值變量的初始化變量的定義先定義再使用定義格式:變量類型變量名稱[,變量名稱];單獨定義例:floatsum;同時定義例:doubleb,c;變量名稱應既有惟一性:不允許重名定義變量的目的在程序執行期間保存待處理的數據、保存中間或最終結果,不同類型的變量保存不同類型的數據變量的使用#include<stdio.h>intmain(){doubleradius;/*定義變量radius為實數類型*/radius=2.1;/*將變量radius賦值為2.1*/radius=2.0*radius;/*radius的值發生變化*/radius=radius+2.2;/*radius的值再次發生變化*/printf(〞%lf〞,m);/*輸出計算結果*/return0;}變量的特征變量的特征:VANT變量總是具有值〔Value〕變量總是與內存中的地址〔Address〕相對應變量總是具有名稱〔Name〕變量總是具有確定的類型〔Type〕變量的存儲表示圖absum變量的賦值賦值表達式格式:變量名稱=表達式例:a=0賦值語句:賦值表達式加分號格式:變量名稱=表達式;例:a=b+c;賦值流程absummain賦值流程1absummaina=1;賦值流程12absummaina=1;b=2;賦值流程123absummaina=1;b=2;sum=a+b;變量的初始化在定義變量時顯示設定變量的值格式:數據類型常量名稱=初始值;例:intzero=0;例:doublep=1.5,d=0.1;//定義p和d為雙精度浮點數類型,初始值分別為1.5和0.1例:floatx,y,z=0.3;//定義x、y、z為實型變量,僅變量z進行了初始化例:charc='a';//定義字符型變量c,其初始值為字符a本卷須知未初始化的變量并不意味值為0:全局變量為0,而局部變量為以前殘存值,可能為0,也可能不為0不能使用未初始化或未賦值的變量參與程序運算常量常量的定義:程序執行期間其值不可改變的量格式:const數據類型常量名稱=初始值;例:constintzero=0;常量的意義解決直接出現的文字無法解釋其意義的問題常量與變量常量不可改變值,其他與變量同定義常量時必須進行初始化!常量初始值必須能夠在編譯期間計算出來優先使用常量而不是符號常數2.8用戶自定義類型枚舉類型typedef
關鍵字枚舉類型枚舉類型的聲明枚舉:一一列舉格式:enum枚舉類型標識符{枚舉文字1,枚舉文字2,…,枚舉文字n};例:enum__BOOL{FALSE,TRUE};例:enum__WEEKDAY{SUN,MON,TUE,WED,THU,FRI,SAT};枚舉類型聲明中的元素為枚舉文字,不是變量枚舉類型枚舉類型變量的定義定義枚舉類型變量時不能省略enum關鍵字!例:enum__BOOLflag;例:enum__WEEKDAYweekday;枚舉類型的變量可以賦值,但只能使用枚舉文字進行賦值,不建議直接使用整數賦值枚舉類型的意義將多個文字組織在一起,表達附屬于特定類型的性質取代魔數,使源代碼更易理解typedef關鍵字自定義類型的格式格式:typedef原類型描述新類型名;例:typedefunsignedintUINT;例:typedefenum__BOOL{FALSE,TRUE}BOOL;例:typedefenum{SUN,MON,TUE,WED,THU,FRI,SAT}WEEKDAY;自定義類型的性質新類型與原類型相同,并未產生新類型,重新命名的自定義類型使程序更易理解假設整數可以用于表示兩類不同數據對象,使用自定義類型可以區分它們自定義類型不是簡單的類型替換,雖然它們確實等同作業第36頁第1題C程序設計第3章運算與操作提綱3.1表達式3.2算術操作符3.3賦值操作符3.4表達式求值3.5逗號操作符3.6混合運算與類型轉換3.1表達式表達式的定義操作數與操作符序列,表達運算過程操作數文字常數與符號常數、量、函數調用、括號操作符:運算邏輯表達式值:運算結果表達式求值:計算表達式值的過程類比:按普通四那么運算理解表達式求值過程,逐一計算表達式中所有操作符,直至完成3.2算術操作符算術操作符加〔+〕、減〔-〕、乘〔*〕、除〔/〕余〔%〕:僅適用于整數特別說明整數除法的結果仍然是整數,余數舍棄,不四舍五入例:7/2結果為3要想得到余數,使用取余操作符例:7%2結果為1取負操作符可以作用在單操作數上例:inta=1;intb=-a;前綴遞增遞減操作符遞增遞減操作符的優先級非常高前綴遞增遞減格式:++變量名稱;--變量名稱;例一:設a為1,++a
等價于a=a+1,a結果為2例二:設a為1,--a
等價于a=a-1,a結果為0計算要訣:先遞增遞減,再參與運算例三:設a為1,b=++a*3
等價于a=a+1;b=a*3,a結果為2,b結果為
6例四:設a為1,b=--a*3
等價于a=a-1;b=a*3,a結果為0,b結果為
0后綴遞增遞減操作符后綴遞增遞減格式:變量名稱++;變量名稱--;例一:設a為1,a++等價于a=a+1,a結果為2例二:設a為1,a--等價于a=a-1,a結果為0計算要訣:先參與運算,再遞增遞減例三:設a為1,b=a++*3等價于b=a*3;a=a+1,a結果為2,b結果為3例四:設a為1,b=a--*3等價于b=a*3;a=a-1,a結果為0,b結果為3本卷須知操作數必須為變量,而不能為其他表達式不要在復雜表達式中使用遞增遞減操作符!3.3賦值操作符賦值操作符〔=〕與賦值表達式例:inta,b;/*變量定義*/ a=a;/*直接給變量賦值*/ b=b+a;/*直接給變量賦值*/例:constdoublepi=3.1416;/*常量定義*/ doublearea,radius;/*變量定義*/ radius=1.3;/*直接給變量賦值*/ area=pi*radius*radius;/*計算右側子表達式的值后再給變量賦值*/賦值語句兼有表達式計算和賦值的雙重功能賦值號將其右邊表達式的結果賦值給左邊的目標變量注意,賦值號左邊一定是變量名〔或等價于變量的數組元素名〕,賦值語句對該變量實施寫操作。當右邊表達式的計算結果類型與左邊變量的類型不一致,那么先將右邊表達式的值轉換為與左邊目標變量相同的類型,然后進行賦值。例如:i=d+1;其中i為int類型,d為double類型。于是此運算的處理過程是先將1轉換為double類型〔1.000000〕,然后執行d+1.000000,結果為double類型,最后再把double類型的結果轉換為int類型再賦給i。當然這種由“長型〞向“短型〞的轉換可能會導致數據精度上的一些損失。例如將浮點數賦值給一個整型變量,會舍棄小數點后面的數據,此種情況稱之為“截斷〞。關于賦值操作符的本卷須知賦值號左邊一定是變量名〔或等價于變量的數組元素名〕,賦值語句對該變量實施寫操作當右邊表達式的計算結果類型與左邊變量的類型不一致時,那么先將右邊表達式的值轉換為與左邊目標變量相同的類型,然后進行賦值例:i=d+1;//i為int類型,d為double類型運算過程:先將1轉換為double類型〔1.000000〕,然后執行d+1.000000,結果為double類型,最后再把double類型的結果轉換為int類型再賦給i注意:轉換過程可能會導致數據精度損失復合賦值表達式加賦:x+=a等價于x=x+a減賦:x-=a等價于x=x-a乘賦:x*=a等價于x=x*a除賦:
x/=a等價于x=x/a除法作用于整數上時,結果也為整數余賦:
x%=a等價于x=x%a%:兩個整數進行整數除法,結果為余數特別說明x*=a+b等價于x=x*(a+b)3.4表達式求值表達式求值順序與數學運算類似,按照操作符的優先級與結合性進行典型運算復合數學直覺特殊運算的優先級難以記憶,使用括號3.5逗號操作符用逗號操作符連接的表達式叫逗號表達式逗號表達式的計算順序從左到右計算每個子表達式的值,結果為最后一個子表達式的值例:z=(x=m+n,y=m–n,x/y);假設m為5,n為3,那么z值為4不建議使用逗號表達式3.6混合運算與類型轉換不同類型數據參與運算時必須統一數據類型才能進行實際運算類型的轉換以不損失精度為一般前提例外情況:偶爾也會損失精度類型轉換的分類隱式類型轉換顯式類型轉換隱式類型轉換與顯式類型轉換隱式類型轉換程序自動進行,程序員不需要干預轉換原那么:一般以不損失精度為前提賦值時右邊表達式值先轉換為變量類型后再進行顯式類型轉換程序員手工進行的類型轉換格式:(轉換后的數據類型)原表達式例:設inta;doubleg=9.80665;a=g;//進行隱式類型轉換,小數局部舍棄,a值為9a=(int)g*4;//進行顯式類型轉換,a值為4*9=36a=(int)(g*4);//進行顯式類型轉換,a值為39隱式類型轉換例如指出下述代碼執行后result的結果charc='A';inti=6;floatf=10.0;doubled=0.2,result;result=(c/i)+(4+f*d)*(f–i);//發生類型轉換運算過程計算c/i:c
由char
轉換為int
型,結果為10計算4+f*d:轉換為double
型,結果為double
類型計算f–i:轉換為float型,結果為float
類型對三個中間結果進行計算:轉換為double
類型,結果為double類型作業第45頁第3題C程序設計第4章根本程序結構提綱4.1語句與注釋4.2字符輸入輸出4.3格式化輸出4.4格式化輸入4.5程序的順序結構4.1語句與注釋簡單語句復合語句空語句注釋簡單語句與復合語句簡單語句表達式后面添加分號構成的語句例:intn;例:doubled,total;例:total=n+d;例:printf("%d+%lf=%lf\n",n,d,total);無邏輯意義的語句例:n+d;復合語句格式:花括號對括起來的語句序列,可以作為整體看待例:{a=1;b=a+1;}空語句與注釋空語句格式:單獨出現的分號目的:滿足語法規那么要求;作為未來添加程序代碼的占位標記注釋注釋的目的:增強程序的可讀性、可維護性注釋的格式格式一:“/*〞與“*/〞對,注釋其中的局部,可出現在程序代碼的任意地方例一:int/*此處內容為注釋*/a;格式二:“//〞,注釋從此字符序列開始直至本文本行結束例二:inta;//此處內容為注釋同一種注釋標記不可以嵌套“//〞不跨行,“/*〞與“*/〞對可跨行4.2字符輸入輸出根本領實輸入輸出是語言與算法必須具備的功能C語言本身沒有輸入輸出語句或命令,輸入輸出需使用標準庫函數輸入輸出函數原型位于頭文件“stdio.h〞中典型輸入輸出函數字符輸出函數putchar字符輸入函數getchar格式化輸出函數printf格式化輸入函數scanf字符數據對象的輸出使用putchar
函數輸出字符'A'#include"stdio.h"intmain(){charc;c=65;putchar(c);return0;}字符數據對象的輸入使用getchar
函數獲取用戶輸入的字符,然后調用putchar
函數輸出該字符#include"stdio.h"intmain(){charc;c=getchar();//只有用戶輸入回車后,此函數才結束putchar(c);return0;}
字符輸入輸出功能過于簡單,不能完成復雜任務4.3格式化輸出根本領實輸入輸出是語言與算法必須具備的功能C語言本身沒有輸入輸出語句或命令,輸入輸出需使用標準庫函數輸入輸出函數原型位于頭文件“stdio.h〞中典型輸入輸出函數格式化輸出函數printf格式化輸入函數scanf格式化輸出函數printf格式化輸出函數printf
調用格式格式:printf("輸出格式規約字符串",輸出項列表);例一:printf("Theprogramprintsagreeting.\n");例二:printf("Hello,%s.\n",name);例三:printf("%f+%f=%f\n",a,b,sum);例四:printf("%d+%lf=%lf\n",n,d,sum);%y:格式描述符%d:十進制整數%f:float類型浮點數;%lf:double類型浮點數%c:單個字符%s:字符串%u:無符號整數其他無須記憶,用時查表printf使用例如輸出單個字符charc='A';/*已定義某個字符變量c,并已初始化或賦值*/printf("%c\n",c);輸出整數intn=10;/*已定義某個整型變量n,并已初始化或賦值*/printf("%d\n",n);輸出多個整數,中間使用任意字符序列分隔intm=1;n=2;/*已定義整型變量m、n,并已初始化或賦值*/printf("%d;%d\n",m,n);輸出浮點數doubled=10.0;/*已定義某個實型變量n,并已初始化或賦值*/printf("%lf\n",d);輸出字符串,以下兩種方式均可printf("%s\n","Thisisastring.");printf("Thisisastring.\n");printf使用例如寫出下述程序的執行結果#include<stdio.h>intmain(){intx,y,z;/*定義整型變量*/x=1;/*變量賦值*/y=2;/*變量賦值*/z=3;/*變量賦值*/printf("Resultisasfollows:\n");/*輸出提示信息*/printf("x=%d,y=%d,z=%d\n",x,y,z);/*輸出變量*/printf("x+y=%d\nx+y+z=%d\n",x+y,x+y+z);/*輸出結果*/return0;}printf使用例如執行結果如下:Resultisasfollows:x=1,y=2,z=3x+y=3x+y+z=6編制程序,輸出下述數據。說明:〔1〕表中數據來自總參謀部測繪局編制的?世界地圖集?〔星球地圖出版社,2004年1月第2版〕,數據可能已不準確;〔2〕面積單位為萬平方公里,人口單位為萬人;〔3〕如果不知道每字段寬度到底為多少,請仔細數數作為分隔標記的短橫數目------------------------------------COUNTRYAREA(10Kkm2)POP.(10K)------------------------------------China960.00129500.00Iceland10.3027.57India297.4797000.00Madagascar62.701635.00Maldive0.0327.80------------------------------------輸出精度與格式對齊場寬精度左右對齊場寬、精度與對齊輸出格式%[對齊標志][場寬][.精度]格式描述符對齊標志:確定每列左側還是右側對齊缺省右對齊,左對齊使用減號例:%-d表示按照左對齊格式輸出整數場寬:確定每列占用多少字符寬度,數據輸出一般不會截斷確定輸出最小寬度,超出局部照常輸出例:%3d表示按照右對齊、占三位格式輸出整數,假設整數長度超出三位,那么照常輸出數據場寬、精度與對齊精度:確定輸出多少位數據以保證其精度精度數字前有小數點標志,在場寬中占用一位!例:%-5.2f表示按照左對齊、整體占五位且小數點后兩位格式輸出浮點數數據的截斷例一:按%-5.2f格式輸出12.3456,結果為12.35,注意四舍五入例二:按%-5.2f格式輸出123.456,結果為123.46,注意截斷后的數據仍然超出了場寬,照常輸出字符串截斷輸出特例:%13.13s表示按照整體占13位且多余局部截斷的方式輸出字符串程序代碼#include<stdio.h>intmain(){doublearea1,area2,area3,area4,area5;doublepop1,pop2,pop3,pop4,pop5;area1=960.00; pop1=129500.00;area2=10.30; pop2=27.57;area3=297.47; pop3=97000.00;area4=62.70; pop4=1635.00;area5=0.03; pop5=27.80;printf("------------------------------------\n");printf("COUNTRYAREA(10Kkm2)POP.(10K)\n");printf("------------------------------------\n");printf("%-10.10s%13.2lf%9.2lf\n","China",area1,pop1);printf("%-10.10s%13.2lf%9.2lf\n","Iceland",area2,pop2);printf("%-10.10s%13.2lf%9.2lf\n","India",area3,pop3);printf("%-10.10s%13.2lf%9.2lf\n","Madagascar",area4,pop4);printf("%-10.10s%13.2lf%9.2lf\n","Maldive",area5,pop5);printf("------------------------------------\n");return0;}4.4格式化輸入函數scanf格式化輸入函數scanf調用格式格式:scanf("輸入格式規約字符串",輸入項列表);例:scanf("%d,%d",&a,&b);特別說明輸入格式碼與輸出格式碼根本相同用戶在終端輸入的數據逐一存放到輸入項列表中變量所在的地址空間;對于普通變量,變量名前需添加取址操作符“&〞多個輸入項的分隔:格式描述串中其他字符需在輸入數據時一并輸入;無分隔字符的相連項在輸入時使用空格、Tab或回車鍵分隔輸入例如例如:scanf("%d,%d",&a,&b);輸入時需要輸入兩個整數之間的逗號!scanf使用例如編寫程序,接受輸入的三個實數,計算并輸出它們的算術平均值。注意,平均值輸出時僅需保存小數點后兩位#include<stdio.h>intmain(){doublea,b,c,average;printf("Theprogramgetsthreerealnumbers,");printf("andprintstheiraveragevalue.\n");printf("Inputformatas1.2,2.3,3.4.\n");scanf("%lf,%lf,%lf",&a,&b,&c);average=(a+b+c)/3.0;printf("Theaverageis%.2lf\n",average);return0;}scanf使用例如程序執行過程:Theprogramgetsthreerealnumbers,andprintstheiraveragevalue.Inputformatas1.2,2.3,3.4.1.1,2.2,3.4↙Theaverageis2.23注意其中浮點數的輸入格式,中間的逗號不能省略!4.5程序的順序結構順序結構由一組順序執行的處理塊組成,每個處理塊可能包含一條或一組語句,完成一項任務順序結構是最根本的算法結構順序結構例如編寫程序,讀入一英文小寫字母,輸出其對應大寫字母#include<stdio.h>intmain(){charc1,c2;/*定義字符型變量c1和c2*/printf("Pleaseinputalower-casecharacter:");/*輸出提示語句*/c1=getchar();/*從鍵盤接收一個字符*/c2=c1-32;/*將小寫字母通過ASCII值的計算轉換成大寫*/printf("Theupper-caseof'%c'is'%c'.\n",c1,c2);/*輸出結果*/return0;}條件表達式〔三元表達式〕格式表達式1?表達式2:表達式3計算過程先計算表達式1的值,假設為真,那么結果為表達式2的值,否那么為表達式3的值示例x=(a>b)?a:b;等價于:if(a>b)x=a;elsex=b;順序結構例如編寫程序,接受用戶輸入的兩個整數,輸出其中較大者#include<stdio.h>intmain(){inta,b,max;/*輸入局部*/printf("Theprogramgetstwonumbersandprintsthegreaterone.\n");printf("Thefirstnumber:");scanf("%d",&a);printf("Thesecondnumber:");scanf("%d",&b);/*計算局部*/max=a>b?a:b;/*三元表達式*//*輸出局部*/printf("Thegreateroneis%d.\n",max);return0;}作業第60頁第3、7題C程序設計第5章分支結構提綱5.1邏輯值5.2關系操作符與關系表達式5.3邏輯操作符與邏輯表達式5.4if分支結構5.5switch分支結構5.6分支結構的嵌套5.1邏輯值簡單語句復合語句空語句注釋5.1邏輯值邏輯值〔布爾值〕:非真即假邏輯值的C語言表示真:非0假:0例:2表示真,2.3表示真,0表示假布爾類型定義類型:typedefenum__BOOL{FALSE,TRUE}BOOL;目的:取代C語言中的非0判斷使用方法:BOOLb;b=TRUE;5.2關系操作符與關系表達式關系操作符大于〔>〕、等于〔==〕、小于〔<〕、不大于〔<=〕、不小于〔>=〕、不等于〔!=〕關系表達式關系操作符與兩個操作數構成的表達式多個關系表達式可連接起來構成復雜關系表達式運算結果為邏輯值:真或假盡量使用BOOL類型表示邏輯值!示例例:a>b,a<b例:a=b>c等價于a=(b>c)例:a==b>c等價于a==(b>c)例:a=b+c<=d等價于a=((b+c)<=d)5.3邏輯操作符與邏輯表達式邏輯操作符:邏輯與〔&&〕、邏輯或〔||〕、邏輯非〔!〕邏輯表達式邏輯操作符與一個或兩個操作數構成的表達式,結果仍為真或假x&&y:假設x、y均為真,那么結果為真,否那么為假x||y:假設x、y均為假,那么結果為假,否那么為真!x:假設x為真,那么結果為假,否那么為真邏輯操作的真值表ab!a!ba&&ba||bTRUETRUEFALSEFALSETRUETRUETRUEFALSEFALSETRUEFALSETRUEFALSETRUETRUEFALSEFALSETRUEFALSEFALSETRUETRUEFALSEFALSE邏輯表達式的計算關系操作符與邏輯操作符的優先級從高到低順序:邏輯非“!〞;小于“<〞、不小于“>=〞、大于“>〞、不大于“<=〞〔同級〕;等于“==〞、不等于“!=〞〔同級〕;邏輯與“&&〞;邏輯或“||〞與關系操作符混用正確例:a>b&&c<d;a<=b||c>=d;a>b&&!(c>=d)錯誤例:0<=p<=1,錯誤原因:不能連寫更改為:0<=p&&p<=1思考5>3||!(2>1)&&8>=4的結果為TRUE還是FALSE?復雜邏輯表達式給定年份year,判斷是否為閏年,閏年規定為:能夠被400整除的年份一定是閏年其他能夠被100整數的年份一定不是閏年其他能夠被4整除的年份一定是閏年year%4==0&&year%100!=0||year%400==05.4if分支結構If分支結構的三種格式格式一:if(條件表達式){語句序列}格式二:if(條件表達式){語句序列1}else{語句序列2}格式三:if(條件表達式1){語句序列1}elseif(條件表達式2){語句序列2}…else{語句序列n}特別說明條件表達式必須位于括號內,一般為關系或邏輯表達式語句序列也稱語句塊先計算條件表達式值,假設為真那么執行語句序列1,否那么執行語句序列2語句序列1與語句序列2可以為復合語句、單語句或空語句語句序列1與語句序列2只能有一個被執行假設僅用于確定某條語句是否執行,else分支可以省略簡單if分支結構書寫格式if(條件表達式){
語句塊A//可能為語句序列或單一語句,后者可省略前后大括號對}簡單if分支結構例如編制程序,接受用戶輸入的整數,判斷該數是否為正整數#include<stdio.h>intmain(){inta;/*輸入局部*/printf("Theprogramgetsanumber,");printf("andshowsifitisapositive.\n");printf("Thenumber:");scanf("%d",&a);/*計算與輸出局部*/if(a>0)printf("Thenumber%disapositive.\n",a);return0;}if-else分支結構書寫格式if(條件表達式){
語句塊A}else{
語句塊B}if-else分支結構例如編寫程序,接受用戶輸入的整數,如果該整數為奇數那么將其乘3加1后輸出,偶數除以2后輸出#include<stdio.h>intmain(){inta,result;/*輸入局部*/printf("Theprogramgetsanumber.\n");printf("Ifitisaneven,divideitby2,\n");printf("otherwisemultiplyitby3thenplus1.\n");printf("Thenumber:");scanf("%d",&a);/*計算局部*/if(a%2!=0)result=a*3+1;/*a為奇數*/elseresult=a/2;/*a為偶數*//*輸出局部*/printf("Theresultis%d.\n",result);return0;}if-elseif-else分支結構書寫格式if(條件表達式1
){
語句塊1}elseif(條件表達式2){
語句塊2}...else{
語句塊n}if-elseif-else語句例如一編寫程序,接受用戶輸入的兩個整數,判斷大小關系#include<stdio.h>intmain(){intx,y;printf("Theprogramgetstwonumbers,andcomparesthem.\n");printf("Thefirstnumber:");scanf("%d",&x);printf("Thesecondnumber:");scanf("%d",&y);if(x==y)printf("Thetwonumbersareequal.\n");elseif(x>y)printf("Thefirstnumberisgreaterthanthesecond.\n");elseprintf("Thefirstnumberislessthanthesecond.\n");return0;}if-elseif-else語句例如二2007年10月1日為星期一。編制程序,接受用戶輸入的1~31之間的整數,按照下述格式將該日星期幾信息打印在對應欄下。例如,2007年10月9日打印在星期二“Tu〞下面,而2007年10月10日那么打印在星期日“We〞下面:Calendar2007-10
--------------------------
Su
Mo
Tu
We
Th
Fr
Sa
--------------------------
9
--------------------------Calendar2007-10
--------------------------
Su
Mo
Tu
We
Th
Fr
Sa
--------------------------
10
--------------------------程序代碼#include<stdio.h>typedefenum{SUN,MON,TUE,WED,THU,FRI,SAT}WEEKDAY;intmain(){intday;WEEKDAYweekday;/*輸入局部*/printf("Theprogramgetsaday(1~31),\n");printf("andprintsacalendarof2007-10(justtheday).\n");printf("Theday:");scanf("%d",&day);/*計算局部,得到該日的星期幾信息*/weekday=(WEEKDAY)(day%7);/*輸出局部*/printf("Calendar2007-10\n");printf("--------------------------\n");printf("SuMoTuWeThFrSa\n");printf("--------------------------\n");程序代碼/*在指定位置輸出該日的星期幾信息*/if(weekday==SUN)printf("%2d\n",day);elseif(weekday==MON)printf("%6d\n",day);elseif(weekday==TUE)printf("%10d\n",day);elseif(weekday==WED)printf("%14d\n",day);elseif(weekday==THU)printf("%18d\n",day);elseif(weekday==FRI)printf("%22d\n",day);else/*已不再需要if分支,只可能為SAT*/printf("%26d\n",day);printf("--------------------------\n");return0;}5.5switch分支結構計算過程先計算表達式的值依次與常數表達式比較假設相同那么執行該分支〔子句〕否那么轉向default分支最后退出switch語句特別說明switch后面的表達式必須為整型、字符型或枚舉型case后面必須為常量表達式,且各個case值必須不同假設無default分支,且無case分支匹配,那么不執行case分支中的語句可以有多條,不需要花括號switch(表達式){case常數表達式1:語句序列1case常數表達式2:語句序列2┇case常數表達式n:語句序列ndefault:默認語句序列}switch語句的執行流程switch例如/*輸出局部*/printf("Calendar2007-10\n");printf("--------------------------\n");printf("SuMoTuWeThFrSa\n");printf("--------------------------\n");/*在指定位置輸出該日的星期幾信息*/switch(weekday){caseSUNDAY: printf("%2d\n",date); break;caseMONDAY: printf("%6d\n",date); break;caseTUESDAY: printf("%10d\n",date); break;caseWEDNESDAY: printf("%14d\n",date); break;caseTHURSDAY: printf("%18d\n",date); break;caseFRIDAY: printf("%22d\n",date); break;caseSATURDAY: printf("%26d\n",date); break;default: ;/*沒有缺省情況需要處理*/}printf("--------------------------\n");return0;}break語句break語句的目的終止switch語句的執行如果沒有break語句,那么程序會從指定的case分支開始,并在該分支結束后繼續執行下去除非switch語句結束,后面的其他case分支或default分支中的語句都會得到執行原因:case子句中的常數表達式僅起到語句標號的作用,不是分支之間的分隔標記省略break語句的場合允許多個分支執行同樣的代碼break例如編寫程序,接受用戶輸入的年份和月份,輸出該月天數#include<stdio.h>typedefenum__BOOL{FALSE,TRUE}BOOL;intmain(){intyear,month,days_of_month;BOOLleapyear=FALSE;/*輸入局部*/printf("Givenayearandamonth,printsdaysofthemonth.\n");printf("Theyear:");scanf("%d",&year);printf("Themonth:");scanf("%d",&month);if(month<1||month>12){printf("Montherror!\n");return1;}break例如/*計算局部*/leapyear=year%4==0&&year%100!=0||year%400==0;switch(month){case1: case3: case5: case7: case8: case10: case12:days_of_month=31;break;case4: case6: case9: case11:days_of_month=30;break;case2:days_of_month=28+(int)leapyear;break;}/*輸出局部*/printf("Daysin%4d-%2.2dis%d.\n",year,month,days_of_month);return0;}5.6分支結構的嵌套if與switch的嵌套設存在一個判斷某個給定年份是否為閏年的函數IsLeapYear,該函數需要接受一個表示年份的整型數據,假設其為閏年返回TRUE,否那么返回FALSE改寫前例程序,使用IsleapYear函數判斷2月天數 switch(month){ …… case2: if(IsLeapYear(year))/*對于二月,需要判斷是否為閏年*/ days_of_month=29; else days_of_month=28; break; …… }分支分支的多重嵌套考慮表達某企業的工資晉級方案。該方案向在公司長期效勞的老員工和雖然效勞年限較短但年齡偏大的員工傾斜。方案規定,假設員工效勞年限未達5年,那么假設年齡不小于28歲長一級工資;假設效勞年限已達5年,長兩級工資。那些效勞年限短的小字輩不再此次調整工資之列。設age表示員工年齡,service_years表示效勞年限,salary_level表示工資級別。分支結構的嵌套else與哪個if配對?if(service_years<5)if(age>=28)salary_level+=1;elsesalary_level+=2;else與if配對規那么離它最近:距離最短同層次:排除底層嵌套if(service_years<5){if(age>=28)salary_level+=1;}elsesalary_level+=2;降低第二個if的層次,使else與第一個if配對if分支結構的嵌套例如輸入3個不同的整數,使用if語句輸出其中的最大者#include<stdio.h>intmain(){inta,b,c;printf("Enter3integers,usingcommastoseparatethem:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){if(a>c)printf("Themaximalintegeris:%d\n",a);elseprintf("Themaximalintegeris:%d\n",c);}if分支結構的嵌套例如else{if(b>c)printf("Themaximalintegeris:%d\n",b);elseprintf("Themaximalintegeris:%d\n",c);}return0;}作業第78頁第5、6題C程序設計第6章分支結構提綱6.1循環結構概述6.2while循環6.3for循環6.4循環流程控制6.5循環嵌套6.6程序結構化6.1循環結構概述循環結構的性質反復執行某一處理塊〔循環體〕的控制結構單入口單出口循環體可以包含復雜控制結構一次迭代:執行一次循環體循環執行次數:迭代次數典型循環流程圖6.2while循環結構while循環格式:while(表達式)循環體while循環執行流程先判斷后執行:表達式為真時,執行一遍循環體〔一次迭代〕,返回重新計算表達式的值以確定是否重復執行循環體;假設表達式為假,那么終止循環為保證循環終止,循環體內應有能改變表達式值的語句while循環例如一編制程序,求1到100的自然數之和#include<stdio.h>intmain(){inti,sum;i=1;sum=0;while(i<=100){sum+=i;i++;}printf("Theresultis%d.\n",sum);return0;}while循環例如二編制程序,接受用戶從鍵盤輸入的多個整數,計算它們的和并輸出,用戶輸入0時表示數據輸入結束#include<stdio.h>intmain(){intn,sum=0;printf("Theprogramgetssomeintegers,andoutputtheirsum.\n");printf("Tostoptheinputingprocess,pleaseinput0.\n");printf("Pleaseinputaninteger:");scanf("%d",&n);while(n!=0){sum+=n;printf("Thenextinteger:");scanf("%d",&n);}printf("Thesumis%d.\n",sum);return0;}while循環的代碼結構最常見的while循環結構獲取第一個數據對象;while(與數據對象相關的循環條件){
處理第一個數據對象;
獲取下一個數據對象;}6.3for循環結構簡單for循環for循環與while循環的關系復雜for循環“更簡單的〞for循環簡單for循環for循環格式for(初始化表達式;條件表達式;步進表達式)循環體for循環執行流程先判斷后執行:先執行初始化表達式,再計算條件表達式,并根據其結果斷定是否執行一遍循環體〔為真時執行〕,計算步進表達式的值〔循環再次“初始化〞〕,返回重新計算條件表達式的值以確定循環是否終止for循環例如編寫程序,接受用戶輸入的整數n,求1~n的平方和#include<stdio.h>
intmain()
{
intn,i,sum=0;printf("Theprogramgetsapositiveinteger,\n");printf("andprintsthesquaredsumfrom1tothenumber.\n");printf("Thenumber:");scanf("%d",&n);sum=0;for(i=0;i<=n;++i)sum+=i*i;printf("Thesumis%d.\n",sum);return0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南藝術學院文華學院《畫法幾何學》2023-2024學年第二學期期末試卷
- 昆明衛生職業學院《食品分析與感官評定》2023-2024學年第二學期期末試卷
- 蘇州高博軟件技術職業學院《應用非參數統計》2023-2024學年第二學期期末試卷
- 土方挖機施工合同協議
- 外墻干掛施工合同協議
- 外墻保溫居間合同協議版
- 土工施工合同協議
- 培訓教師外聘合同協議
- 商砼委托銷售合同協議
- 團購食品合同協議
- 風機性能綜合測試系統的研究與開發的開題報告
- JJG 365-2008電化學氧測定儀
- 期中模擬測試卷(試卷)-2023-2024學年一年級下冊數學人教版
- 民宿服務培訓課件
- 公路養護安全意識培訓
- 控制性詳細規劃城市用地分類和代號
- 鐵路專用線設計規范(試行)(TB 10638-2019)
- 主題一+鞋子擦洗自己做+第二課時(課件)-甘肅教育出版社勞動三年級+下冊
- ISO 45003-2021職業健康安全管理-工作中的心理健康安全-社會心理風險管理指南(中文版)
- 三年級語文 寫通知(全國一等獎)
- 2020電網技術改造工程概算定額第五冊調試工程
評論
0/150
提交評論