今天主要是学习数组与字符串的处理
还有冒泡排序还是不6, 一些算法要琢磨很久 , 代码跟书上不一样 , 但逻辑还是差不多的
(比如冒泡就不习惯从后往前的移位方法, 脑子只能接受从前往后比较, 然后升序就让大的往后挪, 降序就让小的往前挪)
然后开始看指针
例题都比较蛋疼, 都是一些可以不用指针 , 而且用了也没有变方便的例题
看看能不能写成直播 :(
今天的笔记(Xmind)
数组
一维数组
定义
定义一个有8个元素的整型数组a , 10个元素的单精度实型数组d
int a[8]; float d[10];
引用
short y[2]; //短整型数组, 下标应为 0,1
判断下面的写法对否:
y[2] = 10; 错
scanf("%f",&y[3]); 错
初始化
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] 开始值为0
char c[10] = {'a', 'b'}; // 未赋值的 , 从 c[2] 开始值为空字符 即 '\0'
程序设计举例
从键盘上输入10个字符 , 然后按相反次序输出
输入10个实数存入数组 , 求其中最小数 及其序号 (序号从1开始)
使用 "选择排序法" 对一维数组中的整数进行排序 , 使得数组中前n个元素的值按从小到大排列
如何求数组长度
int a[] = { 21,89,33,26,19,30,55,15 };
printf("%d\n", sizeof(a)/sizeof(int));
除数是对应类型数据的字节长度
用 "冒泡排序法" , 对一维数组中前n个整数按从小到大排序
默认初值: 整数:0 , 浮点数:0.0 字符型: '\0'
二维数组
定义&引用
int a[3][5];
定义一个三行五列的数组
初始化
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} };
未定义行数 , 赋值后,自动认为行数为2
程序设计举例
P111 输入一个 2x3的矩阵 , 转置后形成 3x2的矩阵输出
输入一个 3行6列的实型数组, 求出所有元素的平均值 , 用原来的数除以平均值替代原来的值 , 最后按行列格式 输出修改后的数组
输入10个学生的学号(整数) 和 3门课的成绩(整数) , 统计并输出 3门课总分最高的学生的学号和总分(整数)
字符数组 / 字符串
字符数组
char s[3] = {'a','b'}
输出图案
我艹 , 这算什么例子 , 书上直接把这些值存到一个二维数组中,然后直接输出
这他妈谁不会
我他妈还折腾这个近两个小时 , 艹你妈个B
输入一串字符 , 不多于40个 , 以回车做结束符 , 存入数组 , 把大写改成小写, 其他字符不变 , 然后逆向输出
我也看到烫了
字符串 与 字符数组
char s[3] = {"12"}; //注意是双引号哦
此时, s[0]==1 , s[1] ==2
char s[25];
scanf( "%s" , s ); //不用写 &s 哦
输入: 123 456
s = "123"
输入: 123回车456
s="123"
char s[20] = {'1' , '2' , '\0' , '3' , '4'};
printf( "%s" , s );
输出: 12
因为 \0 是格式输出 %s 的结束标记符
从键盘上输入一个字符串 , 统计该字符串的长度
字符数组的使用 , 这个必需会 , 太基础了
scanf_s("%s",a,100)
如果输入 Hello world , 输出空格前的, 计数为5
如何不把空格当结束?
输入一个字符串 , 存入字符数组 s1 , 把 s1 中字符串复制到字符数组 s2 中
从键盘上输入两个字符串 , 比较他们的大小
scanf_s("%s%s", a, 100,b,100);
字符串处理函数
函数
字符串输出函数
puts()
字符串结束符 , 转换为回车
printf();
字符串结束符 , 不输出
字符串输入函数
gets()
只认为回车才是结束 , 空格属于字符串一部分
scanf();
回车/空格都会结束输入
测试字符串长度
strlen(s);
字符串复制函数
strcpy(字符数组, 字符串, 整型表达式)
strcpy(a,b,3) 把b的前3个字符复制到a
字符串比较
strcmp( s1, s2 )
S1<S2 返回值小于0
S1 = S2 返回值 == 0
S1 > S2 返回值 > 0
字符串连接函数
strcat(字符数组, 字符串);
strcat(a,b) 把b连接到a的最后一个有效字符后面(有效字符不含空格),保存到a
举例
输入一个字符串(可以有空格, 长度<40)
存入数组 a
将其复制到数组b
再将a中字符串连接到b后
比较并输出 a,b中字符串的大小
统计并输出 a, b 中字符串的长度
最后, 输出a, b 中的字符串
P121
注意 include <string.h>
strcat_s()
strcpy_s()
输入 3 个字符串(可以有空格) , 输出其中最大者 P122
有空格 不会比啊,之前都是没空格的, 空格怎么算?
strcmp能比这种的吗?
答案是可以
字符串有空格, 使用 gets() 获取就可以, ~!~ 新技能 gets~
字符数组程序设计举例
输入一个字符串存入数组 a
对 a 中每个字符用 +3 的方法加密 , 并存入数组b
对b 中的字符解密 , 存入数组c
最后依次输出 a, b, c 的字符串
输入一个字符串,存到s
寻找并输出其中最大字符, 最小字符 , 和他们的差值
字符串还能算差值?
是要求最大字符与最小字符的差值啊
输入两个字符串a, b , 判断字符串b是否是字符串a 的子串
是, 则输出字符串b 在字符串a中的开始位置(从1始)
否, 则输出"不是子串"
如"ABCDEF" 子串 "CD" 的位置是3
输入4个长度小于80的字符串 , 存入二维数组中.对其进行升序排序 , 并按次序输出
对每个字符串里的字符进行升序排列
对这4个字符串进行升序排列