1. 程式人生 > >C語言複習3(2018.11.15)

C語言複習3(2018.11.15)

一維陣列的定義
一維陣列是指陣列中的每個元素只帶有一個下標的陣列。
定義方式為:型別說明符 陣列名[常量表達式];
一維陣列元素的引用
陣列元素的引用形式為:陣列名[下標表達式];
①一個數組元素實際上是一個變數名,代表記憶體中的一個儲存單元,一個數組佔據的是一連串連續的儲存單元。
②引用陣列元素時,陣列的下標可以是整型常量,也可以是整型表示式。
③陣列必須先定義後使用。
④只能逐個引用陣列元素而不能一次引用整個陣列。
一維陣列的初始化
當陣列定義後,系統會為該陣列在記憶體中開闢一串連續的儲存單元,但這些儲存單元中並沒有確定的值。可以在定義陣列時為所包含的陣列元素賦初值。例如:int a[6]={0,1,2,3,4,5};
①所賦初值放在一對花括號中,數值型別必須與所說明型別一致。
②所賦初值之間用逗號隔開,系統將按這些數值的排列順序,從a[0]元素開始依次給陣列a中的元素賦初值。
③不能跳過前面的元素給後面的元素賦初值,但是允許為前面元素賦初值為0。
④當所賦初值個數少於所定義陣列的元素個數時,將自動給後面的其他元素補初值0。
⑤可以通過賦初值來定義一維陣列的大小,定義陣列時的一對方括號中可以不指定陣列的大小。

氣泡排序:

//氣泡排序法

#include <stdio.h>

int main()
{
    int a[10];
    int i,j,t;
    printf("輸入10個數字:\n");
    for (i = 0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for (j = 0;j < 9 ;j++)
    {
        for(i = 0;i < 9;i++)
        {
            if(a[i]>a[i+1])
            {
                t = a[i];
                a[i] = a[i+1];
                a[i+1] = t;
            }
        }
    }
    printf("排序為:");
    for(i = 0;i < 10;i++)
    {
        printf("%d,",a[i]);
    }
    return 0;
}

二維陣列
二維陣列定義的一般形式為:
型別說明符 陣列名 [常量表達式] [常量表達式]
eg:
int a[3][4]

二維陣列的引用
賦值:a[3][4]=b[3][3]/2;

二維陣列的初始化
eg:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

可以部分賦初值
int a[3][4] = {{1},{5},{9}};

字元陣列的定義
形式與前面介紹的數值陣列相同。 例如: char c[10]; 由於字元型和整型通用,也可以定義為 int c[10]但這時每個陣列元素佔 2 個位元組的內 存單元。 字元陣列也可以是二維或多維陣列。 例如: char c[5][10]; 即為二維字元陣列。
字元陣列也允許在定義時作初始化賦值。 例如: char c[10]={‘c’, ‘ ’, ‘p’, ‘r’, ‘o’, ‘g’, ‘r’, ‘a’,’m’};
eg:

int main()
{   
		int i,j;   
		char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};   for(i=0;i<=1;i++)     
		{       
			for(j=0;j<=4;j++)           
			{
				printf("%c",a[i][j]);      
			} 
			printf("\n");     
		} 
		return 0;
}

