| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业04--数组 |
| 这个作业的目标 | 学习数组相关内容 |
| 姓名 | 杨振鹏 |
1.本章学习总结
1.1 学习内容总结
- 查找数据
1.顺序查找:遍历数组,逐个判断
2.二分查找:必须为正序的数组,每次取一个中间值判断所需值与其大小,在左右两个区间内确定一个再次去中间值。。。
#define M 10
#include <stdio.h>
int main(){
int a[M]={-12,0,6,16,23,56,80,100,110,115};
int low,mid,high,b,found;
low=0;
high=M-1;
scanf("%d",&b);
while(low <= high){
mid=(low+high)/2;
if(b == a[mid]){
found =1;
break;
}else if(b>a[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
if(found ==1){
printf("The index of %d is %d",b,mid);
}else{
printf("There is not %d",b);
}
return 0;
}
- 插入数据
需要插入位置之后的所有元素后移
输入数据
for(遍历数组)
if(a[i]==date)
index=i找到插入位置
for(i=index;i<n;i++)将该位置以后的数据往后移一位
end for
输出更改后的数组
- 删除数据
1.数据左移:
for (j=1; j <= k; j++)
{
scanf("%d", &x);//输入需要删除元素的位置
for (i = x-1; i < n-1 ; i++)
{
a[i] = a[i + 1];
}
}
2.再定义一个数组:
int a[n]
int b[n-1]
scanf("%d",&index);//输入需要删除元素的位置
for(i=0;i<n;i++)
{
if(i<index)
{
b[i]=a[i];
}
else
{
b[i]=a[i+1];
}
}
- 排序方法
1.冒泡法:相邻的数两两比较,前者比后者大就互换位置,最大换到最后,次大换到倒数第二。。。。。
2.选择法:遍历数组每次找本次最大的元素的下标,与最后一个元素互换,第二次与倒数第二个换。。。。。 - 枚举:能约束元素的值
int a[5]={0,1,2,3,4};
没用过
- 哈希数组
统计元素重复数量
1~9:
int n;
int a[10]={0};
for(元素总数)
{
scanf("%d",&n);
a[n]++;
}
A~Z
char ch;
int n;
int a[26]={0};
for(元素总数)
{
scanf("%c",&ch);
n=ch-'A';
a[n]++;
}
- 字符数组、字符串特点及编程注意事项
输入:
scanf("%s",&a);
上述结尾为'\0';
fgets(a,10,stdin);
上述结尾为'\n''\0',不够则没有'\n'
2.PTA实验作业
2.1 7-1 将数组中的数逆序存放
- 2.1.1伪代码
输入数据
for 0 to n-1
从数组最后一个元素开始输入
end for
正向输出数组元素
- 2.1.2代码截图
- 2.1.3同学代码
这个同学的代码是先将数组正序输入,然后第一个元素跟最后一个交换。第二个跟倒数第二交换,中规中矩。
我的有点投机取巧,不过很快啊
2.2 7-15 阅览室
- 2.2.1伪代码
输入数据
for 0 to n-1\\统计的天数
for(输入一天内的借还情况)
if 书号为0 break;
end for
for(遍历数组)
if (出现'S')
for (遍历接下来的数组元素)
if(同书号+E)计入时间,次数+1
if(同书号+S)S改为E
end for
end for
计算平均阅读时间
输出
end for
- 2.2.2代码截图
- 2.2.3超星
前面和超星差不多,到计时那里不太一样,我巧妙的把同书号S后的S改为E,解决了问题,超星上的遇到没换后的S选择跳出循环,再寻找S
2.3 7-6 切分表达式——写个tokenizer吧
- 2.3.1伪代码
输入数据
for(遍历数组)
if(第一个字符为-或+)直接输出
else if(出现数字)
for(寻找之后是否为数字或小数点)若是接着输出,最后换行
else if(出现不为第一个元素的-号时,且前面元素为(,后面的元素为数字)输出不换行
else 输出换行
end for
- 2.3.2代码截图
- 2.3.3超星
差不多差不多