版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章程序設(shè)計(jì)控制結(jié)構(gòu)1
程序的結(jié)構(gòu):寫(xiě)文章有文章的結(jié)構(gòu)建房子有房子的結(jié)構(gòu)制造機(jī)械產(chǎn)品由機(jī)械產(chǎn)品的結(jié)構(gòu)………
那么編寫(xiě)程序是否有程序的結(jié)構(gòu)呢?學(xué)習(xí)的意義
程序結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)YES!第3章:程序設(shè)計(jì)的控制結(jié)構(gòu)
23.1順序結(jié)構(gòu)程序設(shè)計(jì)3.2選擇結(jié)構(gòu)程序設(shè)計(jì)3.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)學(xué)習(xí)目標(biāo)
了解結(jié)構(gòu)化程序設(shè)計(jì)的基本思想;掌握順序結(jié)構(gòu)的基本語(yǔ)句;掌握選擇結(jié)構(gòu)的語(yǔ)句并編程;掌握循環(huán)結(jié)構(gòu)的語(yǔ)句并編程;綜合使用三種程序結(jié)構(gòu)編程解決實(shí)際問(wèn)題。學(xué)習(xí)內(nèi)容
3結(jié)構(gòu)化程序設(shè)計(jì)思想C語(yǔ)言采用的是結(jié)構(gòu)化程序設(shè)計(jì)思想?;舅枷耄喝魏纬绦蚨伎梢酝ㄟ^(guò)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)表示。復(fù)雜程序是經(jīng)過(guò)這3種基本結(jié)構(gòu)反復(fù)嵌套使用而構(gòu)成的。優(yōu)點(diǎn):程序模塊結(jié)構(gòu)清楚,層次分明,易于讀寫(xiě)。4程序控制結(jié)構(gòu)(1)順序結(jié)構(gòu)ABCA條件ABTF(2)分支結(jié)構(gòu)條件TF(3)循環(huán)結(jié)構(gòu)ATF條件A條件TF53.1順序結(jié)構(gòu)程序設(shè)計(jì)順序結(jié)構(gòu)是最簡(jiǎn)單的一種程序結(jié)構(gòu),流程按語(yǔ)句從上到下的順序依次執(zhí)行的。順序結(jié)構(gòu)中經(jīng)常使用的是表達(dá)式語(yǔ)句、函數(shù)調(diào)用語(yǔ)句。程序中沒(méi)有用于分支選擇或循環(huán)的控制語(yǔ)句。
63.1.1賦值語(yǔ)句賦值語(yǔ)句由一個(gè)賦值表達(dá)式加上分號(hào)“;”組成,其一般形式為:
賦值表達(dá)式;賦值語(yǔ)句是程序中最基本的語(yǔ)句。例如:x=10 /*賦值表達(dá)式,非表達(dá)式語(yǔ)句*/x=10; /*賦值語(yǔ)句*/x=y=z=5; /*連續(xù)賦值語(yǔ)句*/73.1.2基本的輸入、輸出函數(shù)標(biāo)準(zhǔn)庫(kù)函數(shù)中提供了一系列的輸入輸出函數(shù):scanf格式輸入函數(shù)printf格式輸出函數(shù)
getchar字符輸入函數(shù)putchar字符輸出函數(shù)因?yàn)檩斎?輸出由開(kāi)發(fā)系統(tǒng)提供的庫(kù)函數(shù)實(shí)現(xiàn),函數(shù)的原型是在頭文件stdio.h中定義,因此在使用庫(kù)函數(shù)時(shí),應(yīng)在源程序的開(kāi)頭使用如下預(yù)編譯命令語(yǔ)句:
#include<stdio.h> 或
#include"stdio.h"
8格式輸出函數(shù)printf(P50,提到scanf前講)一般格式printf("格式控制字符串",表達(dá)式1,表達(dá)式2,…,表達(dá)式n);功能按照“格式控制字符串”的要求,將表達(dá)式1,表達(dá)式2,…,表達(dá)式n的值顯示在計(jì)算機(jī)屏幕上。
說(shuō)明格式控制字符串用于指定輸出格式。它包含兩類(lèi)字符:
常規(guī)字符:包括可顯示字符和用轉(zhuǎn)義字符表示的字符。
格式控制符:以%開(kāi)頭的一個(gè)或多個(gè)字符,以說(shuō)明輸出數(shù)據(jù)的類(lèi)型、形式、長(zhǎng)度、小數(shù)位數(shù)等。其格式為:%[修飾符]格式轉(zhuǎn)換字符例:
longintx=0x8AB6;printf(“TheValueofxis%ld\n”,x);常規(guī)字符常規(guī)字符(轉(zhuǎn)義符)格式控制符(修飾符)格式控制符(格式轉(zhuǎn)換符)9printf使用時(shí)的注意事項(xiàng)(1)格式控制字符串可以不包含任何格式控制符。printf(“howareyou?\n”);//只有一個(gè)字符串參數(shù),輸出為:howareyou?printf(“howoldareyou?\n”,20);//帶有兩個(gè)參數(shù),20沒(méi)有意義,輸出為:howoldareyou?已知:inta=2;函數(shù)調(diào)用:printf("a*a=%d,a+5=%d\n",a*a,a+5);實(shí)際輸出:
a*a=4,a+5=7(2)當(dāng)格式控制字符串中既含有常規(guī)字符,又包含有格式控制符時(shí),則表達(dá)式的個(gè)數(shù)應(yīng)與格式控制符的個(gè)數(shù)一致。此時(shí),常規(guī)字符原樣輸出,而格式控制符的位置上輸出對(duì)應(yīng)的表達(dá)式的值,其對(duì)應(yīng)的順序是:從左到右的格式控制符對(duì)應(yīng)從左到右的表達(dá)式。10printf使用時(shí)的注意事項(xiàng)(3)
如果格式控制字符串中格式控制符的個(gè)數(shù)多于表達(dá)式的個(gè)數(shù),則余下的格式控制符的值將是不確定的。printf("5+3=%d,5-3=%d,5*3=%d",5+3,5-3);輸出結(jié)果將是:5+3=8,5–3=2,5*3=-28710輸出隨機(jī)charch='A';printf("ch=%c",ch);//輸出結(jié)果:ch=A(以字符形式輸出)printf("ch=%d",ch);//輸出結(jié)果:ch=65(以'A'字符的ASCII碼形式輸出)(4)不同類(lèi)型的表達(dá)式要使用不同的格式轉(zhuǎn)換符,同一表達(dá)式如果按照不同的格式轉(zhuǎn)換符來(lái)輸出,其結(jié)果可能是不一樣的。
11#include<stdio.h>voidmain(){ intx=65,y=97;
printf("%d,%d\n",x,y); printf("x:%c,y:%c\n",x,y); }例3-3輸出字符及其ASCII碼。65,97x:A,y:a運(yùn)行結(jié)果:
12類(lèi)型格式字符含義d以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))o以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴0)x以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴Ox)u以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)f以小數(shù)形式輸出單、雙精度實(shí)數(shù)e以指數(shù)形式輸出單、雙精度實(shí)數(shù)g選%f或%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)c輸出單個(gè)字符s輸出字符串格式字符串的一般形式為(帶[]的項(xiàng)為可選項(xiàng)):
printf函數(shù)的格式控制符%[標(biāo)志][輸出最小寬度][.精度][長(zhǎng)度]類(lèi)型13字符含義l長(zhǎng)度定義,輸出長(zhǎng)整形類(lèi)型,可以加在字符d、o、x、u之前h長(zhǎng)度定義,輸出短整形類(lèi)型m輸出數(shù)據(jù)最小寬度;若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0(小數(shù)點(diǎn)也算作一位).n對(duì)實(shí)數(shù),表示輸出n位小數(shù);對(duì)字符串,表示截取n個(gè)字符-結(jié)果左對(duì)齊,右邊填空格+輸出符號(hào)(正號(hào)或負(fù)號(hào))格式字符串的一般形式為(帶[]的項(xiàng)為可選項(xiàng)):%[標(biāo)志][輸出最小寬度][.精度][長(zhǎng)度]類(lèi)型第4次課結(jié)束結(jié)合P51舉例③,其它舉例自學(xué),④⑤⑥⑦上機(jī)演示講解14格式輸入函數(shù)scanf(P47)一般格式scanf(“格式控制字符串”,變量1的地址,變量2的地址,…,變量n的地址);功能在第一個(gè)參數(shù)格式控制字符串的控制下,接受用戶的鍵盤(pán)輸入,并將輸入的數(shù)據(jù)依此存放在變量1、變量2、……、變量n中
。
inta;scanf("%d",&a);取地址運(yùn)算符(與按位“與”同符號(hào)),只能作用于變量!格式字符串以%開(kāi)頭,在%后面跟有各種格式字符,以說(shuō)明輸入數(shù)據(jù)的類(lèi)型、長(zhǎng)度等。格式控制符與后續(xù)參數(shù)中的變量地址的原則上應(yīng)有一一對(duì)應(yīng)的關(guān)系。已知:
inta,b;函數(shù)調(diào)用:scanf("%d%d",&a,&b);假設(shè)輸入:10□20↙變量的值:a的值是10,b的值是20第5次課15#include<stdio.h>voidmain(){ inta,b,c;
scanf("%d%d%d",&a,&b,&c);/*輸入整型數(shù)據(jù)*/ printf(“a=%d,b=%d,c=%d”,a,b,c);/*輸出數(shù)據(jù)*/}例3-1輸入多個(gè)整數(shù)。a=10,b=20,c=30運(yùn)行結(jié)果(假設(shè)輸入為:102030↙):
16格式字符串的一般形式為(帶[]的項(xiàng)為可選項(xiàng)):類(lèi)型格式字符含義d輸入十進(jìn)制整數(shù)o輸入八進(jìn)制整數(shù)x輸入十六進(jìn)制整數(shù)f或e輸入實(shí)數(shù)(用小數(shù)形式或指數(shù)形式)c輸入單個(gè)字符s輸入字符串
scanf函數(shù)的格式控制符
%[*][輸入數(shù)據(jù)寬度][長(zhǎng)度]類(lèi)型17字符含義l指定長(zhǎng)度:輸入長(zhǎng)整型數(shù)據(jù)(%ld,%lo,%lx)及雙精度型浮點(diǎn)數(shù)(%lf,%le)h指定長(zhǎng)度:輸入短整型數(shù)據(jù)(%hd,%ho,%hx)輸入數(shù)據(jù)寬度指定輸入數(shù)據(jù)所占字符數(shù)(寬度)*表示該輸入項(xiàng),讀入后不賦予相應(yīng)的變量
格式字符串的一般形式為(帶[]的項(xiàng)為可選項(xiàng)):%[*][輸入數(shù)據(jù)寬度][長(zhǎng)度]類(lèi)型*?18使用scanf函數(shù)注意事項(xiàng)(結(jié)合P49舉例,舉例自學(xué))
(1)如果相鄰兩個(gè)格式控制符之間,不指定數(shù)據(jù)分隔符(如逗號(hào)、冒號(hào)等),則相應(yīng)的兩個(gè)輸入數(shù)據(jù)之間,至少用一個(gè)空格分隔,或者用Tab鍵分隔,或者輸入一個(gè)數(shù)據(jù)后,按回車(chē),然后再輸入下一個(gè)數(shù)據(jù)。例如:
scanf("%d%d",&num1,&num2);假設(shè)給num1輸入12,給num2輸入36,則正確的輸入操作為:
12□36↙(說(shuō)明:□表示空格)或者
12↙36↙使用“↙”符號(hào)表示按回車(chē)鍵操作,在輸入數(shù)據(jù)操作中的作用是,通知系統(tǒng)輸入操作結(jié)束。19例如:
scanf("%d:%d:%d",&h,&m,&s);假設(shè)給h輸入12,給m輸入30,給s輸入10,正確的輸入操作為:
12:30:10↙
(2)格式控制字符串中出現(xiàn)的常規(guī)字符(包括轉(zhuǎn)義字符),務(wù)必原樣輸入。再例如:
scanf("num1=%d,num2=%d\n",&num1,&num2);
假設(shè)給num1輸入12,給num2輸入36,正確的輸入操作為:num1=12,num2=36\n↙例如:
scanf("%3c%3c",&ch1,&ch2);假設(shè)輸入abcdefg↙,則系統(tǒng)將讀取的“abc”中的'a'賦給變量ch1;將讀取的"def"中的'd'賦給變量ch2。(3)當(dāng)格式控制字符串中指定了輸入數(shù)據(jù)的域?qū)抴idth時(shí),將讀取輸入數(shù)據(jù)中相應(yīng)的width位,但按需要的位數(shù)賦給相應(yīng)的變量,多余部分被舍棄。20(4)當(dāng)格式控制字符串中含有抑制符‘*’時(shí),表示本輸入項(xiàng)對(duì)應(yīng)的數(shù)據(jù)讀入后,不賦給相應(yīng)的變量(該變量由下一個(gè)格式指示符輸入)。例如:
scanf("%2d%*2d%3d",&num1,&num2);printf("num1=%d,num2=%d\n",num1,num2);假設(shè)輸入123456789↙輸出結(jié)果為:num1=12,num2=567。
例如:
scanf("%c%c%c",&ch1,&ch2,&ch3);假設(shè)輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。(5)*
使用格式控制符%c輸入單個(gè)字符時(shí),空格和轉(zhuǎn)義字符均作為有效字符被輸入。21(6)輸入數(shù)據(jù)時(shí),遇到以下情況,系統(tǒng)認(rèn)為該數(shù)據(jù)結(jié)束:
遇到空格,或者回車(chē)鍵,或者Tab鍵。
遇到輸入域?qū)挾冉Y(jié)束。例如“%3d”,只取3列。
遇到非法輸入。比方說(shuō),在輸入數(shù)值數(shù)據(jù)時(shí),遇到字母等非數(shù)值符號(hào)。例如:
scanf("%d",a);如果輸入為:12a3↙,a的值將是12。例如:scanf("%d,%d",&a,&b);如果輸入為:12a34↙,那么a的值將是12,b的值將無(wú)法預(yù)測(cè)。正確的輸入是:12,34↙(7)當(dāng)一次scanf調(diào)用需要輸入多個(gè)數(shù)據(jù)項(xiàng)時(shí),如果前面數(shù)據(jù)的輸入遇到非法字符,并且輸入的非法字符不是格式控制字符串中的常規(guī)字符,那么,這種非法輸入將影響后面數(shù)據(jù)的輸入,導(dǎo)致數(shù)據(jù)輸入失敗。(注意第19頁(yè))22(8)為改善人機(jī)交互性,同時(shí)簡(jiǎn)化輸入操作,在設(shè)計(jì)輸入操作時(shí),一般先用printf()函數(shù)輸出一個(gè)提示信息,再用scanf()函數(shù)進(jìn)行數(shù)據(jù)輸入。例如:將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:printf("num1=");scanf("%d",&num1);printf("num2=");scanf("%d",&num2);23#include<stdio.h>voidmain(){ chara,b;
scanf("a:%c,b:%c",&a,&b); printf("a=%c,b=%c\n",a,b);}例3-2輸入字符。a=M,b=N運(yùn)行結(jié)果(假設(shè)輸入為:a:M,b:N↙):
24字符的輸入getchar函數(shù)
功能:從鍵盤(pán)上輸入一個(gè)字符一般形式:getchar();
例3-4輸入單個(gè)字符。#include<stdio.h>voidmain(){ charc; c=getchar();/*取得用戶鍵盤(pán)輸入字符,賦給字符變量*/ putchar(c);/*將字符變量中的字符輸出到屏幕*/}a運(yùn)行結(jié)果(假設(shè)輸入為:a↙):
25例3-5依次取回輸入字符#include<stdio.h>voidmain(){ charc1,c2,c3; c1=getchar();
/*取第一個(gè)輸入字符*/ c2=getchar();
/*取第二個(gè)輸入字符*/ c3=getchar();
/*取第三個(gè)輸入*/ putchar(c1); putchar(c2); putchar(c3); putchar(getchar()); /*直接作為表達(dá)式使用*/}abcd運(yùn)行結(jié)果(假設(shè)輸入為:abcdefg↙):
26字符輸入的說(shuō)明:如果程序執(zhí)行到getchar函數(shù),則會(huì)一直停留,直到收到鍵盤(pán)輸入,再繼續(xù)向下執(zhí)行其后的語(yǔ)句。getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理;即使輸入多個(gè)字符,函數(shù)也只接收第一個(gè)字符。如果需要輸入多個(gè)字符,可以連續(xù)使用多個(gè)getchar,依次取回輸入字符。27字符的輸出putchar函數(shù)
功能:在顯示器上輸出單個(gè)字符
一般形式:putchar(ch);
參數(shù)ch可以是:
字符變量 字符常量 整型數(shù)據(jù)常量(對(duì)應(yīng)的ASCII字符) 特殊字符 轉(zhuǎn)義字符28常用轉(zhuǎn)義字符29例3-6連續(xù)輸出單個(gè)字符構(gòu)成句子#include<stdio.h>voidmain(){ charc1='H',c2='E',c3='L',c4='O';/*定義字符變量并賦值*/
putchar(c1);
/*輸出字符變量的值*/
putchar(c2); putchar(c3); putchar(c3); putchar(c4);
putchar('\t');
/*輸出Tab制表鍵*/
putchar(87);
/*輸出字符W*/
putchar(‘!');
/*輸出字符!*/
putchar('\n');
/*輸出回車(chē)換行符*/}HELLO W!運(yùn)行結(jié)果:
303.4綜合舉例(順序程序設(shè)計(jì)P78)例3-24輸入圓的半徑,求圓的周長(zhǎng)和面積。
#include"stdio.h"
voidmain() { floatr; printf("Pleaseinputtheradius:\n"); scanf(“%f”,&r); //輸入半徑
printf(“circ=%.2f\n”,2*3.1415926*r);//周長(zhǎng) printf(“area=%.2f\n”,3.1415926*r*r);//面積
}教材此處有誤,不應(yīng)為dPleaseinputtheradius:30↙circ=188.50area=2827.43運(yùn)行結(jié)果:
313.4綜合舉例(順序程序設(shè)計(jì)P79)例3-25將輸入的大寫(xiě)字母改成小寫(xiě)字母。#include"stdio.h"voidmain(){charc1,c2;printf(“Pleaseinputacapitalletter:”);//輸入大寫(xiě)字母c1=getchar();c2=c1+32;printf("Thelowercaseletterof\"%c\"is\"%c\".\n",c1,c2);}Pleaseinputacaptialletter:A↙Thelowercaseletterof"A"is"a".運(yùn)行結(jié)果:
323.2選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)是根據(jù)給定的條件進(jìn)行判斷,由判斷的結(jié)果決定執(zhí)行兩個(gè)或多個(gè)分支程序段的一支。通常采用if-else語(yǔ)法(教材有誤,不是if-case)或switch-case語(yǔ)法。條件語(yǔ)句1
語(yǔ)句2TF33說(shuō)明:
(1)
“}”后不加分號(hào)(2)語(yǔ)法上和單一語(yǔ)句相同(3)復(fù)合語(yǔ)句可嵌套(4)復(fù)合語(yǔ)句內(nèi)定義的變量只能在復(fù)合語(yǔ)句內(nèi)使用。
復(fù)合語(yǔ)句將多個(gè)語(yǔ)句用大括號(hào)“{}”括起來(lái)組成的一個(gè)語(yǔ)句。
{inta=2,b=3,c;c=a+b;printf("c=%d\n",c);}一般形式為:
{[數(shù)據(jù)說(shuō)明部分;]執(zhí)行語(yǔ)句部分;}
(補(bǔ)充)例:#include<stdio.h>voidmain(){intx=10,y=20,z;
z=x+y;
{intz;z=x*y;printf("z=%d\n",z);//輸出復(fù)合語(yǔ)句中z的值}printf("z=%d\n",z);//輸出復(fù)合語(yǔ)句外z的值}輸出結(jié)果:z=200z=303.2.1復(fù)合語(yǔ)句和空語(yǔ)句34
while(getchar()!='\n')
;本語(yǔ)句的功能是,只要從鍵盤(pán)輸入的字符不是回車(chē)則重新輸入。這里的循環(huán)體為空語(yǔ)句。
空語(yǔ)句只有分號(hào)“;”組成的語(yǔ)句稱(chēng)為空語(yǔ)句??照Z(yǔ)句是什么也不執(zhí)行的語(yǔ)句。在程序中空語(yǔ)句可用來(lái)作空循環(huán)體。353.2.2關(guān)系運(yùn)算符、邏輯運(yùn)算符與條件運(yùn)算符選擇結(jié)構(gòu)中,經(jīng)常采用結(jié)果為0或1的關(guān)系表達(dá)式、邏輯表達(dá)式來(lái)作為判斷條件。條件語(yǔ)句1
語(yǔ)句2TF36關(guān)系運(yùn)算是對(duì)兩個(gè)值的大小等關(guān)系進(jìn)行比較。關(guān)系運(yùn)算的表達(dá)式稱(chēng)為關(guān)系表達(dá)式。C語(yǔ)言提供了6種關(guān)系運(yùn)算符:1.關(guān)系運(yùn)算符和關(guān)系表達(dá)式
37關(guān)系表達(dá)式的結(jié)果是1或0。表達(dá)式關(guān)系成立,即為真,則結(jié)果是1;表達(dá)式不成立,即為假,結(jié)果為0。注意:C語(yǔ)言用0表示假,非0表示真。一個(gè)關(guān)系表達(dá)式的值不是0就是1,0表示假,1表示真。例如
關(guān)系表達(dá)式:a>b如果a=10,b=20,那么表達(dá)式不成立,結(jié)果為0。如果a=30,b=20,那么表達(dá)式成立,結(jié)果為1。38關(guān)系運(yùn)算符的優(yōu)先級(jí)
算術(shù)運(yùn)算符高移位運(yùn)算符關(guān)系運(yùn)算符&、|、^賦值運(yùn)算符低例如:
c>a+b等價(jià)于:a>b!=c等價(jià)于:a==b<c等價(jià)于:
a=b>c等價(jià)于:
a>>2<c+d等價(jià)于:a&4>b|c等價(jià)于:
c>(a+b)(a>b)!=ca==(b<c)a=(b>c)(a>>2)<(c+d)(a&(4>b))|c再例如:
a<=b+c 等價(jià)于:a<=(b+c)d=a==b>c 等價(jià)于:d=(a==(b>c))d=a>b>c
等價(jià)于:d=((a>b)>c)39已知:a=1;b=2;c=3;
問(wèn):d=a!=c==a<b<c;的值?
答:d的值為1。等價(jià)于:d=((a!=c)==((a<b)<c));例:求表達(dá)式的值inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表達(dá)式值1//表達(dá)式值1//表達(dá)式值0//d=1//f=040關(guān)系運(yùn)算注意:例若a=0;b=0.5;x=0.3;
則a<=x<=b的值為
0例
5>2>7>8在C中是允許的,值為0例
inti=1,j=7,a;a=i+(j%4!=0);
則a=2例‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10例
應(yīng)避免對(duì)實(shí)數(shù)作相等或不等的判斷如1.0/3.0*3.0==1.0結(jié)果為可改寫(xiě)為:fabs(1.0/3.0*3.0-1.0)<1e-6041例3-7比較大小#include"stdio.h"voidmain(){ charc1='a',c2='b'; inti=10,j=20,k=30;
printf("c1=%c,c2=%c\n",c1,c2); printf("resultofc1>c2is:%d\n",c1>c2);printf("i=%d,j=%d,k=%d\n",i,j,k);printf("resultofk==i+jis:%d\n",k==i+j);printf(“resultofc1<iis:%d\n”,c1<i);/*比較字符變量c1和整型變量i的大小*/ }c1=a,c2=bresultofc1>c2is:0i=10,j=20,k=30resultofk==i+jis:1resultofc1<iis:0運(yùn)行結(jié)果:422.邏輯運(yùn)算符和邏輯表達(dá)式
邏輯運(yùn)算符:對(duì)邏輯量進(jìn)行與、或、非的運(yùn)算。
邏輯運(yùn)算真值表:運(yùn)算結(jié)果是1或0,1表示真,0表示假。43!、~、++、--、sizeof高算術(shù)運(yùn)算符移位運(yùn)算符關(guān)系運(yùn)算符&、|、^&&、||賦值運(yùn)算符低例如:
a<=x&&x<=b等價(jià)于:a>b&&x>y等價(jià)于:a==b||x==y等價(jià)于:!a||a>b等價(jià)于:!a>b等價(jià)于:c=a||b等價(jià)于:a|7&&b&8等價(jià)于:a>>2&&b<<1等價(jià)于:2.邏輯運(yùn)算符和邏輯表達(dá)式
邏輯表達(dá)式
用邏輯運(yùn)算符連接邏輯量或關(guān)系表達(dá)式而成的表達(dá)式稱(chēng)為邏輯表達(dá)式。邏輯表達(dá)式的一般形式為:表達(dá)式邏輯運(yùn)算符表達(dá)式例:a<b&&b<c、x>10||x<-10、!x&&!y邏輯運(yùn)算符的優(yōu)先級(jí)
(a<=x)&&(x<=b)(a>b)&&(x>y)(a==b)||(x==y)(!a)||(a>b)(!a)>bc=(a||b)(a|7)&&(b&8)(a>>2)&&(b<<1)表示“a小于等于x,且x小于等于b”。切勿寫(xiě)為a<=x<=b44已知:a=4;b=5;
問(wèn):c=b>3&&2||8<b-!a;的值?
答:c的值為1。等價(jià)于:c=(((b>3)&&2)||(8<(b–(!a))));
例:求表達(dá)式的值a=4;b=5;!aa&&ba||b!a||b4&&0||2‘c’&&‘d’//值為0//值為1//值為1//值為1//值為1//值為1第5次課結(jié)束45邏輯運(yùn)算注意:邏輯表達(dá)式求解時(shí),并非所有的邏輯運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行該運(yùn)算符。例a&&b&&c//只在a為真時(shí),才判別b的值;
只在a、b都為真時(shí),才判別c的值例
a||b||c//只在a為假時(shí),才判別b的值;
只在a、b都為假時(shí),才判別c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//結(jié)果:m=0,n=1操作數(shù)可以是任何類(lèi)型的數(shù)據(jù)。例如: ‘a(chǎn)’>=15 /*表達(dá)式結(jié)果為1*/ !10.0 /*表達(dá)式結(jié)果為0*/不做(n=c>d)第6次課463.條件運(yùn)算符與條件表達(dá)式“?:”是C語(yǔ)言中唯一的三目運(yùn)算符。一般形式:表達(dá)式1
?表達(dá)式2
:表達(dá)式3執(zhí)行過(guò)程例如:max=(a>b)?a:b;該語(yǔ)句實(shí)現(xiàn)的是求a、b兩個(gè)數(shù)中的大數(shù)。運(yùn)算結(jié)果為:表達(dá)式2的值表達(dá)式1假真運(yùn)算結(jié)果為:表達(dá)式3的值例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);例(a==b)?’Y’:’N’//若a等于b,表達(dá)式的值為‘Y’,否則為‘N’(x%2==1)?1:0//若x是奇數(shù),表達(dá)式的值為1,是偶數(shù)則為0(x>=0)?x:-x//表達(dá)式的值是x的絕對(duì)值(c>=‘a(chǎn)’&&c<=‘z’)?c-’a’+’A’:c//若c是小寫(xiě)字母,表達(dá)式的值為其大寫(xiě)字母;否則值為c。注意:c-‘a(chǎn)’+‘A’=c-(‘a(chǎn)’-’A’)=c-3247條件運(yùn)算符?和:必須一起使用,不能分開(kāi)。條件運(yùn)算符的優(yōu)先級(jí)別很低,僅僅高于賦值運(yùn)算符和逗號(hào)運(yùn)算符,而比其他運(yùn)算符都低。所以max=(a>b)?a:b;也可以寫(xiě)成max=a>b?a:b;形式。條件運(yùn)算符可嵌套
如x>0?1:(x<0?-1:0)結(jié)合方向:自右向左
如a>b?a:c>d?c:d
a>b?a:(c>d?c:d)表達(dá)式expr1、expr2、expr3類(lèi)型可不同,表達(dá)式值取較高的類(lèi)型。例x?‘a(chǎn)’:‘b’//x=0,表達(dá)式值為‘b’;x≠0,表達(dá)式值為‘a(chǎn)’x>y?1:1.5//x>y,值為1.0;x<y,值為1.5(x%2==1)?"odd":"even"條件運(yùn)算符和條件表達(dá)式注意48例3-8輸入整數(shù)x,按右邊的函數(shù)檢驗(yàn)x的正負(fù),并計(jì)算x的絕對(duì)值。
#include"stdio.h"
voidmain() { intx,y; scanf("%d",&x); y=x>0?1:(x<0?–1:0); printf("y=%d\n",y); printf("abs(x)=%d\n",x>=0?x:-x); }-21↙y=-1abs(x)=21運(yùn)行結(jié)果:
49運(yùn)算符總結(jié):
總體上講,單目運(yùn)算符都是同等優(yōu)先級(jí)的,具有右結(jié)合性,并且優(yōu)先級(jí)比雙目運(yùn)算符和三目運(yùn)算符都高。三目運(yùn)算符的優(yōu)先級(jí)比雙目運(yùn)算符要低,但高于賦值運(yùn)算符和逗號(hào)運(yùn)算符。逗號(hào)運(yùn)算符的優(yōu)先級(jí)最低,其次是賦值運(yùn)算符。只有單目運(yùn)算符、賦值運(yùn)算符和條件運(yùn)算符具有右結(jié)合性,其它運(yùn)算符都是左結(jié)合性。雙目運(yùn)算符中,算術(shù)運(yùn)算符的優(yōu)先級(jí)最高,邏輯運(yùn)算符的優(yōu)先級(jí)最低。
單目運(yùn)算符高算術(shù)運(yùn)算符移位運(yùn)算符關(guān)系運(yùn)算符位運(yùn)算符邏輯運(yùn)算符條件運(yùn)算符賦值運(yùn)算符逗號(hào)運(yùn)算符低到現(xiàn)在為止,我們已經(jīng)學(xué)習(xí)了30多個(gè)運(yùn)算符。掌握它們的優(yōu)先級(jí)關(guān)系特別重要。優(yōu)先級(jí)的記憶規(guī)則:503.2.3選擇結(jié)構(gòu)的程序設(shè)計(jì)選擇結(jié)構(gòu)有:使用if語(yǔ)句的條件選擇結(jié)構(gòu)使用switch語(yǔ)句的開(kāi)關(guān)選擇結(jié)構(gòu)兩種形式。if語(yǔ)句簡(jiǎn)單if形式if-else形式if-else-if形式嵌套的if語(yǔ)句513.2.3選擇結(jié)構(gòu)的程序設(shè)計(jì)1.if語(yǔ)句
簡(jiǎn)單if語(yǔ)句形式
if(表達(dá)式)語(yǔ)句;格式:執(zhí)行流程:語(yǔ)句表達(dá)式TF含義:如果表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句而繼續(xù)執(zhí)行if語(yǔ)句之后的程序。例3-9判斷學(xué)生成績(jī)是否及格 #include"stdio.h"
voidmain() { intgrade; printf("Pleaseinputyourgrade:"); scanf("%d",&grade);
if(grade>=60) printf("Good!\n"); }Pleaseinputyourgrade:80↙Good!運(yùn)行結(jié)果:
523.2.3選擇結(jié)構(gòu)的程序設(shè)計(jì)1.if語(yǔ)句
if_else形式
if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;格式:執(zhí)行流程:表達(dá)式語(yǔ)句1語(yǔ)句2TF含義:如果表達(dá)式的值為真,則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2。例3-10判斷兩個(gè)整數(shù)的是否相等 #include"stdio.h"
voidmain() { inta,b; printf("Pleaseinputtwointegernumbers:"); scanf("%d%d",&a,&b);
if(a==b) printf("Equal!"); else printf("Unequal!"); }Pleaseinputtwonumbers:80100↙Unequal!運(yùn)行結(jié)果:
531.if語(yǔ)句
if_else_if形式
if(表達(dá)式1)語(yǔ)句1;elseif(表達(dá)式2)語(yǔ)句2;elseif(表達(dá)式3)語(yǔ)句3;……[else語(yǔ)句n;]格式:執(zhí)行流程:表達(dá)式1語(yǔ)句1語(yǔ)句2F表達(dá)式2表達(dá)式3F語(yǔ)句3語(yǔ)句nTFTT含義:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)向后執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n。54例3-11比較兩個(gè)數(shù)的大小#include"stdio.h"voidmain(){ inta,b;
printf("Pleaseinputtwointegernumbers:"); scanf("%d%d",&a,&b);
if(a==b) printf(“Equal!”);//此處教材有誤,去掉“max”
elseif(a<b) printf("%dislargerthan%d!\n",b,a);
else//注意與對(duì)應(yīng)if對(duì)齊,教材排版不妥
printf("%dislargerthan%d!\n",a,b); }Pleaseinputtwonumbers:80100↙100islargerthan80!運(yùn)行結(jié)果:
Pleaseinputtwonumbers:100100↙Equal!另一種運(yùn)行結(jié)果:
55例3-12判斷學(xué)生成績(jī)的級(jí)別#include<stdio.h>voidmain(){ intgrade;
printf("Pleaseinputyourgrade(0-100):"); scanf("%d",&grade);
if(grade>100||grade<0) printf("%disaninvalidvalue.\n",grade); elseif(grade>=80) printf("%disGOOD!",grade);
elseif(grade>=60) printf("%disOK!",grade);
else
printf("%disNOTGOOD!",grade); }//注意if與對(duì)應(yīng)else對(duì)齊,教材排版不妥Pleaseinputyourgrade(0-100):89↙89isGOOD!運(yùn)行結(jié)果:
56if語(yǔ)句嵌套:
一般形式:if(expr1)
if(expr2)statement1;elsestatement2;else
if(expr3)statement3;elsestatement4;內(nèi)嵌if內(nèi)嵌ifif(expr1)
if(expr2)statement1;
內(nèi)嵌ifif(expr1){
if(expr2)statement1;}elsestatement2;
內(nèi)嵌ifif(expr1)if(expr2)statement1;else
statement2;else
statement3;內(nèi)嵌if57例3-13比較兩個(gè)數(shù)的大小
#include<stdio.h>
voidmain(){inta,b;printf(“Pleaseinputtwonumbers:");scanf("%d%d",&a,&b);printf(“a=%d,b=%d”,a,b);if(a!=b)if(a<b)printf(“a<b\n");elseprintf(“a>b\n");elseprintf(“a==b\n");}運(yùn)行結(jié)果:Pleaseinputtwonumbers:80100↙a=100,b=80a>b58例3-14求三個(gè)數(shù)中的最大數(shù)#include<stdio.h>
voidmain(){ intx,y,z,max;
printf("Pleaseinputthreeintegernumber:"); scanf("%d%d%d",&x,&y,&z); max=x; /*初始設(shè)置變量max為x的值*/
if(x==y&&y==z) printf("x=y=z,max=%d\n",max);
else{
if(y>max) max=y;
if(z>max) max=z; printf("max=%d\n",max); }}運(yùn)行結(jié)果:Pleaseinputtwonumbers:111133↙
max=3359if語(yǔ)句注意事項(xiàng)
(1)if語(yǔ)句后面的表達(dá)式必須用括號(hào)括起來(lái)。例:ifx>0printf(“x>0”);例:if(x>0)printf(“x>0”);
if(a=5)語(yǔ)句;
//表達(dá)式的值永遠(yuǎn)為非0,所以其后的語(yǔ)句總是要執(zhí)行的if(b)語(yǔ)句;
//等價(jià)于if(b!=0)語(yǔ)句;(2)表達(dá)式通常是邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是其它任何表達(dá)式,如賦值表達(dá)式等,甚至也可以是一個(gè)變量。只要表達(dá)式非零時(shí),表達(dá)式的值就為真,否則就是假。60if語(yǔ)句注意事項(xiàng)
(3)在if語(yǔ)句的三種形式中,所有的語(yǔ)句應(yīng)為單個(gè)語(yǔ)句,如果要想在滿足條件時(shí)執(zhí)行一組(多個(gè))語(yǔ)句,則必須把這一組語(yǔ)句用{}括起來(lái)組成一個(gè)復(fù)合語(yǔ)句。但要注意的是在}之后不能再加分號(hào)。例:if(a>b)a++;b++;else{a=0;b=1;}例:if(a>b){a++;b++;}else{a=0;b=1;}61if語(yǔ)句注意事項(xiàng)
(4)在if語(yǔ)句中,如果表達(dá)式是一個(gè)判斷兩個(gè)數(shù)是否相等的關(guān)系表達(dá)式,要當(dāng)心不要將==寫(xiě)成了賦值運(yùn)算符=。例:
#include<stdio.h>
voidmain(){intx=0;if(x==0)printf(“x=0\n”);elseprintf(“x!=0\n”);}例:
#include<stdio.h>
voidmain(){intx=0;if(x=0)printf(“x=0\n”);elseprintf(“x!=0\n”);}運(yùn)行結(jié)果:x=0運(yùn)行結(jié)果:x!=062
if(……)if(……)if(……)else……else……else……C語(yǔ)言規(guī)定,在缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)例:
#include<stdio.h>voidmain(){
inta=1,b=-1;
if(a>0)
if(b>0)a++;
elsea--;printf("a=%d\n");}例:
#include<stdio.h>voidmain(){
inta=1,b=-1;
if(a>0)
{if(b>0)a++;}
elsea--;printf("a=%d\n");}運(yùn)行結(jié)果:a=0運(yùn)行結(jié)果:a=1if_else配對(duì)原則63例:if(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);修改:if(a==b)
{if(b==c)printf(“a==b==c”);
}elseprintf(“a!=b”);實(shí)現(xiàn)if~else正確配對(duì)方法:加{}64例:考慮下面程序輸出結(jié)果:
voidmain(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)
if(b!=15)
if(!v1)x=1;
else
if(!v2)x=10;printf(“%d”,x);}結(jié)果:10等價(jià)于if(v1==0)等價(jià)于if(v2==0)652.switch語(yǔ)句(開(kāi)關(guān)分支語(yǔ)句)一般形式:switch(表達(dá)式){caseC1: 語(yǔ)句組1;caseC2: 語(yǔ)句組2;…….caseCn: 語(yǔ)句組n;[default: 語(yǔ)句組m;]}含義:計(jì)算表達(dá)式的值,如果表達(dá)式的值和case中某常量表達(dá)式值相等時(shí),就執(zhí)行該case下的語(yǔ)句組,然后對(duì)之后的所有case及default不再判斷而直接執(zhí)行。如果表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則僅執(zhí)行default后的語(yǔ)句。
66執(zhí)行過(guò)程:switch表達(dá)式語(yǔ)句組1語(yǔ)句組2語(yǔ)句組n語(yǔ)句組m…...C1C2Cndefaultcase
67例3-15輸入1-7之間的一個(gè)數(shù)字,輸出該數(shù)字在一個(gè)星期中所對(duì)應(yīng)日期的英文名稱(chēng)#include"stdio.h"voidmain(){ intday; printf("Pleaseinputaintegernumberbetween1and7:"); scanf("%d",&day);
switch(day) { case1: printf("Monday\n"); case2: printf("Tuesday\n"); case3: printf("Wednesday\n"); case4: printf("Thursday\n"); case5: printf("Friday\n"); case6: printf("Saturday\n"); case7: printf("Sunday\n"); default: printf("Error\n");}}運(yùn)行結(jié)果:Pleaseinputaintegernumberbetween1and7:5↙Friday SaturdaySundayError68case后面的“常量表達(dá)式”僅起語(yǔ)句標(biāo)號(hào)作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行,不再進(jìn)行標(biāo)號(hào)判斷,所以必須加上break語(yǔ)句,以便結(jié)束switch語(yǔ)句。
switch(day) { case1: printf("Monday\n"); break; case2: printf("Tuesday\n"); break; case3: printf("Wednesday\n"); break; case4: printf("Thursday\n"); break; case5: printf("Friday\n"); break; case6: printf("Saturday\n"); break; case7: printf("Sunday\n"); break; default: printf("Error\n");}修改后的運(yùn)行結(jié)果:Pleaseinputaintegernumberbetween1and7:5↙Friday 69
#include<stdio.h>voidmain(){charch;ch=getch();switch(ch){case'Y':printf("Yes\n");break;case'N':printf("No\n");break;case'A':printf("All\n");break;default:printf("Yes,NoorAll\n");}}運(yùn)行結(jié)果:
No//假設(shè)輸入為:N
#include<stdio.h>voidmain(){charch;ch=getch();switch(ch){case'Y':printf("Yes\n");break;case'N':printf("No\n");case'A':printf("All\n");break;default:printf("Yes,NoorAll\n");}}//假設(shè)輸入為:N運(yùn)行結(jié)果:
NoALL70
使用switch語(yǔ)句注意事項(xiàng)(1)switch后面的“表達(dá)式”,可以是int、char和枚舉型中的一種,但不可為浮點(diǎn)型。floata,b=4.0;scanf("%f",&a);switch(a){case1:b=b+1;break;case2:b=b-1;break;}printf("b=%f\n",b);不可為浮點(diǎn)型表達(dá)式71
使用switch語(yǔ)句注意事項(xiàng)(2)每個(gè)case后面必須是“常量表達(dá)式”,表達(dá)式中不能包含變量。例:按成績(jī)分成A、B、C、D、E、F幾個(gè)等級(jí)。charscore;printf("EnterScore:");scanf("%d",&score);switch(score){casescore>=90:printf("A");break;casescore>=80&&score<90:printf(“B");break;casescore>=70&&score<80:printf(“C");break;casescore>=60&&score<70:printf(“E");break;default:printf(“F");break;}case后面包含變量72inta,b=4;scanf("%d",&a);switch(a){case1:b=b+2;break;case2:b=b*2;break;case1:b=b+2;break;}printf("b=%d\n",b);
使用switch語(yǔ)句注意事項(xiàng)(3)每個(gè)case后面“常量表達(dá)式”的值,必須各不相同,否則會(huì)出現(xiàn)相互矛盾的現(xiàn)象。case1在前面已使用73
使用switch語(yǔ)句注意事項(xiàng)(4)case后面語(yǔ)句(組)可加{}也可以不加{},但一般不加{}。switch(i){case1:{b=b+1;break;}//{}可加可不加case2:b=b-1;break;}74
使用switch語(yǔ)句注意事項(xiàng)(5-1)case子句和default子句如果都帶有break子句,那么它們之間順序的變化不會(huì)影響switch語(yǔ)句的功能。#include<stdio.h>voidmain(){charch;ch=getch();switch(ch){case'Y':printf("Yes\n");break;case'N':printf("No\n");break;case'A':printf("All\n");break;
default:printf("Yes,NoorAll\n");break;}}#include<stdio.h>voidmain(){charch;ch=getch();switch(ch){case'Y':printf("Yes\n");break;
default:printf("Yes,NoorAll\n");break;case'N':printf("No\n");break;case'A':printf("All\n");break;}}75
使用switch語(yǔ)句注意事項(xiàng)(5-2)case子句和default子句如果有的帶有break子句,而有的沒(méi)有帶break子句,那么它們之間順序的變化可能會(huì)影響輸出的結(jié)果。
#include<stdio.h>voidmain(){charch;ch=getchar();switch(ch){case'Y':printf("Yes\n");break;case'N':printf("No\n");break;case'A':printf("All\n");break;
default:printf("Yes,NoorAll\n");}}#include<stdio.h>voidmain(){charch;ch=getchar();switch(ch){case'Y':printf("Yes\n");break;
default:printf("Yes,NoorAll\n");case'N':printf("No\n");break;case'A':printf("All\n");break;}}//假設(shè)輸入為:B運(yùn)行結(jié)果:Yes,NoorAll運(yùn)行結(jié)果:Yes,NoorAllNo//假設(shè)輸入為:B76
使用switch語(yǔ)句注意事項(xiàng) (6)switch語(yǔ)句可以嵌套。
voidmain(){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("\na=%d,b=%d",a,b);}運(yùn)行結(jié)果:a=2,b=1
77重疊表達(dá)方式:switch語(yǔ)句中,如果不同的case分支下執(zhí)行的是相同的語(yǔ)句組,那么可以簡(jiǎn)化程序?yàn)橹丿B表達(dá)方式,語(yǔ)句組不需要重復(fù)編寫(xiě)。
一般形式switch(表達(dá)式){ caseC1: caseC2: caseC3: 語(yǔ)句組1;break;
caseC4: 語(yǔ)句組2;break; ……. caseCn: 語(yǔ)句組n;break;[default: 語(yǔ)句組m;]}78例3-16判斷用戶輸入字符是數(shù)字還是空格或其他符號(hào)。#include<stdio.h>voidmain(){charc;printf("Pleaseinputacharacter:");scanf("%c",&c);
switch(c)
{
case
'0':
case'1':
case'2':
case
'3':
case
'4':
case
'5':
case
'6':
case
'7':
case
'8':
case
'9': printf("%cisanumericalcharacter!\n",c); break;
case
'': printf("%cisablankspace!\n",c); break;
default: printf("%cisothercharacter!\n",c);}}運(yùn)行結(jié)果:PleaseInputacharacter:5↙5isanumericalcharacter!程序用if語(yǔ)句也可以實(shí)現(xiàn),下面的程序段完成了相同的功能。c=getchar();if(c>='0'&&c<='9') printf("%cisanumericalcharacter!\n",c);elseif(c=='') printf("Inputisablankspace!\n");else printf("%cisothercharacter!\n",c);79
例:當(dāng)a的值是1、2、3時(shí),將b的值加2,當(dāng)a的值是4、5、6時(shí),將b的值減2。
inta,b=4;scanf("%d",&a);switch(a){case1:case2:case3:b+=2;break;case4:case5:case6:b-=2;break;default:b*=2;break;}printf("b=%d\n",b);80例3-26
判斷輸入的年份是否是閏年。閏年是能被4整除但不能被100整除的年份,或可以被400整除的年份。P79的程序自學(xué)(條理不夠清楚)。(補(bǔ)充)程序應(yīng)該這樣來(lái)設(shè)計(jì):如果X能被Y整除,則余數(shù)為0,即如果X%Y的值等于0,則表示X能被Y整除!首先將是否閏年的標(biāo)志leap預(yù)置為0(非閏年),這樣僅當(dāng)year為閏年時(shí),將leap置為1即可。這種處理兩種狀態(tài)值的方法,對(duì)優(yōu)化算法和提高程序可讀性非常有效,請(qǐng)讀者仔細(xì)體會(huì)。3.4選擇結(jié)構(gòu)程序設(shè)計(jì)舉例(P79)81#include<stdio.h>voidmain(){intyear,leap=0; //leap=0:預(yù)置為非閏年printf("Pleaseinputtheyear:");//提示輸入年份scanf(“%d”,&year);//輸入年份if(year%4==0)//如果被4整除
if(year%100!=0)//如果不被100整除leap=1;//置為閏年if(year%400==0)//如果被400整除leap=1;//置為閏年
//輸出結(jié)果if(leap)//如果是閏年(leap==1)
printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);}運(yùn)行結(jié)果:Pleaseinputtheyear:2008↙2008isaleapyear.判斷是否為閏年if((year%4==0&&year%100!=0)||(year%400==0))leap=1;或leap=(year%4==0&&year%100!=0)||(year%400==0);82程序應(yīng)該這樣來(lái)設(shè)計(jì):首先要定義一個(gè)變量用來(lái)存
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2012年高考語(yǔ)文試卷(安徽)(空白卷)
- 《離子濃度大小比較》課件
- 挑戰(zhàn)與突破自我
- 探索物理定律的奧秘
- 《痛苦的職場(chǎng)人》課件
- 工作調(diào)研報(bào)告(合集三篇)
- 2023年項(xiàng)目部安全管理人員安全培訓(xùn)考試題附參考答案(達(dá)標(biāo)題)
- 2023年項(xiàng)目部安全管理人員安全培訓(xùn)考試題(1套)
- 母親節(jié)新媒體策劃
- 初中語(yǔ)文教師教學(xué)工作總結(jié)11篇
- CNAS-CL02-A001:2023 醫(yī)學(xué)實(shí)驗(yàn)室質(zhì)量和能力認(rèn)可準(zhǔn)則的應(yīng)用要求
- ??低晿寵C(jī)攝像機(jī)檢測(cè)報(bào)告.文檔
- 部編小語(yǔ)一下三單元(《小公雞和小鴨子》《樹(shù)和喜鵲》《怎么都快樂(lè)》)大單元學(xué)習(xí)任務(wù)群教學(xué)設(shè)計(jì)
- 體檢中心組織架構(gòu)
- 森林撫育投標(biāo)方案
- 中小學(xué)教育中課程資源的開(kāi)發(fā)與利用
- 大班科學(xué)教案:我和風(fēng)兒做游戲教案及反思
- 園藝治療概念、內(nèi)涵與理論依據(jù)
- 后續(xù)服務(wù)承諾及保證措施-后續(xù)服務(wù)
- 提高無(wú)創(chuàng)呼吸機(jī)患者的依從性
- 小兒急性顱內(nèi)壓增高的護(hù)理課件
評(píng)論
0/150
提交評(píng)論