大一上語言六章數(shù)組_第1頁
大一上語言六章數(shù)組_第2頁
大一上語言六章數(shù)組_第3頁
大一上語言六章數(shù)組_第4頁
大一上語言六章數(shù)組_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章

數(shù)組6.1

一維數(shù)組6.2二維數(shù)組6.3一維字符數(shù)組6.4二維字符數(shù)組6.5數(shù)組與函數(shù)

小結(jié)6.1一維數(shù)組6.1.1一維數(shù)組的定義

定義方式:數(shù)據(jù)類型

數(shù)組名[常量表達式];

例:inta[10];floatb[5];charc[20];合法標識符[]:數(shù)組運算符單目運算符優(yōu)先級(1)左結(jié)合不能用()表示元素個數(shù)下標從0開始數(shù)組名表示內(nèi)存首地址,是地址常量a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]各元素地址aa+1a+2a+3a+4a+5a+6a+7a+8a+9a編譯時分配連續(xù)內(nèi)存內(nèi)存字節(jié)數(shù)=數(shù)組維數(shù)*sizeof(元素數(shù)據(jù)類型)6.1.2一維數(shù)組的初始化初始化方式在定義數(shù)組時,為數(shù)組元素賦初值(在編譯階段使之得到初值)inta[5]={1,2,3,4,5};等價于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;說明:數(shù)組不初始化,其元素值為隨機數(shù)對static數(shù)組元素不賦初值,系統(tǒng)會自動賦以0值當全部數(shù)組元素賦初值時,可不指定數(shù)組長度如inta[5]={6,2,3};

等價于:

a[0]=6;a[1]=2;a[2]=3;a[3]=0;a[4]=0;如inta[3]={6,2,3,5,1};(

)staticinta[5];等價于:a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只給部分數(shù)組元素賦初值inta[]={1,2,3,4,5,6};編譯系統(tǒng)根據(jù)初值個數(shù)確定數(shù)組維數(shù)6.1.3一維數(shù)組元素的引用數(shù)組必須先定義,后使用只能逐個引用數(shù)組元素,不能一次引用整個數(shù)組一維數(shù)組的下標表示法

數(shù)組名[下標]其中:下標可以是正整型常量或表達式例inti=15;intdata[i];

(

不能用變量定義數(shù)組維數(shù))例inta[10];printf(“%d”,a);(

)必須

for(j=0;j<10;j++)printf(“%d\t”,a[j]);(

)例intdata[5];data[5]=10;//

C語言對數(shù)組不作越界檢查,使用時要注意#include<stdio.h>voidmain(){floatscore[50],sum=0,aver;inti,n,k=0;printf("請輸入學生人數(shù):\n");scanf("%d",&n);printf("請輸入%d個學生成績:\n",n);for(i=0;i<n;i++){scanf("%f",&score[i]);sum+=score[i];}aver=sum/n;for(i=0;i<n;i++)if(score[i]>=aver)k++;printf(“平均成績:%.2f\t高于平均分人數(shù):%d\n”,aver,k);}編程,輸入一個班級學生(不多于50人)的一門功課成績,計算平均成績,并統(tǒng)計高于平均成績學生人數(shù)。6.1.3一維數(shù)組應用舉例程序運行:請輸入學生人數(shù):10↙請輸入10個學生成績:60706575789054779368↙平均成績:73.00高于平均分人數(shù):5f[0]f[1]f[2]f[3]f[4]f[5]f[39]……...11f[39]01452339例6.1用數(shù)組求Fibonacci數(shù)列前40項。235#include<stdio.h>main(){inti;

long

f[40]={1,1};

for(i=2;i<40;i++)f[i]=f[i-2]+f[i-1];

for(i=0;i<40;i++){if(i%5==0)printf("\n");printf("%12ld",f[i]);}}例6-1d1讀10個整數(shù)存入數(shù)組,找出其中最大值和最小值步驟:1.輸入:for循環(huán)輸入10個整數(shù)2.處理:(a)先令max=min=x[0](b)依次用x[i]和max,min比較(循環(huán))

若max<x[i],令max=x[i]

