在c語言中不允許在for語句的表示式a裡面定義變數(例如int i
的寫法不被允許),但是在c++之中可以,因此這種寫法需要被儲存為.cpp
檔案才能通過編譯
一維陣列的初始化,需要給出用逗號隔開的從第乙個元素開始的若干個元素,並用大括號括住。後面未被賦值的元素將會由不同的編譯器內部實現的不同而被賦予不同的初值(可能是很大的隨機數),而一般情況預設初值為0
如果想要將整個陣列都賦值為0,只需要把第乙個元素賦值為0,或者只用乙個大括號來表示。
int a[10] =
int a[10] =
#includeint main()
; for(int i=1;i<=4;i++) }
for(int i=0;i<5;i++)
}
和一維陣列一樣,二維陣列在定義的時候也可以進行初始化。二維陣列在初始化時候要按照第一維的順序依次用大括號給出第二維初始化情況,然後將他們用逗號分隔,並用大括號全部括住,而這些被賦初值的元素之外德 部分將被預設賦值為0.
int a[5][6] = ,,{},};
輸出結果:
3 1 2 0 0 0
8 4 0 0 0 0
0 0 0 0 0 0
1 2 3 4 5 0
0 0 0 0 0 0
可以看到,第1,2,4行都賦予了初值,第三行使用{}跳過了(注意:如果沒有大括號是無法通過編譯的)。剩下的部分均被預設為0
如果陣列大小較大(大概10^6級別),則需要將其定義在主函式外面,否則會使程式異常退出,原因是函式內部申請的區域性變數來自系統棧,允許申請的空間較小;而函式外部申請的全域性變數來自靜態儲存區,允許申請的空間較大。
一般來說,給陣列中的元素賦相同的值得方法有兩種:memset函式
和fill函式
memset
函式的格式為:
memset (陣列名 ,值 , sizeof(陣列名));
不過要記住,使用memset
需要在程式的開頭新增string.h
標頭檔案,且只建議初學者使用memset
賦0
或者-1
。這是因為memset使用的是按位元組賦值,即對每個位元組賦相同的值,這樣組成int
型的4個位元組就被賦值了,而且由於0的二進位制補碼為0,-1的二進位制補碼為1,這樣不同意弄錯。但如果要對陣列賦予其他的數字,那麼請使用fill
函式
memset(a,0,sizeof(a));
memset(a,-1.sizeof(a));
1.字元陣列的初始化
和普通陣列一樣,字元陣列也可以初始化,初始化如下:
char str[15]=;
輸出結果如下:
good story
除此之外,字元陣列還能夠通過直接賦予初值來初始化,僅限於初始化,程式的其他位置不允許這樣直接賦值整個字串,示例如下:
char str[15]="good story!"
2.字元陣列的輸入和輸出
字元陣列就是char
的陣列,當維度為1時可以作為字串,當維度為2時可以作為字串陣列
字元陣列除了可以使用scanf
來輸入還能使用getchar
或者gets
字元陣列除了可以使用printf
來輸出還能使用putchat
或者puts
(1) scanf輸入,printf輸出
scanf
對字元型別有%c
和%s
兩種型別(printf
同理,下同)
%c
用來輸入單個字元,可以識別空格和換行
%s
用來輸入字串,將空格和換行作為輸入結束的識別標誌
#includeint main()
輸入資料:qaq qaq qaq
輸出資料:qaq
(2)getchar和putchar
使用getchar
輸入字元,使用putchar
輸出字元
#includeint main()
getchar();//這是為了將輸入中每行末尾的換行符吸收掉
} return 0;
}
(3)gets輸入,puts輸出
gets
用來輸入一行字串(注意:gets
識別換行符\n
作為輸入結束,因此scanf
完乙個整數後,如果要使用gets
,需要先用getchar
接收整數後的換行符),並將其放於一維陣列(或者二維陣列的一維)中;puts
用來輸出一行字串,即將一維陣列(或者二維陣列的一維)在介面上輸出,並緊跟乙個換行。示例如下:
#includeint main()
puts(str1);
for(int i=0;i<3;i++)
return 0;
}
3.字元陣列的存放方式
除此之外,在一維字元陣列(或是二維字元陣列的第二維)的末尾都有乙個空字元\0
,用來表示存放的字串的末尾。空字元\0
在使用gets
或scanf
輸入字串時會自動新增在輸入字串後面,並且占用乙個字元位,而puts
與printf
就是通過識別\0
作為字串的結尾來輸出的。
特別提醒1:結束符\0
的ascii碼為0,即空字元null,占用乙個字元位,因此開字元陣列的時候千萬要記得字元陣列的長度一定要比實際儲存字串的長度至少多1。注意,int型陣列的末尾不需要加\0
,只有char
型陣列需要。還需要注意,\0
和空格
不是乙個東西,空格的ascii碼為32
特別提醒2:如果不是使用scanf
函式的%s
格式或者gets
函式輸入字串(例如使用getchar
),請一定要在輸入的每個字串後加入\0
,否則printf
和puts
輸出字串會因為無法識別字串末尾而輸出一大堆亂碼
1.strlen()
strlen
函式可以得到字元陣列中第乙個\0
前的字元的個數,其格式如下:
strlen(字元陣列);
2.strcmp()
strcmp
函式返回兩個字串大小的比較結果,比較原則是按字典序,其格式如下:
strcmp(字元陣列1,字元陣列2)
①如果字元陣列1《字元陣列2,則返回乙個負整數
②如果字元陣列1==字元陣列2,則返回0
③如果字元陣列1>字元陣列2,則返回乙個正整數
3.strcpy()
strcpy
函式是將乙個字串複製給另乙個字串,其格式如下:
strcpy(字元陣列1,字元陣列2);
注意:是把字元陣列2複製給字元陣列1,這裡的「複製」包括了結束符\0
4.strcat()
strcat()
可以將乙個字串接到另乙個字串的後面,其格式如下:
strcat(字元陣列1,字元陣列2)
注意是將字元陣列2接到字元陣列1的後面
sscanf
與sprintf
與上面的格式是相同的,只不過把screen
換成了字元陣列(假設定義了乙個char
陣列str[100]
),如下所示:
sscanf(str,"%d",&n);//將字元陣列str中的內容以"%d"的格式寫到n中
sprintf(str,"%d",n);//將n以"%d"的格式寫到str字元陣列中(還是從右至左)
來乙個複雜一點的應用:
#includeint main()
執行結果:
n=2048,db=3.14,str2=hello
str=12:3.14,good
程式24和程式25
程式24 題目 給乙個不多於5位的正整數,要求 一 求它是幾位數,二 逆序列印出各位數字。num rand 1,99999 strlen num arr num str split num array reverse arr num strlen 返回給定的字串的長度。returns the len...
佇列 陣列結構實現(迴圈佇列)
當元素較少時 tail位置在front後面 迴圈佇列與普通佇列出隊操作一樣,入隊的元素將會放在tail的位置上,隨後執行tail 操作 出隊時front位置上的元素將會置null,隨後執行front 操作 此時仍能保持著tail位置在front後面的狀態,如下圖所示 當元素繼續新增,最後乙個元素將放...
2 4 流程結構
條件轉移結構 開關結構 試探結構 matlab支援的流程結構 迴圈結構,轉移結構,開關結構,試探結構 迴圈結構可以由for或 while語句引導,用end語句結束,在這兩個語句之間的部分稱為迴圈體。在迴圈語句中如果使用 break語句,則可以結束上一層的迴圈結構。for i v,迴圈結構體,end ...