C語(yǔ)言程序設(shè)計(jì) 課件 (張惠濤 )第3、4章 程序設(shè)計(jì)結(jié)構(gòu);數(shù)組_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 (張惠濤 )第3、4章 程序設(shè)計(jì)結(jié)構(gòu);數(shù)組_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 (張惠濤 )第3、4章 程序設(shè)計(jì)結(jié)構(gòu);數(shù)組_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 (張惠濤 )第3、4章 程序設(shè)計(jì)結(jié)構(gòu);數(shù)組_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì) 課件 (張惠濤 )第3、4章 程序設(shè)計(jì)結(jié)構(gòu);數(shù)組_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)C語(yǔ)言數(shù)據(jù)類(lèi)型、運(yùn)算符與表達(dá)式63.1順序結(jié)構(gòu)設(shè)計(jì)3.2選擇結(jié)構(gòu)設(shè)計(jì)3.3循環(huán)結(jié)構(gòu)設(shè)計(jì)3.1

順序結(jié)構(gòu)設(shè)計(jì)3.1.1順序結(jié)構(gòu)的基本語(yǔ)句順序結(jié)構(gòu)的基本語(yǔ)句包括表達(dá)式語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句。1、表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)";"組成,執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。例如:x=1;(賦值語(yǔ)句)。++i;實(shí)現(xiàn)i的自增(運(yùn)算符表達(dá)式語(yǔ)句)。2、函數(shù)調(diào)用語(yǔ)句由函數(shù)名,實(shí)際參數(shù)加上分號(hào)組成例如:printf("粉身碎骨渾不怕,要留清白在人間");這是一個(gè)調(diào)用庫(kù)函數(shù),輸出字符串的語(yǔ)句。3、復(fù)合語(yǔ)句把多個(gè)語(yǔ)句用一對(duì)花括號(hào)括起來(lái)組合在一起,在語(yǔ)法上相當(dāng)于一條語(yǔ)句。一般形式:{語(yǔ)句1;語(yǔ)句2;……語(yǔ)句n;}4、空語(yǔ)句只由一個(gè)分號(hào)";"組成,什么也不執(zhí)行3.1.2數(shù)據(jù)的輸入輸出1、putchar函數(shù)putchar()是字符輸出函數(shù),用于在顯示器輸出一個(gè)字符例如:putchar(x);代表輸出字符變量x的值//例如:先后輸出Culturalconfidence(文化自信)的首字母例3.1putchar函數(shù)的應(yīng)用#include<stdio.h>intmain(){ chara='C',b='c'; putchar(a); putchar(b); putchar('\n'); return0;}3.1.2數(shù)據(jù)的輸入輸出2、getchar函數(shù)getchar()函數(shù)用于從鍵盤(pán)上輸入一個(gè)字符,通常把輸入的字符賦予一個(gè)字符變量,構(gòu)成賦值語(yǔ)句,例如:a=getchar();說(shuō)明:getchar()函數(shù)只能接收單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符getchar()函數(shù)是無(wú)參函數(shù),后面的括號(hào)不能省略在輸入時(shí),空格,回車(chē)鍵都作為字符讀入,且只在輸入回車(chē)鍵時(shí)讀入才開(kāi)始執(zhí)行3.1.2數(shù)據(jù)的輸入輸出//從鍵盤(pán)輸入Culturalconfidence(文化自信)的首字母,輸出到屏幕例3.2getchar的賦值操作#include<stdio.h>intmain(){ chara,b; a=getchar(); b=getchar(); putchar(a); putchar(b); putchar('\n'); return0;}3.1.2數(shù)據(jù)的輸入輸出3、printf函數(shù)printf函數(shù)稱(chēng)為格式輸出函數(shù),用于按照用戶指定的格式,把指定的數(shù)據(jù)輸出到顯示器上例如:printf("%d%f",a,b)printf函數(shù)的格式控制字符串(1)格式說(shuō)明符:以“%”開(kāi)頭,后面跟有各種格式字符,以說(shuō)明輸出數(shù)據(jù)的類(lèi)型、形式、長(zhǎng)度、小數(shù)位數(shù)等。格式說(shuō)明的一般形式為:%[修飾符]格式字符3.1.2數(shù)據(jù)的輸入輸出格式字符代表的意義d,i以十進(jìn)制形式輸出帶符號(hào)整數(shù)(正數(shù)不輸出符號(hào))o以八進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴0)x,X以十六進(jìn)制形式輸出無(wú)符號(hào)整數(shù)(不輸出前綴0x)U以十進(jìn)制形式輸出無(wú)符號(hào)整數(shù)F以小數(shù)形式輸出單、雙精度實(shí)數(shù)e,E以指數(shù)形式輸出單、雙精度實(shí)數(shù)g,G以%f、%e中較短的輸出寬度輸出單、雙精度實(shí)數(shù)c輸出單個(gè)字符s輸出字符串3.1.2數(shù)據(jù)的輸入輸出在格式說(shuō)明字段中,可以根據(jù)具體情況使用修飾符。前綴修飾符的位置一般緊靠“%”,一般格式有[flags][width][.prec]等。前綴修飾符及代表的意義[]表示該項(xiàng)為可選項(xiàng),即可有可無(wú)。-表示左對(duì)齊輸出,如果寬度大于輸出數(shù)據(jù)的寬度,右邊補(bǔ)空格;默認(rèn)為右對(duì)齊輸出,如果寬度大于輸出數(shù)據(jù)的寬度,左邊補(bǔ)空格。例如:printf(“%6d\n”,123);printf(“%-6d\n”,123);輸出結(jié)果:123123[.prec]為可選的精度指示符,整數(shù)位表示至少要輸出的數(shù)字個(gè)數(shù),不足補(bǔ)空格,多則原樣輸出;小數(shù)位表示小數(shù)點(diǎn)后至多輸出的數(shù)字個(gè)數(shù),不足在后面補(bǔ)數(shù)字0,多則作四舍五入處理。3.1.2數(shù)據(jù)的輸入輸出4、scanf函數(shù)scanf()函數(shù)稱(chēng)為格式輸入函數(shù),用于按照用戶指定的格式從鍵盤(pán)把數(shù)據(jù)輸入到指定的變量中其一般形式為:scanf(“格式控制字符串”,地址表列);例如:scanf("%d%f",&a,&b)scanf()與printf()既有相似之處,也有不同:scanf()函數(shù)的格式控制字符含義與printf()函數(shù)相同;地址表列由若干個(gè)地址組成,地址是由地址運(yùn)算符“&”后跟變量名組成的,代表每一個(gè)變量在內(nèi)存中的地址。3.1.2數(shù)據(jù)的輸入輸出使用scanf()函數(shù)需要注意的幾點(diǎn)問(wèn)題:scanf()中要求給出變量地址。scanf()函數(shù)中沒(méi)有精度控制。在輸入多個(gè)數(shù)值時(shí),若格式控制字符中相鄰兩個(gè)格式指定符沒(méi)有指定分隔符,則可用空格,跳格或回車(chē)作間隔。在輸入字符時(shí),若格式控制串中沒(méi)有非格式字符,則認(rèn)為所有輸入的字符均為有效字符。另外,如果在格式控制中加入逗號(hào)作為間隔,即scanf("%c,%c,%c",&a,&b,&c);則輸入d,e,f為有效錄入。如輸入的數(shù)據(jù)類(lèi)型與輸出的類(lèi)型不一致時(shí),雖然編譯能夠通過(guò),但結(jié)果不正確。順序結(jié)構(gòu)舉例解析例3.3兩個(gè)整數(shù)的“5”則運(yùn)算(輸入a和b,計(jì)算并輸出它們的和、差、積、商及余數(shù))#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("%d%d%d%d%d",a+b,a-b,a*b,a/b,a%b);return0;}順序結(jié)構(gòu)舉例解析例3.4.求三個(gè)數(shù)的平均數(shù)(保留兩位小數(shù))#include<stdio.h>intmain(){intx,y,z;scanf("%d%d%d",&x,&y,&z);doublet=(x+y+z)/3.0;printf("%.2lf\n",t);return0;}順序結(jié)構(gòu)舉例解析例3.5計(jì)算多項(xiàng)式f(x)=ax^3+bx^2+cx+d的值(輸入x,a,b,c,d的值)#include<stdio.h>intmain(){ doublex,a,b,c,d; scanf("%lf%lf%lf%lf%lf",&x,&a,&b,&c,&d); printf("%.7lf",a*x*x*x+b*x*x+c*x+d); return0;}順序結(jié)構(gòu)舉例解析例3.6給出圓的半徑,求圓的直徑、周長(zhǎng)和面積(π=3.14159,結(jié)果保留四位整數(shù))#include<stdio.h>#definepi3.14159intmain(){doubler;scanf("%lf",&r);printf("%.4lf%.4lf%.4lf",2*r,2*pi*r,pi*r*r);return0;}順序結(jié)構(gòu)舉例解析例3.7計(jì)算球的體積(V=4/3×π×r^3,π=3.14,結(jié)果保留兩小數(shù))#include<stdio.h>intmain(){ doubler,v; scanf("%lf",&r); v=4.0/3*3.14*r*r*r; printf("%.2lf",v); return0;}順序結(jié)構(gòu)舉例解析例3.8反向輸出一個(gè)三位數(shù)(反向輸出n,要保留前導(dǎo)0)#include<stdio.h>intmain(void){intx;intc,b,a;scanf("%d",&x);a=x/100;b=(x/10)%10;c=x%10;printf("%03d",c*100+b*10+a);return0;}順序結(jié)構(gòu)舉例解析例3.9打印ASCII碼#include<stdio.h>intmain(){ chara; intb; scanf("%c",&a); b=a; printf("%d",b);return0;}3.2

