C程序設(shè)計(jì)教程中清華_第1頁(yè)
C程序設(shè)計(jì)教程中清華_第2頁(yè)
C程序設(shè)計(jì)教程中清華_第3頁(yè)
C程序設(shè)計(jì)教程中清華_第4頁(yè)
C程序設(shè)計(jì)教程中清華_第5頁(yè)
已閱讀5頁(yè),還剩92頁(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)介

會(huì)計(jì)學(xué)1C程序設(shè)計(jì)教程中清華第5章循環(huán)結(jié)構(gòu)

第6章數(shù)組

第7章指針清華大學(xué)出版社第1頁(yè)/共97頁(yè)3第5章循環(huán)結(jié)構(gòu)5.1循環(huán)的構(gòu)成一5.2循環(huán)語(yǔ)句

二5.3循環(huán)的嵌套

三5.4循環(huán)應(yīng)用實(shí)例

四第2頁(yè)/共97頁(yè)45.1循環(huán)的構(gòu)成【例5.1】判斷某一正整數(shù)是否能夠被3整除。N~S結(jié)構(gòu)化流程圖輸入mm%3==0能被3整除不能被3整除10第3頁(yè)/共97頁(yè)5【例5.2】找出100以內(nèi)能被3整除的正整數(shù)。初始條件循環(huán)條件循環(huán)體步長(zhǎng)成立循環(huán)以后的其他語(yǔ)句不成立循環(huán)流程圖第4頁(yè)/共97頁(yè)65.2循環(huán)語(yǔ)句

5.2.1while語(yǔ)句while語(yǔ)句是當(dāng)型循環(huán)語(yǔ)句,一般形式為:while(表達(dá)式)語(yǔ)句;例如:找出100以內(nèi)能被3整除的正整數(shù)。

main(){ intm=1;while(m<=100) { if(m%3==0) printf("%8d",m); m=m+1; }}第5頁(yè)/共97頁(yè)7【例5.3】求n!

例5.3N~S結(jié)構(gòu)化流程圖n<=m輸出sn=1,s=1s=s*n輸入mn++第6頁(yè)/共97頁(yè)8main(){intn=1,m;longints=1;printf("pleaseinputm:");scanf("%d",&m); while(n<=m) { s*=n; n++; } printf("%d!=%ld\n",m,s);}第7頁(yè)/共97頁(yè)9【例5.4】求100以內(nèi)能被3整除的數(shù)之和例5.4N~S結(jié)構(gòu)化流程圖n<=100輸出sumn=1sum=0n++10sum=sum+nn%3==0第8頁(yè)/共97頁(yè)10main(){ intn=1,sum=0; while(n<=100) { if(n%3==0) sum=sum+n; n++; } printf("%d\n",sum);}第9頁(yè)/共97頁(yè)115.2.2do~while語(yǔ)句do~while的一般形式為:do語(yǔ)句while<表達(dá)式>;do~while語(yǔ)句N~S結(jié)構(gòu)化流程圖循環(huán)條件循環(huán)體步長(zhǎng)第10頁(yè)/共97頁(yè)12【例5.5】計(jì)算sin(x)=x-x3/3!+x5/5!-x7/7!+…直到最后一項(xiàng)的絕對(duì)值小于10-7時(shí)為止。例5.5N~S結(jié)構(gòu)化流程圖n=3,sum=0sum=sum+t輸入xt=xt=t*(-x*x)/(n-1)*nn=n+2fabs(t)>=1e-7輸出sum第11頁(yè)/共97頁(yè)13#include"math.h"#include"stdio.h"main(){ floatsum=0,t,x,n=3; printf("pleaseinputx:"); scanf("%f",&x); t=x;

do { sum=sum+t; t=t*(-x*x)/((n-1)*n); n=n+2; }while(fabs(t)>=1e-7);printf("sin(%f)=%f\n",x,sum);}第12頁(yè)/共97頁(yè)145.2.3for語(yǔ)句它的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語(yǔ)句表達(dá)式1:循環(huán)的初始條件,一般為賦值表達(dá)式,給循環(huán)的控制變量賦初值;表達(dá)式2:循環(huán)條件,該表達(dá)式的值為邏輯量,一般為關(guān)系表達(dá)式或邏輯表達(dá)式;表達(dá)式3:循環(huán)的步長(zhǎng),一般為賦值表達(dá)式。語(yǔ)句:循環(huán)體,當(dāng)有多條語(yǔ)句時(shí),必須使用復(fù)合語(yǔ)句。第13頁(yè)/共97頁(yè)15【例5.6】計(jì)算自然數(shù)1到n的平方和。#include<stdio.h>main(){ inti,n; floatsum=0; printf("pleaseinputn:"); scanf("%d",&n); for(i=1;i<=n;i++)

