这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C语言博客作业04--数组 |
这个作业的目标 | 学习数组相关内容 |
姓名 | 雷正伟 |
0.PTA得分
1.本章学习总结
1.1 学习内容总结
1.11 查找数据
二分法查找
- 优点:查找效率高
- 缺点:要求数组必须有序
顺序法(普通)查找
- 优点:数组不要求有序
- 缺点:数组数据较大时,查找效率低
1.12 插入数据
PTA题目:简化的插入排序
代码以及调试结果
1.12 删除数据
**PTA题目:数组元素的删除 **
代码实现
#include<stdio.h>
#define max 100
int main()
{
int a[max], n, m, num, flag;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &num);
flag = num;
while (num--)
{
scanf("%d", &m);
for (int i = m - 1; i < n; i++)
{
a[i] = a[i + 1];
}
}
for (int i = 0; i < n - flag; i++)
{
if (i == n - flag - 1)
{
printf("%d", a[i]);
}
else
{
printf("%d ", a[i]);
}
}
return 0;
}
1.12 数组的排序
冒泡法排序
原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数
- 针对所有的元素重复以上的步骤,除了最后一个
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
- 这里引用一个GIF图更清晰的理解冒泡法排序
PTA题目:冒泡法排序
代码实现
#include <stdio.h>
int main()
{
int N, K, i, j;
int count = 0;
int temp;
int a[100];
scanf("%d %d", &N, &K);
for (i = 0;i < N;i++)
{
scanf("%d", &a[i]);
}
for (i = 0;i < N;i++) //重复比较至排序结束
{
for (j = 0;j < N - i - 1;j++) //比较元素大小
{
if (a[j + 1] < a[j])
{ //前一个比第二个元素大则交换
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
count++;
if (count == K)
break;
}
for (i = 0;i < N;i++)
{
if (i < N - 1)
printf("%d ", a[i]);
else
printf("%d", a[i]);
}
return 0;
}
但是当一个数组的数据较多时冒泡法排序就会很不实用
选择法排序
- GIF图举例
PTA题目:选择法排序
代码实现
#include<stdio.h>
int main()
{
int n, i, index, temp;
int a[11];
scanf("%d", &n);
for (i = 0;i < n;i++)
scanf("%d", &a[i]);
for (i = 1;i < n;i++)
{
for (index = 0;index < n - i;index++)
{
if (a[index] < a[index + 1])
{ //后一个数比前一个数大则交换
temp = a[index];
a[index] = a[index + 1];
a[index + 1] = temp;
}
}
}
for (i = 0;i < n;i++)
{
if (i < n - 1)
{
printf("%d ", a[i]);
}
else
{
printf("%d
", a[n - 1]);
}
}
return 0;
}
1.13哈希数组
PTA题目:有重复的数据I
代码实现
#include<stdio.h>
#define MAX 100001
int SameData(int n);
int main()
{
int n;
scanf("%d", &n);
if (SameData(n))
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
int SameData(int n)
{
static int a[MAX];
int i, data;
for (i = 1;i <= n;i++)
{
scanf("%d", &data);
if (a[data] == 1)
{
return 1;
}
else
{
a[data] = 1;
}
}
return 0;
}
1.14字符数组
字符数组的存储
字符串可以存放在一维数组中,例如:
static char s[6]={'H','a','p','p','y',' '};
也可以使用字符串常量,例如上述代码等价于:
static char s[6]={"Happy"};
或
static char s[6]="Happy";
将字符串存入数组时,由于它有一个结束符' ',数组长度至少是字符串的有效长度+1。如果数组长度大于字符串的有效长度+1,则数组中除了存入的字符串,还有其他内容,即字符串只占用数组的一部分。
- 字符串由有效字符和字符串结束符' '组成
字符输入的函数
fgets()函数
描述:C 库函数 char *fgets(char *str, int n, FILE *stream) 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
函数声明
char *fgets(char *str, int n, FILE *stream)