【C語言】第6章 利用陣列處理批量資料
第6章 利用陣列處理批量資料
陣列是一組有序資料的集合。陣列中各資料的排列是有一定規律的,下標代表資料在陣列中的序號
用一個數組名和下標惟一確定陣列中的元素
陣列中的每一個元素都屬於同一個資料型別
一維陣列
定義一維陣列的一般形式為:
型別符 陣列名[常量表達式];
陣列名的命名規則和變數名相同
如 int a[10];
引用陣列元素的表示形式為:
陣列名[下標]
a[0]=a[5]+a[7]-a[2*3]
int n=5, a[10];
a[n]=20;
對10個數組元素依次賦值為0,1,2,3,4,5,6,7,8,9,要求按逆序輸出。 #include <stdio.h> int main() { int i,a[10]; for (i=0; i<=9;i++) a[i]=i; for(i=9;i>=0; i--) printf("%d ",a[i]); printf("\n"); return 0; }
一維陣列的初始化
在定義陣列的同時,給各陣列元素賦值
int a[10]={0,1,2,3,4,5,6,7,8,9};
int a[10]={0,1,2,3,4}; 相當於
int a[10]={0,1,2,3,4,0,0,0,0,0};
int a[10]={0,0,0,0,0,0,0,0,0,0}; 相當於
int a[10]={0};
int a[5]={1,2,3,4,5}; 可寫為
int a[ ]={1,2,3,4,5};
用陣列處理求Fibonacci數列問題 #include <stdio.h> int main() { int i; int f[20]={1,1}; for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0) printf(“\n”); printf(“%12d”,f[i]); } printf("\n"); return 0; }
有10個地區的面積,要求對它們按由小到大的順序排列。 int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("the sorted numbers :\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n");
二維陣列
二維陣列定義的一般形式為
型別符 陣列名[常量表達式][常量表達式];
如:float a[3][4],b[5][10];
二維陣列元素的表示形式為:
陣列名[下標][下標]
將一個二維陣列行和列的元素互換,存到另一個二維陣列中。
#include <stdio.h>
int main()
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for (i=0;i<=1;i++)
{ for (j=0;j<=2;j++)
{ printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");
for (i=0;i<=2;i++)
{ for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
return 0;
}
有一個3×4的矩陣,要求程式設計序求出其中值最大的那個元素的值,以及其所在的行號和列號。
“打擂臺演算法”
……
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}};
max=a[0][0];
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
if (a[i][j]>max)
{ max=a[i][j]; row=i; colum=j; }
printf("max=%d\nrow=%d\n
colum=%d\n",max,row,colum);
……
字元陣列
用來存放字元資料的陣列是字元陣列
字元陣列中的一個元素存放一個字元
定義字元陣列的方法與定義數值型陣列的方法類似
輸出一個已知的字串。
#include <stdio.h>
int main()
{ char c[15]={'I',' ','a','m',' ','a',
' ','s','t','u','d','e','n','t','.'};
int i;
for(i=0;i<15;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}
輸出一個菱形圖。
#include <stdio.h>
int main()
{ char diamond[][5]={{' ',' ','*'},
{' ','*',' ','*'},{'*',' ',' ',' ','*'},
{' ','*',' ','*'},{' ',' ','*'}};
int i,j;
for (i=0;i<5;i++)
{ for (j=0;j<5;j++)
printf("%c",diamond[i][j]);
printf("\n");
}
return 0;
}
為了測定字串的實際長度,C語言規定了字串結束標誌’\0’ ,’\0’代表ASCII碼為0的字元
字元陣列的輸入輸出
字元陣列的輸入輸出可以有兩種方法:
逐個字元輸入輸出(%c)
整個字串一次輸入輸出(%s)
善於使用字串處理函式
-
puts函式 –– 輸出字串的函式
其一般形式為:
puts (字元陣列)
作用是將一個字串輸出到終端
char str[20]=”China”;
puts(str);
輸出:China -
gets函式 –– 輸入字串的函式
其一般形式為:
gets (字元陣列)
作用是輸入一個字串到字元陣列
char str[20];
gets(str);
輸入:Computer↙ -
strcat函式 –– 字串連線函式
其一般形式為:
strcat (字元陣列1,字元陣列2)
其作用是把兩個字串連線起來,把字串2接到字串1的後面,結果放在字元陣列1中
使用字串函式時,在程式開頭用 #include <string.h>
char str1[30]=”People”;//要足夠大
char str2[]=”China”;
printf(”%s”, strcat(str1,str2));
輸出:PeopleChina
-
strcpy和strncpy函式 –– 字串複製
strcpy 一般形式為:
strcpy (字元陣列1,字串2)
作用是將字串2複製到字元陣列1中去
char str1[10],str2[]=”China”;
strcpy(str1,str2);
相當於
strcpy(str1,”China”);
可以用strncpy函式將字串2中前面n個字元複製到字元陣列1中去
strncpy(str1,str2,2);
作用是將str2中最前面2個字元複製到str1中,取代str1中原有的最前面2個字元
複製的字元個數n不應多於str1中原有的字元
-
strcmp函式 –– 字串比較函式
其一般形式為
strcmp(字串1,字串2)
作用是比較字串1和字串2
strcmp(str1,str2);
strcmp(”China”,”Korea”);
strcmp(str1,”Beijing”);
字串比較的規則是:將兩個字串自左至右逐個字元相比,直到出現不同的字元或遇到’\0’為止
如全部字元相同,認為兩個字串相等
若出現不相同的字元,則以第一對不相同的字元的比較結果為準
”A”<”B” ”a”>”A”
”computer”>”compare”
”these”>”that” ”1A”>”$20”
”CHINA”>”CANADA”
”DOG”<”cat”
”Tsinghua”>”TSINGHUA”
比較的結果由函式值帶回
如果字串1=字串2,則函式值為0
如果字串1>字串2,則函式值為一個正整數
如果字串1<字串2,則函式值為一個負整數
比較的結果由函式值帶回
例項
if(str1>str2) printf(”yes”); 錯誤
if(strcmp(str1,str2)>0)
printf(”yes”); 正確
-
strlen函式 –– 測字串長度的函式
其一般形式為:
strlen (字元陣列)
它是測試字串長度的函式
函式的值為字串中的實際長度char str[10]=”China”;
printf(”%d”,strlen(str));
輸出結果是5
也可以直接測試字串常量的長度
strlen(”China”); -
strlwr函式 –– 轉換為小寫的函式
其一般形式為
strlwr (字串)
函式的作用是將字串中大寫字母換成小寫字母 -
strupr函式 –– 轉換為大寫的函式
其一般形式為
strupr (字串)
函式的作用是將字串中小寫字母換成大寫字母
輸入一行字元,統計其中有多少個單詞,單詞之間用空格分隔開。
……
char string[81],c; int i,num=0,word=0;
gets(string);
for (i=0;(c=string[i])!=‘\0’;i++)
if(c==‘ ’) word=0;
else if(word==0)
{ word=1;
num++;
}
printf(“%d words\n”,num);
……
有3個字串,要求找出其中最大者。
#include<stdio.h>
#include<string.h>
int main ( )
{ char str[3][10]; char string[10]; int i;
for (i=0;i<3;i++) gets (str[i]);
if (strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if (strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("\nthe largest:\n%s\n",string);
return 0;
}