C語言C程序的基本控制結(jié)構(gòu)_第1頁
C語言C程序的基本控制結(jié)構(gòu)_第2頁
C語言C程序的基本控制結(jié)構(gòu)_第3頁
C語言C程序的基本控制結(jié)構(gòu)_第4頁
C語言C程序的基本控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

會計(jì)學(xué)1C語言C程序的基本控制結(jié)構(gòu)程序設(shè)計(jì)語言有順序、選擇、循環(huán)三種基本的控制結(jié)構(gòu)。1.用流程圖表示(1)順序結(jié)構(gòu)表示先執(zhí)行A,再執(zhí)行B。BAab第1頁/共96頁(2)選擇結(jié)構(gòu)如果P條件成立,執(zhí)行A,否則執(zhí)行B,然后轉(zhuǎn)向后面的語句。abab第2頁/共96頁(3)循環(huán)結(jié)構(gòu)有兩種形式。

①while結(jié)構(gòu)(當(dāng)型循環(huán))表示先判斷條件表達(dá)式P,當(dāng)P成立,即為“真”,反復(fù)執(zhí)行循環(huán)體A;直到P不成立,即為“假”,轉(zhuǎn)向其后面的語句。注意:如果P一開始就不成立,則A一次也不執(zhí)行,直接轉(zhuǎn)到下一條語句。ab第3頁/共96頁②do-while結(jié)構(gòu)(直到型循環(huán))先執(zhí)行循環(huán)體語句A,然后判斷條件表達(dá)式P。注意:不管條件P成立與否,循環(huán)體A至少執(zhí)行一次。ab第4頁/共96頁三種基本結(jié)構(gòu)的共同特點(diǎn)只有一個(gè)入口;只有一個(gè)出口;結(jié)構(gòu)內(nèi)的每一部分都有可能被執(zhí)行到;結(jié)構(gòu)內(nèi)不存在“死循環(huán)”。第5頁/共96頁3.1.1C程序的語句C語言的語句可分為以下四類:表達(dá)式語句函數(shù)調(diào)用語句

控制語句

復(fù)合語句

空語句

簡單語句第6頁/共96頁1.表達(dá)式語句由一個(gè)表達(dá)式加上一個(gè)分號構(gòu)成。其一般形式為:表達(dá)式;

如:x=y+z;y+z;

i++;2.函數(shù)調(diào)用語句由函數(shù)調(diào)用表達(dá)式加分號構(gòu)成.如:printf(“CProgram”);scanf(“%d”,&a);第7頁/共96頁3.控制語句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。

C語言有九種控制語句,可分成以下三類。(1)條件判斷語句:if語句,switch語句。(2)循環(huán)執(zhí)行語句:dowhile語句,while語句,for語句。(3)轉(zhuǎn)向語句:break語句,goto語句,continue語句,return語句。第8頁/共96頁4.復(fù)合語句把多個(gè)語句用大括號括起來組成的一個(gè)語句稱復(fù)合語句。例如:

花括號中的語句,可以是簡單語句、空語句、復(fù)合語句、流程控制語句,所有這些語句括在一起,在語法上看成是一條語句,執(zhí)行時(shí)順序執(zhí)行花括號中的每條語句。復(fù)合語句多用于流程控制語句中。{x=y+z;

a=b+c;

printf(“%d%d”,x,a);}復(fù)合語句內(nèi)的各條語句都必須以分號“;”結(jié)尾,在括號“}”外不能加分號。第9頁/共96頁5.空語句只有分號組成的語句稱為空語句。例如:

while(getchar()!='\n')

;第10頁/共96頁3.1.2數(shù)據(jù)輸出函數(shù)printf()

和putchar一.printf()函數(shù)(格式輸出函數(shù))

1.調(diào)用的一般形式

printf(“格式控制字符串”,輸出表列)

其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開頭的字符串,在%后面跟有各種格式字符,以說明輸出數(shù)據(jù)的類型、形式、長度、小數(shù)位數(shù)等??梢允浅A?、變量、表達(dá)式格式字符轉(zhuǎn)義字符普通字符第11頁/共96頁【練一練】voidmain(){inta=88,b=89;printf("%d%d\n",a,b);printf("%d,%d\n",a,b);printf("%c,%c\n",a,b);printf("a=%d,b=%d\n",a,b);}程序運(yùn)行輸出結(jié)果:888988,89X,Ya=88,b=89第12頁/共96頁2.格式字符串格式字符串的一般形式為:3.1順序結(jié)構(gòu)第13頁/共96頁格式轉(zhuǎn)換說明符(格式字符) 功 能