若min>x[i],令min=x[i]3.輸出:max和min#include<stdio.h>#defineSIZE10main(){intx[SIZE],i,max,min;printf("Enter10integers:\n");

for(i=0;i<SIZE;i++){printf("%d:",i+1); scanf("%d",&x[i]);}

max=min=x[0];

for(i=1;i<SIZE;i++){if(max<x[i])max=x[i];if(min>x[i])min=x[i];}

printf("Maximumvalueis%d\n",max);printf("Minimumvalueis%d\n",min);}例6-1d2輸入一個正整數(shù)n(1<n≤10),再輸入n個整數(shù),將它們存入數(shù)組a中,將最小值與第一個數(shù)交換,輸出交換后的n個數(shù)。#include<stdio.h>voidmain(){inti,k,temp,n,a[10];printf(“Inputn:\n”);scanf(“%d”,&n);for(i=0;i<n;i++)scanf(“%d”,&a[i]);for(k=0,i=1;i<n;i++)if(a[i]<a[k])k=i;temp=a[0];a[0]=a[k];a[k]=temp;for(i=0;i<n;i++)printf(“%d“,a[i]);}6.1.5數(shù)組排序與數(shù)組查找選擇法排序排序過程:(1)首先通過n-1次比較,從n個數(shù)中找出最小的,

將它與第一個數(shù)交換—第一趟選擇排序,結(jié)果最小的數(shù)被安置在第一個元素位置上(2)再通過n-2次比較,從剩余的n-1個數(shù)中找出關鍵字次小的記錄,將它與第二個數(shù)交換—第二趟選擇排序(3)重復上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束for(i=0;i<n-1;i++){找出a[i]至a[n-1]值最小的數(shù)組素的下標k;交換a[k]與a[i];

}找出a[i]至a[n-1]值最小的數(shù)組元素的下標k的程序段:

k=i;for(j=i+1;j<n;j++)if(a[j]<a[k])k=j;例初始:[49386597761327]kji=01349一趟:13[386597764927]i=12738二趟:

1327

[6597764938]三趟:

132738

[97764965]四趟:

13273849

[769765]五趟:

1327384965

[9776]六趟:

132738496576

[97]kkkkjjjjjjjjjj例6.4對n個數(shù)排序。

#defineN8main(){floata[N],t;inti,j,k;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%f”,&a[i]);

for(i=0;i<N-1;i++){k=i;

for(j=i+1;j<N;j++)

if(a[j]<a[k])k=j;

if(k!=i){t=a[k];a[k]=a[i];a[i]=t;}}printf("\nthesortednumbers:\n");for(i=0;i<N;i++)printf(“%.2f“,a[i]);printf(“\n”);}冒泡法排序排序過程:(1)比較第一個數(shù)與第二個數(shù),若為逆序a[0]>a[1],則交換;然后比較第二個數(shù)與第三個數(shù);依次類推,直至第n-1個數(shù)和第n個數(shù)比較為止——第一趟冒泡排序,結(jié)果最大的數(shù)被安置在最后一個元素位置上(2)對前n-1個數(shù)進行第二趟冒泡排序,結(jié)果使次大的數(shù)被安置在第n-1個元素位置(3)重復上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束for(i=0;i<n-1;i++){

第i趟排序算法

}第i趟排序算法:

for(j=0;j<n-1-i;j++){

若a[j+1]≤a[j]則交換a[j]與[j+1]}例38496576132730

97第一趟384965132730

76第二趟3849132730

65第三趟38132730

49第四趟132730

38第五趟1327

30第六趟4938659776132730初始關鍵字n=83849769713972797309713767676273013652765306513134949304927382738303813

27第七趟例6-4d1冒泡法排序(由小到大)#include<stdio.h>#defineN8voidmain(){floata[N],i,j,t;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%f”,&a[i]);

for(i=0;i<N–1;i++)

