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

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 个人总分:

总分:415

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与第一位和最后一位进行循环,这样子也就至关于先进行中间循环再进行第一位与最后一位的变换
相关文章
相关标签/搜索