版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第3章C語言程序結構及相關語句3.1
C語言結構相關知識3.1.1算法描述方法算法一般可以用以下兩種方法來進行描述。偽代碼:采用近似高級語言但又不受語法約束的語言描述流程圖:傳統(tǒng)的流程圖常用的符號如圖所示,由這些框和流程線組成的流程圖來表示算法3.1.2結構化程序結構化程序設計方法是程序設計的先進方法,結構化程序設計是一種使用順序、選擇和循環(huán)共三種基本控制結構,并且使用這三種基本結構足以表達出各種其他形式的結構的程序設計方法(1)順序結構在執(zhí)行時按照先后順序逐條進行,沒有分支,沒有循環(huán)。如后面介紹的賦值語句、輸入、輸出語句等都可以構成順序結構(2)分支結構分支結構也稱為選擇結構,根據不同的條件去執(zhí)行不同分支中的語句。如后面章節(jié)中介紹的if語句、switch語句等都可以構成分支結構(3)循環(huán)結構根據條件,使同一組語句重復執(zhí)行多次或一次也不執(zhí)行。循環(huán)結構包括當型循環(huán)和直到型循環(huán)3.2
順序語句3.2.1C程序的語句C程序的執(zhí)行部分由語句組成的。程序的功能也由執(zhí)行語句來實現。C語句可分五類:表達式語句函數調用語句控制語句復合語句空語句1.表達式語句表達式語句由表達式加上分號“;”組成。一般形式為:
表達式;執(zhí)行表達式語句就是計算表達式的值。例如:c=a+b;是賦值語句。2.函數調用語句
由函數名、實際參數(實參)加上分號“;”組成。一般形式為:函數名(實參表);執(zhí)行函數語句是調用函數體并將實參值復制給函數定義中的對應形式參數(形參),然后執(zhí)行被調函數體中的語句,求取函數值。3.控制語句控制語句用于控制程序的流程,它們由特定的語句定義符組成,用以實現程序的各種結構方式。
例如:可以用if語句來實現選擇結構程序,用for語句來實現循環(huán)。4.復合語句將多個語句用一對括號{}括起來組成的一個語句塊稱為復合語句。在程序中應把復合語句看成是一條語句(一個整體),而不是多條語句,例如:{ k=i+j; a=b-c; printf("%d,%d",k,a);}這是一條復合語句。復合語句內的各條語句都以分號“;”結尾,在括號“}”外不用加分號。5.空語句只有分號“;”組成的語句稱為空語句??照Z句什么也不執(zhí)行。3.2.2數據輸出語句數據輸出語句用于向標準輸出設備(顯示器)輸出數據在C語言中,所有數據輸入/輸出都由庫函數完成。因此都是函數語句。1.格式化輸出函數printf()printf()函數稱為格式輸出函數printf()函數的功能是按用戶指定的格式,將指定的數據顯示到顯示器屏幕上。(1)printf()函數調用的一般形式printf()的函數原型在頭文件“stdio.h”中。printf函數調用的一般形式為:printf(“格式控制字符串”,輸出表);其中格式控制字符串用于指定輸出格式,可以同時輸出指定的字符串。格式控制串由格式字符串和非格式字符串(即要輸出的字符串)兩種組成格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數據的類型、長度、小數位數等。如“%d”表示按十進制整型輸出。非格式字符串在輸出時按原樣顯示。例3.1printf()函數示例。#include<stdio.h> /*包含庫函數printf()所需信息*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta=65,b=66; /*定義變量*/ printf(“%d%d\n”,a,b); /*按整型格式輸出a,b*/ printf(“%d,%d\n”,a,b); /*按整型格式輸出a,b*/ printf(“%c,%c\n”,a,b); /*按字符格式輸出a,b*/ printf("a=%d,b=%d\n",a,b); /*格式化輸出a,b*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
6566 65,66 A,B a=65,b=66
請按任意鍵繼續(xù)...(2)格式字符串格式字符串的一般形式為:[標志][輸出最小寬度][.精度][長度]類型其中方括號[]中的項為可選項類型字符意義d,i以十進制形式輸出帶符號整數(正數不輸出符號)o以八進制形式輸出無符號整數(不輸出前綴0)x以十六進制形式輸出無符號整數(不輸出前綴0X)u以十進制形式輸出無符號整數f以小數形式輸出單、雙精度實數e以指數形式輸出單、雙精度實數g以%f和%e中較短的輸出寬度輸出單、雙精度實數c輸出單個字符s輸出字符串類型:類型字符用以表示輸出數據的類型標志:標志字符為-、+、#三種標志字符意義-結果左對齊,右邊填空格+輸出符號(正號或負號)空格,輸出值為正時冠以空格,為負時冠以負號#對c,s,d,u類無影響;對o類,在輸出時加前綴0;對x類,在輸出時加前綴0x;對e,g,f
類當結果有小數時才給出小數點輸出最小寬度:用十進制整數來表示輸出的最少位數,如果實際位數多于定義的寬度,則按實際位數輸出,如果實際位數少于定義的寬度則補以空格或0精度:精度格式符以“.”開頭,后跟十進制整數。具體的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符,則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分長度:長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出例3.2printf()函數格式字符串使用示例。#include<stdio.h> /*包含庫函數printf()所需信息*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta=168; /*定義整型變量*/ floatb=1243.1698; /*定義單精度實型變量*/ doublec=2421985.50168; /*定義雙精度實型變量*/ chard='a'; /*定義字符型變量*/ printf("a=%d,%5d,%o,%x\n",a,a,a,a); /*輸出a*/ printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); /*輸出b*/ printf("c=%lf,%f,%8.4lf\n",c,c,c); /*輸出c*/ printf("d=%c,%8c\n",d,d); /*輸出d*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
a=168,168,250,a8 b=1243.169800,1243.169800,1243.1698,1.243170e+003 c=2421985.501680,2421985.501680,2421985.5017 d=a,a
請按任意鍵繼續(xù)...“%f”和“%lf”格式的輸出相同例3.3printf()函數輸出表的求值順序示例。#include<stdio.h> /*包含庫函數printf()所需信息*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inti=6; /*定義變量*/ printf("%d,%d,%d\n",++i,++i,++i); /*輸出關于i的表達式之值*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}在VisualC++6.0、Dev-C++和MinGWDeveloperStudio中,程序運行時屏幕輸出如下:
9,8,7
請按任意鍵繼續(xù)...不同的編譯系統(tǒng)輸出表的求值順序不一定相同,可從左到右,也可從右到左。VisualC++6.0、Dev-C++和MinGWDeveloperStudio是按從右到左進行的格式控制個數小于輸出列表個數#include<stdio.h>
#include<stdlib.h>
intmain(void)
{ inti=6;
printf("%d,%d\n",++i,++i,++i);
system("PAUSE");
return0;
}程序運行時屏幕輸出如下:
9,8
請按任意鍵繼續(xù)...2.字符輸出函數putchar()putchar()函數用于輸出字符,功能是在顯示器上顯示單個字符。函數原型在頭文件“stdio.h”中,一般形式為:putchar(字符變量/字符數據);例如:putchar(‘a’);輸出小寫字母a。putchar(x);輸出字符變量x存放的字符。putchar(‘\n’);換行,對控制字符則執(zhí)行控制功能,不在屏幕上顯示例3.4putchar()函數使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ chara='A',b='o',c='m'; /*定義字符型變量*/ putchar(a);putchar(b);putchar(b);putchar('\t'); /*輸出字符,'\t'為制表符*/ putchar(a);putchar(b);putchar('\n'); /*輸出字符,'\n'為換行符*/ putchar(b);putchar(c); putchar('\n'); /*輸出字符,'\n'為換行符*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
AooAo om
請按任意鍵繼續(xù)...如何用printf()函數替代例3.4中的
putchar()函數?#include<stdio.h>
main()
{ chara='A',b='o',c='m';
//putchar(a);putchar(b);putchar(b);putchar('\t');
printf(“%c%c%c\t”,a,b,b);
//putchar(a);putchar(b);putchar('\n');
printf(“%c%c\n”,a,b);
//putchar(b);putchar(c); putchar('\n');
printf(“%c%c%c\n”,b,c);
}3.2.3數據輸入語句C語言的數據輸入也由函數語句完成本節(jié)介紹從標準輸入設備鍵盤上輸(讀)入數據的函數scanf()和getchar()
1.格式化輸入函數scanf()scanf()函數稱為格式輸入函數,其功能是按用戶指定的格式從鍵盤上把數據輸入到指定的變量之中。(1)scanf()函數的一般形式scanf()函數的函數原型在頭文件“stdio.h”中。scanf()函數的一般形式為:scanf(“格式控制字符串”,變量地址表);(1)scanf()函數的一般形式其中格式控制字符串的作用與printf()函數相同,但不顯示非格式字符串,也就是不能顯示提示字符串。地址表中給出各變量的地址。地址由地址運算符“&”后跟變量名組成的。變量的地址是C編譯系統(tǒng)分配的,用戶不必關心具體的地址是多少。scanf()函數在本質上是給變量賦值,但要求寫變量的地址,如&x例3.5scanf()函數使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,b; /*定義變量*/ printf("輸入a,b:"); /*輸入提示*/ scanf("%d%d",&a,&b); /*輸入a,b*/ printf("a=%d,b=%d\n",a,b); /*輸出a,b*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入a,b:68 a=6,b=8
請按任意鍵繼續(xù)...(2)格式字符串格式字符串的一般形式為:%[*][輸入數據寬度][長度]類型其中有[]的項為可選項。類型:表示輸入數據的類型類型字符意義d,i輸入十進制整數o輸入八進制整數x輸入十六進制整數u輸入無符號十進制整數e,f輸入實型數(用小數形式或指數形式)c輸入單個字符s輸入字符串“*”符:表示該輸入項讀入后不賦予相應的變量,即跳過該輸入值。如scanf("%d%*d%d",&a,&b);當輸入為:689時,把6賦予a,8被跳過,9賦予bc.寬度:用十進制整數指定輸入的寬度(即字符數)。例如:scanf("%5d",&a);輸入:1234567890只把12345賦予變量a,其余部分被截去。又如:scanf("%4d%4d",&a,&b);輸入:1234567890將把1234賦予a,而把5678賦予bc.長度:長度格式符為l和h,l用于表示輸入長整型數據(如%ld)和雙精度浮點數(如%lf)。h表示輸入短整型數據使用scanf()函數應注意以下幾點:scanf()函數中沒有精度控制,如:scanf("%5.2f",&a);是非法的。用戶不能企圖用此語句輸入小數為2位的實數。scanf()函數中要求給出變量地址,如給出變量名則會出錯。如scanf("%d",i);是非法的,應改為scnaf("%d",&i);才是合法的。在輸入字符數據時,若格式控制串中無非格式字符,則認為所有輸入的字符均為有效字符。例如:scanf("%c%c",&m,&n);輸入為:de則把'd'賦予m,''賦予n。只有當輸入為:de時,才能把'd'賦于m,'e'賦予b。如果在格式控制中加入空格作為間隔,如scanf("%c%c",&m,&n);則輸入時各數據之間可加空格例3.6scanf()函數使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ chara,b; /*定義變量*/ printf("輸入字符a,b:"); /*輸入提示*/ scanf("%c%c",&a,&b); /*輸入a,b*/ printf("%c%c\n",a,b); /*輸出a,b*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}輸入“MN”時,a的值為'M',b的值為''。程序運行時屏幕輸出參考如下: 輸入字符a,b:MN M
請按任意鍵繼續(xù)... 輸入改為MN時,a的值為'M',b的值為'N'。程序運行時屏幕輸出參考如下: 輸入字符a,b:MN MN
請按任意鍵繼續(xù)...例3.7scanf()函數使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ chara,b; /*定義變量*/ printf("輸入字符a,b:"); /*輸入提示*/ scanf("%c%c",&a,&b); /*輸入a,b*/ printf("%c%c\n",a,b); /*輸出a,b*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入字符a,b:MN MN
請按任意鍵繼續(xù)...如果格式控制串中有非格式字符,則輸入時也要輸入該非格式字符例如:scanf("%d,%d",&a,&b);其中用非格式符“,”作間隔符,故輸入時應為:5,6scanf()使用注意事項:對于全部是非字符的數據輸入,可用空格鍵、回車鍵和Tab鍵作為每兩個輸入數之間的間隔。對于全部是字符的數據輸入,要嚴格按照輸入控制格式輸入。對于數字和字符交替輸入的,數字后不用跟間隔,或字符后不用加間隔直接輸入下一個數據。scanf()函數的課堂練習1:#include<stdio.h>main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}要完成給a賦值1、給b賦值2、給c賦值3,則應該如何輸入?scanf()函數的課堂練習2:#include<stdio.h>main(){inta,b,c;scanf("%d,%d,%d",&a,&b,&c);printf("a=%d,b=%d,c=%d\n",a,b,c);}要完成給a賦值1、給b賦值2、給c賦值3,則應該如何輸入?scanf()函數的課堂練習3:#include<stdio.h>main(){inta1,a2;charc1,c2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);printf("a1=%d,a2=%d,c1=%c,c2=%c\n",a1,a2,c1,c2);}要完成給a1賦值10、給a2賦值20、給c1賦值X、給c2賦值Y,則應該如何輸入?2.鍵盤輸入函數getchar()getchar()函數的功能是從鍵盤上輸入一個字符。函數原型在頭文件“stdio.h”中,一般形式為:getchar();getchar()函數只能接受單個字符,輸入數字也按字符處理。輸入多于一個字符時,只接收第一個字符。注意:鍵盤輸入時,系統(tǒng)先把輸入字符串放到輸入緩沖區(qū)內,執(zhí)行一次getchar()就依次從緩沖區(qū)內取一個字符,取出一個字符后,緩沖區(qū)內可能有殘留的其他字符或回車符號。例3.8getchar()函數使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ charc; /*定義變量*/ c=getchar(); /*輸入c*/ printf("%c\n",c); /*輸出c*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下:
A A
請按任意鍵繼續(xù)...如果用戶輸入“AB”,則將字符‘A’賦值給c,字符'B'將被丟失。程序運行時屏幕輸出參考如下:
AB A
請按任意鍵繼續(xù)...3.3
分支結構程序3.3.1
關系運算符和表達式1.關系運算符比較兩個量的運算符稱為關系運算符。在C語言中有以下關系運算符: <(小于) <=(小于或等于) >(大于) >=(大于或等于) ==(等于) !=(不等于)1.關系運算符關系運算符都是雙目運算符,都是左結合。關系運算符的優(yōu)先級低于算術運算符,高于賦值運算符在六個關系運算符中,<,<=,>,>=的優(yōu)先級相同,高于==和!=,==和!=的優(yōu)先級相同2.關系表達式關系表達式一般形式為:表達式關系運算符表達式例如:a-b>c*d,x>3*2,'a'+6<c;都是合法的關系表達式。關系表達式的值是“真”和“假”,“真”用“1”和“假”用“0”表示例3.9關系表達式使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inti=1,j=6,k=8; /*定義整型變量*/ floatx=3e+5,y=0.86; /*定義實型變量*/
printf("%d\n",-i+2*j>=k+1);/*輸出關系表達式的值*/ printf("%d\n",x-1.98<=x+y);/*輸出關系表達式的值*/ printf("%d\n",k==j==i+6);/*輸出關系表達式的值*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
1 1 0
請按任意鍵繼續(xù)...對于k==j==i+6,根據運算符的左結合性,先計算k==j,該式不成立,其值為0,再計算0==i+6,也不成立,故表達式值為03.3.2
邏輯運算符和表達式1.邏輯運算符在C語言中,有三種邏輯運算符:&&(與) ||(或) !(非)與運算符&&和或運算符||都是雙目運算符。具有左結合性。非運算符!為單目運算符,具有右結合性。邏輯運算符和其它運算符優(yōu)先級的關系可表示如下:“!(非)”高于“&&(與)”,“&&(與)”高于“||(或)”邏輯運算符中的“&&(與)”和“||(或)”低于關系運算符并且高于賦值運算符,“!(非)”高于算術運算符根據運算符的優(yōu)先順序可得:x>y&&u>v等價于(x>y)&&(u>v)!a==b||c<d
等價于
((!a)==b)||(c<d)a+b>c&&d+e<f
等價于
((a+b)>c)&&((d+e)<f)?。ǚ牵┧阈g運算符關系運算符&&(與)和||(或)賦值運算符高低2.邏輯運算的值邏輯運算的值也為“真”和“假”兩種,用“1”表示“真”和用“0”表示“假”。求值規(guī)則如下:&&(與):參與運算的兩個量都為真時,結果才為真,否則為假。例如,6>0&&8>1,由于6>0為真,8>1也為真,所以&&(與)的結果也為真。||(或):參與運算的兩個量只要有一個為真,結果就為真。兩個量都為假時,結果為假。例如:6>0||8<1,由于6>0為真,所以||(或)的結果也為真。!(非):參與運算量為真時,結果為假;參與運算量為假時,結果為真。例如:!(6>0)的結果為假。2.邏輯運算的值邏輯運算時,以“1”表示“真”,“0”表示“假”。但在判斷一個量是為“真”還是為“假”時,以“0”代表“假”,以非“0”的數值作為“真”。例如:由于6和8均為非“0”因此6&&8的值為“真”,即為1。3.邏輯表達式邏輯表達式的一般形式為:表達式
邏輯運算符表達式邏輯表達式的結果是式中各種邏輯運算的最后的值,以“1”表示“真”和“0”表示“假”。例3.10邏輯表達式使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ charc='k'; /*定義字符型變量*/ inti=1,j=6,k=8; /*定義整型變量*/ floatx=3e+5,y=0.86; /*定義實型變量*/ printf("%d\n",!x*!y); /*輸出邏輯表達式的值*/ printf("%d\n",i<j&&x<y);/*輸出邏輯表達式的值*/ printf("%d\n",i==6&&c&&(j=8)); /*輸出邏輯表達式的值*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
0 0 0
請按任意鍵繼續(xù)...邏輯運算符的使用注意:1.邏輯與(&&)的使用注意:
如果&&左邊表達式的值已經為“假”(0)了,右邊就不計算了。2.邏輯或(||)的使用注意:如果||左邊表達式的值已經為“真”(1)了,右邊就不用算了。邏輯表達式的課堂練習1:#include<stdio.h>main(){inta=1,b=2,c=3,i,j;i=(a==1&&b++==2);j=(b!=2||c--!=3);printf("a=%d,b=%d,c=%d,i=%d,j=%d\n",a,b,c,i,j);}以上程序運行結果是什么?邏輯表達式的課堂練習1:#include<stdio.h>main(){inta=1,b=2,c=3,i,j;i=(a!=1&&b++==2);j=(b==2||c--!=3);printf("a=%d,b=%d,c=%d,i=%d,j=%d\n",a,b,c,i,j);}以上程序運行結果是什么?#include<stdio.h>main(){intw='A',x=14,y=15;w=((x||y)&&(w<'a'));printf("w=%d\n",w);}以上程序運行結果是什么?#include<stdio.h>main(){intw='A',x=14,y=15;w=((x||++y)&&(w<'a'));printf("w=%d,y=%d\n",w,y);}以上程序運行結果是什么?3.3.3if語句用if語句構成分支結構根據給定的條件進行判斷,以決定執(zhí)行某分支程序段。1.if語句第一種形式第一種形式為基本形式(單分支結構),使用方式如下:if(表達式)語句;語義是:如果表達式的值為真,則執(zhí)行其后的語句,否則不執(zhí)行該語句。表達式的類型不限于關系表達式或邏輯表達式,它也可以是任意的數值類型(包括整型、實型、字符型等)如果是復合語句,一定要用{}括起來。例3.11輸入兩個整數,輸出其中的大數。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,b,max; /*定義變量*/ printf("輸入兩個數:"); /*輸入提示*/ scanf("%d%d",&a,&b); /*輸入a,b*/ max=a; /*假設a最大*/ if(max<b)max=b; /*如b更大,則最大值為b*/ printf("最大值:%d\n",max);/*輸出a,b的最大值*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下: 輸入兩個數:16
最大值:6
請按任意鍵繼續(xù)...2.if語句第二種形式第二種形式為if-else形式(雙分支結構),使用方式如下:if(表達式)
語句1;else
語句2;其語義是:如果表達式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2
例3.12使用if語句第二種形式改寫例3.11。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,b; /*定義變量*/ printf("輸入兩個數:"); /*輸入提示*/ scanf("%d%d",&a,&b); /*輸入a,b*/ if(a<b)printf("最大值:%d\n",b); /*如果a<b,則最大值為b*/ elseprintf("最大值:%d\n",a); /*否則,則最大值為a*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下: 輸入兩個數:16
最大值:6
請按任意鍵繼續(xù)...例3.13寫程序,判斷某一年是否為閏年。根據歷法,閏年的條件為:年份能被4整除但不能被100整除或年份能被400整除。具體程序實現如下:#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ intyear; /*年份*/ printf("輸入年份:"); /*輸入提示*/ scanf("%d",&year); /*輸入year*/ if(year%4==0&&year%100!=0 /*如年份能被4整除但不能被100整除*/ ||year%400==0)printf("%d是閏年\n",year);/*或被400整除,則為閏年*/ elseprintf("%d不是閏年\n",year); /*否則為平年*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入年份:2008 2008是閏年 請按任意鍵繼續(xù)...3.if語句第三種形式(多分支結構)第三種形式為if-else-if形式,前二種形式的if語句一般都用于兩個分支的情況。當有多個分支選擇時,可采用if-else-if語句,其一般形式如下:if(表達式1) 語句1;elseif(表達式2) 語句2;elseif(表達式3) 語句3;…elseif(表達式m) 語句m;else語句m+1;語句語義是:依次判斷表達式的值,當出現某個值為真時,則執(zhí)行其對應的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。如果所有的表達式均為假,則執(zhí)行語句m+1。然后繼續(xù)執(zhí)行后續(xù)程序。例3.14if語句第三種形式使用示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ charc; /*定義字符型變量*/ printf("輸入一個字符:"); /*輸入提示信息*/ c=getchar(); /*輸入字符*/ if(c<32)printf("是一個制控制字符\n"); elseif(c>='0'&&c<='9')printf("是一個數字\n"); elseif(c>='A'&&c<='Z')printf("是一個大寫英文字母\n"); elseif(c>='a'&&c<='z')printf("是一個小寫英文字母\n"); elseprintf("是一個其它字符\n"); system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入一個字符:&
是一個其它字符 請按任意鍵繼續(xù)...4.使用if語句注意事項使用if語句應注意以下問題:在if語句中,條件判斷表達式必須用括號括起來,在語句之后必須加分號。在if語句的三種形式中,所有的語句應為單個語句,如果要在滿足條件時執(zhí)行一組(多個)語句,則必須把這一組語句用{}
括起來組成一個復合語句5.if語句的嵌套當if語句中的執(zhí)行語句又為if語句時,則構成了if語句嵌套的情形,C語言規(guī)定,else總是與它前面最近的未配對的if相配對。在嵌套內的if語句可能是if-else型的,這時應注意if和else的配對問題。例如:if(表達式1)if(表達式2) 語句1;else 語句2;else
語句3;if(表達式1) if(表達式2)
語句1; else
語句2;else語句3;例3.15采用if語句的嵌套實現比較兩個數的大小關系。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,b; /*定義整型變量*/ printf("輸入a,b:"); /*輸入提示*/ scanf("%d%d",&a,&b); /*輸入a,b*/ if(a!=b) /*a不相等b*/ if(a>b)printf("%d>%d\n",a,b); /*a大于b*/ elseprintf("%d<%d\n",a,b); /*a小于b*/ elseprintf("%d=%d\n",a,b); /*a等于b*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入a,b:23 2<3
請按任意鍵繼續(xù)...例3.16采用if-else-if語句的嵌套實現比較兩個數的大小關系。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,b; /*定義整型變量*/ printf("輸入a,b:"); /*輸入提示*/ scanf("%d%d",&a,&b); /*輸入a,b*/ if(a<b)printf("%d<%d\n",a,b); /*a小于b*/ elseif(a>b)printf("%d>%d\n",a,b); /*a大于b*/ elseprintf("%d=%d\n",a,b); /*a等于b*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入a,b:32 3>2
請按任意鍵繼續(xù)...if語句的例子:#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1&&b++==2) if(b!=2||c--!=3) printf(“a=%d,b=%d,c=%d\n",a,b,c); elseprintf(“a=%d,b=%d,c=%d\n",a,b,c);elseprintf(“a=%d,b=%d,c=%d\n",a,b,c);}以上程序的運行結果?if語句的例子:#include<stdio.h>main(){inta=1,b=2,c=3,d=0;if(a==1)if(b!=2)if(c==3)d=1; elsed=2;elseif(c!=3)d=3; elsed=4;elsed=5;printf("d=%d\n",d);}以上程序的運行結果?3.2.4條件運算符和條件表達式條件運算符為“?”和“:”,它是一個三目運算符,條件運算符組成條件表達式的一般形式為:表達式1?表達式2:表達式3求值規(guī)則:如果表達式1的值為真,則以表達式2
的值作為條件表達式的值,否則以表達式3的值作為整個條件表達式的值對于如下條件語句:if(a>b)min=b; /*b為最小值*/elsemin=a; /*a為最小值*/可用條件表達式寫為min=(a>b)?b:a;例3.17采用條件表達式求兩個數的最小值。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,b; /*定義整型變量*/ printf("輸入a,b:"); /*輸入提示*/ scanf("%d%d",&a,&b); /*輸入a,b*/ printf("最小值=%d\n",a>b?b:a); /*輸出a,b的最小值*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入a,b:23
最小值=2
請按任意鍵繼續(xù)...3.3.5switch語句C語言還有一種用于多分支選擇的switch語句,一般形式為:switch(表達式){case常量表達式1:
語句組1;case常量表達式2:
語句組2;…case常量表達式n:
語句組n;default:
語句組n+1;}語義:計算表達式的值。逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執(zhí)行default后的語句例3.18switch語句使用示例。intmain(void) /*主函數main()*/{ intn; /*定義整型變量*/ printf("輸入n:"); /*輸入提示*/ scanf("%d",&n); /*輸入n*/ switch(n) { case1:printf("星期一\n"); case2:printf("星期二\n"); case3:printf("星期三\n");
case4:printf("星期四\n"); case5:printf("星期五\n"); case6:printf("星期六\n"); case7:printf("星期天\n"); default:printf("錯誤\n"); } system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入n:5
星期五 星期六 星期天 錯誤 請按任意鍵繼續(xù)...當輸入5之后,卻執(zhí)行了“case5:”以及以后的所有語句,輸出了“星期五”及以后的所有單詞為避免上述情況,C語言還提供了一種break語句,專用于跳出switch語句,break語句只有關鍵字break,使用格式為:break;可修改例題的程序,在每一case語句之后增加break語句,使每一次執(zhí)行之后均可跳出switch語句,從而避免輸出不應有的結果。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{intn; /*定義整型變量*/printf("輸入n:"); /*輸入提示*/scanf("%d",&n); /*輸入n*/switch(n){ case1:printf("星期一\n");break; case2:printf("星期二\n");break; case3:printf("星期三\n");break; case4:printf("星期四\n");break; case5:printf("星期五\n");break; case6:printf("星期六\n");break; case7:printf("星期天\n");break; default:printf("錯誤\n");break;
} system("PAUSE"); return0; }
程序運行時輸出參考如下: 輸入n:5
星期五 請按任意鍵繼續(xù)...雖然本例中“default:”后的break語句可省略,最好養(yǎng)成習慣在每個語句組后都加上break語句。switch語句的說明(1)switch語句體中可以沒有break語句和default語句。(2)switch語句的圓括號中的表達式的值必須是整形或者字符型,不能為實型。case后面的表達式是常量,不能含有變量。(3)執(zhí)行switch語句時,首先計算switch后圓括號內表達式的值,然后將這個值與語句體中的case后的常量比較,如果與某個常量相等,則執(zhí)行該case后的語句塊,如果沒有相等的,則執(zhí)行default后的語句塊。(4)執(zhí)行過程中如果遇到break語句,則跳出switch語句。case只作為一個入口,如果執(zhí)行完某一個case或者default語句塊后沒有遇到break,則繼續(xù)順序往下執(zhí)行,直到遇到break語句或者switch語句體末尾為止。(5)每個switch語句中default最多只能有一個,通常出現在switch的最后部分,但也可以出現在case之間或所有case之前。(6)在case后的各常量表達式的值不能相同,否則會出現錯誤。在case后,允許有多個語句,可以不用{}擴起來。switch語句的例子:#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:
switch(y) {case0:a++;break; case1:b++;break;
}case2:a++;b++;break;case3:a++;b++;}printf(“a=%d,b=%d\n",a,b);}以上程序的運行結果?switch語句的例子:#include<stdio.h>main(){inta=15,b=21,m=0;switch(a%3){ case0:m++;break; case1:m++; switch(b%2)
{ default:m++;
case0:m++;break; }}printf("m=%d\n",m);}以上程序的運行結果?3.4
循環(huán)結構程序循環(huán)結構的特點:在給定條件成立時,反復執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體3.4.1while語句while語句的一般形式為:while(表達式)
循環(huán)體語句;其中表達式是循環(huán)條件,可為任意合法的表達式。while語句的執(zhí)行過程:計算表達式的值,當值為真(非0)時,執(zhí)行循環(huán)體語句,直到表達式的值為假(0)時為止。例3.22統(tǒng)計從鍵盤輸入一行字符中包含的小寫字母的個數。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ intn=0; /*定義變量*/ charc; /*定義字符型變量*/ printf("輸入一行字符:\n"); /*輸入提示*/ c=getchar(); /*輸入一個字符*/ while(c!='\n') { /*非換行符,循環(huán)*/ if(c>='a'&&c<='z')n++;/*對小寫字母記數*/ c=getchar(); /*輸入一個字符*/ } printf("含%d個小寫字母\n",n); /*輸出小寫字母個數*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入一行字符: Thisisastring.
含12個小寫字母 請按任意鍵繼續(xù)...使用while語句應注意以下幾點:循環(huán)體如包括有一個以上的語句,則必須用{}括起來,組成復合語句。應注意循環(huán)條件的選擇以避免死循環(huán)。例3.23死循環(huán)示例。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inta,n=0; /*定義變量*/ while(a=6)printf("%d",n++); /*循環(huán)輸出n++*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}3.4.2dowhile語句dowhile語句的一般形式為:do{循環(huán)體語句;}while(表達式);表達式是循環(huán)條件dowhile語句執(zhí)行過程:先執(zhí)行一次循環(huán)體語句,再判別表達式的值,若為真(非0)則繼續(xù)循環(huán)dowhile語句和while語句的區(qū)別:
dowhile語句至少要執(zhí)行一次循環(huán)體。while語句當條件一開始就不滿足時,則循環(huán)體一次也不執(zhí)行
例3.24使用dowhile語句求1+2+…+100。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inti=1,s=0; /*定義變量*/ do { s=s+i; /*累加求和*/ i++; /*i自加1*/ }while(i<=100); printf("1+2+...+100=%d\n",s); /*輸出累加和*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
1+2+...+100=5050
請按任意鍵繼續(xù)...在一般情況下,while語句和dowhile語句都可以相互改寫。對于dowhile語句應注意以下幾點:在dowhile語句的表達式后面則必須加分號。在do和while之間的循環(huán)體由多個語句組成時,必須用{}括起來組成一個復合語句。程序舉例:#include<stdio.h>main(){intm,n;scanf("%d%d",&m,&n);while(m!=n) { while(m>n)m=m-n; while(m<n)n=n-m; }printf("m=%d\n",m);}程序運行后,當輸入1463<回車>,輸出結果是?程序舉例:#include<stdio.h>main(){inti=5;do{if(i%3==1) if(i%5==2) {printf("*%d",i);break;} i++;}while(i!=0);printf("\n");}程序運行結果是?3.4.3for語句for語句是C語言中廣泛使用的一種循環(huán)語句。其一般形式為:for(表達式1;表達式2;表達式3){ 循環(huán)體語句;}表達式1:通常用來給循環(huán)變量賦初值,一般是賦值表達式。表達式2:通常是循環(huán)條件,一般為關系表達式或邏輯表達式表達式3:通??捎脕硇薷难h(huán)變量的值,一般是賦值語句for語句的執(zhí)行過程如下:(1)首先計算表達式1的值。(2)再計算表達式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則跳出循環(huán)。(3)然后再計算表達式3的值,轉回第2步重復執(zhí)行。例3.25使用for語句求1+2+…+100。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inti,s=0; /*定義變量*/ for(i=1;i<=100;i++) s=s+i; /*累加求和*/ printf("1+2+...+100=%d\n",s); /*輸出累加和*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出如下:
1+2+...+100=5050
請按任意鍵繼續(xù)...在使用for語句中要注意以下幾點for語句中的各表達式都可省略,但分號間隔符不能少。如:for(;表達式;表達式)省去了表達式1for(表達式;;表達式)省去了表達式2for(;;)省去了全部表達式在循環(huán)變量已賦初值時,可省去表達式1,如省去表達式2或表達式3則可能造成無限循環(huán),這時應在循環(huán)體內設法結束循環(huán)。循環(huán)體可以是空語句。例3.26統(tǒng)計從鍵盤輸入一行字符的個數。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ intn=0; /*定義變量*/ printf("輸入一行字符:\n"); /*輸入提示*/ for(;getchar()!='\n';n++); /*省略表達式1,無循環(huán)體的for語句*/ printf("共含%d個字符\n",n); /*輸出字符個數*/ system("PAUSE"); /*輸出系統(tǒng)提示信息*/ return0; /*返回值0,返回操作系統(tǒng)*/}程序運行時屏幕輸出參考如下: 輸入一行字符: thisisastring.
共含17個字符 請按任意鍵繼續(xù)...循環(huán)嵌套在實際編寫程序的過程中,經常需要把一個或者多個完整的循環(huán)結構放在某一個循環(huán)體中構成多層的循環(huán),即嵌套循環(huán)。在內嵌的循環(huán)結構中還可以繼續(xù)嵌套循環(huán)。每一層循環(huán)結構在邏輯上都是必須是完整的。通常把內層的循環(huán)稱為“內循環(huán)”,外面的循環(huán)稱為“外循環(huán)”。#include<stdio.h>main(){inti,j,sum;for(i=3;i>=1;i--){sum=0;for(j=1;j<=i;j++)sum+=i*j;}printf("%d\n",sum);}以上程序運行結果?3.4.4轉移語句程序中如果需要改變程序的正常流向,可以使用本小節(jié)介紹的轉移語句。在C語言中提供了4種轉移語句:goto,break,continue和return。其中的return語句只能出現在被調函數中,用于返回主調函數1.goto語句goto語句也稱為無條件轉移語句在結構化程序設計中一般不主張使用goto語句,以免造成程序流程的混亂,使理解和調試程序都產生困難本書不討論goto語句的具體使用方法2.break語句break語句只能用在switch語句或循環(huán)語句中,作用是跳出switch語句或跳出本層循環(huán),轉去執(zhí)行后面的程序。break語句的一般形式為:break;例3.27使用break語句求1+2+…+100。#include<stdio.h> /*標準輸入/出頭文件*/#include<stdlib.h> /*包含庫函數system()所需信息*/intmain(void) /*主函數main()*/{ inti=1,s=0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土地租賃協(xié)議2023
- 部編版六年級語文上冊第八單元知識梳理填空
- (2024)1-4酸鈉鹽生產建設項目可行性研究報告(一)
- 2023年天津市益中學校高考語文模擬試卷
- 2023年家政服務項目融資計劃書
- 零食行業(yè)藍皮書
- 電力電纜模擬習題+參考答案
- 養(yǎng)老院老人生活設施維修人員管理制度
- 養(yǎng)老院老人訪客管理制度
- 2024年旅游產品銷售與推廣合同3篇
- 北京市西城區(qū)2022-2023學年六年級上學期數學期末試卷(含答案)
- 2024秋期國家開放大學本科《經濟學(本)》一平臺在線形考(形考任務1至6)試題及答案
- 人民日報出版社有限責任公司招聘筆試題庫2024
- 華為MA5800配置及調試手冊
- 2024年建筑業(yè)10項新技術
- (2024年)剪映入門教程課件
- 教育專家報告合集:年度得到:沈祖蕓全球教育報告(2023-2024)
- 中大班社會領域《我的情緒小屋》課件
- GB/T 40276-2021柔巾
- 四年級上冊道法知識點匯總
- 蘇教版三年級數學上冊教材分析各單元目標解讀
評論
0/150
提交評論