for(j=0;j<N–1–i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf(“thesortednumbers:\n”);for(i=0;i<N;i++)printf(“%.2f”,a[i]);}輸入N個數(shù)給a[0]到a[N-1]i從0到N-2j從0到N-1-ia[j]>a[j+1]假a[j]與a[j+1]互換輸出a[0]到a[N-1]真例6-4d2若在某趟排序時無需交換數(shù)據(jù),則可以提前終止排序。程序修改如下:

#include<stdio.h>#defineN8voidmain(){floata[N],i,j,t,flag=1;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%f”,&a[i]);

for(i=0;i<N–1&&flag!=0;i++)

for(j=0,flag=0;j<N–1–i;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;flag=1;}printf(“thesortednumbers:\n”);for(i=0;i<N;i++)printf(“%.2f”,a[i]);}例6.5在n個數(shù)中查找某一個數(shù)。(順序查找)#include<stdio.h>#include<stdlib.h>#defineN10voidmain(){inta[N],i,x;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%d”,&a[i]);printf(“inputxtolookfor:”);scanf(“%d”,&x);for(i=0;i<N;i++)if(a[i]==x){printf(“find:%ditisa[%d]”,x,i);exit(0);//在數(shù)組中找到x,結(jié)束程序

}printf(“%dnotbeenfound.\n”,x);//如x存在,則不執(zhí)行

}例6-5d1*折半查找法(前提,數(shù)據(jù)已按一定的規(guī)律升或降序排列好)例如:初始數(shù)據(jù)

2791534569096123345存放在數(shù)組a中,查找90。輸入N個數(shù)給a數(shù)組top=0,bot=N-1mid=(top+bot)/2x==a[mid]輸出找到程序結(jié)束x<a[mid]bot=mid-1x在mid左邊x>a[mid]top=mid+1x在mid右邊輸出未找到top<=bot#include<stdio.h>#include<stdlib.h>#defineN10voidmain(){inta[N],x,i,n,top,bot,mid;printf(“input%dnumber:\n”,N);for(i=0;i<N;i++)scanf(“%d”,&a[i]);printf(“inputxtolookfor:”);scanf(“%d”,&x);top=0;bot=N–1;

while(top<=bot)

//若top>bot表示所查找區(qū)間為空

{mid=(top+bot)/2;if(x==a[mid]){printf(“find:%d,itisa[%2d]\n”,x,mid);exit(0);}elseif(x<a[mid])bot=mid-1;elseif(x>a[mid])top=mid+1;}printf(“%dnotbeenfound.\n”,x);}

2791534569096123345topbootmidmid=4;a[mid]<90top=mid+1boot=9569096123345midtopbootmid=7;a[mid]>90boot=mid-15690topbootmid=6;a[mid]==90數(shù)據(jù)找到,退出程序6.2二維數(shù)組6.2.1二維數(shù)組的定義二維數(shù)組說明符

數(shù)據(jù)類型數(shù)組名[常量表達式][常量表達式];數(shù)組元素的存放順序原因:內(nèi)存是一維的二維數(shù)組:按行序優(yōu)先,按行存放例inta[3][4];floatb[2][5];intc[2][3][4];

inta[3,4];

(

)行數(shù)列數(shù)元素個數(shù)=行數(shù)*列數(shù)inta[3][2]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]014523a[0][0]a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]例inta[3][4];二維數(shù)組理解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]每個元素a[i]由包含4個元素的一維數(shù)組組成二維數(shù)組a是由3個元素組成a[0]a[1]a[2]行名014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]

例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化

例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化

例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一維長度省略初始化

例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化

例inta[][3]={1,2,3,4,5};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第一維長度省略初始化

例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化6.2.2二維數(shù)組元素的初始化分行初始化:按元素排列順序初始化6.2.3二維數(shù)組的引用形式:數(shù)組名[下標][下標]正整型表達式,取值0~行長度–1

正整型表達式,取值0~列長度–1

例:intx[2][3];則數(shù)組元素為x[0][0]、x[0][1]、x[0][2]、x[1][0]、x[1][1]、x[1][2]。每一元素是一個普通變量,可以參加相應運算。如:

scanf("%d",&x[0][0]);//輸入數(shù)組元素x[0][0]的值x[1][3-1]=x[0][0]%10;//將x[0][0]的個位數(shù)賦值給x[1][2]x[1][2]++;//x[1][2]自增1

