C语言——数组博客作业
C语言博客04——数组
0.pta总分
1.学习总结
(1).数据查找
1.遍历数组,找到数据
2.二分查找法
在数组数值顺序排列下,可以用while循环,判断中间数值的大小与被查找数值比较,偏大则在左半区继续取一半判断,反之在右半区判断,直到找到。
int BinSearch(int arr[],int len,int key) //(二分法)
{
int low=0; //定义初始最小
int high=len-1; //定义初始最大
int mid; //定义中间值
while(low<=high)
{
mid=(low+high)/2; //找中间值
if(key==arr[mid]) //判断min与key是否相等
return mid;
else if(key>arr[mid]) //如果key>mid 则新区间为[mid+1,high]
low=mid+1;
else //如果key<mid 则新区间为[low,mid-1]
high=mid-1;
}
return -1; //如果数组中无目标值key,则返回 -1 ;
}
(2).插入数据
找到数据插入的位置,插入数据并移动数组。
(3).数据删除
1.数组左移
找到要删除的数,将其后面的数组左移
2.构建新数组
(4).排序
1.选择排序(找到最大的一个元素,和末尾的元素交换,然后再从头开始,查找第1 个到第N-1 个元素中最大的一个,和第N-1 个元素交换……)
2.冒泡排序(采用的是相邻数两两进行比较的思想。如果后一个比前一个大或者小,则将其调换位置,直至所有的数都比较完)
(5).枚举
int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
(6).哈希数组用法
可以用来统计数值出现次数,可用来删除重复元素或判断是否有重复元素
(7).字符数组,字符串
特点:都以'\0'结束,数组长度要比输入的数据多一位
字符数组的输入
1.scanf输入(字符串没有空格的情况下,无须加&号)
2.fgets输入
2.PTA实验作业
2.1 7-6 简化的插入排序
2.1.1伪代码
2.1.2代码截图
2.1.3
#include<stdio.h>
int main()
{
int n, i, x, loc = 0;
static int a[9];
scanf("%d", &n);
for (i = 0; i <= n - 1; i++)scanf("%d", &a[i]);
scanf("%d", &x);
for (i = 0; i <= n - 1; i++)
{
if (x < a[i])
{
loc = i;
break;
}
}
if (i > n - 1)a[n] = x;
else
{
for (i = n; i >= loc + 1; i--)
{
a[i] = a[i - 1];
}
a[loc] = x;
}
for (i = 0; i <= n; i++)printf("%d ", a[i]);
}
我的代码比较简洁,他的代码更细致,容易读懂
2.2 7-14 找鞍点
2.2.1 伪代码
2.2.2 代码截图
2.2.3
差不多,差不多
2.3 7-6 切分表达式
2.3.1 伪代码
运用fgets输入字符串,切分单个字符判断,用printf("%c")输出单个字符
2.3.2 代码截图
2.3.3
总体思路差不多,老师的代码判断的时候更细致,条理更清晰,这需要我学习