%c

輸出一個(gè)字符

%d

輸出十進(jìn)制整數(shù),按實(shí)際位數(shù)輸出%f

定點(diǎn)格式輸出浮點(diǎn)數(shù),整數(shù)部分取實(shí)際位數(shù),小數(shù)部分保留6位

%e

指數(shù)格式[-]m.ddddde+nn輸出浮點(diǎn)數(shù)%g 選擇%f和%e格式中,輸出寬度較小的一種

%s

輸出字符串,按實(shí)際位數(shù)輸出

%u

輸出十進(jìn)制無符號整數(shù),按實(shí)際位數(shù)輸出

%o

輸出八進(jìn)制無符號整數(shù),按實(shí)際位數(shù)輸出

%x

輸出十六進(jìn)制無符號整數(shù),按實(shí)際位數(shù)輸出

%% 輸出一個(gè)%%p 輸出指針值第14頁/共96頁對于格式轉(zhuǎn)換說明符可以進(jìn)行以下三類修飾:1.指定字段寬度(1)%m.nd其中:m規(guī)定輸出字段的最小寬度;n規(guī)定輸出最小有效位數(shù)。例如,

printf(“%3d,%6d,%6.5d\n”,1234,1234,1234);輸出結(jié)果為

1234,1234,01234(2)%m.nf其中:m規(guī)定輸出字段的最小寬度;n規(guī)定輸出小數(shù)位數(shù)。第15頁/共96頁例如,

printf(“%10f,%10.2f,%.2f\n”,123.456,123.456,123.4);

輸出結(jié)果為

123.456000,123.46,123.40(3)%m.ne其中:m規(guī)定輸出最小寬度;(n-1)為尾數(shù)部分的小數(shù)位數(shù)。例如,

printf(“%10e,%10.4e,%.3e\n”,123.456,123.456,123.4);輸出結(jié)果為

1.23456e+02,1.235e+02,1.23e+02第16頁/共96頁注意:(1)無論是%m.nf還是%m.ne格式,對舍去的小數(shù)最高位都四舍五入。例如,

printf(“%04d,%010.2f,%010.3e\n”,125,12.3,123.5);輸出結(jié)果為:

0125,0000012.30,001.24e+02(2)對以上三種情況,如果在“%”和m.n之間加一個(gè)0,則在規(guī)定字段寬度內(nèi)左邊多余的空位以0來填充,而不是空格。第17頁/共96頁

(4)%m.ns2.左對齊如果在“%”之后加一個(gè)負(fù)號(即“-”),則在規(guī)定的寬度內(nèi)輸出內(nèi)容向左對齊,右面補(bǔ)空格或“0”。例如,

printf(“%3s,%15s,%10.5s,%.4s\n”,”China”,”Beijing”, ”Beijing”,”China”);其中:m的含義與前面相同;n規(guī)定截取輸出字符串左面的字符個(gè)數(shù),字符串長度小于n時(shí),按實(shí)際長度輸出(n不起作用)。輸出結(jié)果為

China,Beijing,Beiji,Chin第18頁/共96頁例如,

printf(“%-3d,%-6d,%-6.5d\n”,1234,1234,1234); printf(“%-10f,%-10.2f,%-.2f\n”,123.456,123.456,123.4); printf(“%-3s,%-15s,%-10.5s,%-.4s\n”, ”China”,”Beijing”,”Beijing”,”China”);輸出結(jié)果為

1234,1234,01234 123.456000,23.46,123.40 China,Beijing,Beiji,Chin 第19頁/共96頁3.類型修飾(2)在類型說明符f、e、g前面可以加字母l,表示輸出double型數(shù)據(jù)。(1)在類型說明符d、u、o、x、i前面可以加字母“l(fā)”或“h”,分別表示輸出long或short型的數(shù)據(jù)。例如,

printf(“%d,%ld\n”,7000,70000l,); 例如,

printf(“%15.8lf,%16.9le\n”,12.34567889,12.34567889);輸出結(jié)果為