選擇結(jié)構(gòu)程序設(shè)計(jì)3.2.1if語(yǔ)句1單分支if語(yǔ)句一般形式:if(表達(dá)式)語(yǔ)句序列;后繼語(yǔ)句;if表達(dá)式與語(yǔ)句序列算一條語(yǔ)句,if就近控制一條語(yǔ)句if表達(dá)式結(jié)構(gòu)為真時(shí)進(jìn)入if字句,為假則直接執(zhí)行后繼語(yǔ)句例3.10輸入一個(gè)數(shù),正數(shù)則求其平方根,否則輸出該數(shù)的平方#include<stdio.h>voidmain(){floatx,y;printf("輸入一個(gè)數(shù):");scanf("%f",&x);y=x*x;if(x>0)y=sqrt(x); /*sqrt()為求平方根函數(shù)*/printf("%f",y);}假表達(dá)式語(yǔ)句真3.2.1if語(yǔ)句2雙分支if語(yǔ)句一般形式:if(表達(dá)式)語(yǔ)句序列1;else語(yǔ)句序列2;后繼語(yǔ)句;若if表達(dá)式的值為真,執(zhí)行語(yǔ)句序列1;否則執(zhí)行語(yǔ)句序列2有else必須有if,有n個(gè)else就至少有n個(gè)ifif和else都只就近控制1條語(yǔ)句;語(yǔ)句序列1和語(yǔ)句序列2可以為復(fù)合語(yǔ)句{},復(fù)合語(yǔ)句算1條語(yǔ)句3.2.1if語(yǔ)句例3.11求二元一次方程的解#include<stdio.h>#include<math.h>intmain(){floata,b,c,disc,p,q,x1,x2;printf("請(qǐng)輸入a,b,c的值:");scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;if(disc>0){p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);

x1=p+q;x2=p-q;printf("x1=%.2f\nx2=%.2f\n",x1,x2);}else{printf("該方程沒(méi)有根,請(qǐng)重新輸入系數(shù)!\n");}return0;}3.2.1if語(yǔ)句注意事項(xiàng):if表達(dá)式通常是邏輯表達(dá)式和關(guān)系表達(dá)式,也可以是其他表達(dá)式;如算數(shù)表達(dá)式或賦值表達(dá)式,也可以是一個(gè)常量或變量if(a=5)語(yǔ)句;表達(dá)式a=5的值永為非0,同時(shí),將5賦給變量a,因?yàn)楸磉_(dá)式值非0,其后的語(yǔ)句一定執(zhí)行,雖不合理,但符合語(yǔ)法規(guī)則。if(b)語(yǔ)句;if(a=b) printf("%d",a);else printf("a=0");含義:把b賦給a,如b的值為非0,則輸出該值,否則輸出a=0在if語(yǔ)句的兩種形式中,語(yǔ)句序列1和語(yǔ)句序列2均為單條語(yǔ)句,若需執(zhí)行一組語(yǔ)句,須把這組語(yǔ)句加上花括號(hào){}組成一條復(fù)合語(yǔ)句,在}后無(wú)需加分號(hào)3.2.1if語(yǔ)句3if語(yǔ)句的嵌套if語(yǔ)句的嵌套一般格式:if(表達(dá)式1) if(表達(dá)式2) 語(yǔ)句1; else 語(yǔ)句2;else if(表達(dá)式3) 語(yǔ)句3; else 語(yǔ)句4;else與if之間的配對(duì)關(guān)系:C語(yǔ)言規(guī)定else總是與它上面最近的if語(yǔ)句配對(duì)。多分支選擇的流程3.2.1if語(yǔ)句使用if語(yǔ)句的嵌套結(jié)構(gòu)實(shí)現(xiàn)多分支時(shí),采用規(guī)范形式:if(表達(dá)式1)語(yǔ)句1;elseif(表達(dá)式2)語(yǔ)句2;elseif(表達(dá)式3)語(yǔ)句3;elseif(表達(dá)式4)語(yǔ)句4; ...elseif(表達(dá)式n)語(yǔ)句n;else語(yǔ)句n+1;語(yǔ)義:當(dāng)表達(dá)式i(1<=i<n)為真時(shí),執(zhí)行語(yǔ)句i,然后跳出整個(gè)if語(yǔ)句執(zhí)行后繼語(yǔ)句;否則判斷else后面表達(dá)式i+1是否為真。若所有表達(dá)式均為假,則執(zhí)行語(yǔ)句n+1,然后執(zhí)行后繼語(yǔ)句。3.2.1if語(yǔ)句#include<stdio.h>intmain(){charc;printf("輸入一個(gè)字符");c=getchar();if(c<32)printf("c為控制字符\n");elseif(c>=48&&c<=57)printf("c為數(shù)字字符\n");elseif(c>=65&&c<=90)printf("c為大寫(xiě)字母\n");elseif(c>=97&&c<=122)printf("c為小寫(xiě)字母\n");elseprintf("c為其他字符\n");return0;}例3.13利用輸入字符的ASCII值判斷字符類(lèi)型。說(shuō)明:控制字符的ASCII值為小于32;數(shù)字字符’0‘和‘9’的ASCII值為48和57;大寫(xiě)字母’A‘和’Z‘的ASCII值為65和90;小寫(xiě)字母’a’和’z‘的ASCII值為97和122,其余則為其他字符。3.2.2