sum+=i*i; printf("1*1+2*2...%d*%d=%f\n",n,n,sum);}第14頁(yè)/共97頁(yè)16for語(yǔ)句的幾種格式for語(yǔ)句的三個(gè)表達(dá)式都是可以省略的,但分號(hào)“;”絕對(duì)不能省略。(1)for(;;)語(yǔ)句;(2)for(;表達(dá)式2;表達(dá)式3)語(yǔ)句;(3)for(表達(dá)式1;表達(dá)式2;)語(yǔ)句;(4)for(i=1,j=n;i<j;i++,j--)語(yǔ)句;第15頁(yè)/共97頁(yè)17【例5.7】求兩個(gè)正整數(shù)的最大公約數(shù)#include<stdio.h>#include<math.h>main(){ intm,n,i,t,max; printf("Pleaseinputm,n:"); scanf("%d%d",&m,&n); if(m>n) t=n; else t=m; for(i=1;i<=t;i++) if(m%i==0&&n%i==0) max=i; printf("Maxis%d\n",max);}第16頁(yè)/共97頁(yè)185.2.4break和continue1.break語(yǔ)句break語(yǔ)句的一般形式為:break;【例5.8】判斷某個(gè)一位數(shù)是否在一個(gè)不高于四位的整數(shù)中出現(xiàn)。第17頁(yè)/共97頁(yè)19main(){ intm,n; intflag=1; scanf("%d%d",&m,&n);

while(m!=0) { if(n==m%10) {flag=0;break;} m=m/10; } if(flag==0) printf("Yes!\n"); else printf("No!\n");}第18頁(yè)/共97頁(yè)202.continue語(yǔ)句一般格式是:continue;執(zhí)行了continue語(yǔ)句,程序就跳過(guò)循環(huán)體中位于該語(yǔ)句后的所有語(yǔ)句,提前結(jié)束本次循環(huán)周期并開始新一輪循環(huán)。

第19頁(yè)/共97頁(yè)21【例5.9】輸出1~1000之間能被3,5,7同時(shí)整除的數(shù)。main(){intn;for(n=1;n<=1000;n++){ if(n%3!=0) continue; if(n%5!=0) continue; if(n%7!=0) continue; printf("%8d",n); } printf("\n");}第20頁(yè)/共97頁(yè)225.2.5三種語(yǔ)句的選用1.while和do~while語(yǔ)句的區(qū)別while語(yǔ)句對(duì)作為循環(huán)條件的表達(dá)式求值和驗(yàn)證在執(zhí)行循環(huán)體之前,而do-While語(yǔ)句對(duì)作為循環(huán)條件的表達(dá)式求值和驗(yàn)證在執(zhí)行循環(huán)體之后。對(duì)于do-while語(yǔ)句,它的循環(huán)體至少被執(zhí)行一次。第21頁(yè)/共97頁(yè)232.三種語(yǔ)句在程序設(shè)計(jì)中的選擇(1)如果循環(huán)次數(shù)在執(zhí)行循環(huán)體之前就已確定,一般用for語(yǔ)句;如果循環(huán)次數(shù)是由循環(huán)體的執(zhí)行情況確定的,一般用while語(yǔ)句或者do~while語(yǔ)句。(2)當(dāng)循環(huán)體至少執(zhí)行一次時(shí),用do~while語(yǔ)句,反之,如果循環(huán)體可能一次也不執(zhí)行,選用while語(yǔ)句。第22頁(yè)/共97頁(yè)245.3循環(huán)的嵌套【例5.10】判斷某一正整數(shù)是為否素?cái)?shù)N-S結(jié)構(gòu)化流程圖

