| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业04--数组 |
| 这个作业的目标 | 学习数组相关内容 |
| 名字 | 李洋 |
0.展示PTA总分(两张)
1. 本章学习总结
1.1 学习内容总结
1.1.1 查找数据的方法
- 直接查找
使用循环语句从头到尾历遍数组,把所有的数据都查一遍.
int key;
int num[10]={0,1,2,3,4,5,6,7,8,9}
scanf("%d",&key);
for(int i=0;i<len;i++)
{
if(key==num[i])
{
printf("%d",i);
}
}
if(i>=9)
{
printf("not found");
}
直接查找在要查的数组元素较少时还不错,但是面对数组元素较多时,如10000000000....,直接查找就显得很吃力了。
- 二分查找
- 二分法查找原理如下:
- 将有序数组分为三个部分,分别为中间值前(中间值数之前的一组数据),中间值 和中间值后(中间值之后的一组数据);
- 将要查找的数与中间值的数相比较,等于则退出查找,小于则在中间值前进行比 较,大于在在中间值后进行比较,依次递归,直至查找到对应的值为止;
- 二分法流程如下:
2. 插入数据的方法
- 先用循环试着历遍数组,逐个比较大小,以找到插入数应该放的位置。在插入位置以后的数组元素依次右移一位完成。
3. 删除数据的方法
-
删除数组中指定位置的元素
- 设置循环,从要删除的元素所在位置开始,之后的元素依次向左移动一位,直接把要删除的元素覆盖。
-
删除数组中的重复元素
-
定义一个辅助数组hash[?],下标为目标数组的元素(如果目标数组是字符数组,需减去‘ ’转换成特定的整型数字),辅助数组初值为0;
-
输入一个数N,判断hash[N]是否为大于0,如果是则表明元素在目标数组中重复。若hash[N]等于0,说明仅有一个,无重复
-
设置循环,如果hash数组对应值为0,就输出;大于0的则不输出,即重复的元素被删除
-
1.1.4 数据排序的方法
-
选择排序
- 选择排序的步骤:
- 在未排序的n个数(a[0]~a[n-1])中找到最小值,将它与a[1]交换;
- 在剩下的未排序的n-1个数(a[1]~a[n-1])中找到最小数,将它与a[1]交换;
n-1. 在剩下的未排序的2个数(a[n-2]~a[n-1])中找到最小数,将它与a[n-2]交换;
- 选择排序的流程(以三个数为例):
-
冒泡排序
- 冒泡序列的步骤:
- 在未排序的n个数中,a[0]与a[1]比较大小,如果a[0]比a[i]大,则交换两个数;
- a[1]与a[2]比较大小,如果a[1]比a[2]大,则交换两个数;
...
1.1.5 数组做枚举用法
枚举类型在使用中有以下规定:
1.枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值 。
例如对枚举weekday的元素再作以下赋值:
sun=5;
mon=2;
sun=mon;
都是错误的。
- 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2 …。
- 枚举的定义枚举类型定义的一般形式为:
enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
1.1.6 哈希数组的用法
- 定义一个辅助数组,用时间换空间
-
定义一个辅助数组hash[?],下标为目标数组的元素(如果目标数组是字符数组,需减去‘ ’转换成特定的整型数字),辅助数组初值为0;
-
输入一个数N,判断hash[N]是否为大于0,如果是则表明元素在目标数组中重复。
-
若hash[N]等于0,说明仅有一个,无重复。
-
初始化hash数组为0
for i=1 to n
输入一个数 data
if
hash[data]==1:
有重复数据
return 0
end for
return 1
1.1.7 字符、字符串数组
-
一维字符数组
- 一维字符数组用于窜访字符型数据。它的定义、初始化和引用与其他类型的一维数组一样。例如:
char str[5];
str[5]={'h','e','l','l','o'}
- 对静态数组的部分元素赋值,其他位置元素为0
例如:
ststic char s[80]={'h','e','l','l','o'}
-
字符串
-
字符串可以存放在一维数组中。例如:
char str[4]={'a','b','c','\0'}
-
字符数组的初始化乘可以使用字符常量。例如:
char str[4]="abc";
-
字符串初始化
-
while((str[i]=getchar())!='\n')
{
i++;
}
str[i]='\0';
或者fgets(str);
字符串有结束符,结束符占一个字节
2. PTA实验作业
2.1 题目(1)
2.1.1 伪代码
2.1.2 代码截图
2.1.3 代码对比同学
-
同:都是先用循环试着历遍数组,逐个比较以找到插入数应该放的位置。
-
异:找到位置后,把x插入数组的操作不同:
- 我的方法是在插入位置以后的数组元素依次右移一位完成;
- 同学的方法是找到位置后,把比x大的数与x进行交换,之后在新的的数组中,找新的x所在的位置。
两种方法的实质都是通过交换实现插入数据,我是直接逐个交换,而同学的方法是把x当做一个辅助参数,实现交换。
-
特点:相对于同学的方法,他的代码量少了一点,但我的相对来说运行效率上要更胜一筹。
2.2 题目(2)
2.2.1 伪代码
2.2.2 代码截图
2.2.3 代码对比超星
-
同:同超新视频一样,我们都是先从行找最大值,再在列找最小值的过程;
-
异:
-
在找到行最大值的坐标后,我选择继续找列最小值的横坐标,比较两者的横坐标以确定两者是不是同一个数;
-
超星视频所讲的是,找到行最大值后,在它所在的那一列,找是否有比它更小的值,如果有,则说明它不是列最小的,即它不是鞍点。
-