C语言博客作业04--数组
| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C语言博客作业04--数组 |
| 这个作业的目标 | 学习数组相关内容 |
| 姓名 | 韩龙飞 |
0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
-
一.查找数据
1.非顺序字符串
顺序查找法:输入要找的数,并用for循环逐一进行查找,以flag作为标志,若flag=1则输出该数所在位置,若flag=0则不输出。
2.顺序字符串
二分查找法:输入要找的数,每次取数组的中间数,和要找的数做比较,并以此决定中间数左移还是右移,直到找到该数或者中间数超过区间范围。 -
二.插入数据
将数据插入的同时需要将插入数据的后面的所有数后移。
int temp
int x//插入的数据
int 数组a
for i=0 to n
if num[i]>x
then temp=a[i];a[i]=x;x=temp;
if i=n
then a[i]=x;
end if
end for
- 三.删除数据
1.已知删除的值的下标
int a[10];
int i;
int x;//要删除的数
for i=0 to 10
if i<x-1
then a[i]=a[i];
else
a[i]=a[i+1];
end if
end for
2.已知删除的值
int a[10];
int i;
int temp;
int x;//要删除的数
for i=0 to 10
if a[i]<a[x-1]
then a[i]=a[i];
else
a[i]=a[x-1];
temp=x-1
a[i]=a[i-temp]
end if
end for
3.利用另一数组存放并输出(删除值)
....
for i=0 to 10
if a[i]<a[x-1]
then b[i]=a[i];
else if a[i]==a[x-1]
then temp=x-1
b[i]=a[i-temp]
end if
end for
- 四.排序方法
1.冒泡排序法
2.选择排序法
-
五.枚举
-
六.哈希数组
删除重复字符(https://pintia.cn/problem-sets/1333242386859208704/problems/1333242566023106562)
-
七.注意事项
字符数组在输入时有两种方式,一种是scanf(%s,&a)
另一种是fgets(a,10,stdin)
。前者不会输入空格和换行符,后者会输入空格和换行符。两者结束符都为'\0'。
若定义字符数组为静态则无法改变其值。
2.PTA实验作业
2.1 调查电视节目受欢迎程度(https://pintia.cn/problem-sets/1330058343355297792/problems/1330058720679079941)
2.1.1 伪代码
定义a[8] = {0},i,j,n
for i = 0 to n - 1
输入编号j
if j>0&&j<9
then a[j-1]++;
end if
end for
for i=0 to 7
输出编号i+1和数组a[i];
end for
2.1.2 代码截图
2.1.3 同学代码
优点:结构单一简单,不用想就能写出来。
缺点:占用行数过多,重复的代码太多。
2.2 找鞍点(https://pintia.cn/problem-sets/1330058343355297792/problems/1330768737686310915)
2.2.1 伪代码
定义 n,i,j,k,a[10][10],max,col,row,flag
输入n
for i = 0 to n - 1
for j = 0 to n - 1
输入矩阵
end for
for i = 0 to n - 1
flag=1;
max=a[i][0]
for j = 0 to n - 1
if a[i][j]>=max
then do max=a[i][j]; row = i; col = j;
end if
end for
for k = 0 to n-1
if a[k][col]<max
then do flag = 0; break;
end if
end for
end for
if flag==1
then do 输出row和col
else
do 输出NONE
end if
2.2.2 代码截图
2.2.3 做法区别
与视频中演示的方法思路基本一致。
2.3 切分表达式(https://pintia.cn/problem-sets/1333242386859208704/problems/1333242566023106563)
2.3.1 伪代码
定义i,字符数组a
输入表达式
定义字符pre
for i to a[i]等于'0'
if '0'<=a[i]<='9'或者a[i]等于. then
do 输出a[i]
else if a[i]等于*或者等于/或者等于(或者等于)
do
if '0'<=pre<='9' then
do 输出 a[i]
else
do 输出a[i]
else if a[i]等于-或者等于+
do
if '0' <= pre <= '9' then
do 输出 a[i]
else if
do 输出 a[i]
else
do 输出a[i]
end if
pre=a[i]
end for
2.3.2 代码截图
2.3.3 做法区别
思路大致相同,但我对于分支条件的判断过于零散,而视频中的判断则更加清晰,更有层次感。