代码改变世界

C语言博客作业04--数组

2020-12-12 19:41  米奈希尔。  阅读(127)  评论(0编辑  收藏  举报

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业04--数组 |
| 这个作业的目标 | 学习数组相关内容。 |
|姓名 | 罗发槺 |

0.展示PTA总分


1.本章学习总结

1.1 学习内容总结

数组中如何查找数据

1.穷举法

int 数组
int 想要找的数
for i=0 to n
   if数组中有数和想找的数相等
      break;
      end for
if i>=n
没找到
else
找到

2二分法

适合于有序数组

数组中如何插入数据

int 数组num
int 插入的数x
for i=0 to n
      如果num[i]>插入的数
                交换这两个数
      if i=n
            num[i]=x;
      end if
end for

数组中如何删除数据

1.让要删的数等于他后面的数

输入要删的个数k
for i= 1 to k
      输入要删的数del
      for j=del to n
            num【j】=num【j+1】
      end for
end for

2.

数组中目前学到排序方法,主要思路?

1冒泡排序

两个循环,后面一个循环每次循环减一并且每次判断前面一个数是否大于后面一个数,是的话就交换两个数

2.选择排序法

在排序的n个数中找最小的数,将他和第一个数交换,然后在n-1个数找最小的数然后和第二个数交换,以此类推。

数组做枚举用法

1.查找需要的数

int 数组
int 想要找的数
for i=0 to n
   if数组中有数和想找的数相等
      break;
      end for
if i>=n
没找到
else
找到

哈希数组用法,目前学过哪些案例,举例展示。

1.利用哈希数组删除重复的数(只针对ASCLL值范围内)

      for i=0;是[i]!='\0'
            hash[s[i]]=1;
      end for
      for i=11 to 256
      if(hash[i]==1)
            输出 i
      end for

字符数组、字符串特点及编程注意事项
  • 1.fgets输入字符串
    固定格式fgets(自定义标识符;数组长度;stdin);
    可以输入空格,会比输入的字符长2,其中一个是回车,另一个是字符结束符。
  • 2.scanf("%s",自定义标识符(不用加&));
    不能输入空格,碰到空格结输入结束
  • 3.gets没用过,只知道它只有碰到结束字符或全部字符输入完才结束。所以容易出现段错误。

2.PTA实验作业(7分)

2.1 题目名1(3分)

选择一题一维数组相关题目。请认真写伪代码整理解题思路。自己代码和同学代码比较,说明各自代码特点。

2.2.1 伪代码
int 数组num
int 插入的数x
输入控制输入数的n
for i=1 to n
      输入数组中的数
end for
输入要删的数x
for i=0 to n
      如果num[i]>插入的数
                交换这两个数
      if i=n
            num[i]=x;
      end if
end for
for i=0 to n
      输出
end for
2.2.2 代码截图

我的代码截图

我同学的代码截图

我的思路:先判断要插入的x在那个数的后面,然后在判断的数和x交换,就这样一直判断并交换一直到第n-1,然后让第n个数等于x。
我同学的思路:先用循环试着历遍数组,逐个比较以找到插入数应该放的位置。在插入位置以后的数组元素依次右移一位完成。

2.2 题目名2(2分)

2.2.1 伪代码
定义控制循环变量i,j,k
定义方阵n
定义数组num
定义控制标志变量flag1,flag2
输入n
用for循环输入矩阵数
for i=0 to n
      for j=0 to n
            {
                  每次循环初始化flag1=1,flag2=1,
                  用for k=0 to k=n
                        if改行上有一个数比当前数大
                        fla1g=0;
                  end for
                  for k=0 to k=n
                        if改列上有一个数比当前数大
                           flag2=0
                  end for
                  if flag1&&flag2
                        输出行标列标
                        return 0
                  end if
            }
       end for
end for
输出 NONE
          
2.2.2 代码截图

2.2.3 请说明和超星视频做法区别,各自优缺点。

超星利用函数来找鞍点,我是直接找,但思路都基本一致,都是判断行完然后再判断列超星的优点就是利用找下标的方法,而我是判断数组元素,超星不用多定义标志变量,感觉少了一些变量更简洁凝练一些。

2.3 题目名3(2分)选择切分表达式这题介绍字符数组。并说明和超星视频做法区别。

2.3.1 伪代码
定义控制变量i
定义数组s
输入字符串s
输出s【0】
for i=1 to s【i】!='\0'
      考虑各种情况来设置条件限制输出
end for
2.3.2 代码截图

2.3.3 请说明和超星视频做法区别,各自优缺点。

感觉没什么区别,只不过超星是用函数来做的。