矩陣的術語與二維數(shù)組下標的對應關系術語含義下標規(guī)律主對角線從矩陣的左上角至右下角的連線i==j上三角主對角線以上的部分i<=j下三角主對角線以下的部分i>=j副對角線從矩陣的右上角至左下角的連線i+j=N-11234678910111213141516上三角副對角線主對角線下三角1234678910111213141516例6.6矩陣轉(zhuǎn)置。#defineN4#include<stdio.h>voidmain(){floata[N][N],temp;inti,j;

for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%f",&a[i][j]);

for(i=0;i<N;i++)for(j=0;j<i;j++){temp=a[i][j];a[i][j]=a[j][i];a[j][i]=temp;}for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%8.2f",a[i][j]);

printf("\n");

}}15913261014371115481216#defineM3#defineN4#include<stdio.h>voidmain(){floata[M][N],max;inti,j,maxi,maxj;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf("%f",&a[i][j]);//輸入數(shù)據(jù)

max=a[0][0];maxi=maxj=0;//賦初值

for(i=0;i<M;i++)for(j=0;j<N;j++)

if(max<a[i][j]){max=a[i][j];maxi=i;maxj=j;}a[maxi][maxj]=a[M-1][N-1];a[M-1][N-1]=max;for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%8.2f",a[i][j]);printf("\n");}}例6.7找出二維數(shù)組的最大值與最后元素交換后以行列對齊的方式輸出。問題1:如果max=0,結(jié)果如何?問題2:不記錄最大值對應的下標,能否完成交換?#defineM30#defineN4#include<stdio.h>voidmain(){floata[M][N],sum,stu_avg[M],cor_avg[N];inti,j;for(i=0;i<M;i++)for(j=0;j<N;j++)scanf(“%f”,&a[i][j]);//輸入數(shù)據(jù)

for(i=0;i<M;i++)//計算每個學生的平均成績

{sum=0;for(j=0;j<N;j++)sum+=a[i][j];stu_avg[i]=sum/N;}for(j=0;j<N;i++) //計算每門課的平均成績

{sum=0;for(i=0;i<M;i++)sum+=a[i][j];cor_avg[j]=sum/M;}for(i=0;i<M;i++)printf(“NO%d:%8.2f\n”,i+1,stu_avg[i]);for(j=0;j<N;j++)printf(“Score%d:%8.2f\n”,i+1,cor_avg[i]);}例6.8輸入一個班級學生的四門課成績,求每個學生的平均成績及每門課的平均成績。例l5-9d1編程,通過一個循環(huán)結(jié)構(gòu)為二維數(shù)組輸入下列數(shù)據(jù)后,輸出。5432165430765008700090000#include<stdio.h>voidmain(){intb[5][5],i,j;for(i=0;i<5;i++)for(j=0;j<5;j++){if(i+j<=5-1)b[i][j]=i-j+5;if(i+j>5-1)b[i][j]=0;}for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%3d",b[i][j]);printf("\n");}}

例charch[5]=“Boy”;ch[0]Boy\0\0用字符串常量ch[1]ch[2]ch[3]ch[4]

例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;用字符串常量ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]

例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Hello逐個字符賦值ch[1]ch[2]ch[3]ch[4]

例charch[5]={‘B’,’o’,’y’};ch[0]Boy\0\0逐個字符賦值ch[1]ch[2]ch[3]ch[4]6.3字符數(shù)組6.3.1字符數(shù)組的定義、初始化和引用

字符數(shù)組定義字符數(shù)組的初始化逐個字符賦值用字符串常量字符數(shù)組的引用例charc[10],ch[3][4];例輸出一個字符串#include<stdio.h>main(){charc[10]={'I','','a','m','','a','','b','o','y'};inti;for(i=0;i<10;i++)printf("%c",c[i]);printf("\n");}Iamaboy01234567896.3.2字符串和字符數(shù)組字符串及其結(jié)束標志無字符串變量,用字符數(shù)組處理字符串字符串結(jié)束標志:‘\0’例