10m%n==0break輸入mn=2;n<m;n++n>=m10是素?cái)?shù)不是素?cái)?shù)第23頁(yè)/共97頁(yè)25main(){ intm,n; printf("Pleaseinputm:\n");scanf("%d",&m);

for(n=2;n<m;n++) if(m%n==0) break; if(n>=m) printf("Yes\n"); else printf("No\n");}第24頁(yè)/共97頁(yè)26【例5.11】找出1000以內(nèi)的所有素?cái)?shù)。圖5-15N-S結(jié)構(gòu)化流程圖10m%n==0breakm=3;m<1000;m++n=2;n<=t;n++flag==110輸出mflag=1flag=0第25頁(yè)/共97頁(yè)27#include"math.h"main(){ intm,n,t,flag; printf("Theallprimenumbersin1000are:\n"); for(m=3;m<1000;m++) { flag=1; t=(int)sqrt(m);

for(n=2;n<=t;n++) if(m%n==0) { flag=0; break; } if(flag==1) printf("%8d",m); }}第26頁(yè)/共97頁(yè)281.循環(huán)的概念2.循環(huán)的基本形式(1)(2)while(…)while(…){{……while(…)do{{……}}while(…);……} }第27頁(yè)/共97頁(yè)29(3)(4)dofor(…;…;…){{……dowhile(…){{……}while(…);

}……}while(…);}第28頁(yè)/共97頁(yè)305.4循環(huán)應(yīng)用實(shí)例【例5.12】找出1000以內(nèi)的所有水仙花數(shù)。main(){ intm,a,b,c; printf("Theallnarcissusnumbersin1000are:\n");

for(m=100;m<1000;m++) { a=m/100; b=m%100/10; c=m%10; if(a*a*a+b*b*b+c*c*c==m) printf("%8d",m); }

}第29頁(yè)/共97頁(yè)31【例5.13】求Fibonacci數(shù)列的前20項(xiàng)之和。第1項(xiàng):1f1=1第2項(xiàng):1f2=1第3項(xiàng):2f3=f1+f2第4項(xiàng):3t=f2,f2=f3,f1=t,f3=f1+f2第5項(xiàng):5t=f2,f2=f3,f1=t,f3=f1+f2第6項(xiàng):8t=f2,f2=f3,f1=t,f3=f1+f2┇第20項(xiàng):10946t=f2,f2=f3,f1=t,f3=f1+f2第30頁(yè)/共97頁(yè)32main(){ floatsum; intf1,f2,f3; inti,t; f1=1; f2=1; f3=f1+f2; sum=f1+f2+f3; for(i=4;i<=20;i++) { t=f2; f2=f3; f1=t; f3=f1+f2; sum+=f3; } printf("ThesumofFibonacciis:%.0f\n",sum);}第31頁(yè)/共97頁(yè)33【例5.14】輸入一字符串,統(tǒng)計(jì)其中字母、數(shù)字以及其他字符的個(gè)數(shù)。

#include"stdio.h"main(){ intletter,number,other; charc; letter=number=other=0; c=getchar(); while(c!='\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letter++; elseif(c>='0'&&c<='9') number++; else other++; c=getchar(); }printf("Theletter:%d\nThenumber:%d\nTheother:%d\n",letter,number,other);}第32頁(yè)/共97頁(yè)34第6章數(shù)組6.1數(shù)組的概念一6.2一維數(shù)組二6.3二維數(shù)組三6.4多維數(shù)組

四四6.5字符數(shù)組

第33頁(yè)/共97頁(yè)356.1數(shù)組的概念6.1.1數(shù)組的引入【例6.1】求全班30位同學(xué)某門功課的平均成績(jī)。6.1.2數(shù)組的概念數(shù)組概念的講述數(shù)組具有如下的特性:(1)數(shù)組中的每個(gè)元素具有相同的類型;(2)各元素之間空間連續(xù)且等間距。第34頁(yè)/共97頁(yè)366.2一維數(shù)組

6.2.1一維數(shù)組的定義1.一維數(shù)組的定義一維數(shù)組定義的語(yǔ)法格式為: 數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];例如,下面定義了3個(gè)不同類型的數(shù)組: inta[10]; floatb[15]; charc[20];第35頁(yè)/共97頁(yè)372.?dāng)?shù)組的引用數(shù)組的引用方式為: 數(shù)組名[下標(biāo)]例如,有數(shù)據(jù)描述為:inta[5] a是數(shù)組名,方括號(hào)中的5表示數(shù)組的長(zhǎng)度,即該數(shù)組包含5個(gè)數(shù)組元素,分別是a[0]、a[1]、a[2]、a[3]和a[4]。a數(shù)組中的每個(gè)元素的數(shù)據(jù)類型為基本整型。第36頁(yè)/共97頁(yè)38在定義和使用數(shù)組時(shí),應(yīng)注意以下幾點(diǎn):