switch語(yǔ)句

if語(yǔ)句是根據(jù)表達(dá)式的值是否為0來(lái)判斷執(zhí)行哪一分支的。某些情況下,要根據(jù)表達(dá)式的不同值來(lái)判斷執(zhí)行哪一分支,如表達(dá)式的值為1,2,3時(shí),分別執(zhí)行不同的操作。雖然也可以用多條if語(yǔ)句來(lái)完成這一工作,但c語(yǔ)言中提供了一條switch語(yǔ)句,可以更方便的完成。3.2.2

switch語(yǔ)句

1switch語(yǔ)句的形式switch語(yǔ)句是一種用于實(shí)現(xiàn)多分支選擇結(jié)構(gòu)的語(yǔ)句,其特點(diǎn)是可以根據(jù)一個(gè)表達(dá)式的多種值選擇多個(gè)分支,又稱(chēng)之為開(kāi)關(guān)語(yǔ)句switch語(yǔ)句的一般形式為:switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句塊1case常量表達(dá)式2:語(yǔ)句塊2...case常量表達(dá)式n:語(yǔ)句塊ndefault:語(yǔ)句塊n+1}執(zhí)行switch語(yǔ)句時(shí),首先計(jì)算switch后面表達(dá)式的值,然后自上而下逐個(gè)與case后的常量表達(dá)式進(jìn)行比較,相等的話則從該case后為入口,執(zhí)行該常量表達(dá)式冒號(hào)后面的所有語(yǔ)句塊,直到switch語(yǔ)句結(jié)束(default后的語(yǔ)句塊也輸出);當(dāng)表達(dá)式的值與所有的case后的常量表達(dá)式均不相等時(shí),若存在default,則執(zhí)行default后面的語(yǔ)句塊,若沒(méi)有default,則結(jié)束switch語(yǔ)句。3.2.2

switch語(yǔ)句例3.14用1~7表示星期一到星期日,先輸入數(shù)字,輸出對(duì)應(yīng)的星期幾的英文單詞#include<stdio.h>intmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){case1:printf("Monday\n");case2:printf("Tuesday\n");case3:printf("Wednesday\n");case4:printf("Thursdat\n");case5:printf("Friday\n");case6:printf("Saturday\n");case7:printf("Sunday\n");default:printf("error\n");}return0;}3.2.2

switch語(yǔ)句例3.15修改上一個(gè)程序,增加break語(yǔ)句#include<stdio.h>intmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursdat\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("error\n");}return0;}case常量表達(dá)式只相當(dāng)于一個(gè)語(yǔ)句標(biāo)號(hào),表達(dá)式的值和某常量表達(dá)式的相等,則轉(zhuǎn)向該標(biāo)號(hào)執(zhí)行,但不能執(zhí)行完自動(dòng)跳出整個(gè)switch語(yǔ)句體,此種情況可采用C語(yǔ)言中break語(yǔ)句跳出switch語(yǔ)句體選擇結(jié)構(gòu)舉例解析例3.16輸入一個(gè)年份,判斷是否公歷中的閏年;能被4整除而不能被100整除或能被400整除的年份就是閏年#include<stdio.h>voidmain(){intyear;printf("inputtheyear:");scanf("%d",&year);if(year%4==0&&year%100!=0||year%400==0)printf("Yes");elseprintf("No");}選擇結(jié)構(gòu)舉例解析例3.17有一個(gè)函數(shù)y=x(x<1)y=2x-1(1<=x<=10)y=3x-11(x>=10),編寫(xiě)實(shí)現(xiàn)該函數(shù)的程序。#include<stdio.h>intmain(){ intx,y; printf("請(qǐng)輸入x的值:"); scanf("%d",&x); if(x<1)y=x;//如果x小于1,則y的值設(shè)為x if(x>=1&&x<10)y=2*x-1;//如果x大于等于1且小于10,則y的值設(shè)為2x-1 if(x>=10)y=3*x-11;//如果x大于等于10,則y的值設(shè)為3x-11 printf("y=%d",y); return0;}選擇結(jié)構(gòu)舉例解析或者#include<stdio.h>intmain(){ intx,y; printf("請(qǐng)輸入x的值:"); scanf("%d",&x); if(x<1)y=x;//如果x小于1,則y的值設(shè)為x elseif(x<10)y=2*x-1;//否則x大于等于且小于10,則y的值設(shè)為2x-1 elsey=3*x-11;//否則y的值設(shè)為3x-11 printf("y=%d",y); return0;}選擇結(jié)構(gòu)舉例解析例3.18公司員工的工資等于底薪加提成,已知員工的底薪3500,利潤(rùn)profit與工資提成的關(guān)系:profit<=1000無(wú)提成;1000<profit<=2000提成10%;2000<profit<=5000提成15%;5000<profit<=10000提成20%;10000<profit提成25%,根據(jù)利潤(rùn)打印員工工資。使用if語(yǔ)句嵌套#include<stdio.h>intmain(){floata=3500; /*定義底薪500*/intprofit; /*定義利潤(rùn)*/floatb; /*定義實(shí)際工資*/printf("輸入工程利潤(rùn):");scanf("%d",&profit);if(profit<=1000)b=a;elseif(profit<=2000)b=a+profit*0.1;elseif(profit<=5000)

b=a+profit*0.15;elseif(profit<=10000)b=a+profit*0.2;elseb=a+profit*0.25;printf("員工工資為:%f",b);return0;}選擇結(jié)構(gòu)舉例解析#include<stdio.h>intmain(){floata=3500;intprofit;intsymbol;printf("輸入利潤(rùn):");scanf("%ld",&profit);symbol=(profit-1)/1000;switch(symbol){case0:break;case1:a+=profit*0.1;break;case2:case3:case4:a+=profit*0.15;break;case5:case6:

case7:case8:case9:a+=profit*0.2;break;default:a+=profit*0.25;}printf("a=%.2f",a);}選擇結(jié)構(gòu)舉例解析例3.19學(xué)校為同學(xué)的成績(jī)做了一下等級(jí)區(qū)分(同學(xué)的成績(jī)都在100~0分內(nèi)),100~90為A級(jí),90~80為B級(jí),80~70為C級(jí),70~60為D級(jí),60以下為E級(jí)。#include<stdio.h>intmain(){intgrade;printf("輸入學(xué)生成績(jī)(0~100):");scanf("%d",&grade);if(grade>=90)printf("該同學(xué)等級(jí)為:A\n");elseif(grade>=80)printf("該同學(xué)等級(jí)為:B\n");elseif(grade>=70)printf("該同學(xué)等級(jí)為:C\n");elseif(grade>=60)printf("該同學(xué)等級(jí)為:D\n");elseprintf("該同學(xué)等級(jí)為:E\n");return0;}選擇結(jié)構(gòu)舉例解析#include<stdio.h>intmain(){ intgrade; printf("請(qǐng)輸入該同學(xué)成績(jī)(0~100):"); scanf("%d",&grade); switch(grade/10) { case10: case9:printf("該同學(xué)等級(jí)為:A");break; case8:printf("該同學(xué)等級(jí)為:B");break; case7:printf("該同學(xué)等級(jí)為:C");break; case6:printf("該同學(xué)等級(jí)為:D");break; default:printf("該同學(xué)等級(jí)為:E\n"); } return0;}選擇結(jié)構(gòu)舉例解析例3.20當(dāng)a為正數(shù)時(shí),將下面語(yǔ)句改為switch語(yǔ)句if(a<30)m=1;elseif(a<40)m=2;elseif(a<50)m=3;elseif(a<60)m=4;elsem=5;分析:a的變化點(diǎn)轉(zhuǎn)折是10的倍數(shù),a<30對(duì)應(yīng)3;a<40對(duì)于4,a<50對(duì)應(yīng)5,a<60對(duì)應(yīng)6#include<stdio.h>voidmain(){intc,a,m;printf("輸入一個(gè)數(shù):");scanf("%d",&a);if(a<=0)c=-1;elsec=a/10;switch(c){case0:case1:case2:m=1;break;case3:m=2;break;case4:m=3;break;case5:m=4;break;default:m=5;}if(c!=-1)printf("m=%d\n",m);elseprintf("error\n");}3.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.3.1for循環(huán)結(jié)構(gòu)1、for循環(huán)結(jié)構(gòu)的一般形式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體表達(dá)式1:初始值表達(dá)式,為循環(huán)控制變量設(shè)置初始值。表達(dá)式2:循環(huán)控制邏輯表達(dá)式,它控制循環(huán)執(zhí)行的條件,決定循環(huán)次數(shù)。表達(dá)式3:循環(huán)控制變量修改表達(dá)式循環(huán)體:重復(fù)執(zhí)行的語(yǔ)句for語(yǔ)句的執(zhí)行流程如圖所示3.3循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.3.1for循環(huán)結(jié)構(gòu)for語(yǔ)句的執(zhí)行過(guò)程如下:第一步:計(jì)算表達(dá)式1第二步:判斷表達(dá)式2,若其值為真(非0),則執(zhí)行循環(huán)體語(yǔ)句,然后執(zhí)行第3步;若值為假(0),結(jié)束循環(huán),轉(zhuǎn)到第5步執(zhí)行第三步:計(jì)算表達(dá)式3第四步:返回第2步繼續(xù)執(zhí)行第五步:循環(huán)結(jié)束,繼續(xù)執(zhí)行for語(yǔ)句的下一條語(yǔ)句for循環(huán)結(jié)構(gòu)例3.21編寫(xiě)程序計(jì)算s=1+2+3...+100的值#include<bits/stdc++.h>intmain(){ ints=0,i; for(i=1;i<=100;i++) { s=s+i;//不積跬步無(wú)以至千里 } printf("s=%d",s); return0;}for循環(huán)結(jié)構(gòu)例3.22人類(lèi)追求更多的是心靈的歸屬,而文化是歸屬的土壤,只有文化才是我們賴(lài)以與其他種族區(qū)別的精神內(nèi)核,文化傳承,人類(lèi)繁衍發(fā)展。假設(shè)今年我國(guó)人口數(shù)為13億,若按每年1%增長(zhǎng),計(jì)算從現(xiàn)在開(kāi)始10年內(nèi)每年人口的數(shù)量#include<stdio.h>#include<math.h>intmain(){intn=13,year;doublenumber,rate=0.01;for(year=1;year<=10;year++){number=n*pow((1+rate),year);printf("%2d年后,人數(shù)為:%.2f億\n",year,number);}return0;}for循環(huán)結(jié)構(gòu)例3.23輸入一個(gè)正整數(shù)n,計(jì)算從1加到n的和程序設(shè)計(jì)思路:首先設(shè)計(jì)變量增量i,存和變量sum,必須設(shè)置sum的初始值為0,sum=sim+i語(yǔ)句重復(fù)n次,同時(shí)i從1變到n,就實(shí)現(xiàn)了從1累加到n。#include<stdio.h>intmain(){inti,n,sum;scanf_s("%d",&n);sum=0;for(i=1;i<=n;i++)sum=sum+i;printf("由1到%d的和是:%d\n",n,sum);return0;}for循環(huán)結(jié)構(gòu)例3.24輸入一個(gè)正整數(shù),求n!#include<stdio.h>intmain(){inti,n;intfactorial;printf("輸入n的值:");scanf("%d",&n);factorial=1;

for(i=1;i<=n;i++)factorial=factorial*i;printf("%d!=%.0f\n",n,factorial);return0;}for循環(huán)結(jié)構(gòu)2、for語(yǔ)句的變形for語(yǔ)句的一般形式中省略表達(dá)式1格式如下:for(;表達(dá)式2;表達(dá)式3)循環(huán)語(yǔ)句;說(shuō)明:省略表達(dá)式1時(shí),可以將循環(huán)變量賦初值放在for之前。注意,此時(shí)不能省略第一個(gè);(以求從1加到100為例)i=1;for(;i<=100;i++){s=s+i;}for循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式中省略表達(dá)式2格式如下:for(表達(dá)式1;;表達(dá)式3)循環(huán)語(yǔ)句;(以求從1加到100為例)#include<bits/stdc++.h>intmain(){ inti,s=0; for(i=1;;i++) { if(i<=100) s=s+i; else break;//不滿足條件退出循環(huán) } printf("%d",s); return0;}for循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式中省略表達(dá)式3格式如下:for(表達(dá)式1;表達(dá)式2;)循環(huán)語(yǔ)句;(以求從1加到100為例)#include<bits/stdc++.h>intmain(){ inti,s=0;

for(i=1;i<=100;) { s=s+i; i++; } printf("%d",s); return0;}for循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式中表達(dá)式1和表達(dá)式3也可以是逗號(hào)表達(dá)式如:#include<bits/stdc++.h>intmain(){ inti,j; for(i=1,j=10;i<=j;i++,j--) { printf("i=%d,j=%d\n",i,j); } return0;}for循環(huán)結(jié)構(gòu)for語(yǔ)句的一般形式中循環(huán)體語(yǔ)句可以省略如for(sum=0,i=1;i<=100;sum=sum+i,i++)上述for語(yǔ)句的循環(huán)體為空語(yǔ)句,實(shí)際上已把累加和的運(yùn)算放入到表達(dá)式3中了。for循環(huán)結(jié)構(gòu)例3.25輸入十個(gè)數(shù),輸出其中最大的數(shù)#include<stdio.h>intmain(){inti;floatx,max;printf("輸入第1個(gè)數(shù):");scanf("%f",&x);max=x;for(i=2;i<=10;i++){printf("請(qǐng)輸入第%d個(gè)數(shù):",i);

