1.本章学习总结


1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

  • 通过数组的学习懂得对整组数据的存放与调用,解决了针对录入一串数据的问题。通过数组的学习可以解决很多之前碰到的问题,并且可以对之前写过的题目进行修改,简化程序
  • 数组的定义在刚开始碰到时还是比较模糊的,常碰到越界或者忘记初始化的问题,这可能会导致程序错误或者崩溃。需要进行调试,规定好数组的边界,或者是可以通过定义更大一些的数组,保障程序的弹性。
  • 从这章开始整体的学习节奏都加快了,pta题目的难度也加大了,常出现就是一题卡很久。像螺旋方阵、阅览室、身份证这种题目时常会出现卡带。在做题的过程当中,如果遇到死结(写阅览室写一晚上都不对)就要学会适时的重新整理框架,或者休息一下整理思路再来,否则就会在先入为主的思维上陷入死循环。接下来碰到的题目只会更难更灵活,要多思考多整理。

1.2.2 代码累计


2.PTA总分(2分)

2.1



2.2 我的总分:

  • 200+105+150=455

3.PTA实验作业

3.1 PTA题目1

7-11(集美大学程序设计赛题--选做) 除法运算 (25 分)
趣航的上机题
给定两个整数a,b,计算a/b
要求:
若能除尽,则直接输出,若为循环小数,将循环节用括号括起来
如输入1 3,则输出0.(3)
如输入12 5,则输出2.4

3.1.1 算法分析

    定义 num1 num2 循环节开始和结束的位置 position1,position2
	定义 整数位integer 小数位 remainder ,i,j,flag用于控制循环
	定义两个数组 a[10000],b[10000]
	integer=num1/num2;//求解整数位
    remainder=num1%num2; //判断是否能整除
	if remainder!=0   //不能整除有小数位 
	   for i=0 To 9999
	   remainder*=10;
	   a[i]=remainder/num2;//求小数位
	   b[i]=remainder%num2;
	   if b[i]%num2 整除
	   end for
	   end if
	   for j=0 To i
	       if a[i]=a[j] && b[i]=b[j]//当所得商和对应的余数再次出现时,循环节出现 
		       position1=i,position2=j;
			   break;
		   end if;
	   end for;
	输出 整数位
	输出 小数位 

3.1.2 代码截图


3.1.3 PTA提交列表及说明

  • Q:如果没有循环节或者直接整除,答案出现错误
  • A:对于除法的答案进行判断,分为整除,循环和能除尽的小数。

3.2 PTA题目2

7-4 阅览室 (20 分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。

3.2.1 算法分析

定义 days 天数 times 次数 number 编号 choice 类别
定义 sendTime 借阅时间 
定义 a[1001][3] 书号 借阅情况 flag[1001][3]
输入 days
for times=1 To days 
    输入 书号 状态 时间
	while !=0 
		if choice=S 
		flag[number]=1;//借阅标记
		a[number][1]=60*hour+min;
		end if
		if choice=E
	 	   if flag[number]==1 //被标记状态为借阅  
	   	       a[number][2]=60*hour+min;
       	       flag[number]=0;//初始化
               sendTime+=(a[number][2]-a[number][1]);//两时间差的累加
               count++;//记录册数 
           end if 
      	end if
 	再次录入信息
    end while
    if count!=0 输出 count sendTime 
    else 输出0 0 
    全部初始化 
end for 

3.2.2 代码


3.2.3 PTA提交列表及说明

  • Q:连续借阅出现问题
  • A:利用赋值,更新数据
  • Q:最大边界值出现问题,测试点过不了
  • A:书号最大时1000,但是在数组当中的计数是从0开始的,所以第1000号是1001位,越界了。改大数组即可。
  • Q:如果只有借阅或者只有归还,需要自动过滤掉相关信息。
  • A:引用flag[]数组,标记每一本书籍是否被借阅的状态,如果被借阅,则归还有效,反之无效。在此要注意每一天都要对于书籍的借阅情况清空处理。

3.3 PTA题目3

7-7 判断E-mail地址是否合法 
输入一个字符串,判断是否是合法邮箱(格式正确即可,不管是否真的存在)输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO。

3.3.1 算法分析

定义 position1 @出现的位置 position2 .出现的位置
定义 i,flag,len数组长度 a[100]存放邮箱的字符型数组
gets(a);
len=strlen(a)
for i=0 To len-4
    if a[i]=@ position1=i flag=1
    end if
end for
if flag=1;
   for i=0 To position1;
       if 有非法字符 flag=0 break;
	   end if
   end for;
if flag=1;   
   if 结尾!=.com flag=0 break; 
   end if
if flag=1;
   if @前后为非法字符 flag=0 break;
   end if
if flag=1 printf yes;
else printf no;  

3.3.2 代码


3.3.3 PTA提交列表及说明

  • 一开始没找到测试点的位置,没弄清楚邮件地址的定义 出现123@1.234.com 也是正确的邮箱的情况
  • 判断第一个.出现的位置,如果不是在.com的时候出现,就是错误的邮箱。

4.代码互评

4.1 代码截图

康友煌同学的代码

07的代码


4.2 二者的不同

  1. 康友煌同学所采用的思路是,当数字自增至所要的数值之后,结束程序。而我是通过螺旋方阵的输出规律,按次数输出。如找到的规律是,一共上下左右需要转2n-1次,再通过次数,进行相应的变化。
  2. 两端代码在中间数据的处理上是差不多的,主要就是控制变化的方法上不太一样。(刚开始我尝试的也是康友煌同学的这种写法,但是输出上总是出现问题,后来发现是我行列不分emmmm,所以才用了后来的这种比较赘余的方法)
  3. 康友煌同学的代码比较简洁,但是从直观上来讲我的代码思路会更加“暴力”一些,适合我这种没办法比较直接写出比较便捷的方法的同学。但是我的这种方法如果碰到图形输出,是需要经常去思考的一个途径。两种途径都需要掌握叭。
posted on 2018-12-08 22:19  Salcious  阅读(539)  评论(0编辑  收藏  举报