12.34567889,1.234567889e+01第20頁/共96頁關(guān)于格式輸出的幾點(diǎn)說明:-1和65535例如,

printf(“%d,%u,%o,%x\n”,-1,-1,-1,-1);printf(“%d,%u,%o,%x\n”,65534u,65534u,65534u,65534u);(1)對于任何一種形式的整數(shù)都可以用d、 i、o、u、x(或“X”)格式輸出,其中d、i輸出帶符號十進(jìn)制形式,而u、o、x格式輸出無符號整數(shù)。輸出結(jié)果為

-1,65535,177777,ffff -2,65534,177776,fffe-2和6553411111111111111111111111111111110假設(shè)一個(gè)基本整型數(shù)據(jù)在內(nèi)存占2B第21頁/共96頁(2)如果printf()函數(shù)中有多個(gè)表達(dá)式時(shí),不同系統(tǒng)求值順序不同。TurboC系統(tǒng)的求值順序是自右至左的。而VisualC++6.0在從右到左進(jìn)行時(shí),還按運(yùn)算符不同分批運(yùn)算。

例如,

printf(“%d,%d,%d\n”,2+3,3*4,6/2);voidmain(){inti=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i--);printf("%d\n",i++);printf("%d\n",-i--);}例3-1printf函數(shù)輸出表列中的求值順序運(yùn)行輸出結(jié)果:9887-8第22頁/共96頁voidmain(){inti=8;printf("%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);}TurboC中的結(jié)果:7687-8VisualC++6.0中的結(jié)果8788-8因?yàn)椴煌南到y(tǒng)對這種問題的處理方式采用不同的規(guī)則。所以,應(yīng)該盡可能在printf語句內(nèi)輸出變量的值,不建議輸出表達(dá)式的值。第23頁/共96頁例3-2:使用printf函數(shù)輸出如下信息:***************************好好學(xué)習(xí),天天向上***************************#include<stdio.h>voidmain(){printf(“***************************\n”);printf("好好學(xué)習(xí),天天向上\n");printf("***************************\n");}輸出結(jié)果:***************************

好好學(xué)習(xí),天天向上***************************第24頁/共96頁例3-3:使用printf函數(shù)輸出如下信息:姓名外語數(shù)學(xué)王麗6070程序:#include<stdio.h>voidmain(){printf("姓名\t外語\t數(shù)學(xué)\n");printf(“王麗\t60\t70\n”);}第25頁/共96頁二.字符輸出函數(shù)putchar()一般調(diào)用形式為:putchar(字符參數(shù))

其功能是在顯示器上輸出單個(gè)字符。例如:設(shè)charx=‘B’;inti=66;putchar('A');輸出大寫字母Aputchar(x);輸出字符變量x的值字母Bputchar(‘\101’);輸出字符Aputchar('\n');換行putchar(65);輸出大寫字母Aputchar(i);輸出變量i的值為ASCII碼的字母B字符型常量、變量或整型常量、變量注意:使用本函數(shù)前必須要用文件包含命令:#include<stdio.h>第26頁/共96頁3.1.3數(shù)據(jù)輸入函數(shù)scanf()和getchar一.scanf函數(shù)(格式輸入函數(shù))

一般調(diào)用形式scanf(“輸入格式控制串”,輸入變量地址清單);格式轉(zhuǎn)換說明符其他字符例如,

intk;floatx;charch;

scanf(“%d,%f,%c”,&k,&x,&ch);第27頁/共96頁格式轉(zhuǎn)換說明符 功 能

%c 輸入一個(gè)字符

%d 輸入十進(jìn)制整數(shù)%f 輸入浮點(diǎn)數(shù),不能指定小數(shù)位數(shù)

%e 輸入浮點(diǎn)數(shù),不能指定小數(shù)位數(shù)

%s 輸入字符串,遇空格、制表符或回車符結(jié)束

%u 輸入十進(jìn)制無符號整數(shù)

%o 輸入八進(jìn)制無符號整數(shù)

%x 輸入十六進(jìn)制無符號整數(shù)第28頁/共96頁關(guān)于scanf()函數(shù)使用的幾點(diǎn)說明:1輸入數(shù)據(jù)的分隔符:空格、制表符或回車鍵例如,

scanf(“%d%d%d”,&i,&j,&k);輸入形式可以是: ①345<CR> ②3 4 5<CR> ③3<CR> 4<CR> 5<CR>第29頁/共96頁2輸入數(shù)據(jù)類型1)輸入長整型數(shù)據(jù)時(shí),可以用%ld、%lo、%lx或%lu,而且用整型格式控制整型變量輸入時(shí),從鍵盤輸入的必須是整數(shù)。例如,

scanf(“%d%d”,&a,&b);如果輸入

12.5623<CR>結(jié)果a=12,而變量b沒有得到值。2)當(dāng)用%f或%e格式控制float和double型變量的輸入時(shí),輸入的數(shù)據(jù)可以是小數(shù)形式、指數(shù)形式或整數(shù)。不能指定小數(shù)位數(shù)。第30頁/共96頁3)對于用%c格式輸入char型數(shù)據(jù)時(shí),不需加單引號。如果連續(xù)輸入多個(gè)字符時(shí),不需要使用分隔符。例如,

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