(1)數(shù)組名的命名規(guī)則同變量名的命名,要符合C語(yǔ)言標(biāo)識(shí)符的命名規(guī)則。(2)數(shù)組名后面的[]是數(shù)組的標(biāo)志,不能用圓括號(hào)或其它符號(hào)代替。(3)數(shù)組元素的個(gè)數(shù)必須是一個(gè)固定的值,可以是整型常量、符號(hào)常量或者整型常量表達(dá)式,但不能是變量。(4)C語(yǔ)言規(guī)定,數(shù)組元素的下標(biāo)(序號(hào))從0開始。(5)數(shù)組元素的類型也可以是組合類型數(shù)據(jù),如結(jié)構(gòu)體。第37頁(yè)/共97頁(yè)393.一維數(shù)組元素的初始化其語(yǔ)法格式為:類型數(shù)組名[常量表達(dá)式]={元素值表列};數(shù)組元素初始化時(shí)應(yīng)注意以下幾點(diǎn):(1){}中的數(shù)組元素值與數(shù)組的每一個(gè)元素具備左對(duì)應(yīng)關(guān)系。例如: chara[5]={'a','b','c','d','e'};(2){}中的元素值表列,可以是數(shù)組所有的元素的初值,也可以是前面部分元素的初值,元素值之間使用逗號(hào)間隔。(3)當(dāng)給數(shù)組部分元素的賦初值時(shí),其余元素的值為零。(4)在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。 例如:inta[5]={1,2,3,4,5}; 可以寫成inta[]={1,2,3,4,5};第38頁(yè)/共97頁(yè)406.2.2一維數(shù)組元素的引用及示例

【例6.2】一維數(shù)組元素的輸入輸出。參考程序:main(){inta[5],i;for(i=0;i<5;i++)scanf(“%d”,&a[i]);for(i=0;i<5;i++)

printf(“%4d”,a[i]);

printf(“\n”);}第39頁(yè)/共97頁(yè)41【例6.3】利用數(shù)組求出Fibonacci數(shù)列前20項(xiàng)之和。main(){ intf[20]={1,1}; inti,sum=0; for(i=2;i<20;i++) { f[i]=f[i-1]+f[i-2]; sum+=f[i]; } printf("sum=%4d",sum); printf("\n");}第40頁(yè)/共97頁(yè)42【例6.4】編寫程序,用起泡法對(duì)10個(gè)數(shù)排序main(){ inta[10];inti,j,t;printf("input10numbers:\n");for(i=0;i<10;i++) scanf("%d",&a[i]);printf("\n");for(j=1;j<=9;j++) for(i=0;i<10-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("thesortednumbers:\n");for(i=0;i<10;i++) printf("%d",a[i]);}第41頁(yè)/共97頁(yè)436.3二維數(shù)組6.3.1二維數(shù)組的定義1.二維數(shù)組類型說(shuō)明二維數(shù)組類型說(shuō)明的一般形式是:數(shù)據(jù)類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]; 例如:inta[3][4];即:a[0][0],a[0][1],a[0][2],a[0][3]a[1][0],a[1][1],a[1][2],a[1][3]a[2][0],a[2][1],a[2][2],a[2][3]第42頁(yè)/共97頁(yè)446.3.2二維數(shù)組元素的表示方法表示的形式為:數(shù)組名[下標(biāo)][下標(biāo)] 例如:a[3][4]表示a數(shù)組三行四列的元素。6.3.3二維數(shù)組的初始化例如對(duì)數(shù)組a[5][3]:(1)按行分段賦值可寫為:inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};(2)按行連續(xù)賦值可寫為:inta[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};

第43頁(yè)/共97頁(yè)45對(duì)于二維數(shù)組初始化賦值還有以下說(shuō)明:1.可以只對(duì)部分元素賦初值,未賦初值的元素自動(dòng)取0值。例如:inta[3][3]={{1},{2},{3}};是對(duì)每一行的第一列元素賦值,未賦值的元素取0值。賦值后各元素的值為:100200300inta[3][3]={{0,1},{0,0,2},{3}};賦值后的元素值為0100023002.如對(duì)全部元素賦初值,則第一維的長(zhǎng)度可以不給出。例如:inta[3][3]={1,2,3,4,5,6,7,8,9};可以寫為:inta[][3]={1,2,3,4,5,6,7,8,9};第44頁(yè)/共97頁(yè)466.3.4二維數(shù)組的引用

