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)。前者不会输入空格和换行符,后者会输入空格和换行符。两者结束符都为''。
    若定义字符数组为静态则无法改变其值。

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 做法区别

思路大致相同,但我对于分支条件的判断过于零散,而视频中的判断则更加清晰,更有层次感。

原文地址:https://www.cnblogs.com/Rex7478/p/14130691.html