C博客作业04--数组

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

0.展示PTA总分(0----2)


1.本章学习总结

1.1 学习内容总结

  • 数组中如何查找数据
    1 .将需要查找的数据和数组中的数组逐一对比;
    2 .构建一个新的初始化后的数组,把原数组套入其中,如果找到,则对应的新数组加一。

  • 数组中如何插入数据
    输入数据用循环语句与数组进行比较找到插入位置
    将插入数据后的数组整体向后移动
    再将数据插入数组中
    以pta数组7-6为例

if(x<num[0])then[num[0] = x]
/*如果输入小于最小数组*/
else if(x > num[N - 1])then[num[N] = x]
/*如果输入大于最大数组*/
else 
1. for i←0 to n   
    1. if (x >= num[i] && x <= num[i + 1])   
        1. for (i ← N - 1 to j)  
            1. num[i + 1] = num[i]  
        2. num[j + 1] = x  
        3. break 
/*如果输入在数组之间*/
  • 数组中如何删除数据
    1 .针对数组位置:构建一个新数组保存需要删除的位置;保存后再一一对应的位置上一次次左移。
    例如pta数组7.9

    2 .针对数组元素:可以构建哈希数组,对哈希数组上的值赋0或1;再根据判断进行输出。
    例如pta字符数组7.3

  • 数组中目前学到排序方法
    1 .选择排序法:以从大到小为例,将第一个数与后面的数对比,若是比他大则调换,经此一轮可以得到第一位的最大数,在经过一轮得到第二位的第二大数,以次类推,完成排序。
    代码如下

    2 .冒泡排序法:以从大到小为例,将第一个数与第二个数对比,若第一个数比第二个数大,进行一次调换再将第二个和第三个数对比,若第二个数比第三个数大,再进行调换,以此类推,则第一轮结束后可得到最大的最后一位数,再经一轮得到第二大的倒数第二位数,以此类推,完成排序。
    代码如下

  • 数组做枚举用法的案例
    查找整数
    选择排序法
    找鞍点
    删除重复数据
    统计语句中的单词

  • 哈希数组用法及案例
    用法:定义一个新的整型数组为哈希数组,将其他字符数组中的字符值与哈希数组相关联,再根据哈希数组中的值来以此实现对数组的操作。
    案例:计算字符串A-B

    删除重复字符

  • 字符数组、字符串特点及编程注意事项。
    字符串常量是用一对双引号扩出来的字符序列;
    一个字符串结束符'\0'=0;
    scanf(“%s”,str)无法接收带空格的字符串;
    fgets函数能接收带空格的字符串。

2.PTA实验作业

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

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

2.1.1 伪代码

输入num
/*num为观众的调查数*/
for i←0 to num 
do
1. 输入n[i]
2. if (num[i]>0 && num[i]<9)then [count[num[i]]=count[num[i]]+1]
/*输入num个数给n[1] n[2]、、、n[num],输入各观众的评分,并统计各分数的次数*/
for i←0 to num 
do
1. if (i != 0) then [ printf("%4d", i);printf("%4d", count[i]);]
2.  if (i != 8 && i != 0) then [printf("\n");]
/*将数值输出*/

2.1.2 代码截图

2.1.3 展示同学的代码


他的代码注释详细,也更加精简,值得向他学习。
但是我们的变量名也因为图方便都设的很简单,这点我们需要改进。

2.2 找鞍点

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。

2.2.1 伪代码

输入n
/*n为矩阵的阶数*/
for i←0 to n-1
do
1. for j←0 to n-1
   do
   1.输入number[i][j]
/*对矩阵数组number赋值*/
for i←0 to n-1
1. l=0
2. for j←0 to n-1
    1. if (number[i][j] >= number[i][l]) then [l=j]
3. for m←0 to n-1
    1. if (number[m][l] < number[i][l]) then [break]
    2. if (number[i][l] <= number[m][l] && m == n - 1) then [printf("%d %d", i, l);flag = 0;]
/*找出鞍点*/
if (flag == 1) then [printf("NONE");]
/*如果没有鞍点时输出NONE*/

2.2.2 代码截图

2.2.3 和超星视频做法的区别

思路基本一致,但是超星有封装成函数。

2.3 切分表达式

四则运算表达式由运算数(必定包含数字,可能包含正或负符号、小数点)、运算符(包括+、-、*、/)以及小括号((和))组成,每个运算数、运算符和括号都是一个token(标记)。现在,对于给定的一个四则运算表达式,请把她的每个token切分出来。题目保证给定的表达式是正确的,不需要做有效性检查。

2.3.1 伪代码

输入字符数组str
for i←0 to  str[i]!='\n'
1. if (str[i + 1] == '\n') then [printf("%c", str[i]);break;]
/*处理末尾字符*/
2. if (i == 0 && str[i] == '+') then [printf("%c", str[i]);continue;]
/*处理第一个为正数带符号的情况*/
3. if ((str[i] < '0' || str[i] > '9')&& str[i] != '-' &&str[i]!='.') then [printf("%c\n", str[i]);]
/*处理只占一行的符号*/
4. else if(str[i] == '-' && (str[i-1] < '0' || str[i-1] > '9')) then [printf("%c", str[i]);]
/*处理负数符号*/
5. else if ((str[i] >= '0' && str[i] <= '9'&& str[i+1] >= '0' && str[i+1] <= '9') || str[i] == '.' || str[i+1] == '.') then [printf("%c", str[i]);]
/*处理非个位数数字*/
6.else printf("%c\n", str[i]);
/*处理运算符*/

2.3.2 代码截图

2.3.3 和超星视频做法的区别

思路还是差不多,都是去找规律去判断,但是还是没有封装成函数。

posted @ 2020-12-13 16:17  51456  阅读(298)  评论(0编辑  收藏  举报