ABC<CR>則有c1=‘A’,c2=‘B’,c3=‘C’而如輸入

ABC<CR>則有c1=‘A’,c2=‘’,c3=‘B’第31頁/共96頁4.限制輸入數(shù)據(jù)的寬度(“m”)例如,

scanf(“%5d%4d%4d”,&a,&b,&c); scanf(“%10s”,str);如果輸入

1234567890 goodmorning則各變量的值:a=12345,b=6789,c=0字符型數(shù)組str得到的值是“good”第32頁/共96頁二.getchar()函數(shù)

一般形式為:

getchar()功能:是從鍵盤上輸入一個(gè)字符。通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語句,如:#include<stdio.h>voidmain(){charc;

printf("inputacharacter\n");

c=getchar();

putchar(c);}注意:使用本函數(shù)前必須要用文件包含命令:#include<stdio.h>第33頁/共96頁3.1.4順序結(jié)構(gòu)程序舉例例3-1:編寫程序,要求輸入以華氏度表示的溫度值,輸出以攝氏度表示的溫度值。【提示】表示溫度的單位有兩種:攝氏度和華氏度。由華氏度轉(zhuǎn)換為攝氏度的轉(zhuǎn)換公式為:

C=5/9(F-32)其中C代表攝氏度,F(xiàn)代表華氏度。第34頁/共96頁測試(運(yùn)行)輸入華氏溫度:75.5<CR>攝氏溫度為:24.2C程序如下:#include<stdio.h>voidmain(){floatf,c; printf("輸入華氏溫度:\n"); scanf("%f",&f); c=5.0/9.0*(f-32); printf("攝氏溫度為:%5.1fC\n",c);}第35頁/共96頁3.1.5常見錯(cuò)誤(自修)第36頁/共96頁3.2.1關(guān)系運(yùn)算1.關(guān)系運(yùn)算符運(yùn)算符含義運(yùn)算級別結(jié)合性<小于優(yōu)先級相同(高)左結(jié)合<=小于或等于↑>大于↑>=大于或等于↑==等于優(yōu)先級相同↑!=不等于(低)3.2選擇結(jié)構(gòu)第37頁/共96頁2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來所構(gòu)成的表達(dá)式。一般形式為:<表達(dá)式1><關(guān)系運(yùn)算符><表達(dá)式2>

關(guān)系表達(dá)式的值:“真”和“假”兩種,分別用“1”和“0”表示。例如,設(shè)有定義:inta=3,b=4,c=5,d=6,i=-8,j=1,k=2,x=0;計(jì)算下列各表達(dá)式的值。a+b>c-dx>3/2'a'+1<c-i-5*j==k+1a>(b>c)a!=(c==d)a>b>c1001110第38頁/共96頁3.2.2邏輯運(yùn)算1.邏輯運(yùn)算符C語言中提供了三種邏輯運(yùn)算符。邏輯運(yùn)算符含義運(yùn)算級別結(jié)合性!邏輯非(高)右結(jié)合&&邏輯與↑左結(jié)合||邏輯或(低)第39頁/共96頁2.邏輯表達(dá)式用邏輯運(yùn)算符將任意C表達(dá)式連接起來構(gòu)成的表達(dá)式。一般形式為:

[<表達(dá)式1>]<邏輯運(yùn)算符><表達(dá)式2>

3.邏輯運(yùn)算的值

