




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)第8章數(shù)組
一維數(shù)組的聲明、初始化和使用數(shù)組的運(yùn)算、作為函數(shù)參數(shù)的使用字符串、多維數(shù)組10/10/20221華中科技大學(xué)計(jì)算機(jī)學(xué)院C語(yǔ)言程序設(shè)計(jì)第8章數(shù)組10/9/20221華中科技大學(xué)8.1數(shù)組概述程序=算法+數(shù)據(jù)結(jié)構(gòu)PASCAL程序設(shè)計(jì)語(yǔ)言發(fā)明者NiklausWirth曾經(jīng)說(shuō)過(guò)簡(jiǎn)單數(shù)據(jù)類(lèi)型的變量?jī)H能描述一個(gè)單獨(dú)的數(shù)據(jù)描述能力十分有限如何描述一群有聯(lián)系的數(shù)據(jù)集合?數(shù)組屬于構(gòu)造類(lèi)型是相同數(shù)據(jù)類(lèi)型數(shù)據(jù)的集合元素組成數(shù)組的這些數(shù)據(jù)任何類(lèi)型(簡(jiǎn)單類(lèi)型、構(gòu)造類(lèi)型)10/10/20222華中科技大學(xué)計(jì)算機(jī)學(xué)院8.1數(shù)組概述程序=算法+數(shù)據(jù)結(jié)構(gòu)10/9/20222華8.1數(shù)組概述數(shù)組特點(diǎn)其所有元素?cái)?shù)目固定其所有元素類(lèi)型相同其所有元素順序存放
數(shù)組作用集中管理將相關(guān)的同類(lèi)型數(shù)據(jù)集中用一個(gè)標(biāo)識(shí)符(數(shù)組名)表示元素順序存放,但可隨機(jī)定位用若干個(gè)數(shù)字序號(hào)(下標(biāo))來(lái)區(qū)別各數(shù)組元素例如定義floatscore[30],可表述30位學(xué)生成績(jī)用數(shù)組具有什么好處?10/10/20223華中科技大學(xué)計(jì)算機(jī)學(xué)院8.1數(shù)組概述數(shù)組特點(diǎn)10/9/20223華中科技大學(xué)計(jì)8.1數(shù)組概述問(wèn)題計(jì)算全班30位同學(xué)某門(mén)課程的平均成績(jī)
解決方法設(shè)置30個(gè)float型變量來(lái)記錄成績(jī)?cè)O(shè)置一個(gè)有30個(gè)float型元素的數(shù)組來(lái)記錄成績(jī)問(wèn)題分析參與運(yùn)算的平均成績(jī),其數(shù)據(jù)類(lèi)型都相同(符合數(shù)組特點(diǎn))30位同學(xué)屬于一個(gè)班,用數(shù)組可把30個(gè)成績(jī)表示成一個(gè)整體用數(shù)組的優(yōu)點(diǎn)便于循環(huán)處理提高效率,便于書(shū)寫(xiě)、檢查、修改(對(duì)海量數(shù)據(jù)效果更明顯)10/10/20224華中科技大學(xué)計(jì)算機(jī)學(xué)院8.1數(shù)組概述問(wèn)題10/9/20224華中科技大學(xué)計(jì)算機(jī)8.2一維數(shù)組維數(shù)標(biāo)識(shí)一個(gè)數(shù)組元素所需要使用的下標(biāo)的個(gè)數(shù)一維數(shù)組只有一個(gè)下標(biāo)可用于表示一個(gè)線性的數(shù)據(jù)隊(duì)列使用數(shù)組的要求先聲明數(shù)組對(duì)它進(jìn)行初始化,然后才能使用10/10/20225華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2一維數(shù)組維數(shù)10/9/20225華中科技大學(xué)計(jì)算8.2.1一維數(shù)組的聲明要解決三個(gè)問(wèn)題確定數(shù)組的數(shù)據(jù)類(lèi)型給數(shù)組定義一個(gè)名字,以便在程序中使用指明數(shù)組的大小,即數(shù)組中元素的個(gè)數(shù)聲明形式[存儲(chǔ)類(lèi)型說(shuō)明符][類(lèi)型修飾符]類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式]={初值表};存儲(chǔ)類(lèi)型說(shuō)明符:extern、static類(lèi)型修飾符:const、volatile數(shù)組名:是一個(gè)標(biāo)識(shí)符,是一個(gè)地址常量,用以表示數(shù)組中打頭元素的地址10/10/20226華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.1一維數(shù)組的聲明要解決三個(gè)問(wèn)題10/9/20228.2.1一維數(shù)組的聲明例8.1具有基本數(shù)據(jù)類(lèi)型的一維數(shù)組的聲明 #defineSIZE10 intarray[5]; doubled[5],e[SIZE]; charname[SIZE*5];錯(cuò)誤例子unsignedintsize;charstr[size],buffer[2*size];錯(cuò)誤原因數(shù)組的大小一經(jīng)說(shuō)明就不能改變長(zhǎng)度說(shuō)明不是常量表達(dá)式,在編譯之前就必須明確確定10/10/20227華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.1一維數(shù)組的聲明例8.1具有基本數(shù)據(jù)類(lèi)型的一8.2.1一維數(shù)組的聲明例8.2采用類(lèi)型修飾符的一維數(shù)組的聲明staticinty[10];數(shù)組y中的每一個(gè)成員都是靜態(tài)整型成員externdoubles[2];作了一個(gè)外部雙精度型數(shù)組的引用性聲明應(yīng)該在另外的源文件中通過(guò)doubles[2];來(lái)定義s數(shù)組,這樣第2個(gè)聲明語(yǔ)句才有意義10/10/20228華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.1一維數(shù)組的聲明例8.2采用類(lèi)型修飾符的一維8.2.2一維數(shù)組的使用C提供的各種操作符針對(duì)基本數(shù)據(jù)類(lèi)型的變量數(shù)組是構(gòu)造數(shù)據(jù)類(lèi)型但其元素是基本數(shù)據(jù)類(lèi)型的變量訪問(wèn)數(shù)組不需設(shè)計(jì)專(zhuān)門(mén)的數(shù)組操作符方法:數(shù)組名[下標(biāo)表達(dá)式]例inta[5],j=2;5個(gè)元素依次是a[0],a[1],a[2],a[3],a[4]a[j+2]、a[++j]、a[j--]、a[5*j-7]錯(cuò)誤寫(xiě)法:a[j-3]、a[2*j+1]10/10/20229華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.2一維數(shù)組的使用C提供的各種操作符10/9/2例8.3使用一維數(shù)組計(jì)算學(xué)生的平均成績(jī)。#include〞stdio.h〞voidmain(void){intscore[30],i,sum=0;doubleaverage;printf("inputthescoresplease:\n");for(i=0;i<30;i++)scanf(“%d”,&score[i]);/*將鍵盤(pán)輸入的成績(jī)賦給各個(gè)數(shù)組元素*/
for(i=0;i<30;i++)sum+=score[i];/*求學(xué)生成績(jī)的累加和*/average=sum/30.0;/*計(jì)算平均成績(jī)*/printf("sum=%d\n",sum);printf("average=%lf\n",average);}10/10/202210華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.3使用一維數(shù)組計(jì)算學(xué)生的平均成績(jī)。#include8.2.3一維數(shù)組的初始化顯式初始化值的個(gè)數(shù)與說(shuō)明長(zhǎng)度相同intx[5]={0,1,2,3,4};inty[5]={0,1,2,3,4,5};錯(cuò)誤:初值個(gè)數(shù)大于數(shù)組長(zhǎng)度有初始化值時(shí),長(zhǎng)度說(shuō)明可缺省數(shù)組長(zhǎng)度由初值個(gè)數(shù)確定inty[]={1,2,3,4,5,6,7,8}; 初始化值的個(gè)數(shù)可以小于說(shuō)明長(zhǎng)度,但只能缺省最后連續(xù)元素的初值intz[10]={0,1,2,3,4};/*前5個(gè)下標(biāo)變量賦值*/intu[9]={,1,,,2};
錯(cuò)誤:缺省u[0],u[2]不是最后連續(xù)元素10/10/202211華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.3一維數(shù)組的初始化顯式初始化值的個(gè)數(shù)與說(shuō)明長(zhǎng)度相例8.8觀察局部數(shù)組、靜態(tài)數(shù)組和外部數(shù)組的缺省初值的程序#include"stdio.h"doubles[2];voidmain(void){
inta[2],i;
staticintb[2];for(i=0;i<2;i++){printf("s[%d]=%d\n",i,s[i]);printf("a[%d]=%d\n",i,a[i]);printf("b[%d]=%d\n",i,b[i]); }}程序的運(yùn)行結(jié)果如下:s[0]=0,a[0]=64,b[0]=0s[1]=0,a[1]=3129,b[1]=0結(jié)論:外部數(shù)組s和靜態(tài)數(shù)組b的元素的缺省初值都是0局部數(shù)組a的初值則是隨機(jī)的
10/10/202212華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.8觀察局部數(shù)組、靜態(tài)數(shù)組和外部數(shù)組的缺省初值的程序8.2.4一維數(shù)組的存儲(chǔ)結(jié)構(gòu)存放方法各個(gè)元素從數(shù)組名標(biāo)明的起始地址開(kāi)始在內(nèi)存中連續(xù)存放例如inta[5];這里是16位機(jī),1個(gè)int變量占2個(gè)字節(jié)空間數(shù)組元素a[0]a[1]a[2]a[3]a[4]元素地址a+0a+1a+2a+3a+4&a[0]&a[1]&a[2]&a[3]&a[4]10/10/202213華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.4一維數(shù)組的存儲(chǔ)結(jié)構(gòu)存放方法數(shù)組元素a[0]a[例8.9觀察一維數(shù)組的存儲(chǔ)情況的程序#include"stdio.h"#defineSIZE3voidmain(void){intx[SIZE]={1,3,5},k;chars[SIZE+1]="ABC";floatf[SIZE]={1.414,3.1415,5.25};printf("thevalueofxis0x%x\n",x);for(k=0;k<SIZE;k++)printf("x[%d]=%d\taddr=0x%x\n",x[k],&x[k]);程序運(yùn)行結(jié)果如下:thevalueofxis0xffc8x[0]=1addr=0xffc8x[1]=3addr=0xffcax[2]=5addr=0xffcc10/10/202214華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.9觀察一維數(shù)組的存儲(chǔ)情況的程序#include例8.9觀察一維數(shù)組的存儲(chǔ)情況的程序k=0;printf("\nthevalueofsis0x%x\n",x);while(s[k])printf("s[%d]=%c\taddr=0x%x\n",s[k],&s[k]),k++;printf("s[%d]+X=%c\taddr=0x%x\n",s[k]+'X',&s[k]);printf("\nthevalueoffis0x%x\n",f);for(k=0;k<SIZE;k++)printf("f[%d]=%f\taddr=0x%x\n",f[k],&f[k]);}程序運(yùn)行結(jié)果如下:thevalueofsis0xffces[0]=Aaddr=0xffces[1]=Baddr=0xffcfs[2]=Caddr=0xffd0s[3]+X=Xaddr=0xffd1thevalueoffis0xffd2f[0]=1.414000addr=0xffd2f[1]=3.141500addr=0xffd6f[2]=5.250000addr=0xffda10/10/202215華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.9觀察一維數(shù)組的存儲(chǔ)情況的程序k=0;程序運(yùn)行結(jié)8.2.5一維數(shù)組的運(yùn)算C提供的各種操作符賦值運(yùn)算、各種算術(shù)運(yùn)算、++、--針對(duì)基本數(shù)據(jù)類(lèi)型的變量可針對(duì)int、float、以及double類(lèi)型數(shù)組中元素合法操作intx[3]={1,2,3},y[3]={4,5,6},z[3],k=1;z[0]=x[0]+y[0];z[1]=x[0]+y[3];z[k]=++x[0]+--y[k++];z[1]=x[0]+y[x[1]];不允許兩個(gè)數(shù)組直接相加z=x+y;編譯時(shí)給出提示“cannotaddtwopointers”10/10/202216華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.5一維數(shù)組的運(yùn)算C提供的各種操作符10/9/20數(shù)組的直接相加例8.10設(shè)5個(gè)同學(xué)修了高等數(shù)學(xué)﹑普通物理、程序設(shè)計(jì)語(yǔ)言并取得了成績(jī),現(xiàn)計(jì)算三門(mén)課總分、平均分,每門(mén)課的總分、平均分,每個(gè)同學(xué)的總分、平均分#include"stdio.h"#defineSIZE5voidmain(void){intmath[SIZE]={91,67,88,78,81};intphysics[SIZE]={87,79,81,86,67}; intprogramming[SIZE]={86,81,85,92,87};/*3個(gè)數(shù)組依次存放數(shù)學(xué)、物理、程序設(shè)計(jì)的成績(jī)*/10/10/202217華中科技大學(xué)計(jì)算機(jī)學(xué)院數(shù)組的直接相加例8.1010/9/202217華中科例8.10intcourse_sum[3]={0,0,0};doublecourse_even[3];/*分別為各門(mén)課程總分、平均分?jǐn)?shù)組*/intstudent_sum[5]={0,0,0,0,0};doublestudent_even[5];/*分別為各位同學(xué)總分、平均分?jǐn)?shù)組*/intsum=0;doubleeven;/*分別為全部課程的總分、平均分*/inti;for(i=0;i<5;i++){course_sum[0]+=math[i];course_sum[1]+=physics[i];course_sum[2]+=programming[i]; }/*計(jì)算各門(mén)課程的總分*/
for(i=0;i<3;i++){course_even[i]=course_sum[i]/5.0;sum+=course_sum[i]; }/*計(jì)算各門(mén)課平總分*/
even=sum/(3.0*SIZE);/*計(jì)算全部課程的平均分*/
10/10/202218華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.10intcourse_sum[3]={0,0,0}例8.10for(i=0;i<5;i++){/*計(jì)算每個(gè)學(xué)生的總分、平均分*/student_sum[i]=math[i]+physics[i]+programming[i];student_even[i]=student_sum[i]/3.0;}printf("三門(mén)課程的總分:%d\n",sum);printf("三門(mén)課程的平均分:%lf\n",even);程序的運(yùn)行結(jié)果如下三門(mén)課程的總分:1236三門(mén)課程的平均分:82.40000010/10/202219華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.10for(i=0;i<5;i++){例8.10for(i=0;i<3;i++){printf("course_sum[%d]=%d\n",i,course_sum[i]);printf("course_even[%d]=%lf\n",i,course_even[i]);}程序的運(yùn)行結(jié)果如下course_sum[0]=405course_even[0]=81.000000course_sum[1]=400course_even[1]=80.000000course_sum[2]=431course_even[2]=86.20000010/10/202220華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.10for(i=0;i<3;i++){程序的運(yùn)行結(jié)果如例8.10for(i=0;i<5;i++){printf("student_sum[%d]=%d\n",i,student_sum[i]);printf("student_even[%d]=%lf\n",i,student_even[i]);}}程序的運(yùn)行結(jié)果如下student_sum[0]=264student_even[0]=88.000000student_sum[1]=227student_even[1]=75.666667student_sum[2]=254student_even[2]=84.666667student_sum[3]=256student_even[3]=85.333333student_sum[4]=235student_even[4]=78.33333310/10/202221華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.10for(i=0;i<5;i++){程序的運(yùn)行結(jié)果如8.2.6一維數(shù)組作為函數(shù)參數(shù)參數(shù)的傳遞傳值傳地址數(shù)組作為函數(shù)參數(shù)采用的是參數(shù)傳址傳送的是數(shù)組的地址或傳送數(shù)組元素的地址還需傳送數(shù)組元素的個(gè)數(shù)10/10/202222華中科技大學(xué)計(jì)算機(jī)學(xué)院8.2.6一維數(shù)組作為函數(shù)參數(shù)參數(shù)的傳遞10/9/20例8.11一維數(shù)組作為函數(shù)參數(shù)的例子12345xy#include"stdio.h"voidfun(inty[],intn);/*y是形式數(shù)組*/voidmain(void){intk,x[5]={1,2,3,4,5};……
fun(x,3);
……fun(&x[2],3);
……}voidfun(inty[],intn){……}子函數(shù)需給出形式數(shù)組的聲明和形式數(shù)組中元素的個(gè)數(shù)調(diào)用函數(shù)實(shí)參的值是數(shù)組x的起始地址參數(shù)傳遞10/10/202223華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.11一維數(shù)組作為函數(shù)參數(shù)的例子12345xy#in例8.12對(duì)n個(gè)整數(shù)采用冒泡法對(duì)其排序分析輸入n個(gè)數(shù)存放在一數(shù)組中,便于循環(huán)處理排序是將一個(gè)數(shù)據(jù)元素任意的序列按照一定的規(guī)則排列成為一個(gè)有序的序列voidbubble_sort(inta[],intn){對(duì)a[n]表示的n個(gè)整數(shù)進(jìn)行排序處理}main(){輸入n個(gè)數(shù);
輸出n個(gè)數(shù)檢驗(yàn)排序效果}調(diào)用bubble_sortsort對(duì)n個(gè)數(shù)排序;10/10/202224華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.12對(duì)n個(gè)整數(shù)采用冒泡法對(duì)其排序分析調(diào)用bubb例8.12冒泡排序a[0]a[1]a[2]a[3]a[4]a[5]原始312512864261-1253112864261-2251231864261-3251231864261-4251231428661-525123142686第一遍從下標(biāo)為0的元素開(kāi)始,對(duì)兩兩相鄰的元素進(jìn)行比較如果前一個(gè)元素大于后一個(gè)元素,就交換這兩個(gè)元素的值循環(huán)n-1次比較在第一遍循環(huán)后不僅把最大整數(shù)移到數(shù)組最末尾(其下標(biāo)為n-1)(像冒泡)還盡量把較大值往后挪,例如“31”還剩前面n-1個(gè)數(shù)需排序10/10/202225華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.12冒泡排序a[0]a[1]a[2]a[3]a[4]例8.12冒泡排序a[0]a[1]a[2]a[3]a[4]a[5]1遍251231426862遍122531642863遍122563142864遍126253142865遍61225314286第2遍對(duì)前n-1個(gè)數(shù),與第1遍一樣循環(huán)處理還剩前n-2個(gè)數(shù)未排序第i遍對(duì)前n-i+1個(gè)數(shù),與第1遍一樣循環(huán)處理還剩前n-i個(gè)數(shù)未排序大循環(huán)結(jié)束時(shí)機(jī)(對(duì)i)i>=n-1一遍循環(huán)中未發(fā)生交換,即已排好序10/10/202226華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.12冒泡排序a[0]a[1]a[2]a[3]a[4]例8.12冒泡排序voidbubble_sort(inta[],intn)/*形參用形式數(shù)組a[]*/{ inti,j,t,k;intflag=1; for(i=0;(i<n-1)&&flag;i++)*共進(jìn)行n-1輪"冒泡"*/ {flag=0; for(j=0;j<n-i-1;j++) if(a[j]>a[j+1])/*對(duì)兩兩相鄰的元素進(jìn)行比較*/ {t=a[j],a[j]=a[j+1],a[j+1]=t;flag=1;} }}10/10/202227華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.12冒泡排序voidbubble_sort(int8.3字符數(shù)組8.3.1字符數(shù)組的聲明和使用字符數(shù)組元素的數(shù)據(jù)類(lèi)型為char或wchar_t聲明格式與前面討論的一維數(shù)組相同chars[81];字符串用一對(duì)雙引號(hào)界定的一個(gè)字符序列C語(yǔ)言沒(méi)有規(guī)定字符串類(lèi)型用一個(gè)字符數(shù)組來(lái)存放字符序列,并且在末尾加一個(gè)空字符ˊ\0ˊ來(lái)構(gòu)造字符串10/10/202228華中科技大學(xué)計(jì)算機(jī)學(xué)院8.3字符數(shù)組8.3.1字符數(shù)組的聲明和使用10/98.3字符數(shù)組字符串的存儲(chǔ)字符串的長(zhǎng)度字符串的長(zhǎng)度=字符串的存儲(chǔ)長(zhǎng)度–1設(shè)計(jì)字符數(shù)組的最小長(zhǎng)度應(yīng)該等于該字符串的存儲(chǔ)長(zhǎng)度或字符數(shù)組的最小長(zhǎng)度應(yīng)該等于該字符串的長(zhǎng)度加1字符數(shù)組的使用通過(guò)下標(biāo)來(lái)訪問(wèn)字符數(shù)組中的具體字符元素ˊWˊˊuˊˊhˊˊaˊˊnˊˊ\0ˊ10/10/202229華中科技大學(xué)計(jì)算機(jī)學(xué)院8.3字符數(shù)組字符串的存儲(chǔ)ˊWˊˊuˊˊhˊˊaˊˊn#include"stdio.h"voidmain(void){charCapital[27],Lowercase[27];inti,delt=ˊaˊ-ˊAˊ; Capital[0]=ˊAˊ;Lowercase[0]=Capital[0]+delt;for(i=1;i<26;i++){Capital[i]=Capital[i-1]+1;Lowercase[i]=Lowercase[i-1]+1;}Capital[26]=ˊ\0ˊ;Lowercase[26]=Capital[26];printf("%s\n",Capital);printf("%s\n",Lowercase);}例8.13產(chǎn)生大寫(xiě)和小寫(xiě)的26個(gè)英文字母字符串程序運(yùn)行結(jié)果如下:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz10/10/202230華中科技大學(xué)計(jì)算機(jī)學(xué)院#include"stdio.h"例8.13產(chǎn)生大寫(xiě)和8.3.2字符數(shù)組的初始化通過(guò)初始化列表chars1[8]={ˊWˊ,ˊuˊ,ˊhˊ,ˊaˊ,ˊnˊ,ˊ\0ˊ};ˊ\0ˊ必須在初始化列表中顯示給出用字符串初值chars2[28]=〞ComputerScience〞;末尾將自動(dòng)加上一個(gè)ˊ\0ˊ第三種方法數(shù)組長(zhǎng)度未明顯給出chars3[]=〞ComputerEngineering〞;字符數(shù)組的容量恰好等于字符串的存儲(chǔ)長(zhǎng)度10/10/202231華中科技大學(xué)計(jì)算機(jī)學(xué)院8.3.2字符數(shù)組的初始化通過(guò)初始化列表10/9/208.4字符串處理函數(shù)串操作函數(shù)求字符串長(zhǎng)度字符串的拷貝字符串的比較字符串的連接求字符串的子串刪除字符串首尾空白字符從字符串中刪除所有與給定字符相同的字符將字符串反轉(zhuǎn)等函數(shù)10/10/202232華中科技大學(xué)計(jì)算機(jī)學(xué)院8.4字符串處理函數(shù)串操作函數(shù)10/9/202232華例8.14求字符串長(zhǎng)度的函數(shù)intstrlen(chars[]){ intj=0; while(s[j]!=′\0′) j++; returnj;}voidmain(void){ charstr[]="thereisaboatonthelake"; intlength; length=strlen(str); printf("lengthofthestringis%d\n",length);}運(yùn)行結(jié)果:lengthofthestringis2810/10/202233華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.14求字符串長(zhǎng)度的函數(shù)intstrlen(ch例8.15字符串拷貝的函數(shù)voidstrcpy(chart[],chars[]){ intj=0; while(t[j]=s[j++]) ;}voidmain(void){ charstr1[30],str2[]="thereisaboatonthelake.";
strcpy(str1,str2); puts(str1);}運(yùn)行結(jié)果:thereisaboatonthelake.10/10/202234華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.15字符串拷貝的函數(shù)voidstrcpy(cha例8.16兩個(gè)字符串比較函數(shù)比較規(guī)則從兩個(gè)字符串的第一個(gè)字符起開(kāi)始按照字符ASCII碼值的大小進(jìn)行比較返回規(guī)定當(dāng)兩個(gè)字符串相等時(shí),返回0當(dāng)?shù)谝粋€(gè)串大于第二個(gè)串時(shí),返回一個(gè)大于零的值當(dāng)?shù)谝粋€(gè)串小于第二個(gè)串時(shí),返回一個(gè)小于零的值intstrcmp(chars[],chart[]){ intj=0; while(s[j]==t[j]&&s[j]!=′\0′) j++; returns[j]-t[j];}10/10/202235華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.16兩個(gè)字符串比較函數(shù)比較規(guī)則intstrcm例8.16兩個(gè)字符串比較函數(shù)voidmain(void){ chars1[]="car",s2[]="bus",s3[]="truck",s4[]="car"; printf("%sis%s%s.\n",s1,strcmp(s1,s2)>0?"greatthen":strcmp(s1,s2)<0?"lessthen":"equalto",s2); printf("%sis%s%s.\n",s1,strcmp(s1,s3)>0?"greatthen":strcmp(s1,s3)<0?"lessthen":"equalto",s3); printf("%sis%s%s.\n",s1,strcmp(s1,s4)>0?"greatthen":strcmp(s1,s4)<0?"lessthen":"equalto",s4);}運(yùn)行結(jié)果:
carisgreatthenbus.carislessthentruck.carisequaltocar.10/10/202236華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.16兩個(gè)字符串比較函數(shù)voidmain(void例8.17字符串的連接函數(shù)char*strcat(chart[],chars[]){ intj=0,k=0; while(t[j++]!=′\0′) ; j--; while((t[j++]=s[k++])) ; returnt;}voidmain(void){ chars1[80]="Ilike",s2[]="theCprogramming.";
strcat(s1,s2); printf("%s\n",s1);}運(yùn)行結(jié)果:IliketheCprogramming.10/10/202237華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.17字符串的連接函數(shù)char*strcat(例8.18求字符串子串的函數(shù)intstrstr(charcs[],charct[]){intj=0,k;for(;cs[j]!=′\0′;j++)if(cs[j]==ct[0]){ k=1; while(cs[j+k]==ct[k]&&ct[k]!=′\0′) k++; if(k==strlen(ct)) returnj;}return-1;}voidmain(void){ chars1[80]="Cisthemostwidelyusedprogramminglanguage.",s2[]="use"; inti,j=0; i=strstr(s1,s2); printf("thesub_string'sbeginningpositionis%d\n",i); while(j<i) putchar(s1[j++]); putchar(ˊ\nˊ); while(putchar(s1[i++])) ; putchar(′\n′);}運(yùn)行結(jié)果:thesub_string'sbeginningpositionis21Cisthemostwidelyusedprogramminglanguage.10/10/202238華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.18求字符串子串的函數(shù)intstrstr(ch例8.19刪除字符串首尾空白字符的函數(shù)inttrim(chars[]){inti,num,j=0,k=0,L=strlen(s);while(s[j]==′′||s[j]==′\t′||s[j]==′\n′||s[j]==′\r′) j++;/*j計(jì)算首部空白字符的個(gè)數(shù)*/ i=L-1;/*i為字符串最后一個(gè)字符(‘\0’前面)的下標(biāo)*/ while(s[i-k]==′′||s[i-k]==′\t′||s[i-k]==′\n′||s[i-k]==′\r′) k++;/*k計(jì)算尾部空白字符的個(gè)數(shù)*/
num=L-j-k; for(i=0;i<num;i++) s[i]=s[i+j]; s[num]=′\0′; returnstrlen(s);}10/10/202239華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.19刪除字符串首尾空白字符的函數(shù)inttrim例8.20從字符串s中刪除所有與給定字符相同的字符從字符串s中去掉與字符變量c值相同的字符voiddelete_c(chars[],charc){ intj=0,k=0;/*j-讀指示器,k-寫(xiě)指示器*/ while(s[j]!=′\0′){ if(s[j]!=c) s[k++]=s[j]; j++; } s[k]=′\0′;}10/10/202240華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.20從字符串s中刪除所有與給定字符相同的字符例8.21將字符串反轉(zhuǎn)的函數(shù)將一個(gè)字符串首尾顛倒過(guò)來(lái)如:將″abcde″顛倒為″e(cuò)dcba″voidreverse(chars[]){ intj,k;/*j-前指示器k-尾指示器*/charc; for(j=0,k=strlen(s)-1;j<k;j++,k--) c=s[j],s[j]=s[k],s[k]=c;}10/10/202241華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.21將字符串反轉(zhuǎn)的函數(shù)將一個(gè)字符串首尾顛上面三個(gè)函數(shù)的應(yīng)用voidmain(void){ charstr[80]="atbtctdtetft"; printf("beforetrim,thestringis\"%s\"\n",str);
trim(str); printf("aftertrim,thestringis\"%s\"\n",str);
delete_c(str,ˊtˊ); printf("afterdelete't',thestringis\"%s\"\n",str);
reverse(str); printf("afterreverse,thestringis\"%s\"\n",str);}運(yùn)行結(jié)果:beforetrim,thestringis"atbtctdtetft"aftertrim,thestringis"atbtctdtetft"afterdeleteˊtˊ,thestringis"abcdef"afterreverse,thestringis"fedcba"10/10/202242華中科技大學(xué)計(jì)算機(jī)學(xué)院上面三個(gè)函數(shù)的應(yīng)用voidmain(void)運(yùn)行結(jié)果:8.4.2數(shù)字串與數(shù)之間轉(zhuǎn)換的函數(shù)例8.22將一個(gè)十進(jìn)制數(shù)字串轉(zhuǎn)換成為對(duì)應(yīng)的整數(shù)的函數(shù)atoi函數(shù)功能將s字符數(shù)組中存放的一個(gè)十進(jìn)制數(shù)字串轉(zhuǎn)換成為對(duì)應(yīng)的整數(shù),并返回該整數(shù)算法:ASCII碼字符s[j]轉(zhuǎn)換為對(duì)應(yīng)數(shù)字s[j]-′0′本位乘以10加下一位的算法54321=((((5)*10+4)*10+3)*10+2*10)+110/10/202243華中科技大學(xué)計(jì)算機(jī)學(xué)院8.4.2數(shù)字串與數(shù)之間轉(zhuǎn)換的函數(shù)例8.22atoi函數(shù)#defineBASE10intatoi(chars[]){ intj=0,num=0; for(;s[j]!=′\0′;j++) num=num*BASE+s[j]-′0′; returnnum;}10/10/202244華中科技大學(xué)計(jì)算機(jī)學(xué)院atoi函數(shù)#defineBASE1010/9/2022例8.23將一個(gè)整數(shù)轉(zhuǎn)換成為基數(shù)為BASE的數(shù)字串的函數(shù)#defineBASE10voiditoa(intn,chars[]){ intsign,j=0; if((sign=n)<0)
n=-n; while(n>0){ s[j++]=n%BASE+′0′; n/=BASE; } if(sign<0) s[j++]=′-′; s[j]=′\0′; reverse(s);}10/10/202245華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.23將一個(gè)整數(shù)轉(zhuǎn)換成為基數(shù)為BASE的數(shù)字串的函數(shù)例8.24將一個(gè)十六進(jìn)制數(shù)字串轉(zhuǎn)換成為對(duì)應(yīng)的整數(shù)的函數(shù)問(wèn)題當(dāng)基數(shù)BASE大于10,如:16,由于十六進(jìn)制數(shù)的表示形式,如′a′和′A′,′b′和′B′以及0到f或F在ASCII碼表的編碼不連續(xù)性因此需要在轉(zhuǎn)換中進(jìn)行一定的調(diào)整htoi函數(shù)將一個(gè)存放在字符數(shù)組s中的十六進(jìn)制數(shù)字串轉(zhuǎn)換成為對(duì)應(yīng)的整數(shù)并且返回轉(zhuǎn)換后的整數(shù)10/10/202246華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.24將一個(gè)十六進(jìn)制數(shù)字串轉(zhuǎn)換成為對(duì)應(yīng)的整數(shù)的函數(shù)htoi函數(shù)inthtoi(chars[]){intj=0,num=0;if(s[j]==‘0’&&(s[j+1]==‘x’||s[j+1]==‘X’))j+=2;elsereturn-1;for(;s[j]!=′\0′;j++){
if(s[j]>=‘0’&&s[j]<=‘9’)num=num*16+s[j]-’0’; if(s[j]>=‘a(chǎn)’&&s[j]<=‘f’)num=num*16+s[j]-’a’+10; if(s[j]>=‘A’&&s[j]<=‘F’)num=num*16+s[j]-’A’+10; } returnnum;}10/10/202247華中科技大學(xué)計(jì)算機(jī)學(xué)院htoi函數(shù)inthtoi(chars[])10/9/28.5多維數(shù)組語(yǔ)文數(shù)學(xué)010285829195實(shí)際應(yīng)用有時(shí)需要用多個(gè)下標(biāo)來(lái)實(shí)現(xiàn)對(duì)數(shù)組元素的訪問(wèn)例如張三同學(xué),學(xué)號(hào)為01,語(yǔ)文和數(shù)學(xué)成績(jī)分別為85,91,李四同學(xué),學(xué)號(hào)位02,語(yǔ)文和數(shù)學(xué)成績(jī)分別為82,95解決方法用二維數(shù)組可以描述學(xué)號(hào)-課程成績(jī)表中的成績(jī)數(shù)據(jù)多維數(shù)組的用途二維數(shù)組可以描述數(shù)學(xué)中的矩陣或行列式三維數(shù)組可以描述空間中的點(diǎn)集n維數(shù)組來(lái)描述n維線性空間中的n維向量10/10/202248華中科技大學(xué)計(jì)算機(jī)學(xué)院8.5多維數(shù)組語(yǔ)文數(shù)學(xué)018591實(shí)際應(yīng)用10/9/208.5.1多維數(shù)組的說(shuō)明與使用形式類(lèi)型說(shuō)明數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]…[常量表達(dá)式n]={初值表};類(lèi)型說(shuō)明:[存儲(chǔ)類(lèi)型說(shuō)明符][類(lèi)型修飾符]數(shù)據(jù)類(lèi)型例如,intx[2][2];對(duì)其元素的引用數(shù)組名[下標(biāo)1][下標(biāo)2]…[下標(biāo)n]例如,x[1][0]=3;10/10/202249華中科技大學(xué)計(jì)算機(jī)學(xué)院8.5.1多維數(shù)組的說(shuō)明與使用形式10/9/20224例8.25對(duì)二維數(shù)組中元素的訪問(wèn)與操作#include"stdio.h"voidmain(void){ intx[2][3],a=2; x[0][2]=8; scanf("%d",&x[1][2]); x[1][1]=x[0][2]; x[1][2]<<=a;/*將元素x[1][2]的內(nèi)容左移2位*/ printf("%d\n",x[1][2]);}10/10/202250華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.25對(duì)二維數(shù)組中元素的訪問(wèn)與操作#include計(jì)算每個(gè)同學(xué)的平均成績(jī)并且輸出數(shù)組中各元素的地址和內(nèi)容
#include"stdio.h"#defineSIZE2voidmain(void){ intx[SIZE][SIZE+1]; inti,j; for(i=0;i<SIZE;i++){ for(j=0;j<SIZE;j++) scanf("%d",&x[i][j]); x[i][SIZE]=(x[i][0]+x[i][1])/2; } printf("\n");例8.26用二維數(shù)組表示學(xué)號(hào)-課程成績(jī)表輸入如下:85918295語(yǔ)文數(shù)學(xué)01028582919510/10/202251華中科技大學(xué)計(jì)算機(jī)學(xué)院計(jì)算每個(gè)同學(xué)的平均成績(jī)并且輸出數(shù)組中各元素的地址和內(nèi)容例8例8.26用二維數(shù)組表示學(xué)號(hào)-課程成績(jī)表for(i=0;i<SIZE;i++){for(j=0;j<SIZE+1;j++)printf("%p\tx[%d][%d]=%d\t",&x[i][j],i,j,x[i][j]);printf("\n");}}程序的運(yùn)行結(jié)果為:FFD0x[0][0]=85FFD2x[0][1]=91FFD4x[0][2]=88FFD6x[1][0]=82FFD8x[1][1]=95FFDAx[1][2]=8810/10/202252華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.26用二維數(shù)組表示學(xué)號(hào)-課程成績(jī)表for(i=0;8.5.2多維數(shù)組的存儲(chǔ)結(jié)構(gòu)x[0][0]=85x[0][1]=91x[0][2]=88x[1][0]=82x[1][1]=95x[1][2]=88地址元素值0xFFD0x[0][0]850xFFD20xFFD40xFFD60xFFD80xFFDAx[0][1]x[0][2]x[1][0]x[1][1]x[1][2]9188829588二維數(shù)組x的邏輯存儲(chǔ)結(jié)構(gòu)二維數(shù)組x的物理存儲(chǔ)結(jié)構(gòu)10/10/202253華中科技大學(xué)計(jì)算機(jī)學(xué)院8.5.2多維數(shù)組的存儲(chǔ)結(jié)構(gòu)x[0][0]x[0][1]8.5.3多維數(shù)組的初始化按照物理存儲(chǔ)結(jié)構(gòu)的順序inta[2][2]={85,91,82,95};按照邏輯存儲(chǔ)結(jié)構(gòu)的順序可讀性好,但初值表的形式與數(shù)組的維數(shù)有關(guān)intx[2][3]={{85,91,0},{82,95,0}};intd[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};注意當(dāng)數(shù)組的初值全部給出時(shí),第1維大小的說(shuō)明可以省略intx[][3]={{85,91,0},{82,95,0}};intd[][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};其它維大小不能省略10/10/202254華中科技大學(xué)計(jì)算機(jī)學(xué)院8.5.3多維數(shù)組的初始化按照物理存儲(chǔ)結(jié)構(gòu)的順序10/98.5.4二維字符數(shù)組二維字符數(shù)組與其它二維數(shù)組類(lèi)似用char說(shuō)明的二維數(shù)組chartext[25][80];初始化與其它二維數(shù)組類(lèi)似chars[2][4]={‘a(chǎn)’,’b’,’c’,’\0’,’d’,’e’,’f’,’\0’};chars[2][4]={{‘a(chǎn)’,’b’,’c’,’\0’},{’d’,’e’,’f’,’\0’}};用字符串對(duì)二維數(shù)組進(jìn)行初始化chardevices[3][12]={“harddisk”,”CRT”,”keyboard”};省略第1維的方式chardevices[][12]={“harddisk”,”CRT”,”keyboard”};10/10/202255華中科技大學(xué)計(jì)算機(jī)學(xué)院8.5.4二維字符數(shù)組二維字符數(shù)組10/9/20225二維字符數(shù)組的使用引用單個(gè)字符元素weekend[i][j]=m;引用字符串weekend[i]表示weekend數(shù)組中第i行字符串的首地址printf(“%s”,weekend[i]);10/10/202256華中科技大學(xué)計(jì)算機(jī)學(xué)院二維字符數(shù)組的使用引用單個(gè)字符元素10/9/202256例8.27字符串?dāng)?shù)組的輸入輸出操作#include"stdio.h"voidmain(void){inti; chardevices[3][12]={"harddisk","CRT","keyboard"}; devices[0][0]=′H′;/*"harddisk"變?yōu)?Harddisk"*/ devices[2][0]=′K′;/*"keyboard"變?yōu)?Keyboard"*/ for(i=0;i<3;i++) printf("%s\n",&devices[i][0]); scanf("%s",devices[1]); for(i=0;i<3;i++) printf("%s\n",devices[i]);}10/10/202257華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.27字符串?dāng)?shù)組的輸入輸出操作#include"*8.6數(shù)組的應(yīng)用程序設(shè)計(jì)8.6.1矩陣乘法運(yùn)算算法定義3個(gè)2維數(shù)組通過(guò)三重循環(huán)來(lái)實(shí)現(xiàn)
外層循環(huán)用于控制乘積矩陣C的行中間層循環(huán)用于控制乘積矩陣C的列內(nèi)層循環(huán)用于計(jì)算乘積矩陣元素Cij
10/10/202258華中科技大學(xué)計(jì)算機(jī)學(xué)院*8.6數(shù)組的應(yīng)用程序設(shè)計(jì)8.6.1矩陣乘法運(yùn)算10例8.28矩陣的乘法運(yùn)算#include"stdio.h"#defineN3#defineK4#defineM3voidmul_matrix(inta[][K],intb[][M],intc[][M],intn,intk,intm){inti,j,p,sum;for(i=0;i<n;i++) for(j=0;j<m;j++){ sum=0; for(p=0;p<k;p++) sum+=a[i][p]*b[p][j]; c[i][j]=sum; }}10/10/202259華中科技大學(xué)計(jì)算機(jī)學(xué)院例8.28矩陣的乘法運(yùn)算#include"stdi例8.28矩陣的乘法運(yùn)算voidmain(void){ intA[N][K]={{1,2,3,4},{5,6,7,8},{9,0,1,2}}; intB[K][M]={{1,2,3},{4,5,6},{7,8,9},{0,1,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 急診工作的方式計(jì)劃
- 締造良好工作氛圍的策略計(jì)劃
- 高中歷史 第5課 美國(guó)獨(dú)立戰(zhàn)爭(zhēng)教學(xué)實(shí)錄2 岳麓版選修2
- 統(tǒng)編版小學(xué)語(yǔ)文二年級(jí)下冊(cè)第15課《古詩(shī)二首》精美課件
- 愛(ài)衛(wèi)知識(shí)培訓(xùn)課件社區(qū)
- 2025年濮陽(yáng)貨運(yùn)從業(yè)資格證考試內(nèi)容
- 2025年白山貨運(yùn)從業(yè)資格證模擬考試題庫(kù)
- 2025年臨汾道路貨物運(yùn)輸從業(yè)資格證模擬考試
- 八年級(jí)政治下冊(cè) 第五單元 我是中國(guó)公民 5.2《公民的權(quán)利和義務(wù)》情境探究型教學(xué)實(shí)錄 粵教版
- 2025年天津貨運(yùn)從業(yè)資格證模擬考試下載
- 一體化污水處理設(shè)備項(xiàng)目商業(yè)計(jì)劃書(shū)
- 《如何與孩子溝通》課件
- 美術(shù)概論-課件
- 牛津深圳版初中英語(yǔ)中考英語(yǔ)詞匯匯總(七至九年級(jí))
- 【高中語(yǔ)文】《李憑箜篌引》(同步課件)+高二語(yǔ)文+(統(tǒng)編版選擇性必修中冊(cè))
- 人衛(wèi)版急診與災(zāi)難醫(yī)學(xué)之呼吸困難教學(xué)課件
- 骨質(zhì)疏松的中醫(yī)治療
- 中醫(yī)科運(yùn)用PDCA循環(huán)縮短出院患者離院時(shí)間品管圈QCC持續(xù)質(zhì)量改進(jìn)成果匯報(bào)
- 老年人的溝通交流護(hù)理課件
- SEER數(shù)據(jù)庫(kù)的申請(qǐng)及數(shù)據(jù)提取方法與流程
- 2022礦產(chǎn)地質(zhì)勘查規(guī)范鹽類(lèi)第2部分:現(xiàn)代鹽湖鹽類(lèi)
評(píng)論
0/150
提交評(píng)論