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

| 这个作业属于哪个班级 |


| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 | 学习数组相关内容 |
|姓名|喻文康|

0. 展示PTA总分


1.本章学习总结

1.1 学习内容总结

  • 数组中如何查找数据,有哪些做法?

1.顺序查找法:假设要查找的数为x,在数组a[100]中逐个查找,立一个flag=0没找到的标志,在for循环中确定flag的值,if(flag1)找到,if(flag0)未找到。
2.二分查找法:前提是数组元素必须是有序的。假设要查找的数为x,在数组b[100]中查找,定义mid为数组的中间位置,用while(low<=high)通过x与b[mid]的大小比较,
决定左移或者右移或者找到x直接输出(也可以使用int型函数,返回结果)。

3.注意:当数组存放的数太大时,想要查找数据,用顺序查找法就会显的鸡肋,程序运行的效率也会很低,所以务必掌握二分查找法,这种方法在后面的删除/添加数据也会用到。

  • 数组中如何插入数据,怎么做?

数组不擅长插入(添加)和删除元素。数组的优点在于它是连续的,所以查找数据速度很快。但这也是它的一个缺点。正因为它是连续的,所以当插入一个元素时,
插入点后所有的元素全部都要向后移;而删除一个元素时,删除点后所有的元素全部都要向前移。
代码截图:

  • 数组中如何删除数据?
    方法一:(已知要删除的数的下标,在原数组上进行删除操作)

    方法二:(已知要删除的数的值,在原数组上进行删除操作)

    方法三:(已知要删除的数的下标,将删除后的数组存放到一个数组中并输出)

    方法四:(已知要删除的数的值,将删除后的数组存放到一个数组中并输出)
  • 数组中目前学到排序方法,主要思路
    1. 冒泡排序:

    2. 选择排序:
  • 数组做枚举用法,有哪些案例

PTA题目:7-5 调查电视节目受欢迎程度 :
某电视台要调查观众对该台8个栏目(设相应栏目编号为1~8)的受欢迎情况,共调查了n位观众(1≤n≤1000),现要求编写程序,
输入每一位观众的投票情况(每位观众只能选择一个最喜欢的栏目投票),统计输出各栏目的得票情况。

PTA题目:7-8 有重复的数据I:
在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

  • 哈希数组用法,目前学过哪些案例

简单说来,hash就是为了把一个复杂的字串,通过一定的转换,得到一个简单的数字(通常是数字)。
由于目前对hash数组仍不够了解,所以目前就拿来用作统计。
PTA题目:7-3 删除重复字符:
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

PTA题目:7-7 A-B :

  • 字符数组、字符串特点及编程注意事项

scanf()输入

注: 用scanf("%s",a);函数输入字符串时,可以不必加取地址符。遇到空格、tab、换行自动结束。
若输入的字符串的长度小于定义的长度,则未赋值的位置自动放'\0'作为结束语,且数组有且必须有'\0'结束字符。

fgets()函数输入

注:用fgets(a,5,stdin);函数输入字符数组时,遇到空格、tab、换行同样会输入,不会结束,
并且同scanf()函数一样,数组必定以'\0'结束。

字符型数组存放数字时要使用其存放的值
因为在使用字符型数组时都会转化成数组内存放的ascall码值,如果要使用它存放的数字,就要按这样进行编译:

即str[i]-'\0'。

2. PTA实验作业

2.1 7-5 调查电视节目受欢迎程度

2.1.1伪代码

2.1.2 自己的代码截图

2.1.3 同学的代码截图


在输入时就开始了统计,省去了一个for循环,减少了程序运行时间,注释详细,值得学习。

2.2 7-14 找鞍点

2.2.1 伪代码

定义n为n维数组,i, j, flag = 0。
定义num[6][6]。
定义choice函数来找鞍点
输入n
for i = 0 to n - 1
for j = 0 to n - 1
输入数值赋予a[i][j].
end.
进入choice函数
for j = 0 to n - 1
x=0
for i = 0 to i = n - 2
如果num[i][j] > num[i + 1][j], temp = num[i + 1][j];x = i + 1;y = j;
否则temp = num[i][j];x = i;y = j;
end
for i = 0 to = n - 1
如果temp < num[x][a],则不是鞍点,end
否则是鞍点
end
如果flag == 1,输出x,y。
如果flag == 0,输出NONE。

2.2.2 代码截图

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

自我感觉和超星的做法差不多,但发现自己对变量的控制和运用还不是很熟练,自己 定义了很多变量,而超星中老师的做法却反复运用一个变量,觉得自己这方面还是有很多不足

2.3 7-6 切分表达式——写个tokenizer吧

2.3.1 伪代码

Char ch[42]//定义数组存放表达式,因为后面用fgets函数,所以留两个空位分别给’\n’和’\0’
Int i=0//确定数组中的位置
fgets函数输入字符
While循环//一直读到字符数组中的’\n’
{
每一行输出一个字符
‘(‘的后面如果跟着’-’,那么’-’与后面的数字在同一行输出
数字字符的后面如果还是数字字符或者是’.’(小数点)的话则(不换行)继续输出,并将位置(即i向后移),再重新进入该判断分支
}
end while

2.3.2 代码截图

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

在看完超星视频的做法后觉得思路特别清晰,对比自己的做法,感觉自己没有明白token的意思,没有用token来建立条件,而自己的判断语句很散,思路也比较乱
超星视频学习感想:可以发现自己代码的不足,或者说能够看到更为清晰的程序思路,而且里面的代码很值得借鉴。

posted @ 2020-12-13 10:37  Y-smile  阅读(297)  评论(0编辑  收藏  举报