在C語言中分別用“1”和“0”來表示“真”和“假”。參加邏輯運(yùn)算的表達(dá)式以“非0”和“0”代表“真”和“假”。aba&&ba||b!a!b0000110非00110非000101非0非01100第40頁/共96頁

inta=5;floatb=3.5;!a()!(a<b)()a&&b()!a&&b()!a&&!b()!(a&&b)()

a||b(

)!a||b()!a||!b()!(a||b)()(a<b)&&(a>0)()(a<b)||(a>0)()例如011000110001第41頁/共96頁1if-else語句一般格式:

if(表達(dá)式)

語句1;

[else語句2;]功能:如果表達(dá)式的值為真,則執(zhí)行語句1,否則執(zhí)行語句2。C語言的if語句有兩種基本形式。第42頁/共96頁例

輸入兩個(gè)整數(shù),求最大數(shù)。#include<stdio.h>voidmain() /*主函數(shù)*/{inta,b;intmax;printf("\n請輸入兩個(gè)數(shù):");scanf("%d%d",&a,&b);

if(a>b)

/*判斷表達(dá)式*/

max=a;

/*語句1*/

else

max=b;

/*語句2*/printf("max=%d\n",max);}請輸入兩個(gè)數(shù):89<CR>max=9第43頁/共96頁3.2.3if語句和條件運(yùn)算符省略else分支的if語句

一般形式:

if(表達(dá)式)語句1

if(表達(dá)式) 語句1

功能:如果表達(dá)式的值為真,則執(zhí)行其后的“語句1”,否則不執(zhí)行“語句1”。第44頁/共96頁例

輸入兩個(gè)整數(shù),求最大數(shù)。#include<stdio.h>voidmain() /*主函數(shù)*/{inta,b;intmax;printf("\n請輸入兩個(gè)數(shù):");scanf("%d%d",&a,&b);max=a;

if(max<b)

/*判斷表達(dá)式*/

max=b;

/*語句1*/printf("max=%d\n",max);}請輸入兩個(gè)數(shù):89<CR>max=9第45頁/共96頁#include<stdio.h>voidmain(){inta,b,t;scanf(“%d,%d”,&a,&b);if(a>b){t=a;a=b;b=t;}printf(“Result:%d,%d”,a,b);}例3-5:輸入兩個(gè)整數(shù),按從小到大順序輸出。第46頁/共96頁2if-else-if形式(當(dāng)有多個(gè)分支選擇時(shí)采用)一般形式為:

if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3…elseif(表達(dá)式n)語句n[else語句n+1]執(zhí)行流程如下圖所示:第47頁/共96頁

功能:依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對應(yīng)的語句。然后跳到整個(gè)if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n+1。然后繼續(xù)執(zhí)行后續(xù)程序。第48頁/共96頁例從鍵盤輸入任意字符,根據(jù)其ASCII碼來判別屬于哪類字符。#include"stdio.h"voidmain(){charc;printf("inputacharacter:");c=getchar();if(c<32)printf("Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')printf("Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thisisasmallletter\n");elseprintf("Thisisanothercharacter\n");}第49頁/共96頁

例3-6.輸入某學(xué)生的成績,經(jīng)處理后給出成績的等級。等級劃分如下:輸入一個(gè)分?jǐn)?shù)score當(dāng)score>=90輸出A當(dāng)80<=score<90輸出B當(dāng)70<=score<80輸出C當(dāng)60<=score<70輸出D當(dāng)score<60輸出E第50頁/共96頁#include<stdio.h>/*li3-6.c*/main(){floatscore;scanf(“%f”,&score);if(score>=90)printf(“%c”,’A’);elseif(score>=80)printf(“%c”,’B’);elseif(score>=70)printf(“%c”,’C’);elseif(score>=60)printf(“%c”,’D’);elseprintf(“%c”,’E’);}程序如下:第51頁/共96頁3選擇結(jié)構(gòu)的嵌套。if(表達(dá)式1)if(表達(dá)式2)語句1

[else語句2]elseif(表達(dá)式3)語句3

[else語句4]表達(dá)式2表達(dá)式1表達(dá)式3語句1語句2語句3語句4非000非00非0第52頁/共96頁2.條件運(yùn)算符和條件表達(dá)式