【例6.5】一個(gè)學(xué)習(xí)小組有5個(gè)人,每個(gè)人有三門課的考試成績(jī),求全組各科的平均成績(jī)和各科總平均成績(jī)。main(){inti,j,s=0,l,v[3];inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}}; printf("inputscore\n"); for(i=0;i<3;i++) {

第45頁(yè)/共97頁(yè)47for(j=0;j<5;j++) { scanf("%d",&a[j][i]); s=s+a[j][i]; } v[i]=s/5; s=0; } l=(v[0]+v[1]+v[2])/3; printf("math:%d\nclanguag:%d\ndbase:%d\n",v[0],v[1],v[2]); printf("total:%d\n",l);}第46頁(yè)/共97頁(yè)48【例6.6】在二維數(shù)組a中選出各行最大的元素組成一個(gè)一維數(shù)組b,其中a數(shù)組各元素的值為:31687654321110810251237第47頁(yè)/共97頁(yè)49main(){ staticinta[][4]={3,16,87,65,4,32,11,108,10,25,12,27}; intb[3],i,j,l; for(i=0;i<=2;i++) { l=a[i][0]; for(j=1;j<=3;j++) if(a[i][j]>l)l=a[i][j]; b[i]=l; } printf("\narraya:\n"); for(i=0;i<=2;i++) { for(j=0;j<=3;j++)

printf("%5d",a[i][j]);

printf("\n"); } printf("\narrayb:\n"); for(i=0;i<=2;i++) printf("%5d",b[i]); printf("\n");}第48頁(yè)/共97頁(yè)506.4多維數(shù)組6.4.1多維數(shù)組的定義多維數(shù)組的定義類似二維數(shù)組的定義,格式為:類型標(biāo)識(shí)符多維數(shù)組名[元素個(gè)數(shù)1][元素個(gè)數(shù)2]…[元素個(gè)數(shù)n]; 例如:floaty[10][20][30];第49頁(yè)/共97頁(yè)516.4.2多維數(shù)組的初始化

多維數(shù)組的初始化和二維數(shù)組的初始化方法基本相同,例如有定義:inta[3][2][3];,對(duì)其進(jìn)行初始化為:inta[3][2][3]={{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12,}},{{13,14,15},{16,17,18}}};也可如下初始化:inta[3][2][3]={1,2,3,4,5,6,7,8,9,,11,12,13,14,125,16,17,18};第50頁(yè)/共97頁(yè)526.4.3多維數(shù)組的引用

多維數(shù)組名[下標(biāo)1][下標(biāo)2]…[下標(biāo)n]其中下標(biāo)的取值范圍類似于二維數(shù)組,并且多維數(shù)組的元素同樣可以賦值和出現(xiàn)在表達(dá)式中。例如,x[i][j][k]=45+2*k;第51頁(yè)/共97頁(yè)536.5字符數(shù)組

6.5.1字符數(shù)組的定義用來(lái)存放字符常量的數(shù)組稱為字符數(shù)組。字符數(shù)組類型說(shuō)明的形式與前面介紹的數(shù)值數(shù)組相同。例如:charc[10];第52頁(yè)/共97頁(yè)546.5.2字符數(shù)組的初始化

1.初始化為字符 例如:staticcharc[10]={'c','','p','r','o','g','r','a','m'};2.初始化為字符串 例如:charstr[10]={"China"};對(duì)于字符串的存儲(chǔ)也可以采用以下幾種形式進(jìn)行初始化: charstr[10]="China";去掉花括號(hào),字符串是一個(gè)整體 charstr[]="China";可以不說(shuō)明長(zhǎng)度,實(shí)際是六個(gè)元素3.利用printf和scanf函數(shù)處理字符串第53頁(yè)/共97頁(yè)55例如下面一段程序:#include"stdio.h"main(){ charst[15]; printf("inputstring:\n"); scanf("%s",st); printf("%s\n",st);}第54頁(yè)/共97頁(yè)566.5.3字符串常用函數(shù)

1.字符串輸出函數(shù)puts格式:puts(字符數(shù)組名);功能:把字符數(shù)組中的字符串輸出到顯示器。即在屏幕上顯示該字符串。#include"stdio.h"main(){ staticcharc[]="BASIC\ndBASE"; puts(c);}第55頁(yè)/共97頁(yè)572.字符串輸入函數(shù)gets

