0.展示PTA总分




1.本章学习总结

1.1 学习内容总结

  • 查找数据
    做法一:遍历数组,运用一个for()循环语句,若数组中有元素的值与此数据相等,则输出此元素。

    做法二:二分法,分别把此数据与比较范围内中间的数比较,若不相等,则对比较范围内上限或下限的下标做相应的变换,直到下限的下标大于上限的下标。

  • 插入数据:
    先选定数组中的一个元素,则从此元素开始往后,前一个元素的值赋给后一个元素,插入的数据则放在选定的元素位置上
    定义变量i,用以表示for()循环语句中选定元素的下标,则从数组中a[i]到a[n-1]这些元素中前一个元素的值赋给下一个元素,输入的数据x的值赋给a[i]

  • 删除数据:
    做法一:找到要删除数据的元素,则从此元素的后一个元素一直到最后一个元素,后一个元素的值赋给前一个元素

    做法二:再定义一个数组,把原数组中除此要删除元素之外的其他元素按照原来顺序放进去

  • 1.冒泡排序法:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。

    2.选择排序法:初始状态:无序区为R[1..n],有序区为空;第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;n-1趟结束,数组有序化了。


1.2 本章学习体会

  • 1.感觉一维数组还行,但二维数组内外循环的条件控制常常会搞错,觉得要学好字符数组首先要掌握好字符型数据的知识,要懂得字符串等相关概念。
    2.运用数组时思路很重要,但有时想法无法达到题目要求,会问舍友思路,然后自己再打一遍。

  • 时间 代码量
    两周 580行左右

2.PTA实验作业

2.1 7-1 将数组中的数逆序存放

2.1.1 伪代码

数据处理:定义一个一维数组,长度取上限10,定义变量temp用来交换数组元素的值,变量i用来控制数组元素的输入及交换,变量n表示输入的整数个数。
{
scanf(整数个数);
for (i = 0;i < n;i++)
{
  输入整数,存入数组中	
}
for(i=0;i<n/2;i++)  //控制交换次数
{ 
  用变量temp实现两元素内容的交换   
}
输出数组元素,注意第一项和其余项的输出
结束
}

2.1.2 代码截图


2.1.3 造测试数据


2.1.4 PTA提交列表及说明

提交列表说明:

1.测试点0和1答案错误;错用了嵌套循环,后通过使用三个独立的for()循环语句解决。
2.测试点0和1答案错误;第二个for()循环语句中条件语句出错,改了条件后解决。
3.全部正确


2.2 7-8 二分查找法

2.2.1 伪代码

数据处理:定义一个长度为十的一维数组,用来存放有序数列,定义变量key,表示要查找的正整数。变量high表示查找范围中最大数的下标,变量low表示查找范围中最小数的下标,变量middle表示查找范围中的中间数的下标,变量flag用来控制是否在有序数列中找到key值。
{
定义相关变量以及一维数组
scanf(key值);
while (low <= high)  //控制循环条件
{
if(数组中有元素的值等于key)   结束循环,按要求输出,同时把flag的值变为1	
else if(下标为middle的元素的值大于key)   下标high等于middle减一
else if(下标为middle的元素的值小于key)   下标low等于middle加结束
}
结束循环后,若flag的值为0,则按题目要求输出
结束
}

2.2.2 代码截图


2.2.3 造测试数据

输入数据 输出数据 说明
4 weizhi:3 sample
15 not found sample
2 3 1 输入两个数,中间空格隔开

2.2.4 PTA提交列表及说明

提交列表说明:

1.全部正确


2.3 7-7 冒泡法排序

2.3.1 伪代码

数据处理:定义一个长度为N的一维数组,变量n,k为题目要求输入的量,变量item用于交换数组元素,变量i,j,k用于控制相应循环次数。
宏定义N的值为101
{
定义相关变量及长度为N的数组
scanf(n,k的值);
通过for()循环语句把n个整数存入数组中
for()循环语句控制扫描次数K次
{
	嵌套for ()循环语句,实现遍历数组
	   {
		if (前一个元素的值大于后一个元素的值)
		   {
			通过变量item交换两个元素的值
		   }
	   }
}
使用for()循环语句实现数组元素的输出,注意第一项和其他项的输出	
结束
}

2.3.2 代码截图


2.3.3 造测试数据


2.3.4 PTA提交列表及说明

提交列表说明:

1.编译错误;输入变量n,k及数组元素时,scanf()语句中加了空格,去掉就可以了。
2.全部正确


3. 阅读代码

题目名:两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

代码截图:

  • 此代码功能:在一个整数数组中找出和为目标值的那两个整数,并返回他们的数组下标。
  • 可学习的地方:
    1. 可先运用动态分配内存的方法,分配好足够的内存空间后,再返回数组下标。
    2. 使用内外两个for()循环语句来对整数数组中的某个元素及其之后的元素进行扫描,并通过数组下标和if()语句来判断是否符合题目要求。
    3. 运用了强制类型转换,从而达到给整型赋值的目的。