條件運(yùn)算符?:它是一個(gè)三目運(yùn)算符。條件表達(dá)式形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3功能:如果表達(dá)式1的值為真,則以表達(dá)式2的值作為條件表達(dá)式的值,否則以表達(dá)式3的值作為整個(gè)條件表達(dá)式的值。優(yōu)先級:僅高于逗號和賦值運(yùn)算。結(jié)合性:右結(jié)合的。例如:max=a>b?a:b相當(dāng)于max=(a>b?a:b)a>b?a:c>d?c:d相當(dāng)于a>b?a:(c>d?c:d)if(a>b)max=a;elsemax=b;max=(a>b)?a:b;等價(jià)于表達(dá)式1取表達(dá)式2的值作為整個(gè)表達(dá)式的值非00取表達(dá)式3的值作為整個(gè)表達(dá)式的值第53頁/共96頁如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a(chǎn)’)printf(“%d”,’a’);例考慮下面程序的輸出結(jié)果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y=x;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!3.在使用if語句中應(yīng)注意的問題語句可以是復(fù)合語句if后面的表達(dá)式類型任意if(x)if(x!=0)if(!x)if(x==0)第54頁/共96頁缺省{}時(shí),else總是和它上面離它最近的未配對的if配對if(……)if(……)if(……)else…...else…...else…...if~else配對原則:第55頁/共96頁實(shí)現(xiàn)if~else正確配對方法例: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正確配對方法:加{}第56頁/共96頁3.2.4switch語句一般形式為:switch(表達(dá)式E){caseE1:

語句組1;

break;

caseE2:

語句組2;

break;

…caseEn:

語句組n;

break;

[default:

語句組n+1;]}E1~En常量表達(dá)式第57頁/共96頁注意:E1,E2,…En是常量表達(dá)式,且值必須互不相同。語句標(biāo)號作用,case后可包含多個(gè)可執(zhí)行語句,且不必加{},必須用break跳出。default可以缺省,在這種情況下,如果沒有成功的匹配,則程序什么都不執(zhí)行,直接退出switch。break語句也可以缺省,程序流程如圖3-14所示。多個(gè)case可共用一組執(zhí)行語句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..第58頁/共96頁缺省全部break語句后,switch語句的執(zhí)行流程:第59頁/共96頁例3-7

要求輸入某學(xué)生的成績,經(jīng)處理后給出學(xué)生的等級,等級分類如下:

90分以上(包括90):A80至90分(包括80):B70至80分(包括70):C60至70分(包括60):D60分以下:E分析:設(shè)score為整型數(shù),利用兩個(gè)整數(shù)相除,結(jié)果自動(dòng)取整的特性,score和score/10有如下對應(yīng)關(guān)系:

scorescore/10

90以上10,970~897,860~69660以下5,4,3,2,1,0

因此,可以用score/10的值來確定分支。第60頁/共96頁#include<stdio.h>voidmain(){intscore;charch;printf("\ninputastudent'sgrade:");scanf("%d",&score);if(score<0||score>100)printf("\ninputerror!\n");else{switch(score/10){case10:case9:ch='A';break;

case8:ch='B';break;case7:ch='C';break;case6:ch='D';break;default:ch='E';}printf("\nthestudent'sscort:%c\n",ch);}}第61頁/共96頁3.2.5選擇結(jié)構(gòu)程序舉例例3-8

下面程序的功能是將一個(gè)50000以內(nèi)的正整數(shù)逆序輸出。例如輸入1234,輸出4321程序如下:第62頁/共96頁#include<stdio.h>main(){inta,b,c;intn; printf("Pleaseinputaninteger(>0and<=50000):"); scanf("%d",&a); if(a>=10000) n=5; elseif(a>=1000) n=4; elseif(a>=100) n=3; elseif(a>=10) n=2; else n=1; b=0; switch(n) {case5:c=a%10;a/=10;b=b*10+c; case4:c=a%10;a/=10;b=b*10+c; case3:c=a%10;a/=10;b=b*10+c; case2:c=a%10;a/=10;b=b*10+c; case1:c=a%10;a/=10;b=b*10+c; }printf("Result:%d.\n",b);}第63頁/共96頁3.2.6常見錯(cuò)誤(自修)1.把關(guān)系運(yùn)算符“==”誤寫為賦值運(yùn)算符“=”

