C語言-陣列,一維、二維、字串陣列以及函式
自學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
>
標頭檔案