版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第六章數(shù)組1學習目標一維數(shù)組定義和使用二維數(shù)組定義和使用字符數(shù)組的定義和使用2問題的提出3例:從鍵盤上隨機輸入10個數(shù),輸出其中最大數(shù)。main(){intx,max,
n=1;scanf("%d",&x);max=x;for(n=2;n<=10;n++){scanf("%d",&x);
if(x>max)max=x;}printf("max=%d\n",max);
}問題的提出例:從鍵盤輸入10個數(shù),求平均值并輸出所有大于平均值的數(shù)。采用以前的方法解決,存在以下問題:
只用一個變量完成。計算出平均值后,因沒有保存這10個數(shù),無法完成比較。
用十個變量完成。無法完成循環(huán)輸入。另外如果數(shù)據(jù)增加到100個、1000個或更多時,定義如此多的變量不現(xiàn)實。4思考下面的問題:用100個變量存儲1~100的數(shù)。inta1,a2,a3…a100;a1=1;a2=2;a3=3;…a100=100;ai=i(1≤i≤100)方法?數(shù)組:是由若干個同類型變量組成的集合。數(shù)組元素:數(shù)組中的每個成員,又稱“帶下標的變量”一、一維數(shù)組的說明⒈數(shù)組必須先說明,然后使用。2.說明格式
數(shù)據(jù)類型數(shù)組名[整型常量表達式];一維數(shù)組合法標識符例:inta[10];
floatx[20],mark[100];[]:下標運算符不能用()單目運算符優(yōu)先級:1級左結(jié)合表示元素個數(shù),即數(shù)組長度只能包括整型常量和符號常量定義數(shù)組大小時,可以使用符號常量。
例如:#defineN100
#defineM200
inta[N];
longb[N+M+2];不能用變量定義數(shù)組元素個數(shù)。
例如:inti=15;
intdata[i];
在一個說明語句中,可以對多個數(shù)據(jù)類型相同的數(shù)組和變量進行說明。
例如:inta[10],b[5],x,y;說明數(shù)組時應注意一維數(shù)組元素的引用引用格式:數(shù)組名[下標表達式]整型表達式下標:從0開始,依次加1,最后一個下標應
該是定義數(shù)組時的整型常量表達式-1。
如:inta[10];說明數(shù)組a一共有10個元素。
即
a[0]、a[1]、a[2]、…、a[9]。C語言規(guī)定只能逐個引用數(shù)組元素而不能一次
引用整個數(shù)組。
數(shù)組元素在內(nèi)存里順序存放一維數(shù)組inta[10]數(shù)組在內(nèi)存的存放a[0]a[1]a[2]a[3]...a[9]86927752...942000H2004H2008H2012H...2036H每個數(shù)據(jù)元素占用的字節(jié)數(shù),就是基類型的字節(jié)數(shù)數(shù)組元素的性質(zhì),與該類型的變量相同。數(shù)組名是數(shù)組的首地址,是一個地址常量,不能給數(shù)組名賦值。
數(shù)組名和數(shù)組元素a[0]a[1]a[2]a[3]...a[9]86927752...942000H2004H2008H2012H...2036H數(shù)組元素的輸入輸出
inti,a[6];scanf(“%d%d%d%d%d%d”,&a[0],&a[1],&a[2],&a[3],&a[4],&a[5]);for(i=
0;i<6;i+
+)scanf(“%d”,&a[i]);printf(“%d,%d,%d,%d,%d,%d”,a[0],a[1],a[2],a[3],a[4],a[5]);for(i=0;i<6;i++) printf(“%5d”,a[i]);只想輸出a[1],a[3],a[5]的值printf(“%d,%d,%d”,a[1],a[3],a[5]);
for(i=
1;i<
=5;i+=2) printf(“%5d”,a[i]);例:從鍵盤輸入10個數(shù),求平均值并輸出所有大于平均值的數(shù)main(){inta[10],i,max,sum=0;floataver;for(i=0;i<=9;i++)scanf("%d",&a[i]);max=a[0];sum=a[0];for(i=1;i<=9;i++){sum+=a[i];if(a[i]>max)max=a[i];}aver=sum/10.0;printf("average=%.2f,max=%d\n",aver,max);for(i=0;i<=9;i++)if(a[i]>aver)printf("%d,",a[i]);}inta1,a2,a3,…,a100;a1=1;a2=2;a3=3;…a100=100;ai=i(1≤i≤100)inta[100],i;for(i=0;i<100;i++)a[i]=i+1;例:讀程序,寫結(jié)果
main(){inti,a[10];for(i=
0;i<=9;i+
+)a[i]=i;for(i=
9;i>=
0;i-
-) printf(“%d”,a[i]);}運行結(jié)果為:9876543210為全部數(shù)組元素賦初值inta[5]={1,2,3,4,5};
可省略數(shù)組長度。inta[]={1,2,3,4,5};數(shù)據(jù)個數(shù)少于元素個數(shù),系統(tǒng)為其余元素賦0。
如inta[5]={1,2,3};一維數(shù)組的初始化
定義數(shù)組的同時,對所有的數(shù)組元素變量賦初值。
初始化方式如下:數(shù)據(jù)類型數(shù)組名[整型常量表達式]={初值表};
例如:inta[5]={1,2,3,4,5}數(shù)據(jù)個數(shù)多于元素個數(shù)是錯誤的。
inta[3]={6,2,3,5,1};
全部數(shù)組元素賦值為0
inta[5]={0};給定的數(shù)據(jù)位置必須連續(xù)。
inta[5]={1,,3,,5};
#defineSIZE10main(){inta[SIZE],i,max,min;for(i=0;i<SIZE;i++)scanf("%d",&a[i]);
max=min=a[0];for(i=1;i<SIZE;i++){if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];}printf("max=%d,min=%d\n",max,min);}例.輸入10個整數(shù),輸出其最大值、最小值。步驟:1.輸入:用for循環(huán)輸入10個整數(shù)賦給數(shù)組a.2.處理:(a)先令max=min=a[0](b)依次用a[i]和max,min比較(循環(huán))若max<a[i],令max=a[i]
若min>a[i],令min=a[i]3.輸出:max和min一維數(shù)組程序設計實例例:從鍵盤上輸入一個數(shù)x,在數(shù)組a中查找x。如果找到了,輸出相應的下標,否則,輸出“NotFound”。main(){
inti,flag,x; inta[10]={22,19,36,80,98,12,20,55,-8,16}; for(i=0;i<10;i++)
printf("%d",a[i]); printf("Enterx:\n"); scanf("%d",&x);
flag=0; for(i=0;i<10;i++) if(a[i]==x) {
printf("Indexis%d\n",i);
flag=1;
break;}
if(flag==0) printf(“NotFound\n”);
}例:輸出大于平均值的數(shù)19main(){inti,n=0;floata[10],avg=0;printf("請輸入10個數(shù):\n");for(i=0;i<10;i++){scanf("%f",&a[i]);avg+=a[i];}avg=avg/10;printf("平均值為:%f\n",avg);for(i=0;i<10;i++)if(a[i]>avg){printf("%f",a[i]);n++;if(n%5==0)printf("\n");}printf("\n");}這是一個古典數(shù)學問題,有一對兔子,從出生后的第三個月開始,每個月都生一對小兔子。小兔子長到第三個月后每個月又生一對兔子。假設所有兔子都不死,問每個月的兔子總數(shù)為多少?例:輸出fibonacci數(shù)列的前20項,要求每行顯示5項。112358……例:輸出fibonacci數(shù)列的前20項,要求每行顯示5項。1100000000.........intf[20];f[0]f[1]f[2].............f[18]f[19]235813213455f[0]=1
i=0
f[1]=1
i=1
f[i]=f[i-1]+f[i-2]
i>=2112358……
main(){inti;
intf[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
/*輸出數(shù)據(jù),每行5項*/11235813213455891442333776109871597258441816765
for(i=0;i<20;i++)
{if(i%5==0)printf("\n"); printf("%8d",f[i]); } }a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a[10]a[11]a[12]a[13]a[14]a[15]a[16]a[17]a[18]a[19]例:讀入10個學生的成績,求其平均成績。main(){inta[10],k,sum=0;
printf(“請輸入10個成績:\n”);for(k=0;k<10;k++)
scanf(“%d”,&a[k]);
for(k=0;k<10;k++)
sum=sum+a[k];
printf(“平均值是:%f\n”,sum/10.0);}例:讀入10個整數(shù)存入數(shù)組,將數(shù)組中的元素逆序重新存放
for(i=0,j=9;i<j;i++,j--){t=a[i];a[i]=a[j];a[j]=t;}ijmain(){inti,j,a[10],t;printf(“請輸入10個整數(shù):\n”);for(i=0;
i<=9;
i++)
scanf(“%d”,&a[i]);for(i=0,j=9;
i<j;
i++,j--){t=a[i];a[i]=a[j];a[j]=t;}printf(“重新排放后的10個整數(shù)為:\n”);for(i=0;i<=9;i++)printf(“%d,”,a[i]);}例:讀入10個整數(shù)存入數(shù)組,將數(shù)組中的元素逆序重新存放
for(i=0;i<5;i++){t=a[i];a[i]=a[9-i];a[9-i]=t;}main(){inti,j,a[10],t;printf(“請輸入10個整數(shù):\n”);for(i=0;i<=9;i++)
scanf(“%d”,&a[i]);
for(i=0;i<5;i++){t=a[i];a[i]=a[9-i];a[9-i]=t;}printf(“重新排放后的10個整數(shù)為:\n”);for(i=0;i<=9;i++)
printf(“%d,”,a[i]);printf(“\n”);
}例:已知十個整數(shù)升序排列,現(xiàn)輸入整數(shù)x,
要求將x插入到合適的位置,使得數(shù)列依然升序main(){
inta[11]={1,
4,7,
9,
12,
15,
17,
20,
21,
30},
x,
i,
p;
scanf("%d",&x);
for(i=0;i<10;i++)
if(x<a[i]){p=i;
break;}/*如x=3p=1*/
for(i=10;i>=p+1;i--)
a[i]=a[i-1];
a[p]=x;for(i=0;i<11;i++)printf("%5d",a[i]);}例:將n個數(shù)中最大值找到并放在最后。兩數(shù)相比,大數(shù)排后main(){inta[8]={49,38,65,97,76,13,27,30},i,n=8,t;for(i=0;i<n-1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}}排序過程:(1)將最大的數(shù)安置在數(shù)組中最后的位置上。(2)將次大的數(shù)安置在數(shù)組中倒數(shù)第2的位置上。(3)重復上述過程,共經(jīng)過n-1趟冒泡排序后,排序結(jié)束。例:用冒泡法對8個數(shù)從小到大排序數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)第2趟排序結(jié)果:3849651327307697(i=2)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)第2趟排序結(jié)果:3849651327307697(i=2)第3趟排序結(jié)果:3849132730657697(i=3)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)第2趟排序結(jié)果:3849651327307697(i=2)第3趟排序結(jié)果:3849132730657697(i=3)第4趟排序結(jié)果:3813273049657697
(i=4)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)第2趟排序結(jié)果:3849651327307697(i=2)第3趟排序結(jié)果:3849132730657697(i=3)第4趟排序結(jié)果:3813273049657697
(i=4)第5趟排序結(jié)果:1327303849657697(i=5)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[61]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)第2趟排序結(jié)果:3849651327307697(i=2)第3趟排序結(jié)果:3849132730657697(i=3)第4趟排序結(jié)果:3813273049657697
(i=4)第5趟排序結(jié)果:1327303849657697(i=5)第6趟排序結(jié)果:1327303849657697(i=6)數(shù)組元素a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]初始值:4938659776132730(n=8)第1趟排序結(jié)果:3849657613273097(i=1)第2趟排序結(jié)果:3849651327307697(i=2)第3趟排序結(jié)果:3849132730657697(i=3)第4趟排序結(jié)果:3813273049657697
(i=4)第5趟排序結(jié)果:1327303849657697(i=5)第6趟排序結(jié)果:1327303849657697(i=6)第7趟排序結(jié)果:1327303849657697(i=7)main(){inta[8],i,j,t,n=8;for(i=0;i<n;i++)scanf("%d",&a[i]);
例:用冒泡法對8個數(shù)排序for(i=0;i<;i++)
if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}for(j=1;j<=n-1;j++)/*進行n-1趟比較*/for(i=0;i<n;i++)printf("%8d",a[i]);}n-jmain(){inta[8],i,j,t,n=8;for(i=0;i<n;i++)scanf("%d",&a[i]);
例:用冒泡法對8個數(shù)排序for(i=0;i<;i++)
if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}for(j=1;j<=n-1;j++)/*進行n-1趟比較*/for(i=0;i<n;i++)printf("%8d",a[i]);}n-j33選擇法排序例:輸入一個正整數(shù)n(1<n≤10),再輸入n個整數(shù),用選擇法將它們從小到大排序后輸出。題目分析:選擇法排序的核心思想:將n個數(shù)據(jù)進行n-1次循環(huán)選擇每次循環(huán)都在參與選擇的數(shù)據(jù)中選擇出最小的數(shù)據(jù),并將它與本次參與選擇的第一個數(shù)據(jù)進行互換然后再在剩下的數(shù)據(jù)中進行下一次循環(huán)選擇34選擇法排序選擇排序的算法步驟:
step1:在未排序的n個數(shù)(a[0]~a[n-1])中找到最小的元素,將它與a[0]交換;
step2:在剩下未排序的n-1個數(shù)(a[1]~a[n-1])中找到最小的元素,將它與a[1]交換;……
stepn-1:在剩下未排序的2個數(shù)(a[n-2]~a[n-1])中找到最小的元素,將它與a[n-2]交換;35#include<stdio.h>main(){ inti,index,k,n,temp;
inta[10];
printf("Entern:\n");
scanf("%d",&n);printf("Enter%dintegers:\n",n); for(i=0;i<n;i++) scanf("%d",&a[i]);for(k=0;k<n-1;k++){
index=k; for(i=k+1;i<n;i++) if(a[i]<a[index])
index=i;/*index是最小數(shù)的下標*/ temp=a[index]; a[index]=a[k]; a[k]=temp;}printf("aftersorted:\n");for(i=0;i<n;i++) printf("%d",a[i]);printf("\n");}一維數(shù)組程序設計常見的編程錯誤(1)在定義數(shù)組的時候把數(shù)組的個數(shù)聲明為變量;例如:intn,a[n];這種編程錯誤編譯器會提示錯誤;(2)在讀入數(shù)組某個元素的時候,忘記加上取地址符&;例如:scanf("%d",a[i])這種錯誤將導致運行錯誤;(3)引用數(shù)組的時候出現(xiàn)下標出界的問題;
36在數(shù)學中我們常常會用到矩陣,它的結(jié)構(gòu)如下:思考問題:怎樣用一種數(shù)據(jù)結(jié)構(gòu)來表示矩陣呢?二維數(shù)組行數(shù)列數(shù)元素個數(shù)=行數(shù)*列數(shù)floata[3][4],b[5][10]; 2346789101112一、二維數(shù)組的定義
類型說明符數(shù)組名[常量表達式][常量表達式]二、二維數(shù)組元素的引用
引用形式為:數(shù)組名[行下標][列下標]所在列下標從0開始所在行下標從0開始下標應是整型的。應注意不要越界。例:inta[3][4];2346789101112三、數(shù)組元素的存放順序內(nèi)存是一維的二維數(shù)組:按行序優(yōu)先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]例inta[3][4];20161720181920202120222320089201011201213201415200012002320045200067a[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]每個一維數(shù)組中包含4個數(shù)組元素二維數(shù)組a是由3個一維數(shù)組組成的a[0]a[1]a[2]行名四、二維數(shù)組理解0a[0][0]1a[0][1]2a[0][2]3a[0][3]4a[1][0]5a[1][1]6a[1][2]7a[1][3]8a[2][0]9a[2][1]10a[2][2]11a[2][3]a[0]a[1]a[2]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
線性初始化:按元素在內(nèi)存中的存儲順序賦初值。數(shù)據(jù)類型數(shù)組名[常量表達式][常量表達式]={初值表};五、二維數(shù)組的初始化inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
初始化后結(jié)果:123456789101112部分元素賦初值:系統(tǒng)自動將沒賦值的元素賦值為0
如:inta[3][4]={
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
初始化后結(jié)果:123456789000⒈線性初始化:按元素在內(nèi)存中的存儲順序賦初值。
數(shù)據(jù)類型數(shù)組名[常量表達式][常量表達式]={初值表};
2.
分行初始化:分行給二維數(shù)組元素賦初值。
inta[3][4]={{1,2,3,4}
,
{5,6,7,8}
,
{9,10,11,12}};
初始化后結(jié)果:123456789101112部分元素賦初值:系統(tǒng)自動將沒賦值的元素賦值為0
inta[3][4]={{1},{4},
{8}};相當于
inta[3][4]={{1,0,0,0}
,
{4,0,0,0}
,
{8,0,0,0}};
inta[3][4]={{1},{5}}
inta[3][4]={{1},{},{9}};3.如對全部元素賦初值或分行賦值時,定義數(shù)組時
第一維的長度可以不指定。
inta[3][3]={1,0,3,4,0,0,0,8,0}
inta[][3]={1,0,3,4,0,0,0,8,0}inta[][3]={{1,0,3},{4},{0,8}}
for(i=0;i<3;i++)
for(j=0;j<4;j++)scanf("%d",&a[i][j]);二維數(shù)組元素的輸入輸出for(i=0;i<3;i++)for(j=0;j<4;j++)printf("%4d",a[i][j]);inta[3][4];printf("\n");2346789101112{}#include<stdio.h>main(){inti,j,a[][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)for(j=i+1;j<3;j++)a[j][i]=0;for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d",a[i][j]);printf("\n");}}讀程序,寫結(jié)果。
main(){inta[3][4],i,j,sum=0;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){for(j=0;j<4;j++)sum+=a[i][j];
printf("%5d",sum);
sum=0; }}數(shù)組a例:讀入一個3行4列的整數(shù)矩陣,求每一行的
和并輸出結(jié)果。存在問題嗎?例:讀入一個3行4列的整數(shù)矩陣,求每一行的
和并輸出結(jié)果。數(shù)組a數(shù)組bb[0]b[1]b[2]main(){inta[3][4],i,j,b[3]={0};for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);
for(i=0;i<3;i++){for(j=0;j<4;j++)b[i]+=a[i][j];}for(i=0;i<3;i++)
printf("%5d",b[i]);}數(shù)組a數(shù)組bb[0]b[1]b[2]例.有一個2×3的矩陣,求每行及每列的和。b數(shù)組c數(shù)組39-50-2259-48a
數(shù)組12324-3456-723324245656-72-72-34-345656-72-72
for(j=0;j<3;j++){for(i=0;i<2;i++)c[j]=c[j]+a[i][j];}main(){inta[2][3],b[2]={0
},c[3]={0},i,j;
for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);
for(i=0;i<2;i++){for(j=0;j<3;j++)b[i]=b[i]+a[i][j];}b數(shù)組c數(shù)組39-50-2259-48a數(shù)組12324-3456-723324245656-72-72-34-345656-72-72for(i=0;i<2;i++){for(j=0;j<3;j++)printf("%5d",a[i][j]);printf("%5d\n",b[i]);}for(i=0;i<3;i++)printf("%5d",c[i]);printf("\n");
}main(){inta[6][6]={0},i,j;for(i=0;i<6;i++){
}
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%4d",a[i][j]);
}楊輝三角形11110110011000110000111112113311464115101051main(){inta[6][6]={0},i,j;for(i=0;i<6;i++){a[i][0]=1;a[i][i]=1;}for(i=2;i<6;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<6;i++){for(j=0;j<=i;j++) printf("%4d",a[i][j]);printf("\n");}}楊輝三角形11110110011000110000111112113311464115101051五子棋可能落點列坐標YJ12345678
12345678I=12345678J=12345678X12345678Y=12345678
0
00
0
000
0
0
0
B
W
W
B
0
0
W
B
W
W
B
B
0
0
0
0
W
B
B
W
0
0
0
0
B
W
0
0
0
0
0
00
0
000
0
0
00
0
000
0
0
00
0
000
0(1)說明數(shù)組的同時進行初始化
缺點:數(shù)據(jù)相對固定。(2)用scanf語句由用戶輸入
inta[2][3];for(i=0;i<2;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]);缺點:當數(shù)組規(guī)模較大時,需要讀入的數(shù)據(jù)會很多。
例:在程序中使數(shù)組元素獲得值的方法(3)利用循環(huán)變量為數(shù)組賦值
當二維數(shù)組中的值有規(guī)律,就可以通過循環(huán)為二維數(shù)組進行賦值。例如:
1234
5678
9101112
13141516
程序段如下:
k=1;for(i=0;i<4;i++)for(j=0;j<4;j++)
a[i][j]=k++;
59例:在一個二維數(shù)組中,找出最大的元素值以及最大元素的行下標和列下標,并輸出該數(shù)組。
main(){
intcol,i,j,row;inta[3][2];printf("Enter6integers:\n");for(i=0;i<3;i++)for(j=0;j<2;j++)scanf("%d",&a[i][j]);
for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%4d",a[i][j]);printf("\n");} row=0;col=0;for(i=0;i<3;i++)for(j=0;j<2;j++)if(
a[i][j]>a[row][col]
)
{row=i;
col=j;}printf("max=a[%d][%d]=%d\n",row,col,a[row][col]);
}60術語含義下標規(guī)律主對角線從矩陣的左上角至右下角的連線i=j上三角主對角線以上的部分i≤j下三角主對角線一下的部分i≥j矩陣的術語與二維數(shù)組下標的對應關系61例:求N×N階二維數(shù)組的主對角線元素之和。為主對角線元素為
a[0][0]、a[1][1]、a[2][2]…,所以可以表示為a[i][i]。
for(
i=0
;
i<n
;
i++)
sum=sum+a[i][i];該程序段也可以用如下形式實現(xiàn):
for(i=0;i<n;i++)for(j=0;j<n;j++)if(i==j)
sum=sum+a[i][j];121110020100aaaaaa211101201000bbbbbb======例.初始化一個23的矩陣,將其轉(zhuǎn)置后形成
32的矩陣后重新輸出。b[i][j]=a[j][i]main(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;for(i=0;i<3;i++)for(j=0;j<2;j++)
b[i][j]=a[j][i];for(i=0;i<3;i++){for(j=0;j<2;j++)printf(“%5d”,b[i][j])
;printf("\n");
}}多維數(shù)組0b[0][0][0]1b[0][0][1]2b[0][0][2]3b[0][0][3]4b[0][1][0]5b[0][1][1]6b[0][1][2]7b[0][1][3]…b[0][2][0]…b[0][2][1]…b[0][2][2]…b[0][2][3]…b[1][0][0]…b[1][0][1]…b[1][0][2]…b[1][0][3]…b[1][1][0]…b[1][1][1]…b[1][1][2]…b[1][1][3]20b[1][2][0]21b[1][2][1]22b[1][2][2]23b[1][2][3]例如:intc[100][100][100]
,
b[2][3][4]三維數(shù)組的存儲一、字符數(shù)組的定義
char
字符數(shù)組名[整型常量表達式]
例:char
c[5];字符數(shù)組與字符串'C''h''i'
'n'
'a'c[0]c[1]c[2]c[3]c[4]二、字符數(shù)組的引用
對字符數(shù)組的逐個字符引用,與引用數(shù)值數(shù)組元素相同。數(shù)組中的每一個數(shù)組元素對應了字符序列中的一個字符。例如:char
c[5];
下面的操作是正確的:c[0]=’c’;c[1]=’h’;c[2]=’i’;c[3]=’n’;
c[4]=’a’;三、字符數(shù)組的初始化
逐個字符方式
charstr[5]={'C','h','i','n','a'}; 等價于:
charstr[5]={67,104,105,110,97};charstr[7]={'C','h','i','n','a'};Chin
a\0\0若字符個數(shù)<字符數(shù)組長度,其余元素自動賦‘\0’Chin
a‘\0’ASCII碼為零⒈逐個數(shù)組元素輸入輸出
charc[15];
for(i=0;i<15;i++)
scanf(
“%c”
,&c[i]);
||
c[i]=getchar();
現(xiàn)輸入:Iamateacher.↙
for(i=0;i<15;i++)
printf(“%c”,c[i]);
||
putchar(c[i]);四、字符數(shù)組的輸入輸出main(){charc[10]={‘I’,‘’,‘a(chǎn)’,’m’,‘’,’a’,‘’,’b’,’o’,’y’};inti;for(i=0
;
i<10
;
i++)
printf(“%c”,
c[i]);
printf(“\n”);}例:輸出字符序列。運行結(jié)果:
Iamaboy
C語言沒有字符串變量,用字符數(shù)組代替。
C語言中,字符串是以串尾標志字符‘\0’結(jié)束
的,該字符也用NULL表示,稱它為空字符,
其ASCII碼為0。用char型數(shù)組處理C字符串時,數(shù)組元素的個
數(shù)必須比C字符串的長度多1。字符串常量是用雙引號括起來的一串字符C語言的字符串特點charstr[8]=“China”;Chin
a\0Chin
a\0\0\0字符串方式初始化charstr[6]={“China”};
charstr[6]=“China”;charstr[]=“China”;若字符串長度<字符數(shù)組長度,其余元素自動賦‘\0’
charc[]=“Iamhappy”;
Iamhappy\0charc[10]="Iamhappy"
Iamhappycharc[8]="Iamhappy"
charch[8]=“student”;printf(“%s”,ch);
China\0數(shù)組名
輸出結(jié)果:China用“%s”格式輸出字符數(shù)組時,遇‘\0’結(jié)束
例:charc[11]={“China”};printf(“%s”,c);字符串方式輸出“%s”格式main(){chara[]={'h','e','l','l','\0','o','!','\0'};printf("%s",a);}例:下面的程序輸出的結(jié)果是多少?輸出:hell數(shù)組中有多個‘\0’時,遇第一個結(jié)束hell\0o!\0main(){inti;chara[]={'h','e','l','l','\0',‘o','!','\0'};
for(i=0;i<8;i++)printf(
“%c”,
a[i]
);}例:下面的程序輸出的結(jié)果是多少?輸出:hello!hell\0o!\0charch[11];
scanf("%s",ch);
數(shù)組名scanf函數(shù)(“%s”),后面跟數(shù)組名,且不帶
“&”符號,數(shù)組名指向該數(shù)組的起始地址。
系統(tǒng)自動在輸入的字符串后加上‘\0’.如:輸入student↙
student\0字符串方式輸入“%s”格式
I\0一個scanf函數(shù)輸入多個字符串(用%s)時,
以空格、Tab或回車作為字符串的分隔符。
charname[8],sex[6],birthday[10];scanf(“%s%s%s”,name,sex,birthday);
現(xiàn)輸入:Joanfemale1990/10/21
↙
scanf函數(shù)無法輸入空格.
例:charc[11];scanf("%s",c);
輸入
Iamhappy.
↙
字符數(shù)組的兩種操作方式初始化charc[6]={‘a(chǎn)’,’b’,’\0’,’c’,’d’}charc[6]=“ab\0cd”;輸入for(i=0;i<6;i++)scanf(“%c”,&c[i]);//必須輸入所有字符scanf(“%s”,c);//可輸入任意個字符,不能輸入空格輸出for(i=0;i<6;i++)printf(“%c”,c[i]);//輸出所有字符printf(“%s”,c);//遇到\0就結(jié)束例:求字符數(shù)組的實際長度。
(第一個‘\0’前面的字符個數(shù))。\0DCBAs1main(){inti,len=0;chars1[10];scanf(“%s”,
s1);for(i=0
;
i<10
;
i++)
if(
s1[i]!=‘\0’
)len++;
elsebreak;printf(“%d”
,
len);}i=0;while(s1[i]!='\0')
i++;字符串輸入輸出函數(shù):包含文件是stdio.h字符串處理函數(shù):包含文件是string.h
字符串處理函數(shù)
puts(字符數(shù)組名)功能:將以‘\0’結(jié)束的字符序列輸出到終端,
輸出的字符串中可以包含轉(zhuǎn)義字符。
例:
charstr[20]=“China\nBeijing”;puts(str);
輸出:China
Beijing
字符數(shù)組的輸出方法
數(shù)組元素輸出:putchar(str[i]),
printf(“%c”,
str[i])
數(shù)組整體輸出:printf(“%s”
,
str),puts(str)gets(字符數(shù)組名)
功能:從終端輸入一個字符串到字符數(shù)組。
例:charstr[20];
gets(str);Iamateacher.↙
注意:輸入時,字符串以回車作為結(jié)束;
在置入內(nèi)存時,回車自動變換為代碼’\0’
gets函數(shù)輸入的字符串中允許有空格。
字符數(shù)組的輸入方法
數(shù)組元素輸入:str[i]=getchar(),
scanf(“%c”,&str[i])
數(shù)組整體輸入:scanf(“%s”,str),
gets(str)例.已知兩個字符串,要求將第二個字符串連接到第一個字符串后面。#include"stdio.h"main(){chars1[80],s2[80];inti=0,
j=0;
gets(s1);
gets(s2);
while(s1[i]!='\0')
i++;
/*求s1中的有效字符個數(shù)*/
while(s2[j]!='\0')/*將s2接到s1后*/
{
s1[i]=s2[j];
i++;
j++;
}
s1[i]='\0';
puts(s1);
}\0DCBA\0GFEs1s2\0GFEDCBAs184(1)在定義字符串數(shù)組長度的時候,沒有把空字符'\0'算進去,例如chara[5]="hello",這樣字符數(shù)組a中存儲的就不是一個字符串而是五個字符;(2)在輸入一個字符串數(shù)組的時候,還在其數(shù)組名上加取地址符&,例如char類型字符串數(shù)組a,
scanf(“%s”,&a);(3)在輸出字符串的時候,字符串的格式不正確,造成輸出不正確,例如,str為一個字符串,輸出時的語句為printf("%c",str);常見編程錯誤:功能:將字符串2拷貝到數(shù)組1中去。
例:charstr1[80]=“ABCDE”;
charstr2[]=“UVWXYZ”;strcpy(str1,str2);printf(“%s”,str1);輸出:UVWXYZ
例:strcpy(str
,
“China”);
注意:不能使用賦值語句將一個字符串常量
或字符數(shù)組直接賦給一個字符數(shù)組。str=“china”;
╳str1=str2;╳strcpy(字符數(shù)組1,字符串2)功能:
比較字符串1和字符串2
字符串1==字符串2,函數(shù)值為0字符串1>字符串2,函數(shù)值為一正整數(shù) 字符串1<字符串2,函數(shù)值為一負整數(shù)
例:strcmp(str1,str2);strcmp(“zhang”,“zheng”);strcmp(str1,“Beijing”);strcmp(字符串1,字符串2)注意:字符串比較
if(str1==str2)printf(“YES”);if(strcmp(str1,str2)==0)printf(“YES”);
字符串連接函數(shù)strcat格式:strcat(字符數(shù)組1,字符串2)功能:把字符串2連到字符數(shù)組1后面返值:返回字符數(shù)組1的首地址說明:
字符數(shù)組1必須足夠大
連接前,兩串均以‘\0’結(jié)束;
連接后,串1的‘\0’取消,新串最后加‘\0’charstr1[10]=“How”charstr2[5]=“are”;strcat(str1,str2);\0woH\0erastr1str2\0erawoHstr1功能:測試字符串長度的函數(shù),函數(shù)的值為字符
串的實際長度,不包括‘\0’在內(nèi)。
charstr[10]=“hello”;printf(“%d”,strlen(str));strlen(字符數(shù)組)strlwr(字符串)功能:將字符串中大寫字母換成小寫字母。strupr(字符串)功能:將字符串中小寫字母換成大寫字母。91小結(jié)1.一維數(shù)組(1)定義一維數(shù)組的方式為:類型名數(shù)組名[數(shù)組長度];(2)數(shù)組元素的引用需要指定下標,它的表示形式為:數(shù)組名[下標];
92小結(jié)(3)一維數(shù)組的初始化在定義數(shù)組時對數(shù)組元素賦予初值。例如:inta[10]={1,2,3,4,5,6,7,8,9,10};可以只給一部分元素賦值。例如:inta[10]={1,2,3,4};將一個數(shù)組中全部元素都初始化為0。例如:inta[10]={0,0,0,0,0,0,0,0,0,0};
inta[10]={0};在對全部數(shù)組元素賦初值時,由于數(shù)據(jù)的個數(shù)已經(jīng)確定,因此可以不指定數(shù)組長度。例如:inta[]={1,2,3,4,5,6,7,8,9,10};93小結(jié)2.二維數(shù)組(1)二維數(shù)組的定義形式為:數(shù)組類型名數(shù)組名[行數(shù)][列數(shù)];(2)二維數(shù)組元素的引用形式為:數(shù)組名[行下標][列下標];
94小結(jié)(3)二維數(shù)組的初始化分行給二維數(shù)組賦初值。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};按存儲順序連續(xù)賦初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
實驗中出現(xiàn)的問題96第七次上機(1)一維數(shù)組的下標例如:inta[20]下標是0-19變量是a[0]a[19](2)一維數(shù)組的循環(huán)變量不用float(循環(huán)變量是與下標對映的)(3)程序的邊界問題要求用數(shù)組打印出Fibonacci數(shù)列的前20項,要求每行顯示5項。
#include<s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年廣西經(jīng)貿(mào)職業(yè)技術學院單招職業(yè)技能測試題庫帶答案解析
- 2025年懷寧縣招教考試備考題庫及答案解析(必刷)
- 小升初數(shù)學知識
- 2025年中國記協(xié)職工新聞學院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 服裝公司生產(chǎn)管理規(guī)范制度
- 化工公司招聘配置實施方案
- 2024年輪臺縣招教考試備考題庫帶答案解析(奪冠)
- 2024年環(huán)縣幼兒園教師招教考試備考題庫含答案解析(奪冠)
- 2025年寬城滿族自治縣幼兒園教師招教考試備考題庫附答案解析
- 2024年漾濞縣招教考試備考題庫帶答案解析(必刷)
- 刑事訴訟法學全套課件
- DBJ51-T 040-2021 四川省工程建設項目招標代理操作規(guī)程
- 青鳥消防JBF62E-T1型測溫式電氣火災監(jiān)控探測器使用說明書
- 武漢市江岸區(qū)2022-2023學年七年級上學期期末地理試題【帶答案】
- 自動駕駛系統(tǒng)關鍵技術
- 完整工資表模板(帶公式)
- 奇瑞汽車QC小組成果匯報材料
- 英語四級詞匯表
- 社區(qū)春節(jié)活動方案
- CTT2000LM用戶手冊(維護分冊)
- 川2020J146-TJ 建筑用輕質(zhì)隔墻條板構(gòu)造圖集
評論
0/150
提交評論