scanf("%f",&x);if(x>max)max=x;}printf("10個(gè)數(shù)的最大值是:%.0f",max);return0;}for循環(huán)結(jié)構(gòu)例3.26輸出所有的水仙數(shù)(水仙數(shù)的特點(diǎn)是三位數(shù)中百位數(shù)字的立方與十位數(shù)字的立方與個(gè)位數(shù)字的立方之和等于三位數(shù)本身)#include<stdio.h>intmain(){intnumber,a,b,c;for(number=100;number<=999;number++){a=number/100;b=number%100/10;c=number%10;if(number==a*a*a+b*b*b+c*c*c)

printf("%5d",number);}return0;}for循環(huán)結(jié)構(gòu)例3.27輸出100以內(nèi)的完數(shù)(所有的真因子(除了自身以外的約數(shù))的和恰好等于它本身的正整數(shù)成為完數(shù))#include<stdio.h>intmain(){intnumber,sum,i,j; for(i=1;i<=100;i++) { sum=0; for(j=1;j<=i-1;j++) { if(i%j==0) sum=sum+j; } if(i==sum) printf("%d",i); }return0;}for循環(huán)結(jié)構(gòu)例3.28統(tǒng)計(jì)由鍵盤(pán)輸入的20個(gè)字符中,大寫(xiě)英文字母,小寫(xiě)英文字母,數(shù)字字符和其他字符的個(gè)數(shù)#include<stdio.h>intmain(){ intupper,lower,digit,i,other; charch; upper=lower=digit=other=0; printf("輸入20個(gè)字符:"); for(i=1;i<=20;i++) { ch=getchar();for循環(huán)結(jié)構(gòu) if(ch>='a'&&ch<='z') lower++; elseif(ch>='A'&&ch<='Z') upper++; elseif(ch>='0'&&ch<='9') digit++; else other++;} printf("大寫(xiě)字母%d個(gè),小寫(xiě)字母%d個(gè),數(shù)字%d個(gè),其他字符%d個(gè)\n",upper,lower,digit,other); return0;}for循環(huán)結(jié)構(gòu)例3.29由鍵盤(pán)輸入三個(gè)數(shù)字,將其組合成一個(gè)整型數(shù)并輸出#include<stdio.h>intmain(){intn=0,i;charch;printf("輸入三個(gè)數(shù)字:");for(i=1;i<=3;i++){scanf("%c",&ch);n=n*10+ch-'0';//ch-’0’將字符型數(shù)字轉(zhuǎn)換成數(shù)字}

printf("%d\n",n);return0;}for循環(huán)結(jié)構(gòu)例3.30由鍵盤(pán)輸入一個(gè)正整數(shù),判斷其是否為素?cái)?shù)#include<stdio.h>intmain(){ inti,flag,num; printf("輸入一個(gè)正整數(shù):"); scanf("%d",&num); flag=1; for(i=2;i<=num-1&&flag;i++) if(num%i==0) flag=0; if(flag) printf("%d是素?cái)?shù)\n",num); else printf("%d不是素?cái)?shù)\n",num); return0;}3.3.2while循環(huán)結(jié)構(gòu)一般形式:

while(表達(dá)式)語(yǔ)句表達(dá)式語(yǔ)句真假表達(dá)式1.計(jì)算表達(dá)式。語(yǔ)句2.如果表達(dá)式的值為非零,執(zhí)行語(yǔ)句。表達(dá)式3.返回第一步,重新計(jì)算表達(dá)式。4.如果表達(dá)式的值為零,則結(jié)束循環(huán)。如果表達(dá)式的值一開(kāi)始就為0,則語(yǔ)句一次也不會(huì)被執(zhí)行。執(zhí)行流程:3.3.2while循環(huán)結(jié)構(gòu)例3.33輸入一個(gè)正整數(shù)n,計(jì)算n!#include<stdio.h>intmain(){ inti; intn,fact; i=2; fact=1; printf("請(qǐng)輸入n的值:"); scanf("%ld",&n); while(i<=n) { fact=fact*i; i=i+1; } printf("%d!=%d\n",n,fact); return0;}3.3.2dowhile循環(huán)結(jié)構(gòu)一般形式:

do{

語(yǔ)句

}while(表達(dá)式);1.執(zhí)行語(yǔ)句3.表達(dá)式的值為非零,返回第1步4.表達(dá)式的值為零,結(jié)束循環(huán)語(yǔ)句至少被執(zhí)行一次。表達(dá)式語(yǔ)句2.計(jì)算表達(dá)式執(zhí)行流程:注意:分號(hào)不能丟語(yǔ)句真假3.3.2dowhile循環(huán)結(jié)構(gòu)intday=1;do{

printf("%d\n",day);

day++;}while(day<8);程序在執(zhí)行的過(guò)程為:首先進(jìn)入第一次循環(huán)顯示1并將day的值加1,然后做條件判斷day的值為2,于是day<8的結(jié)果為真,返回到do后面的循環(huán)體進(jìn)入下一次循環(huán)...直到day的值為8時(shí),day<8的結(jié)果為假,結(jié)束循環(huán)。舉例:while和

dowhile細(xì)微差別使用while執(zhí)行循環(huán):inti=0;while(i<0){ i++; printf("%d\n",i);}執(zhí)行0次循環(huán),沒(méi)有運(yùn)行結(jié)果;舉例:使用dowhile執(zhí)行循環(huán):inti=0;do{ i++; printf("%d\n",i);}while(i<0);執(zhí)行1次循環(huán),運(yùn)行結(jié)果為1。dowhile循環(huán)結(jié)構(gòu)舉例例3.34求兩個(gè)自然數(shù)的最大公約數(shù)和最小公倍數(shù)#include<bits/stdc++.h>intmain(){inta,b,r,n,m;printf("請(qǐng)輸入兩個(gè)整數(shù):");scanf("%d%d",&a,&b);m=a,n=b;do{r=a%b;a=b;b=r;}while(r!=0);printf("%d和%d的最大公約數(shù)是:%d\n",m,n,a);printf("最小公倍數(shù)是:%d",m*n/a);return0;}dowhile循環(huán)結(jié)構(gòu)舉例例3.35輸入一個(gè)整數(shù),統(tǒng)計(jì)該數(shù)的位數(shù)#include<stdio.h>intmain(){ longn,m; intcount=0; printf("請(qǐng)輸入一個(gè)整數(shù):"); scanf("%ld",&n); m=n; if(n<0) n=-n; do { n=n/10; count++; }while(n!=0); printf("整數(shù)%ld有%d位數(shù)\n",m,count); return0;}綜合實(shí)踐解析例3.37編寫(xiě)程序,由鍵盤(pán)輸入一個(gè)正整數(shù),判斷其是否為素?cái)?shù)程序中結(jié)束for循環(huán)的條件有兩個(gè):一是i>m;二是break語(yǔ)句若i>m,說(shuō)明for循環(huán)正常結(jié)束,則n一定是素?cái)?shù)若遇到break語(yǔ)句,說(shuō)明循環(huán)中條件n%i=0成立,n能被某個(gè)i整除,執(zhí)行break語(yǔ)句退出循環(huán),此時(shí)i<=m,n一定不是素?cái)?shù)#include<bits/stdc++.h>intmain(){intn,m,i;printf("請(qǐng)輸入一個(gè)正整數(shù):");scanf("%d",&n);m=sqrt(n);

