您當前的位置:首頁 > 娛樂

C語言-陣列,一維、二維、字串陣列以及函式

作者:由 三月雨紛飛 發表于 娛樂時間:2023-02-05

自學c語言基礎->為了編寫udf,記錄下筆記,方便後續快速回顧

內容包括:一維與二維陣列,字串陣列,字串陣列常用函式。參考《C語言程式設計。譚浩強》

一維陣列

型別符 陣列名[常量表達式];

int a[10];

注意:從0開始所以a[10]有a[0]…a[8]、a[9]

Int a[變數];不可以定義一個變數陣列,只能是常量,但是在函式中,可以使用n為形參,因為在呼叫函式時,形參得到數值從實參,所以使用中他任然是一個數值。

如:

void

func

int

n

{

Int

a

2

*

n

];

}

例子:

#include

int

main

()

{

int

i

a

10

];

//a[10]生成的是a[0]…a[9],10個數,所以i對應為9

for

i

=

0

i

<=

9

i

++

a

i

=

i

for

i

=

9

i

>=

0

i

——

printf

“%d

\t

a

i

]);

return

0

}

初始化:

Int a[10]={0,1,2,3,4,5,6,7,8,9};//全部初始化,可以寫成Int a[ ]={0,1,2,3,4,5,6,7,8,9},因為初始化已經說明陣列大小

Int a[10]={0,1,2,3,4,5};//部分初始化前6個,未被初始化的分配為0

Int a[10]={0}//全為0

重點:冒泡法給數排序

例子:

int

a

10

];

int

i

j

t

printf

“輸入10個數:”

);

for

i

=

0

i

<=

9

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

“排序結果:”

);

for

i

=

0

i

<=

9

i

++

printf

“%d ”

a

i

]);

return

0

二維陣列:

型別符號

陣列名[常量][常量]

第一個代表行,第二個代表列a[3][4]是3行四列,邏輯上代表一個矩陣,而在電腦記憶體儲時,是順序儲存的:既a[0][0]、a[0][1]、a[0][2]、a[0][3]、a[1][0]…

例如:

float

a

3

][

3

];

//定義一個二維陣列

//推廣:

float

a

3

][

3

][

3

];

//

定義一個三維陣列,

陣列的引用:

a[3][4]表示引用第三行,第四列。注意區分定義陣列和引用陣列的區別:

定義a[3][4]是定義3行4列、說的是維度

引用若a[3][4]會報錯,因為3行4列,從下標從0開始,所以最大隻有a[2][3]

賦值的幾種方法:

int

a

3

][

4

=

{{

1

2

3

4

}

{

5

6

7

8

}

{

9

10

11

12

}}

//一個花括號代表一行

int

a

3

][

4

=

{{

1

},{

2

},{

3

}};

//每行第一個元素賦值,其餘為0

int

a

3

][

4

=

{

1

2

3

4

5

6

7

8

9

10

11

12

};

//按照記憶體賦值

int

a

3

][

4

=

{{

1

},{

0

2

},{

0

0

3

}};

//部分賦值

int

a

3

][

4

=

{{

1

},{

0

2

}};

//可省略最後一行行

int

a

3

][

4

=

{{

1

},{},{

0

2

}};

//省略中間行

int

a

][

4

=

{{

1

},{},{

0

2

}};

//

省略行下表,當列指定了,會根據所賦予初值和列計算出行

打擂臺演算法:求陣列中最大值,並標記其行列的位置,思路賦值第一個數為最大,迴圈比較,大於他的就賦值給最大值,並記錄此時的行列號。

#include

int

main

()

{

int

i

j

row

colum

max

//row、colum記錄行和列

int

a

3

][

4

=

{{

1

2

3

4

},{

6

7

9

8

},{

0

-

1

-

2

-

3

}};

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

\n

row=%d

\n

colum=%d

\n

max

row

colum

);

return

0

}

字串陣列:

c語言中沒有字串型別,其使用字元陣列來表示,一個字元使用ascll碼來儲存的,所以也是整形的型別

其定義賦值放大和數值陣列一樣,只不過每個值儲存的是一個字元。定義方式:

char

a

10

];

//也可以int一個整形陣列,但是浪費儲存空間,字元就一個位元組,而整數2、4個位元組。

int

a

10

];

a

0

=

‘a’

printf

“%d %c”

a

0

],

a

0

]);

//不同的輸出方式

return

0

//C語言在識別陣列時會自動判斷有沒有‘\0’,若有既字串停止。

char

c

[]

=

“i am happy”

//可以自動分配,並在最後自動加入\0來停止。所以c長度為11

char

c

[]

=

{

“china”

};

//

注意:雙引號而不是單引號

字元陣列輸入輸出:

%s來對字串輸入輸出

//%s來對字串輸入輸出

char

a

10

],

c

[]

=

“i am happy”

scanf

“%s”

a

);

//a不需要寫下標

printf

“a=%s c=%s”

a

c

);

//

因為陣列

a

c代表了起始地址

,所以輸入輸出時,獲取其初始地址,然後逐個輸入輸出,知道遇到‘\

0

字串函式:

puts

字元陣列

//輸出字串函式

gets

字元陣列

);

//輸入字串函式

stract

字元陣列

1

,字元陣列

2

);

//字串連線

strcpy

字元陣列

1

,字元陣列

2

);

//把2複製到1中去

strcmp

字串

1

,字串

2

//字串比較

strlen

字元陣列)

//測字串長度

strlwr

字串

//轉換為小寫

strupr

字串

//轉換為大寫

//

使用前引用#

include

<

string

h

>

標頭檔案

標簽: 陣列  10  字串  inta  字元