“hello”共5個字符,在內(nèi)存占6個字節(jié)

字符串長度5

hello\01041011081081110內(nèi)存存放字符ASCII碼6.3.3字符數(shù)組的輸入/輸出

逐個字符I/O:%c整個字符串I/O:%s例5.10輸入一行字符,將其中的小寫字母轉(zhuǎn)換成大寫字母,其余字符不變。

#include<stdio.h>voidmain(){charc[81];inti;for(i=0;(c[i]=getchar())!=’\n’;i++);c[i]=’\0’;//將數(shù)組最后的回車換行符改為結(jié)束標志

for(i=0;c[i]!=’\0’;i++)//逐個處理、輸出字符

{if(c[i]>=’a’&&c[i]<=’z’)c[i]-=32;printf(“%c”,c[i]);}}例5.10d1用%s

#include<stdio.h>voidmain(){charc[81];inti;scanf(“%s”,c);for(i=0;c[i]!=’\0’;i++)if(c[i]>=’a’&&c[i]<=’z’)c[i]-=32;printf(“%s”,c);}用字符數(shù)組名,不要加&輸入串長度<數(shù)組維數(shù)遇空格或回車結(jié)束自動加‘\0’用字符數(shù)組名,遇‘\0’結(jié)束例main(){chara[5]={‘H’,’e’,’l’,’l’,’o’};printf(“%s”,a);}例main(){chara[]=“Hello”;printf(“%s”,a);}結(jié)果:Hello#-=*

hello02314結(jié)果:Hello用“%s”輸出時,遇‘\0’結(jié)束main(){chara[]={'h','e','l','\0','l','o','\0'};printf("%s",a);}例輸出:hel

hel\0lo\0數(shù)組中有多個‘\0’時,遇第一個結(jié)束#include<stdio.h>main(){inti;chara[5];scanf("%s",a);for(i=0;i<5;i++)printf("%d,",a[i]);}運行情況:(1)若輸入hel,正常(2)若輸入

hell,正常(3)若輸入

hello,用%s輸出時,會出現(xiàn)問題

hel\0

hell\0

hello輸入字符串長度<數(shù)組維數(shù)例字符串輸入舉例

How\0

are\0

you?\0

#include<stdio.h>//l5-10d1main(){chara[15],b[5],c[5];

scanf("%s%s%s",a,b,c);

printf("a=%s\nb=%s\nc=%s\n",a,b,c);

scanf("%s",a);

printf("a=%s\n",a);}運行情況:輸入:Howareyou?輸出:a=Howb=arec=you?輸入:Howareyou?輸出:a=Howscanf中%s輸入時,遇空格或回車結(jié)束例若準備將字符串“Thisisastring.”記錄下來,錯誤的輸入語句為:(A)scanf(“%20s”,s);(B)for(k=0;k<17;k++)s[k]=getchar();(C)while((c=getchar())!=‘\n’)s[k++]=c;scanf函數(shù)用格式符%s輸入若干字符到字符數(shù)組時,遇到空格,TAB,回車符中止,并寫入串結(jié)束標志’\0’字符串輸出函數(shù)puts格式:puts(字符數(shù)組)功能:向顯示器輸出字符串(輸出完,換行)說明:字符數(shù)組必須以‘\0’結(jié)束字符串輸入函數(shù)gets格式:gets(字符數(shù)組)功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中,

并自動加‘\0’說明:輸入串長度應小于字符數(shù)組維數(shù)6.3.4常用字符串處理函數(shù)頭文件string.h例#include<stdio.h>main(){charstring[80];printf(“Inputastring:”);gets(string);puts(string);}輸入:

Howareyou?輸出:

Howareyou?

字符串連接函數(shù)strcat格式:strcat(字符數(shù)組1,字符數(shù)組2)功能:把字符數(shù)組2連到字符數(shù)組1后面返值:返回字符數(shù)組1的首地址說明:

字符數(shù)組1必須足夠大

連接前,兩串均以‘\0’結(jié)束;連接后,串1的‘\0’取消,

