5_1 數組的概念數組
注:(1)在定義數組時,數組的元素個數(又稱數組長度)必須是肯定的,即只能是整型常量表達式。函數
(2)完成數組的定義,引用元素時,下標從0開始計數。code
5_2 一維數組排序
2.1 一維數組的定義字符串
2.2 一維數組的使用get
1. 兩種方法初始化字符串處理
(1)在定義數組時同時初始化數組元素string
注:①能夠只部分元素初始化io
②只能給元素逐個賦值,不能總體賦值。class
(2)先定義,再初始化:採用循環結構如:
#include<stdio.h> int main() { int i,score[10]; for (i=0;i<10;i++) { scanf("%d",&score[i]);/*也能夠是對元素直接賦值如:score[i]=i+2;*/ } return 0; }
2.C語言中只能逐個地引用數組元素,而不能對數組進行總體引用。如:
for (i=0;i<50;i++) printf("%d",score[i]);/*而不是printf("%d",score);*/
3.刪除數組元素
簡要分析:功能實現 ①查找定位 ②移動
#include<stdio.h> #define N 10 int main() { int a[N]={1,2,3,4,5,6,7,8,9,10},x,i,k,flag=0; printf("原數組值:"); for(i=0;i<N;i++) printf("%4d",a[i]); printf("輸入要刪除的元素值:"); scanf("%d",&x); for(i=0;i<N;i++) if (a[i]==x) {k=i;flag=1;break;} if (flag==0) printf("不存在爲%d的元素值!\n",x); else { if (k==N-1) a[N-1]=0; else { for (i=k;i<N-1;i++) a[i]=a[i+1]; a[i]=0; } printf("\n刪除元素%d後的數組值:",x); for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); } return 0; }
2.一維數組的排序
【5-4】輸入N個整數,將其按升序排列
①冒泡排序法:
#include<stdio.h> #define N 5 int main() { int a[N],t,i,j; printf("請輸入%d個數:",N); for (i=0;i<N;i++) scanf("%d",&a[i]); for (i=0;i<N-1;i++) for (j=0;j<N-i-1;j++) if (a[j]>a[i]) { t=a[j];a[j]=a[j+1];a[j+1]=t; } printf("升序排列結果以下:\n"); for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); return 0; }
②選擇排序法:
#include<stdio.h> #define N 5 int main() { int a[N],t,i,j,k; printf("請輸入%d個數:",N); for (i=0;i<N;i++) scanf("%d",&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("升序排列結果以下:\n"); for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); return 0; }
2.3.數組中遞推的應用
【5-5】利用一維數組,輸出斐波拉契數列:1,1,2,3,5,8,13,21,34,55,89……
#include<stdio.h> #define N 20 int main() { int a[N]={1,1},i; for (i=2;i<N;i++) a[i]=a[i-1]+a[i-2]; for(i=0;i<N;i++) { printf("%d\t",a[i]); if((i+1)%5==0) printf("\n"); } return 0; }
5_3 二維數組
_3-1.二維組的定義
_3-2.二維數組的使用
1.二維數組的初始化
2.二維數組元素的引用
3.二維數組的應用舉例
5_4 字符數組
_4-1 字符數組的定義
_4-2 字符數組和字符串
_4-3 字符數組的初始化
①逐一賦值:char str[10]={C',' ','p','r','o','g','r','a','m'};
②字符串賦給指定的數組:char str[10]={"C progaram"}
_4-4. 字符數組的輸入輸出
1. 用格式符「%c」逐個輸入輸出數組中的字符
【例5-8】逐個輸入/輸出數組中的字符
#include<stdio.h> #include<stdio.h> int main() { char c[10]; int i; printf("請輸入10個字符:"); for(i=0;i<10;i++) scanf("%c",&c[i]); printf("您輸入的10個字符爲:"); for (i=0;i<10;i++); printf("%c",c[i]); printf("\n"); return 0; }
2. 用格式符「%s」將整個字符串一次輸出,遇到‘\0’中止輸出(中止後不會自動換行)。
(1)【例5-9】
#include<stdio.h> int main() { char c[]="Program"; printf("%s\n",c); c[4]='\0'; printf("%s\n",c); return 0; }
注:數組下標從0開始計數,因此c[4]是第五個數即‘\0’,結束。
(2)用「%s」輸出字符時,printf 函數中的輸出項爲元素的地址如:
char c[]="Program"; printf("%s",&c[1]); /*結果爲:rogram*/
(3) 可用scanf輸入一個字符串,系統默認以空格做爲一個串的輸出結束標誌如:
char c[20]; scanf("%s",c); printf("%s",c);
鍵盤輸入:you are a student.
結果爲:you
注:若是要輸入的字符串中原本就有空格字符,則不能使用格式控制符「%」將整個字符串輸入。此時,一般可採用格式符「%c」逐個輸入數組中的字符或字符串處理函數gets來接收字符串。
_4-5 經常使用的字符串處理函數
頭文件stdio.h 包含:輸入、輸出、合併、修改、比較、轉換、複製、搜索等幾類。
而其餘字符串函數應包含頭文件「string.h」
1.字符串輸出函數puts
2.字符串輸入函數gets
#include<stdio.h> int main() { char str [15]; printf("請輸入一個字符串:"); gets (str) puts("您輸入的字符串以下:"); puts (str); return 0; }
①當輸入的字符串中含有空格時,輸出仍爲所有字符串。使用gets函數接受字符串時,只以回車做爲結束標 志。這是與scanf函數不一樣的。
②使用puts函數輸出字符串時,其參數能夠是字符數組名,也能夠是字符串常量。
③puts函數徹底能夠由printf函數取代,當須要按比較靈活的格式輸出時,一般使用printf函數。
3.字符串鏈接函數strcat
功能:把字符數組2中的字符串鏈接到字符數組1中字符串的後面,字符串1的串結束標誌'\0'自動刪去。字符數組名2能夠字符串常量。
通常調用格式:strcat(字符數組名1,字符數組名2)如:
#include<stdio.h> #include<string.h> { char str1[30]="This a"; char str2[10]="book"; strcat(str1,str2); puts(str1) return 0; }
4. 字符串複製函數strcpy
功能:把字符數組2中的字符串複製到字符數組1中。串結束標誌'\0'也一同拷貝。"字符數組名2"能夠字符串常量。
格式:strcpy(字符數組名1,字符數組名2)
#include<stdio.h> #include<string.h> int main() { char str1[15],str2[]="C Language"; strcpy (str1,str2); puts(str1); return 0; }
5. 字符串比較函數strcmp
功能:兩個數組(字符串)按照ASC‖碼順次比較,並由函數返回值比較結果。
字符串1=字符串2,函數返回0值;
字符串1>字符串2,函數返回>0值
字符串1<字符串2,函數返回<0值
格式:strcmp (字符數組名1,字符數組名2)
6.求字符串長度的函數strlen
功能:測出字符串的實際長度(不含字符串結束標誌‘\0’)並做爲函數返回值
格式:strlen(字符數組名)
5_5 數組的應用舉例