| 这个作业属于哪个班级 | 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超星
    差不多差不多
Posted on 2020-12-13 13:46  RocEye  阅读(156)  评论(0编辑  收藏  举报
Live2D