首页 > 编程语言 > 详细

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

时间:2018-12-08 23:09:47      阅读:670      评论:0      收藏:0      [点我收藏+]

1.本章学习总结

1.1 思维导图


技术分享图片


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

1.2.1 学习体会


  • 1. 自从接触到数组觉得难度瞬间变大了好多,是非常多,感觉到了各种绝望做题时候,各种错误,编译错误,答案错误,还有各种不知道哪里错了的错误。。。难度是真的大,而且题量觉得啊。。。也是多啊,程序的代码量增加了,题目的难度也越来越大,心塞(⊙v⊙)。
  • 2. 因为要复习线性代数,所以打代码的时间会少点了,然后再打代码的时候会发现生疏了,有一些明明本来理解的东西,开始敲代码的时候还是给忘记了,技术分享图片 ,还是老师说得对,得经常打代码,不然很容易忘记知识。
  • 3. 数组的运用还有与函数的结合,感觉得经常使用,这样子会熟练的运用函数与数组的结合,比如数组的传入,传入函数后,不仅要传数组地址,还要传输数组长度,在函数中不用再定义数组,因为书本上也没写数组与函数的运用,所以自己在平常的作业中要多使用,林丽老师平常也经常给我们示范函数与数组的结合使用,也建议我们要多使用。
  • 4.了解了很多以前没想过的地方,比如当要输出数据时候,要连输出数据的输出宽度都是变量时候,可以用 printf("%.f",c,d),其中为通配符,瞬间觉得这些变量都不一样(高大上)︿( ̄︶ ̄)︿ ( ̄︶ ̄)︿( ̄︶ ̄)︿
  • 5.后来老师又教会我们各种有关于字符数组的输入输出有关的函数。。。gets,fgets,scanf,printf懵逼,还有好多好多东西。。。然而啊太多了。。。自己就(⊙_⊙),老师还讲了一些数组排序常用的方法,比如排序法,冒泡法,选择法,二分查找法,哈希查找法,还有删掉数组中的某一个元素在进行重新排列,还有重造数组,还有进制转换的问题呢啊,还有很多,感觉。。。复(恶)(意)(满)(满) ε(┬┬﹏┬┬)3ε(┬┬﹏┬┬)3ε(┬┬﹏┬┬)3
  • 6. 做数组题目时候觉得很锻炼逻辑,有时候得考虑很多东西,小到各种细节地方,如格式,大到各种运用的方法关系到代码的可读性,需要考虑的地方不少,虽然老师也说过,我们有些方法需要自己考虑很多地方,她的方法看起来就比我们牛。

                                       我觉得我发际线变高了           

技术分享图片

1.2.2 代码累计

技术分享图片
技术分享图片

2.PTA总分

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



2.2 我的总分:

   
     总分:

3.PTA实验作业

3.1 PTA题目1

     一维数组 6-7 使用函数输出指定范围内的Fibonacci数  :
   在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。
    你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

3.1.1 算法分析

定义变量n为要输入多少个数,i为循环变量,flag为了控制输出
定义a数组,数组长度很大,用于存放要输入的数据,b数组数组长度为100001,为空数组 
输入n
for i=0 to n do
      输入 存放于a数组的值
end for
for i=0 to n do
      b[a[i]]++
      if b[a[i]]>1 then flag++
      endif
end for
if flag>0  then 输出 YES
else  then 输出NO
end if
   
 

3.1.2 代码截图

技术分享图片

3.1.3 PTA提交列表及说明

技术分享图片


 Q1:起初第一个函数的写法是正确的,所以才有一分,但是第二个函数不管怎么改正,还是一直输不出正确答案的数字
 A1.当要输入的数字很大时候,PTA会跳出运行超时,然后再找一个数组用来放置另一个数组的值,再利用flag的值来判断
 Q2.改了第一个的错误,后来本来正确的地方反而错误了
 A2.是另外一个数组的问题,后来问了舍友,老师也说了运用空间换时间的方法,然后把两个数组的长度都设置得很大

3.2 PTA题目2

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

3.2.1 算法分析

定义变量i,j,k为循环变量,n为设置n阶矩阵,flag为控制变量,max存放最大值,num1为存放行下标,num2为存放列下标 
定义a数组n-1行,n-1列
for i=0 to n do
      for j=0 to n do 
      输入 存放于a数组的值
      end for