格式:gets(字符數(shù)組名);功能:從標(biāo)準(zhǔn)輸入設(shè)備鍵盤上輸入一個(gè)字符串。本函數(shù)得到一個(gè)函數(shù)值,即為該字符數(shù)組的首地址。#include"stdio.h"main(){ charst[15]; printf("inputstring:\n"); gets(st); puts(st);}第56頁(yè)/共97頁(yè)58#include"stdio.h"#include"string.h"main(){ staticcharst1[30]="Mynameis"; charst2[10]; printf("inputyourname:\n"); gets(st2); strcat(st1,st2); puts(st1);}第57頁(yè)/共97頁(yè)594.字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組名1,字符數(shù)組名2);功能:把字符數(shù)組2中的字符串拷貝到字符數(shù)組1中。字符串結(jié)束標(biāo)志'\0'也一同拷貝。字符數(shù)名2,也可以是一個(gè)字符串常量。這時(shí)相當(dāng)于把一個(gè)字符串賦予一個(gè)字符數(shù)組。第58頁(yè)/共97頁(yè)60#include"stdio.h"#include"string.h"main(){ staticcharst1[15],st2[]="CLanguage"; strcpy(st1,st2); puts(st1); printf("\n");}第59頁(yè)/共97頁(yè)613.字符串連接函數(shù)strcat格式:strcat(字符數(shù)組名1,字符數(shù)組名2);功能:把字符數(shù)組2中的字符串連接到字符數(shù)組1中字符串的后面,并刪去字符串1后的串標(biāo)志'\0'。本函數(shù)返回值是字符數(shù)組1的首地址。第60頁(yè)/共97頁(yè)625.字符串比較函數(shù)strcmp格式:strcmp(字符數(shù)組名1,字符數(shù)組名2);功能:按照ASCII碼順序比較兩個(gè)數(shù)組中的字符串,并由函數(shù)返回值返回比較結(jié)果,返回結(jié)果如下:字符串1=字符串2,返回值=0;字符串2>字符串2,返回值>0;字符串1<字符串2,返回值<0。本函數(shù)也可用于比較兩個(gè)字符串常量,或比較數(shù)組和字符串常量。第61頁(yè)/共97頁(yè)63#include"stdio.h"#include"string.h"main(){ intk; staticcharst1[15],st2[]="CLanguage"; printf("inputastring:\n"); gets(st1); k=strcmp(st1,st2); if(k==0)printf("st1=st2\n"); if(k>0)printf("st1>st2\n"); if(k<0)printf("st1<st2\n");}第62頁(yè)/共97頁(yè)646.測(cè)字符串長(zhǎng)度函數(shù)strlen格式:strlen(字符數(shù)組名);功能:測(cè)字符串的實(shí)際長(zhǎng)度(不含字符串結(jié)束標(biāo)志'\0')并作為函數(shù)返回值。#include"stdio.h"#include"string.h"main(){ intk; staticcharst[]="Clanguage"; k=strlen(st); printf("Thelenthofthestringis%d\n",k);}第63頁(yè)/共97頁(yè)656.6綜合例題【例6.7】編寫程序,用選擇法對(duì)N個(gè)數(shù)排序。#defineN10main(){ inta[N],min,i,j,t; for(i=0;i<N;i++) scanf("%d",&a[i]);

for(j=1;j<N;j++) { min=j-1; for(i=j;i<N;i++) if(a[min]>=a[i])min=i; t=a[min];a[min]=a[j-1];a[j-1]=t; } for(i=0;i<N;i++) printf("%d",a[i]);}第64頁(yè)/共97頁(yè)66【例6.8】把一個(gè)整數(shù)按大小順序插入已排好序的數(shù)組中。第65頁(yè)/共97頁(yè)67main(){ inti,j,p,q,s,n;inta[11]={127,3,6,28,54,68,87,105,162,18};/*注意:概述組元數(shù)為11個(gè)*/ printf("The10numberorderis:\n");for(i=0;i<10;i++) { p=i;q=a[i]; for(j=i+1;j<10;j++) if(q<a[j]){p=j;q=a[j];} if(p!=i) { s=a[i]; a[i]=a[p]; a[p]=s; }第66頁(yè)/共97頁(yè)68printf("%d",a[i]); } printf("\nInputnumber:\n"); scanf("%d",&n); printf("Theorderafteranumberinsertedis:\n");for(i=0;i<10;i++) if(n>a[i]) { for(s=9;s>=i;s--)a[s+1]=a[s]; break; } a[i]=n; for(i=0;i<=10;i++)

printf("%d",a[i]);

printf("\n");}第67頁(yè)/共97頁(yè)69【例6.9】求2×3矩陣的轉(zhuǎn)置矩陣。設(shè)有源矩陣為a,轉(zhuǎn)置矩陣為b,矩陣轉(zhuǎn)置是將a矩陣的第一行元素變成b矩陣的第一列元素,即a的第i行變成b的第i列,例如:

第68頁(yè)/共97頁(yè)70#defineM2#defineN3#include"stdio.h"main(){ inta[M][N],b[N][M],t; inti,j; for(i=0;i<M;i++) for(j=0;j<N;j++) scanf("%d",&a[i][j]); for(i=0;i<M;i++) for(j=0;j<N;j++) b[j][i]=a[i][j]; printf("arraya:\n");第69頁(yè)/共97頁(yè)71for(i=0;i<M;i++) { for(j=0;j<N;j++) printf("%d",a[i][j]); printf("\n"); } printf("arrayb:\n"); for(i=0;i<N;i++) { for(j=0;j<M;j++)

printf("%d",b[i][j]);

printf("\n"); }}第70頁(yè)/共97頁(yè)72第7章指針

7.1變量的地址和指針變量一7.2數(shù)組的指針與指向數(shù)組的指針變量

二7.3字符串的指針和指向字符串的指針變量三7.4指針數(shù)組與指向指針的指針

四第71頁(yè)/共97頁(yè)737.1變量的地址和指針變量7.1.1變量的地址以及變量的存取方式(1)直接訪問(wèn)(2)間接訪問(wèn)20003pi間接訪問(wèn)示意圖第72頁(yè)/共97頁(yè)747.1.2指針變量的定義和指針變量的基類型1.指針變量定義

基類型*變量名;

2.示例int*pointer_1,*pointer_2;float*f;char*pc;第73頁(yè)/共97頁(yè)757.1.3指針變量賦值將指針變量指向某個(gè)變量的方法是將被指變量的地址賦值給該指針變量,這里就要用到取址運(yùn)算符“&”。 例如inti;int*p;p=&i;第74頁(yè)/共97頁(yè)767.1.4指針變量引用1.指針運(yùn)算符&:取地址運(yùn)算符*:指針運(yùn)算符(間址訪問(wèn)運(yùn)算符)2.指針變量引用舉例

