今天主要是學(xué)習(xí)數(shù)組與字符串的處理
還有冒泡排序還是不6, 一些算法要琢磨很久 , 代碼跟書(shū)上不一樣 , 但邏輯還是差不多的
(比如冒泡就不習(xí)慣從后往前的移位方法, 腦子只能接受從前往后比較, 然后升序就讓大的往后挪, 降序就讓小的往前挪)
然后開(kāi)始看指針
例題都比較蛋疼, 都是一些可以不用指針 , 而且用了也沒(méi)有變方便的例題
看看能不能寫(xiě)成直播 :(
今天的筆記(Xmind)
數(shù)組
一維數(shù)組
定義
定義一個(gè)有8個(gè)元素的整型數(shù)組a , 10個(gè)元素的單精度實(shí)型數(shù)組d
int a[8]; float d[10];
引用
short y[2]; //短整型數(shù)組, 下標(biāo)應(yīng)為 0,1
判斷下面的寫(xiě)法對(duì)否:
y[2] = 10; 錯(cuò)
scanf("%f",&y[3]); 錯(cuò)
初始化
int a[10] = {1,2,3,4,5,6,7,8,9,10}
int a[] = {1,2,3}
int a[10] = {1,2,3}; //未賦值的 , 從 e[3] 開(kāi)始值為0
char c[10] = {'a', 'b'}; // 未賦值的 , 從 c[2] 開(kāi)始值為空字符 即 '\0'
程序設(shè)計(jì)舉例
從鍵盤(pán)上輸入10個(gè)字符 , 然后按相反次序輸出
輸入10個(gè)實(shí)數(shù)存入數(shù)組 , 求其中最小數(shù) 及其序號(hào) (序號(hào)從1開(kāi)始)
使用 "選擇排序法" 對(duì)一維數(shù)組中的整數(shù)進(jìn)行排序 , 使得數(shù)組中前n個(gè)元素的值按從小到大排列
如何求數(shù)組長(zhǎng)度
int a[] = { 21,89,33,26,19,30,55,15 };
printf("%d\n", sizeof(a)/sizeof(int));
除數(shù)是對(duì)應(yīng)類(lèi)型數(shù)據(jù)的字節(jié)長(zhǎng)度
用 "冒泡排序法" , 對(duì)一維數(shù)組中前n個(gè)整數(shù)按從小到大排序
默認(rèn)初值: 整數(shù):0 , 浮點(diǎn)數(shù):0.0 字符型: '\0'
二維數(shù)組
定義&引用
int a[3][5];
定義一個(gè)三行五列的數(shù)組
初始化
int a[2][3] = {{1,2,3},{4,5,6}};
1 - 2 - 3
4 - 5 - 6
int a[2][3] = {1,2,3,4,5,6};
1 - 2 - 3
4 - 5 - 6
int a[2][3] = {{1},{2,3}};
1 - 0 - 0
2 - 3 - 0
int a[][3] = { {1,2,3} , {4,5,6} };
未定義行數(shù) , 賦值后,自動(dòng)認(rèn)為行數(shù)為2
程序設(shè)計(jì)舉例
P111 輸入一個(gè) 2x3的矩陣 , 轉(zhuǎn)置后形成 3x2的矩陣輸出
輸入一個(gè) 3行6列的實(shí)型數(shù)組, 求出所有元素的平均值 , 用原來(lái)的數(shù)除以平均值替代原來(lái)的值 , 最后按行列格式 輸出修改后的數(shù)組
輸入10個(gè)學(xué)生的學(xué)號(hào)(整數(shù)) 和 3門(mén)課的成績(jī)(整數(shù)) , 統(tǒng)計(jì)并輸出 3門(mén)課總分最高的學(xué)生的學(xué)號(hào)和總分(整數(shù))
字符數(shù)組 / 字符串
字符數(shù)組
char s[3] = {'a','b'}
輸出圖案
我艸 , 這算什么例子 , 書(shū)上直接把這些值存到一個(gè)二維數(shù)組中,然后直接輸出
這他媽誰(shuí)不會(huì)
我他媽還折騰這個(gè)近兩個(gè)小時(shí) , 艸你媽個(gè)B
輸入一串字符 , 不多于40個(gè) , 以回車(chē)做結(jié)束符 , 存入數(shù)組 , 把大寫(xiě)改成小寫(xiě), 其他字符不變 , 然后逆向輸出
我也看到燙了
字符串 與 字符數(shù)組
char s[3] = {"12"}; //注意是雙引號(hào)哦
此時(shí), s[0]==1 , s[1] ==2
char s[25];
scanf( "%s" , s ); //不用寫(xiě) &s 哦
輸入: 123 456
s = "123"
輸入: 123回車(chē)456
s="123"
char s[20] = {'1' , '2' , '\0' , '3' , '4'};
printf( "%s" , s );
輸出: 12
因?yàn)?\0 是格式輸出 %s 的結(jié)束標(biāo)記符
從鍵盤(pán)上輸入一個(gè)字符串 , 統(tǒng)計(jì)該字符串的長(zhǎng)度
字符數(shù)組的使用 哮笆, 這個(gè)必需會(huì) , 太基礎(chǔ)了
scanf_s("%s",a,100)
如果輸入 Hello world , 輸出空格前的, 計(jì)數(shù)為5
如何不把空格當(dāng)結(jié)束?
輸入一個(gè)字符串 , 存入字符數(shù)組 s1 , 把 s1 中字符串復(fù)制到字符數(shù)組 s2 中
從鍵盤(pán)上輸入兩個(gè)字符串 , 比較他們的大小
scanf_s("%s%s", a, 100,b,100);
字符串處理函數(shù)
函數(shù)
字符串輸出函數(shù)
puts()
字符串結(jié)束符 , 轉(zhuǎn)換為回車(chē)
printf();
字符串結(jié)束符 , 不輸出
字符串輸入函數(shù)
gets()
只認(rèn)為回車(chē)才是結(jié)束 , 空格屬于字符串一部分
scanf();
回車(chē)/空格都會(huì)結(jié)束輸入
測(cè)試字符串長(zhǎng)度
strlen(s);
字符串復(fù)制函數(shù)
strcpy(字符數(shù)組, 字符串, 整型表達(dá)式)
strcpy(a,b,3) 把b的前3個(gè)字符復(fù)制到a
字符串比較
strcmp( s1, s2 )
S1<S2 返回值小于0
S1 = S2 返回值 == 0
S1 > S2 返回值 > 0
字符串連接函數(shù)
strcat(字符數(shù)組, 字符串);
strcat(a,b) 把b連接到a的最后一個(gè)有效字符后面(有效字符不含空格),保存到a
舉例
輸入一個(gè)字符串(可以有空格, 長(zhǎng)度<40)
存入數(shù)組 a
將其復(fù)制到數(shù)組b
再將a中字符串連接到b后
比較并輸出 a,b中字符串的大小
統(tǒng)計(jì)并輸出 a, b 中字符串的長(zhǎng)度
最后, 輸出a, b 中的字符串
P121
注意 include <string.h>
strcat_s()
strcpy_s()
輸入 3 個(gè)字符串(可以有空格) , 輸出其中最大者 P122
有空格 不會(huì)比啊,之前都是沒(méi)空格的, 空格怎么算?
strcmp能比這種的嗎?
答案是可以
字符串有空格, 使用 gets() 獲取就可以, ~!~ 新技能 gets~
字符數(shù)組程序設(shè)計(jì)舉例
輸入一個(gè)字符串存入數(shù)組 a
對(duì) a 中每個(gè)字符用 +3 的方法加密 , 并存入數(shù)組b
對(duì)b 中的字符解密 , 存入數(shù)組c
最后依次輸出 a, b, c 的字符串
輸入一個(gè)字符串,存到s
尋找并輸出其中最大字符, 最小字符 , 和他們的差值
字符串還能算差值?
是要求最大字符與最小字符的差值啊
輸入兩個(gè)字符串a(chǎn), b , 判斷字符串b是否是字符串a(chǎn) 的子串
是, 則輸出字符串b 在字符串a(chǎn)中的開(kāi)始位置(從1始)
否, 則輸出"不是子串"
如"ABCDEF" 子串 "CD" 的位置是3
輸入4個(gè)長(zhǎng)度小于80的字符串 , 存入二維數(shù)組中.對(duì)其進(jìn)行升序排序 , 并按次序輸出
對(duì)每個(gè)字符串里的字符進(jìn)行升序排列
對(duì)這4個(gè)字符串進(jìn)行升序排列