新串最后加‘\0’字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組1,字符串2)功能:將字符串2,拷貝到字符數(shù)組1中去返值:返回字符數(shù)組1的首地址說明:

字符數(shù)組1必須足夠大

拷貝時‘\0’一同拷貝

不能使用賦值語句為一個字符數(shù)組賦值例charstr1[20],str2[20];str1={“Hello!”};(

)str2=str1;(

)strcpy(str1,“Hello!”);(√)strcpy(str2,str1);(√)Trbo\00123456789u24…….…...Trbo0123456789u\024…….…….例strcpy與strcat舉例#include<string.h>#include<stdio.h>voidmain(){chard[25];charblank[]="",c[]="C++",turbo[]="Turbo";

strcpy(d,turbo);

strcat(d,blank);

strcat(d,c);

printf("%s\n",d);}TurboC++TrboC++0123456789u\024…….d字符串比較函數(shù)strcmp格式:strcmp(字符串1,字符串2)功能:比較兩個字符串比較規(guī)則:對兩串從左向右逐個字符比較(ASCII碼),

直到遇到不同字符或‘\0’為止返值:返回int型整數(shù),a.若字符串1<

字符串2,

返回負整數(shù)

b.若字符串1>

字符串2,

返回正整數(shù)

c.若字符串1==字符串2,

返回零說明:字符串比較不能用“==”,必須用strcmp字符串長度函數(shù)strlen格式:strlen(字符數(shù)組)功能:計算字符串長度返值:返回字符串實際長度,不包括‘\0’在內(nèi)例對于以下字符串,strlen(s)的值為:(1)chars[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};(2)chars[]=“\t\v\\\0will\n”;(3)chars[]=“\x69\082\n”;

答案:1316.3.5字符串應用舉例

#include<stdio.h>#include<string.h>voidmain(){chars[81],t;inti,j;gets(s);j=strlen(s)-1;//最后j為字符串的長度

for(i=0;i<j;i++,j--)//j一開始為最后元素下標

{t=s[i];s[i]=s[j];s[j]=t;}printf(“逆序后字符串為:%s\n”,s);}

例6.11將一字符數(shù)組中的字符串逆序存放。當前字符=空格是否未出現(xiàn)新單詞,使blank=1num不累加前一字符為空格(blank==1),新單詞出現(xiàn),blank=0,num加1前一字符為非空格(blank==0),未出現(xiàn)新單詞,num不變否1是01是0未11否1是02否0未02是0未12否1是03是0未13否1是04否0未04否0未04否0未04例輸入:Iamaboy.

當前字符是否空格blank原值新單詞開始否blank新值num值

Iamaboy.例

輸入一行字符,統(tǒng)計其中有多少個單詞輸入一字符串給stringi=0num=0blank=1當((c=string[i])!=‘\0’)c=空格真真假假blank=1blank=0num=num+1i=i+1輸出:numblank==1#include<stdio.h>main(){charstring[81];inti,num=0,blank=1;

charc;

gets(string);

for(i=0;(c=string[i])!='\0';i++)

if(c=='')blank=1;

elseif(blank==1){blank=0;num++;}

printf("Thereare%dwords\intheline\n",num);}

例chardiamond[][5]={{'.','.','*'},{'.','*','.','*'}, {'*','.','.','.','*'},{'.','*','.','*'},{'.','.','*'}};二維字符數(shù)組初始化..*\0\0.*.*\0*...*.*.*\0..*\0\0diamond[0]diamond[1]diamond[2]diamond[3]diamond[4]

charfruit[][7]={“Apple”,”O(jiān)range”,”Grape”,”Pear”,”Peach”};二維字符數(shù)組初始化fruit[0]fruit[1]fruit[2]fruit[3]fruit[4]Apple\0\0Orange\0Grape\0\0Pear\0\0\0Peach\0\06.4.1二維字符數(shù)組的定義、初始化和引用

二維字符數(shù)組的定義和初始化6.4二維字符數(shù)組