【例7.1】指針變量名和內(nèi)存地址以及內(nèi)存中存儲(chǔ)的變量值三者的關(guān)系。第75頁(yè)/共97頁(yè)77#include<stdio.h>#include<stdlib.h>intmain(){intnum1=10;charch1='A';puts("變量名稱變量值內(nèi)存地址");puts("----------------------------");printf("num1\t%d\t%p\n",num1,&num1);printf("ch1\t%c\t%p\n",ch1,&ch1);system("pause");return0;}第76頁(yè)/共97頁(yè)78【例7.2】通過(guò)指針變量訪問(wèn)整型變量intmain(){inti=100,j=10;int*pi,*pj;pi=&i;pj=&j;printf(“%d,%d\n”,i,j);printf(“%d,%d”,*pi,*pj);return0;}第77頁(yè)/共97頁(yè)797.2數(shù)組的指針與指向數(shù)組的指針變量7.2.1指向數(shù)組的指針變量inta[10],*p;p=&a[0];p=a;p=&a[0];floatscore[20];float*pf=score;第78頁(yè)/共97頁(yè)807.2.2通過(guò)指針引用數(shù)組元素1.地址表示法例如數(shù)組元素a[5]的地址有三種不同的表示形式p+5,a+5,&a[5]2.訪問(wèn)表示法*(p+5),*(a+5),a[5]3.指針變量帶下標(biāo)指向數(shù)組的指針變量可以帶下標(biāo),如p[5]與*(p+5)等價(jià)。4.指針變量與數(shù)組名的引用區(qū)別5.++與+i不等價(jià)第79頁(yè)/共97頁(yè)81【例7.4】任意輸入10個(gè)數(shù),將這十個(gè)數(shù)按逆序輸出。(1)用下標(biāo)法訪問(wèn)數(shù)組intmain(){inta[10],i;clrscr();for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");for(i=9;i>=0;i--)printf("%d",a[i]);}第80頁(yè)/共97頁(yè)82【例7.5】計(jì)算并輸出一個(gè)數(shù)組中所有元素的和、最大值、最小值、值為奇數(shù)的元素個(gè)數(shù)。#include<stdio.h>main(){ inti,a[10],*p,sum,max,min,count; for(i=0;i<10;i++) a[i]=i; /*用下標(biāo)方式為數(shù)組元素賦值*/ p=a;/*通過(guò)數(shù)組名對(duì)指針變量p賦初值*/ sum=0; for(i=0;i<10;i++) sum=sum+*(p+i); /*指針變量加偏移量方式計(jì)算數(shù)組元素的和*/ max=*a;第81頁(yè)/共97頁(yè)83for(i=1;i<10;i++) if(max<*(a+i))max=*(a+i);/*數(shù)組首地址加偏移量方式計(jì)算數(shù)組元素最大值*/ min=p[0];for(i=1;i<10;i++,p++) if(min>*p)min=*p; /*指針移動(dòng)方式計(jì)算數(shù)組元素最小值*/ p=&a[0];/*重新使指針變量p指向數(shù)組首元素*/ count=0;for(i=0;i<10;i++) if(p[i]%2) /*指針加下標(biāo)方式求值為奇數(shù)的元素個(gè)數(shù)*/count++; printf("sum=%d,max=%d,min=%d,count=%d\n",sum,max,min,count);}第82頁(yè)/共97頁(yè)847.2.3指向多維數(shù)組的指針和指針變量1.多維數(shù)組的地址2.行轉(zhuǎn)列的概念3.指向多維數(shù)組的指針變量【例7.6】用指向元素的指針變量輸出數(shù)組元素的值。intmain(){inta[3][4]={{0,2,4,6},{1,3,5,7},{9,10,11,12}};int*p;for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf("\n");printf("%4d",*p);}return(0);}第83頁(yè)/共97頁(yè)85【例7.7】輸出二維數(shù)組中任一行任一列元素的值。main(){ints[3][4]={{0,2,4,6},{1,3,5,7},{9,10,11,12}};int(*p)[4],i,j; /*一定要加括號(hào)注意與后面介紹的指針數(shù)組區(qū)別*/p=s;scanf("%d,%d",&i,&j);printf("s[%d,%d]=%d\n",i,j,*(*(p+i)+j));}第84頁(yè)/共97頁(yè)867.3字符串的指針和指向字符串的指針變量1.字符數(shù)組將字符串的各字符(包括結(jié)尾標(biāo)志’\0’)依次存放到字符數(shù)組中,利用下標(biāo)變量或數(shù)組名對(duì)數(shù)組進(jìn)行操作。【例7.8】字符數(shù)組應(yīng)用main(){charstring[]="Iamastudent.";printf("%s\n",string);}第85頁(yè)/共97頁(yè)872.字符指針對(duì)字符串而言,也可以不定義字符數(shù)組,直接定義指向字符串的指針變量,利用該指針變量對(duì)字符串進(jìn)行操作?!纠?.9】字符指針應(yīng)用main(){char*string="Iamboy";printf("%s\n",string);}第86頁(yè)/共97頁(yè)88【例7.10】輸入兩個(gè)字符串,比較是否相等,如果相等則輸出YES,如不等則輸出NO。#include“stdio.h”#include“string.h”main(){intt=0;char*s1,*s2;gets(s1);gets(s2);while(*s1!=’\0’&&*s2!=’\0’){if(*s1!=*s2){t=1;break;}s1++;s2++;}if(t==0)printf(“YES”);elseprintf(“NO”);}第87頁(yè)/共97頁(yè)897.3.2字符數(shù)組與字符串指針區(qū)別1.存儲(chǔ)方式的區(qū)別2.賦值方式的區(qū)別3.定義方式的區(qū)別4.運(yùn)算方面的區(qū)別【例7.11】指針變量的運(yùn)算main(){char*string=”Iamastudent.”;string=string+7;printf(“%s\n”,string);}第88頁(yè)/共97頁(yè)90【例7.12】用指針變量處理字符串的復(fù)制【例7.12】用指針變量處理字符串的復(fù)制#include<stdio.h>#include<stdlib.h>#include<string.h>voidmain(){char*s1="HelloWorld!\n",*s2

溫馨提示

  • 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)論