比較兩個(gè)數(shù)的大小關(guān)系。x=3;y=4;if(x=y)printf("x=y\n");運(yùn)行狀態(tài):正常運(yùn)行,但沒有得到預(yù)期結(jié)果。原因:if(x=y)中x=y是賦值表達(dá)式,其x=4。x=y賦值表達(dá)式的值也是4,非零,永遠(yuǎn)為真。應(yīng)把if(x=y)改為if(x==y)第64頁/共96頁2.遺漏括號語句:ifx>=yx=9;運(yùn)行狀態(tài):語法錯(cuò)誤。錯(cuò)誤描述:syntaxerror:identifier'x'。原因:if語句中,條件判斷表達(dá)式必須加括號才正確。應(yīng)改為:if(x>=y)x=9;第65頁/共96頁3.遺漏大括號程序段:if(b<a)t=a;a=b;b=t; /*交換a,b兩個(gè)變量的值*/運(yùn)行狀態(tài):得出不正確的結(jié)果。原因:if語句中,滿足同一條件的多條執(zhí)行語句必須用大括號括起來才能得出正確結(jié)果。應(yīng)改為:if(b<a){t=a;a=b;b=t;}第66頁/共96頁3.3.1while語句

while語句屬于“當(dāng)型”循環(huán),一般適合解決非計(jì)數(shù)循環(huán)。一般格式為while(表達(dá)式)語句3.3循環(huán)結(jié)構(gòu)第67頁/共96頁例3-9:把一個(gè)非零整數(shù)的各位分解出來,并按逆序輸出。例如,若輸入為6582,則輸出2856。#include<stdio.h>main(){intn;intremainder;printf("請輸入要分解的數(shù):");scanf("%d",&n);while(n!=0){remainder=n%10;printf("%d",remainder);n=n/10;}}請輸入要分解的數(shù):6582<CR>2856第68頁/共96頁3.3.2

do-while語句do-while語句屬于“直到型”循環(huán)。一般形式是do{

語句}while(表達(dá)式);注意第69頁/共96頁例3-9-2:把一個(gè)非零整數(shù)的各位分解出來,并按逆序輸出。例如,若輸入為6582,則輸出2856。#include<stdio.h>main(){intn;intremainder;printf("請輸入要分解的數(shù):");scanf("%d",&n);

do{remainder=n%10;printf("%d",remainder);n=n/10;}while(n!=0);}請輸入要分解的數(shù):6582<CR>2856第70頁/共96頁3.3.3

for語句for語句屬于當(dāng)型循環(huán),它按步長修改循環(huán)控制變量的值,故也稱為“步長型”循環(huán)。一般格式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語句1.計(jì)算表達(dá)式1,通常用于循環(huán)開始前設(shè)置變量初值。2.計(jì)算表達(dá)式2,值為0則結(jié)束循環(huán),否則執(zhí)行第3步。3.執(zhí)行循環(huán)體語句。4.計(jì)算表達(dá)式3,返回第2步。執(zhí)行流程第71頁/共96頁例:

求1+2+…+99#include<stdio.h>main(){inti,s=0;for(i=1;i<=99;i++)s=s+i;printf(“s=%d”,s);}分析:用變量i從1到99循環(huán),把i的值累加到變量s中,最后輸出s的值。程序如下:i=1i<=99s=s+ii++假真第72頁/共96頁從上面的程序我們看到,for語句中:表達(dá)式1:通常是給循環(huán)控制變量賦初值表達(dá)式2:循環(huán)是否繼續(xù)執(zhí)行的判別表達(dá)式,這個(gè)表達(dá)式通常與某一個(gè)(或多個(gè))變量的值有關(guān)。表達(dá)式3:通常用于改變循環(huán)控制變量的值。在某些情況下,for語句中的表達(dá)式1、2、3都可以省略,而改用其他的方式來實(shí)現(xiàn)這些功能。我們還用上面的例子說明for語句省略表達(dá)式的情形。例如,

for(i=1,j=10;i<j;i++,j--)printf("%d+%d=%d\n",I,j,i+j);第73頁/共96頁1.省略表達(dá)式1:#include<stdio.h>main(){inti=1,s=0;for(;i<=99;i++)s=s+i;printf(“s=%d”,s);}2.省略表達(dá)式3:#include<stdio.h>main(){inti,s=0;for(i=1;i<=99;){s=s+i;i++;}printf(“s=%d”,s);}3.同時(shí)省略表達(dá)式1、3#include<stdio.h>main(){inti=1,s=0;for(;i<=99;){s=s+i;i++;}printf(“s=%d”,s);}表達(dá)式2也可以省略但在循環(huán)體中要借助break;語句來實(shí)現(xiàn)循環(huán)的結(jié)束,我們將在后面介紹。注意:表達(dá)式省略,分號不省略。第74頁/共96頁