字符數(shù)組的引用可以引用字符數(shù)組中的一個元素,得到一個字符例:#include<stdio.h>main(){chard[][3]={{‘a(chǎn)’,‘b’,‘c’},{‘d’,‘e’,‘f’},{‘h’,‘i’,‘j’”}};inti,j;for(i=0;i<3;i++){for(j=0;j<3;j++)printf(“%c”,d[i][j]);printf(“\n”);}也可以用字符串處理函數(shù)進行處理例5.16在三個字符串中,找出最大者。#include<stdio.h>#include<string.h>main(){charstring[20],str[3][20];inti;

for(i=0;i<3;i++)gets(str[i]);strcpy(string,str[0]);if(strcmp(str[1],string)>0)strcpy(string,str[1]);if(strcmp(str[2],string)>0) strcpy(string,str[2]);

printf("\nThelargeststring\is:\n%s\n",string);}

How\0

Hello\0

High\0

str[0]str[1]str[2]傳地址方式:函數(shù)調(diào)用時,將數(shù)據(jù)的存儲地址作為參數(shù)傳遞給形參特點:形參與實參占用同樣的存儲單元“雙向”傳遞實參和形參必須是地址常量或變量6.5數(shù)組與函數(shù)數(shù)組名作函數(shù)參數(shù)地址傳遞在主調(diào)函數(shù)與被調(diào)函數(shù)分別定義數(shù)組,且類型應一致形參數(shù)組大小(多維數(shù)組第一維)可不指定形參數(shù)組名是地址變量一維形參數(shù)組定義的一般形式類型標識符

數(shù)組名[],intn二維維形參數(shù)組定義的一般形式類型標識符

數(shù)組名[][指定維數(shù)],intn,intm指定要處理的數(shù)組元素個數(shù)例求學生的平均成績#include<stdio.h>

floataverage(intstu[10],intn);voidmain(){intscore[10],i;floatav;printf("Input10scores:\n");for(i=0;i<10;i++)scanf("%d",&score[i]);av=average(score,10);printf("Averageis:%.2f",av);}floataverage(int

stu[],intn){inti;floatav,total=0;for(i=0;i<n;i++)total+=stu[i];av=total/n;returnav;}實參用數(shù)組名形參用數(shù)組定義,

intstu[]..2109score566372….….88stu例6.6編寫函數(shù),將數(shù)組中的n個整數(shù),按值從小到大排序voidsort(inta[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(a[j]<a[k])k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; }}}main(){intb[10],i;for(i=0;i<10;i++) scanf("%d",&b[i]);

sort(b,10);for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");}0123456789b4968573299927137688akjjjkjkjjjjj949i=0kjjkjkjjjjj0123456789b4968573299927137688a949kk1368i=1例6.6編寫函數(shù),將數(shù)組中的n個整數(shù),按值從小到大排序voidsort(inta[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(a[j]<a[k])k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; }}}main(){intb[10],i;for(i=0;i<10;i++) scanf("%d",&b[i]);

sort(b,10);for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");}0123456789b9132732495768768899ai=8例6.6編寫函數(shù),將數(shù)組中的n個整數(shù),按值從小到大排序voidsort(inta[],intn){inti,j,k,t;for(i=0;i<n-1;i++){k=i; for(j=i+1;j<n;j++) if(a[j]<a[k])k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; }}}main(){intb[10],i;for(i=0;i<10;i++) scanf("%d",&b[i]);

sort(b,10);for(i=0;i<10;i++)printf("%d",b[i]);printf("\n");}例6.12編寫函數(shù),將5×5的矩陣中的右上三角元素都設置成0(包括對角線上的元素),其余元素值不變。

#include<stdio.h>voidmain(){intt,a[5][5];inti,j;voidchange(intx[][5],intn,intm);printf("原矩陣:\n");for(i=0;i<5;i++){for(j=0;j<5;j++) {a[i][j]=1+i+j;printf("%3d",a[i][j]);}printf("\n");}change(a,5,5);//調(diào)用函數(shù)printf("\n修改后的矩陣:\n");for(i=0;i<5;i++){ for(j=0;j<5;j++) printf("%3d",a[i][j]); print

溫馨提示

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

評論

0/150

提交評論