字串和字串結束標誌
在C語言中沒有專門的字串變數,通常用一個字元陣列來存放一個字串。前面介紹 字串常量時,已說明字串總是以’\0’作為串的結束符。因此當把一個字串存入一個數 組時,也把結束符’\0’存入陣列,並以此作為該字串是否結束的標誌。有了’\0’標誌後, 就不必再用字元陣列的長度來判斷字串的長度了。
C語言允許用字串的方式對陣列作初始化賦值。
eg:
char c[]={‘c’, ’ ',‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’}; 可寫為:char c[]={“C program”}; 或去掉{}寫為:char c[]=“C program”;

字元陣列的輸入輸出
在採用字串方式後,字元陣列的輸入輸出將變得簡單方便。 除了上述用字串賦初值的辦法外,還可用 printf 函式和 scanf 函式一次性輸出輸入.
一個字元陣列中的字串,而不必使用迴圈語句逐個地輸入輸出每個字元。

int main() 
{   
	char c[]="BASIC\ndBASE";   
	printf("%s\n",c); 
	return 0;
} 

注意在本例的 printf 函式中,使用的格式字串為“%s”,表示輸出的是一個字串。 而在輸出表列中給出陣列名則可。
不能寫為: printf("%s",c[]);

字串處理函式
應包含標頭檔案 "string.h"

字串輸出函式 puts
格式: puts (字元陣列名)
功能:把字元陣列中的字串輸出到顯示器。 即在螢幕上顯示該字串。

字串輸入函式 gets
格式: gets (字元陣列名)
功能:從標準輸入裝置鍵盤上輸入一個字串。
本函式得到一個函式值,即為該字元陣列的首地址。 可以看出當輸入的字串中含有空格時,輸出仍為全部字串。說明 gets 函式並不以 空格作為字串輸入結束的標誌,而只以回車作為輸入結束。這是與 scanf 函式不同的。

字串連線函式 strcat
格式: strcat (字元陣列名 1,字元陣列名 2)
功能:把字元陣列 2 中的字串連線到字元陣列 1 中字串的後面,並刪去字串 1 後的串標誌“\0”。
本函式返回值是字元陣列 1 的首地址。本程式把初始化賦值的字元陣列與動態賦值的字串連線起來。要注意的是,字元陣列 1 應定義足夠的長度,否則不能全部裝入被連線的字串。

字串拷貝函式 strcpy
格式: strcpy (字元陣列名 1,字元陣列名 2)
功能:把字元陣列 2 中的字串拷貝到字元陣列 1 中。串結束標誌“\0”也一同拷貝。 字元數名 2,也可以是一個字串常量。這時相當於把一個字串賦予一個字元陣列。 本函式要求字元陣列 1 應有足夠的長度,否則不能全部裝入所拷 貝的字串。

字串比較函式 strcmp
格式: strcmp(字元陣列名 1,字元陣列名 2)
功能:按照 ASCII 碼順序比較兩個陣列中的字串,並由函式返回值返回比較結果。
字串 1=字串 2,返回值=0;
字串 2〉字串 2,返回值〉0;
字串 1〈字串 2,返回值〈0。
本函式也可用於比較兩個字串常量,或比較陣列和字串常量。

#include"string.h" 
int main() 
{ 
	int k;   
	static char st1[15],st2[]="C Language";   
	printf("input a string:\n");   
	gets(st1);  
	k=strcmp(st1,st2);   
	if(k==0) printf("st1=st2\n");   
	if(k>0) printf("st1>st2\n");   
	if(k<0) printf("st1<st2\n"); 
	return 0;
} 
 

本程式中把輸入的字串和陣列 st2 中的串比較,比較結果返回到 k 中,根據 k 值再輸 出結果提示串。當輸入為 dbase 時,由 ASCII 碼可知“dBASE”大於“C Language”故 k〉0, 輸出結果“st1>st2”

測字串長度函式 strlen
格式: strlen(字元陣列名)
功能:測字串的實際長度(不含字串結束標誌‘\0’) 並作為函式返回值

輸入五個國家的名稱按字母順序排列輸出。

int main() 
{     
	char st[20],cs[5][20];     
	int i,j,p;     
	printf("input country's name:\n");     
	for(i=0;i<5;i++)       
	gets(cs[i]);     
	printf("\n");     
	for(i=0;i<5;i++)       
	{ 
		p=i;strcpy(st,cs[i]);  
		for(j=i+1;j<5;j++)       
		if(strcmp(cs[j],st)<0) 
		{
			p=j;strcpy(st,cs[j]);}     
			if(p!=i)       
			{ 
				strcpy(st,cs[i]);  
				strcpy(cs[i],cs[p]);  
				strcpy(cs[p],st);       
			}     
			puts(cs[i]);
		}
		printf("\n");
		return 0;
 } 

1.陣列是程式設計中常用的資料結構。陣列可分為數值陣列(整陣列,實陣列),字元陣列 以及後面將要介紹的指標陣列,結構陣列等。
2.陣列可以是一維的,二維的或多維的。
3.陣列型別說明由型別說明符、陣列名、陣列長度(陣列元素個數)三部分組成。陣列元素又 稱為下標變數。 陣列的型別是指下標變數取值的型別。
4.對陣列的賦值可以用陣列初始化賦值,輸入函式動態賦值和賦值語句賦值三種方法實現。
對數值陣列不能用賦值語句整體賦值、輸入或輸出,而必須用迴圈語句逐個對陣列元素進行操作。