for語句中的表達(dá)式可以是一切形式的表達(dá)式,逗號運(yùn)算符參與的表達(dá)式也可以運(yùn)用在for語句中,通常運(yùn)用于表達(dá)式1和表達(dá)式3。如上面的例子可以改寫為:#include<stdio.h>main(){inti,s;for(s=0,i=1;i<=99;s=s+i,i++);printf(“s=%d”,s);}注意此處的分號。此處,表達(dá)式1用逗號表達(dá)式的形式,給多個(gè)變量賦初值。表達(dá)式3用逗號表達(dá)式把循環(huán)體也寫入其中。注意表達(dá)式3書寫順序不能交換。第75頁/共96頁例3-11:求sum=1+3+5+7+9+…+99。#include<stdio.h>main(){inti,s=0;for(i=1;i<=99;i+=2)s=s+i;printf(“s=%d”,s);}第76頁/共96頁3.3.4三種循環(huán)的比較(1)從功能和使用角度講,for循環(huán)功能最強(qiáng),最方便靈活,因而使用較多。(2)for循環(huán)與while循環(huán)是等價(jià)的,兩者可以相互代替(3)for循環(huán)和while循環(huán)是先判斷循環(huán)條件,后執(zhí)行循環(huán)體;而do-while循環(huán)則是先執(zhí)行一次循環(huán)體,然后才判斷循環(huán)條件?因此,后者不管在什么情況下,都至少要執(zhí)行一次循環(huán)體?第77頁/共96頁3.3.5循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱循環(huán)嵌套。三種循環(huán)語句都可以任意地互相嵌套。執(zhí)行時(shí)把內(nèi)層循環(huán)看做是外層循環(huán)體中的一部分。例如,for(;;){ for(;;) {…}}第78頁/共96頁注意:在使用循環(huán)相互嵌套時(shí),被嵌套的一定是一個(gè)完整的循環(huán)結(jié)構(gòu),即兩個(gè)循環(huán)結(jié)構(gòu)不能相互交叉。第79頁/共96頁例3-12:用for循環(huán)輸出如下圖案: ********* ********* ********* *********第80頁/共96頁#include<stdio.h>main() {introw,col,m,n;scanf("%d%d",&m,&n);for(row=1;row<=m;row++) /*外循環(huán)控制行數(shù)*/{for(col=1;col<=n;col++) /*內(nèi)循環(huán)控制*的數(shù)量*/printf("*");printf("\n");}}9<CR>************************************第81頁/共96頁例:輸出九九乘法表。#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++){

for(j=1;j<=i;j++)printf("%d*%d=%d",i,j,i*j);printf("\n");}}1*1=12*1=22*2=43*1=33*2=63*3=9……9*1=99*2=189*3=27……9*9=81第82頁/共96頁3.3.6break和continue語句1.break語句功能:是退出當(dāng)前循環(huán)或當(dāng)前switch結(jié)構(gòu)?

一般格式為

break;main()

{

ints=0,i=1;

for(;;)

{if(i>99)break;s=s+i;i++;

}

printf(“s=%d”,s);

}第83頁/共96頁2.continue語句功能:只用在循環(huán)結(jié)構(gòu)中,功能是結(jié)束本次循環(huán)。一般格式

continue;(a)while循環(huán)(b)dowhile循環(huán)(c)for循環(huán)第84頁/共96頁例:輸出10以內(nèi)不能被5整除的數(shù)。#include<stdio.h>main(){inti;for(i=1;i<=10;i++)

{if(i%5==0)continue;printf("%d\t",i);}printf("\n");}1 2 3 4 6 7 8 9第85頁/共96頁例3-14:判斷一個(gè)整數(shù)是否是素?cái)?shù)。分析:素?cái)?shù)就是只能被1和這個(gè)數(shù)本身整除,而不能被其他任何數(shù)整除的數(shù)。例如2,3,5,7是素?cái)?shù);6,8,10不

溫馨提示

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

評論

0/150

提交評論