C语言博客作业04——数组

1.本章学习总结

1.1思维导图

1475011-20181208215507123-2118898820.png

1.2本章学习体会及代码量

1.2.1学习体会

这几周学习了数组,数组分为三大块:一维数组、二维数组和字符数组。数组相对于之前普通变量的好处就是可以储存数值,方便数据的二次运用。但是对于数组,我做起来就是处于一种:道理我都懂,逻辑也自我感觉没毛病,但是总有这样那样的小毛病,导致PTA中的题目过不了。做题的时候,要么是有思路,但不全对,要么就是一点头绪也没有,大多数的题目都是老师上课讲完之后照着老师写的样例照抄的。以至于我对做题开始产生了一种怠惰感与抗拒感,再加上最近线性代数考试就更没有心情做题,这点我要自我反省。现在线性代数考试结束了,我得把心收回来了,接下来好好做题,赶走消极学习心态,加油!

1.2.2代码累计

1475011-20181215141050978-1407050092.png

PTA总分

2.1截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分

  • 一维数组
    1475011-20181215141156725-822762463.png

  • 二维数组
    1475011-20181215142418361-1818367698.png

  • 字符数组
    1475011-20181215142308250-1758651981.png

2.2我的总分

一维数组:175
二维数组:105
字符数组:110
总分:390

3.PTA实验作业

3.1 PTA题目1

简化的插入排序 
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。

3.1.1 算法分析

定义数组长度N、插入数字X、数组a[11]
定义一个临时变量temp,令其等于N
for i=0 to N-1 do  //记下要插入的数字所在的位置
  if X < a[i] then
    temp=i
    break
  end if
end for    
for i=N to i=temp do  //倒着将X后的数后移
  a[i]=a[i-1]
end for
将X的值赋给a[temp]
for i=0 to N do
  输出a[i]
end for

3.1.2 代码截图

1475011-20181208221405919-2090467331.png

3.1.3 PTA提交列表及说明

1475011-20181208221425252-252641063.png

Q:出现的部分正确,那部分错在哪里?
A:上机考试的时候,我做到的这道题,跟我一开始做的时候一样,最大N,插在尾和N为1,插在尾,两种情况一直出现错误。考试的时候也一直没有解决。一直不知道问题出在哪。回来之后对比了我最开始的错误代码和正确代码,发现我一开始是因为没有对temp进行赋初值,将N赋给temp之后,就过了,然而考试的时候写的代码是将0赋给了temp,答案部分正确,将考试代码的0改为N,结果就对了。但是我没弄明白这两种不同复制的差别在哪,就先将题目写入博客园,若之后弄懂了,也可以回头补充。

3.2 PTA题目2

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

3.2.1 算法分析

定义一个字符数组expr[40],存放表达式,定义整型变量i
输入  表达式
if expr[i]=='-'||expr[i]=='+' then   //正负号在初始位置
  输出 expr[i]
  i++
end if
while expr[i]!='\0' do
  if isdigit(expr[i]) then    //判断运算数
    if i==0||(i==1&&(expr[0]=='-'||expr[0]=='+'))     //正负号在开头
      输出 expr[i]
    else if isdigit(expr[i-1])||(expr[i-1]=='-'&& !(isdigit(expr[i-2])))||expr[i-1]=='.'  //各种情况的运算数
      输出 expr[i]
    else
      输出 换行符加expr[i]
    end if
  else if expr[i]=='.'    //出现小数点
    输出 expr[i]
  else 
    输出 换行符加expr[i]
  end if
  i++
end while

3.2.2 代码截图

1475011-20181215133420377-1945994643.png

3.2.3 PTA提交列表及说明

1475011-20181215133438600-1061363403.png

Q:一开始部分错误的原因
A:一开始的时候,没考虑那么多,漏掉了存在小数和正负号在开头的情况。
Q:为什么选择这题
A:这题其实不难,但是要考虑的方面很多,而且需要一定的逻辑,往往碰到这种题目都会不耐烦做,就想着放博客上提醒自己。

3.3 PTA题目3

二维数组每列排序
一个4×5的整型二维数组,从键盘输入数据,并对该数组的每一列按从小到大的顺序排列后输出。

3.3.1 算法分析

定义整型变量i、j、k、min、temp、index=0、整形数组a[4][5]
for i=0 to 4 do
  for i=0 to 5 do
    输入 a[i][j]
  end for
end for
for j=0 to 5 do
  for k=0 to 3 do
    index=k
    for i=k+1 to 4 do
      if a[i][j]<a[index][j] then
        index=i
      end if
    end for
    temp=a[index][j]
    a[index][j]=a[k][j]
    a[k][j]=temp
  end for
end for

3.3.2 代码截图

1475011-20181215135749629-1309582904.png
1475011-20181215135757456-2055817566.png

3.3.3 PTA提交列表及说明

1475011-20181215135806847-2128314538.png

Q:这道题的错误分析
A:这道题跟之前的上机考试的一道题很像,当时那道题我一直没想到我错在哪。做这道题的时候 ,我用了跟考试时一样的方法做,一直是答案错误,然后就有认真检查了一遍代码,发现我的思路一直是错的,排序的时候,我只是将每列的数两两比较,这样做根本就不能从小到大排列。写下这题,提醒自己这个思路误区。

4.代码互评

4.1 代码截图

  • 同学的代码
    1475011-20181215142806741-1903079781.png
  • 我的代码
    1475011-20181215142836544-1485016234.png

4.2 二者的不同

  • 方法上
    • 我调用了函数来做
    • 该同学直接将代码放入主函数中
  • 思路上
    • 我定义了一个含有1-100000数值的数组,将不为0的数组相加,若数组数等于输入个数,则没有重复数据
    • 该同学的思路是,只要出现一个数组的值为二就输出“YES”并结束程序

转载于:https://www.cnblogs.com/Lay-549/p/10088218.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值