end for
for i=0 to n   do
      max=a[i][0];
      for j=0 to n-1 do
            if max<=a[i][j+1]      then       //遍历行中每一个数字找行中最大的数字 
            max=a[i][j+1]
            num1=i
            num2=j+1
            end if
      for k=0 to n-1 do                        //遍历列中每一个数字找是否符合条件 
            if max>a[k][num2]     then
            flag=0   
                end if
 if flag==1   then 
     输出 鞍点行下表,列下标    
end if
else    输出NONE                
 

3.2.2 代码

技术分享图片
技术分享图片
技术分享图片

3.2.3 PTA提交列表及说明

技术分享图片


 Q一开始max的值一直在变,导致num1与num2的值也一直在变,max也不是一行中最大的数,因为我把max放在内循环内
 A1.在第二层外循环外定义max为每行第一个数,解决了max的值一直变化的问题
 Q2.当有鞍点的时候,并且是并列的时候,要输出最后一个鞍点
 A2.利用flag来解决问题,通过flag是否等于1来决定输出哪一个
Q3.段错误一直无法解决,不知道哪里出错了
 A3.问了舍友,让他看了代码,他发现了一个小错误,改变一下循环的条件。。。居然过了。。。<=n-1,改为<n-1

3.3 PTA题目3

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

3.3.1 算法分析

定义变量i=0 ,j
定义index系列用来存放下标,flag系列为控制变量 ,num系列为存放各个下标加减以后的新下标 
定义字符数组a数组n-1行,n-1列 
while  a[i]!=‘\0‘      //遍历数组寻找相对应的数组的下标 
do 
      if a[i]==‘.‘   then 
                index1=i
      end if
       if a[i]==‘@‘  then 
            index2=i;
       end if
       i++
for i=0 to a[i]  do     //找是否有不合法字符 
     if a[i]==‘ ‘   then 
    flag1=0;        
        break;
     end if
     else flag1=1
end for
if a[j]>=‘a‘||a[j]<=‘z‘||a[j]>=‘0‘||a[j]<=‘9‘||a[j]>=‘A‘||a[j]<=‘Z‘    then // @前后只能是字母或者数字     
    flag2=1 end if
j=index2+1;  //@的后一位 
if a[j]>=‘a‘||a[j]<=‘z‘||a[j]>=‘0‘||a[j]<=‘9‘||a[j]>=‘A‘||a[j]<=‘Z‘    then   // @前后只能是字母或者数字 
 
    flag4=1     end if
else flag4=0
num1=index1+1  num2=index1+2  num3=index1+3  num4=index1+4   //.后的三位数 
if   a[num1]==‘c‘&&a[num2]==‘o‘&&a[num3]==‘m‘&&a[num4]==‘\0‘  then    //.后只能是com 
    flag3=1
if  flag1==1&&flag2==1&&flag3==1&&flag4==1  then    输出YES  //只有4个控制变量都不为0时才符合题意 
    else   输出NO
 

3.3.2 代码

技术分享图片
技术分享图片
技术分享图片

3.3.3 PTA提交列表及说明

技术分享图片
***

 Q1..com后有多余字符忘记考虑了,还有字符串中有空格,合法地址后有非法字符忘记考虑了
 A1.通过在定义好多个flag和num还有index来解决,记住下标来解决他们前几位是否符合题意
 Q2..com后有多余字符一直出错
 A2.改了上面的问题,其他本来正确的测试点却错了
Q3.看错题目,把@的前后搞错题目意思,给写成了.的前后的条件
 A3.通过改变代码,直接再设一个flag4来判断@前后是否都是数字或字母

4.代码互评

4.1 代码截图

  • 同学代码截图
    技术分享图片

  • 我的代码截图
    技术分享图片

4.2 二者的不同

HE

   1.他先看要左移的次数是否可以求余,可以的话先求余,在确定最后要移几次
    2.建立两个数组,通过第二个数组来实现数组的循环左移
    3.控制输出格式时候,是利用循环的次数来控制空格的输出

ME

   1.我的代码利用了个变量temp,来将首位与最后一位进行交换
   2.通过一个for循环来实现在首位与最后一位之间进行m次循环,然后再将temp与第一位和最后一位进行循环,这样子也就相当于先进行中间循环再进行第一位与最后一位的变换

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

原文:https://www.cnblogs.com/zwl-/p/10088818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!