for(i=2;i<=m;i++)if(n%i==0)break;if(i>m)printf("%d是素?cái)?shù)!\n",n);elseprintf("%d不是素?cái)?shù)!\n",n);return0;}綜合實(shí)踐解析例3.38從鍵盤(pán)輸入一批學(xué)生的成績(jī)(以負(fù)數(shù)作為結(jié)束標(biāo)志),計(jì)算平均分,并統(tǒng)計(jì)不及格成績(jī)的個(gè)數(shù)#include<stdio.h>intmain(){ intnum,n; floatscore,total=0; num=0;n=0; while(1) { printf("請(qǐng)輸入分?jǐn)?shù)#%d(0~100):",n+1); scanf("%f",&score); if(score<0) break; if(score<60) num++; total=total+score; n++; } printf("平均分?jǐn)?shù)是:%.2f.\n",total/n); printf("不及格的有:%d.\n",num); return0;}綜合實(shí)踐解析例3.39把1到100之間能被7整除的數(shù),以每行5個(gè)的形式在屏幕上輸出#include<stdio.h>intmain(){ inti,n=1; for(i=1;i<=100;i++) { if(i%7!=0) continue; printf("%4d",i); if(n++%5==0) printf("\n"); } return0;}綜合實(shí)踐解析例3.40分析下面程序的運(yùn)行結(jié)果#include<bits/stdc++.h>intmain(){intn,s=0;n=1;while(n<10){s=s+n;if(s>5)break;if(n%2==1)continue;n++;}printf("s=%d,n=%d\n",s,n);return0;}綜合實(shí)踐解析例3.42將10-20之間的正整數(shù)分解質(zhì)因數(shù)。#include<bits/stdc++.h>intmain(){inti,n,m;for(m=10;m<=20;m++){n=m,i=2;printf("%d=",n);do{if(n%i==0){printf("%d*",i);n=n/i;}elsei++;}while(n!=i);printf("%d\n",n);}return0;}綜合實(shí)踐解析例3.43猜數(shù)字游戲:由計(jì)算機(jī)隨機(jī)產(chǎn)生一個(gè)10-80之間的數(shù)據(jù),然后由用戶進(jìn)行猜數(shù),在5次之內(nèi)猜中則成功,否則給出大小提示。猜5次之后結(jié)束程序#include<bits/stdc++.h>intmain(){intm,n,count=0;m=rand()%71+10;loop:printf("請(qǐng)輸入一個(gè)10-80之間的數(shù):");while(1){scanf("%d",&n);count++;if(m==n)綜合實(shí)踐解析{printf("踏破鐵鞋無(wú)覓處,得來(lái)全不費(fèi)工夫\n");break;}elseif(m>n&&count<5)printf("會(huì)當(dāng)凌絕頂,一覽眾山小\n");elseif(m<n&&count<5)printf("飛流直下三千尺,疑是銀河落九天\n");if(count==5){printf("為山九仞,功虧一簣\n這個(gè)數(shù)是:%d,結(jié)束!\n",m);break;}gotoloop;return0;}}本章小結(jié)本章介紹了C語(yǔ)言程序的順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種程序設(shè)計(jì)結(jié)構(gòu),介紹了數(shù)據(jù)的輸入和輸出函數(shù),if和switch語(yǔ)句,for循環(huán)和while循環(huán)結(jié)構(gòu),在C語(yǔ)言學(xué)習(xí)之路中,以中國(guó)的優(yōu)美詩(shī)句為例,介紹了文化自信的內(nèi)容。第四章數(shù)組數(shù)組64.1一維數(shù)組4.2二維數(shù)組4.3字符數(shù)組4.4數(shù)組程序舉例數(shù)組6在使用C語(yǔ)言進(jìn)行程序設(shè)計(jì)過(guò)程中,我們使用數(shù)組把具有相同類(lèi)型的若干變量按有序的形式組織起來(lái),這些按一定順序排列的同類(lèi)型數(shù)據(jù)元素的集合稱(chēng)為數(shù)組。在C語(yǔ)言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類(lèi)型,它可以被分解成若干個(gè)數(shù)組元素,而這些數(shù)組元素可以是基本數(shù)據(jù)類(lèi)型,也可以是構(gòu)造類(lèi)型。按數(shù)組元素的類(lèi)型劃分,數(shù)組可分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)體數(shù)組等多種類(lèi)型。本章主要介紹數(shù)值數(shù)組以及字符數(shù)組的定義及使用方法。4.1一維數(shù)組4.1.1一維數(shù)組的定義在C語(yǔ)言中規(guī)定,數(shù)組必須先定義再使用。一維數(shù)組定義方式為:

類(lèi)型說(shuō)明符數(shù)組名[整形常量或常量表達(dá)式];其中:類(lèi)型說(shuō)明符是int、char、float、double等基本數(shù)據(jù)類(lèi)型以及構(gòu)造數(shù)據(jù)類(lèi)型。數(shù)組名是用戶定義的數(shù)組標(biāo)識(shí)符,其命名規(guī)則與基本變量名一致。常量表達(dá)式使用中括號(hào)括起來(lái),表示數(shù)據(jù)元素的個(gè)數(shù),也稱(chēng)為數(shù)組的長(zhǎng)度,可以是一個(gè)大于等于1的整數(shù)、符號(hào)常數(shù)或常量表達(dá)式。例如:intarr[5];//定義數(shù)組名為arr、每個(gè)元素類(lèi)型都是整型、共有5個(gè)元素的數(shù)組#defineLEN100//定義宏常量LEN,其值為100floatarr1[LEN],arr2[LEN+10];//可以使用符號(hào)常數(shù)和常量表達(dá)式來(lái)定義數(shù)組charch[8];//定義數(shù)組名為ch、每個(gè)元素類(lèi)型都是字符型、共有8個(gè)元素的數(shù)組4.1一維數(shù)組4.1.1一維數(shù)組的定義對(duì)于數(shù)組定義應(yīng)注意以下幾點(diǎn):數(shù)組名的書(shū)寫(xiě)規(guī)則應(yīng)符合標(biāo)識(shí)符的書(shū)寫(xiě)規(guī)定,在前面章節(jié)已做介紹;數(shù)組名不能與其它變量名相同,例如對(duì)于intarr,arr[5];系統(tǒng)會(huì)報(bào)錯(cuò);數(shù)組的類(lèi)型代表了其中每個(gè)元素的值類(lèi)型,即同一個(gè)數(shù)組,其元素?cái)?shù)據(jù)類(lèi)型均相同;中括號(hào)中常量表達(dá)式表示數(shù)組元素的個(gè)數(shù),但其下標(biāo)從0開(kāi)始計(jì)算,因此intarr[5];定義完成后,其元素分別為arr[0],arr[1],arr[2],arr[3],arr[4];中括號(hào)中可以是符號(hào)常數(shù)或常量表達(dá)式,但不能是變量。//正確示例#defineLEN100main(){inta[LEN],b[LEN+100];……}//錯(cuò)誤示例main(){intlen=100;inta[len],b[len+100];……}4.1一維數(shù)組4.1.2一維數(shù)組的初始化數(shù)組初始化賦值,也可簡(jiǎn)稱(chēng)為初始化,是指在定義的同時(shí)給數(shù)組元素賦予初值。數(shù)組初始化在編譯階段進(jìn)行,這樣的程序運(yùn)行時(shí)間短,執(zhí)行效率高。初始化賦值的形式為:類(lèi)型說(shuō)明符數(shù)組名[整形常量或常量表達(dá)式]={值1,值2,……值n};其中,使用大括號(hào)將數(shù)據(jù)值集合括起來(lái),而{}中的數(shù)據(jù)值即為若干元素的初值,各值之間用逗號(hào)間隔。例如:intarr[5]={10,11,12,13,14};//其中arr[0]到arr[4]的值分別為10,11,12,13,144.1一維數(shù)組4.1.2一維數(shù)組的初始化C語(yǔ)言對(duì)數(shù)組的初始化還有以下幾點(diǎn)說(shuō)明:可以只給部分元素賦初值當(dāng)大括號(hào)中值的個(gè)數(shù)少于元素總個(gè)數(shù)時(shí),只給靠左面的部分元素賦值,例如:intarr[5]={10,11,12};表示只給arr[0]到arr[2]分別賦值10,11,12,而后2個(gè)整形元素自動(dòng)賦值0。只能給元素逐個(gè)賦值,不能給數(shù)組整體賦值例如:給5個(gè)元素全部賦值為1,只能寫(xiě)為intarr[5]={1,1,1,1,1};而不能寫(xiě)為:intarr[5]=1;給全部元素初始化賦值時(shí),數(shù)組元素的個(gè)數(shù)可以不寫(xiě)例如:intarr[5]={10,11,12,13,14};可寫(xiě)為:intarr[]={10,11,12,13,14};4.1一維數(shù)組4.1.3一維數(shù)組元素的引用C語(yǔ)言規(guī)定數(shù)組必須先定義后使用,且只能逐個(gè)引用數(shù)組元素而不能一次引用所有元素,這是因?yàn)閿?shù)組元素,也被稱(chēng)為下標(biāo)變量,是組成數(shù)組的基本單元,而每個(gè)數(shù)組元素就是一個(gè)變量,其使用方法與同類(lèi)型的變量一樣。數(shù)組元素的表示形式為:數(shù)組名[下標(biāo)]其中下標(biāo)可以是整型常量或變量表達(dá)式,這與定義時(shí)的常量表達(dá)式不同。例如intarr[5]={10,11,12,13,14};使用arr[2],a[i+j],a[i++](其中i,j都是整形變量)引用上述數(shù)組的元素都是正確的形式。4.1一維數(shù)組4.1.3一維數(shù)組元素的引用例4.1數(shù)組的定義與元素引用#include<stdio.h>#defineLEN5voidmain(){inti,arr1[LEN];intarr2[5]={10,11,12,13,14};arr1[0]=0;arr1[1]=1;arr1[2]=2;arr1[3]=3;arr1[4]=4;for(i=0;i<=4;i++)printf("%d",arr1[i]);

printf("%d",arr2[0]);printf("%d",arr2[1]);printf("%d",arr2[2]);printf("%d",arr2[3]);printf("%d",arr2[4]);}4.1一維數(shù)組4.1.3一維數(shù)組元素的引用例4.2數(shù)組元素可以當(dāng)做普通變量來(lái)使用#include<stdio.h>#defineLEN5voidmain(){inti,arr1[LEN];intarr2[5]={10,11,12,13,14};for(i=0;i<5;i++)arr1[i]=arr2[i]*2;for(i=4;i>=0;i--)printf(“%d\n”,arr1[i]);}4.1一維數(shù)組4.1.4一維數(shù)組程序舉例例4.3使用數(shù)組來(lái)實(shí)現(xiàn)求5個(gè)整數(shù)中的最大值#include<stdio.h>voidmain(){inti,max;//定義整型變量i當(dāng)計(jì)數(shù)器變量,max存儲(chǔ)最大值intarr[5];printf("請(qǐng)輸入5個(gè)整數(shù):\n");for(i=0;i<5;i++)scanf("%d",&arr[i]);//使用scanf函數(shù)進(jìn)行動(dòng)態(tài)賦值max=arr[0];for(i=1;i<5;i++)if(arr[i]>max)max=arr[i];printf("數(shù)組中最大的整數(shù)是%d\n",max);}4.1一維數(shù)組4.1.4一維數(shù)組程序舉例【例4.4】使用數(shù)組為當(dāng)前數(shù)組賦值#include<stdio.h>voidmain(){inti,j,arr1[5]={1,2,3,4,5},arr2[5]={0};printf("\n數(shù)組arr2所有元素的初始值為:\n");for(i=0;i<5;i++)printf("%-5d",arr2[i]);for(i=0;i<5;i++)arr2[i]=arr1[i];printf("\n數(shù)組arr2在被arr1賦值后所有元素的值為:\n");for(i=0;i<5;i++)printf("%-5d",arr2[i]);}4.2二維數(shù)組4.2.1二維數(shù)組的定義二維數(shù)組定義的一般形式是:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]其中常量表達(dá)式1表示第一維下標(biāo)的長(zhǎng)度,常量表達(dá)式2則表示第二維下標(biāo)的長(zhǎng)度。例如:inta[5][5];定義了一個(gè)5行5列的數(shù)組,數(shù)組名為a,其下標(biāo)變量的類(lèi)型與一維數(shù)組一樣,均為整型。該數(shù)組的下標(biāo)變量共有5×5個(gè),即:a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]a[1][0],a[1][1],a[1][2],a[1][3],a[1][4]a[2][0],a[2][1],a[2][2],a[2][3],a[2][4]a[3][0],a[3][1],a[3][2],a[3][3],a[3][4]a[4][0],a[4][1],a[4][2],a[4][3],a[4][4]4.2二維數(shù)組4.2.1二維數(shù)組的定義二維數(shù)組定義的一般形式是:

類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]其中常量表達(dá)式1表示第一維下標(biāo)的長(zhǎng)度,常量表達(dá)式2則表示第二維下標(biāo)的長(zhǎng)度。例如:inta[5][5];定義了一個(gè)5行5列的數(shù)組,數(shù)組名為a,其下標(biāo)變量的類(lèi)型與一維數(shù)組一樣,均為整型。該數(shù)組的下標(biāo)變量共有5×5個(gè),即:a[0][0],a[0][1],a[0][2],a[0][3],a[0][4]a[1][0],a[1][1],a[1][2],a[1][3],a[1][4]a[2][0],a[2][1],a[2][2],a[2][3],a[2][4]a[3][0],a[3][1],a[3][2],a[3][3],a[3][4]a[4][0],a[4][1],a[4][2],a[4][3],a[4][4]二維數(shù)組在概念上是二維的,但是,實(shí)際的硬件存儲(chǔ)器卻是連續(xù)編址的,也就是說(shuō)存儲(chǔ)器單元是按一維線性排列的。在C語(yǔ)言中,二維數(shù)組是按行排列的。4.2二維數(shù)組4.2.2二維數(shù)組的初始化二維數(shù)組在定義的同時(shí)也可以進(jìn)行初始化操作,使數(shù)組中若干元素獲得相應(yīng)的值。二維數(shù)組初始化也是在編譯階段進(jìn)行,這樣的程序運(yùn)行時(shí)間短,執(zhí)行效率高。二維初始化賦值的形式為:

類(lèi)型說(shuō)明符數(shù)組名[整形常量或常量表達(dá)式1][整形常量或常量表達(dá)式2]={值1,值2,……值n};實(shí)際上,二維數(shù)組初始化時(shí)可按行分段賦值,也可按行連續(xù)賦值。例如對(duì)于數(shù)組a[4][3]:按行分段賦值可寫(xiě)為:inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};按行連續(xù)賦值可寫(xiě)為:inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};這兩種初始化的結(jié)果是完全相同的,但推薦分段賦值的方法,這樣層次清晰,不容易出錯(cuò)。4.2二維數(shù)組4.2.2二維數(shù)組的初始化例4.5二維數(shù)組初始化可以使用不同的形式#include<stdio.h>voidmain(){inti,j,a[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};intb[4][3]={{1,2,3,4,5,6,7,8,9,10,11,12};printf(“\n數(shù)組a初始化之后各元素的值依次為:\n”);for(i=0;i<4;i++)for(j=0;j<3;j++)printf(“%-4d”,a[i][j];printf(“數(shù)組b初始化之后各元素的值依次為:\n”);for(i=0;i<4;i++)for(j=0;j<3;j++)printf(“%-4d”,b[i][j];)}4.2二維數(shù)組4.2.3二維數(shù)組元素的引用二維數(shù)組的元素也稱(chēng)為雙下標(biāo)變量,二維數(shù)組中各元素的表示形式為:

數(shù)組名[下標(biāo)1][下標(biāo)2]其中下標(biāo)1和下標(biāo)2應(yīng)為整型常量或整型表達(dá)式。在C語(yǔ)言中,二維數(shù)組與一維數(shù)組一樣,也必須先定義后使用,且只能引用每一個(gè)元素而不能整體引用。例如:執(zhí)行完語(yǔ)句inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};之后a[0][1]表示數(shù)組0行1列的元素,其值為2。4.2二維數(shù)組4.2.4二維數(shù)組程序舉例例4.6設(shè)計(jì)一個(gè)簡(jiǎn)單的程序,統(tǒng)計(jì)學(xué)生語(yǔ)文、數(shù)學(xué)、英語(yǔ)三門(mén)課程的總分及平均分,具體如下表所示。課程語(yǔ)文數(shù)學(xué)英語(yǔ)總分平均分Alice808590

Bob908894

Clinton867892

可設(shè)一個(gè)二維數(shù)組a[3][5]存放3位同學(xué)三門(mén)課的成績(jī)、總分及平均分。根據(jù)數(shù)組的定義、初始化及引用方法,將總分及平均分計(jì)算并保存到相應(yīng)的數(shù)組元素中。由于分?jǐn)?shù)可能有小數(shù),故將數(shù)組定義成單精度型。4.2二維數(shù)組4.2.4二維數(shù)組程序舉例#include<stdio.h>voidmain(){inti,j;//其中i,j為計(jì)數(shù)器floattotal=0,aver=0;//total表示總分,aver表示平均分,將兩者均初始化為0floatscore[3][5]={{80,85,90},{90,88,94},{86,78,92}};for(i=0;i<3;i++){for(j=0;j<3;j++){total+=score[i][j];}score[i][3]=total;score[i][4]=total/3.0;total=0;}printf(“3位同學(xué)的成績(jī)表打印如下:\n”);printf(“語(yǔ)文

數(shù)學(xué)

英語(yǔ)

總分

平均分\n”);for(i=0;i<3;i++){for(j=0;j<5;j++)printf(“%-8.2f”,score[i][j]);printf(“\n”);}}4.3字符數(shù)組4.3.1字符數(shù)組的定義形式與前面介紹的數(shù)值數(shù)組相同,字符數(shù)組定義的一般形式為:一維數(shù)組: char數(shù)組名[整型常量或整型常量表達(dá)式];二維數(shù)組: char數(shù)組名[整型常量或整型常量表達(dá)式1][整型常量或整型常量表達(dá)式2];例如:charc[5];//定義一維字符數(shù)組,其最大容量為5個(gè)字符,元素下標(biāo)從0到4charc[4][3];//定義二維字符數(shù)組,其包含的元素第一個(gè)下標(biāo)從0到3、第二個(gè)下標(biāo)從0到2本節(jié)重點(diǎn)講述一維字符數(shù)組,讀者可參考二維數(shù)組的基礎(chǔ)知識(shí)來(lái)理解多維字符數(shù)組。4.3字符數(shù)組4.3.2字符數(shù)組的初始化字符數(shù)組也允許在定義時(shí)作初始化賦值,不過(guò)每個(gè)值需要使用單引號(hào)‘’引起來(lái)。例如讓字符數(shù)組存儲(chǔ)hello這個(gè)單詞:charc[6]={‘h’,‘e’,‘l’,‘l’,‘o’};賦值后各元素的值如表所示。其中c[5]未賦值,而系統(tǒng)自動(dòng)為其賦予0值。當(dāng)對(duì)全體元素賦初值時(shí)也像前面普通數(shù)組一樣,可以省去長(zhǎng)度。例如:charc[]={‘h’,‘e’,‘l’,‘l’,‘o’};注意,這時(shí)數(shù)組c的長(zhǎng)度不再是6,而是自動(dòng)定為5。c[0]c[1]c[2]c[3]c[4]‘h’‘e’‘l’‘l’‘o’4.3字符數(shù)組4.3.3字符數(shù)組的引用與其他基本類(lèi)型的數(shù)組相同,字符數(shù)組也必須先定義后使用,且只能逐個(gè)引用數(shù)組元素而不能一次引用所有元素,而每個(gè)字符數(shù)組元素就是一個(gè)字符變量,其使用方法與字符變量相同。字符數(shù)組元素的表示形式為:

數(shù)組名[下標(biāo)]以數(shù)組初始化時(shí),以charc[]={‘h’,‘e’,‘l’,‘l’,‘o’};為例,可使用c[1]來(lái)引用‘e’;c[1+3]來(lái)引用’o’,其與c[4]等價(jià);c[i]來(lái)引用其中任一值,其中i為整型變量,且0≤i≤4。4.3字符數(shù)組4.3.3字符數(shù)組的引用例4.7字符數(shù)組初始化及元素引用#include<stdio.h>voidmain(){inti;charc[]={‘h’,‘e’,‘l’,‘l’,‘o’};printf(“數(shù)組中的元素值為:\n”);for(i=0;i<5;i++)printf(“%c”,c[i]);}4.3字符數(shù)組4.3.4字符串和字符串結(jié)束標(biāo)志C語(yǔ)言使用一個(gè)字符數(shù)組來(lái)存放一個(gè)字符串,并且前面章節(jié)介紹字符串常量時(shí),已說(shuō)明字符串總是以'\0'作為串的結(jié)束標(biāo)記。因此把一個(gè)字符串存入數(shù)組時(shí),也把結(jié)束符'\0'存入數(shù)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論