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

1.本章学习总结

1.1思维导图

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

1.2.1学习体会

    最近在学线性代数,以前没有把线性代数学好,学了两周的线性代数,C语言的学习就落下了,打算在考完线性代数后把学习的重心转向C语言。上次上机考试没考好,总结原因在于很多很基本的东西在考试的时候遗忘了,不单单是练得少,书上的习题操作得少,上周末我用一天时间把书上数组的习题包括注释全部通过编译器打在电脑,发觉课本知识很基本,考试知识很灵活。

1.2.2代码累计

2.PTA总分(2分)

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

2.2 我的总分:

433分

3.PTA实验作业(6分)

3.1 PTA题目1

    第一行输入两个整数,第一个表示数组长度,第二个表示左移位数,第二行输入数组,求左移后的数组

3.1.1 算法分析

  int n,k;//表示数据n表示数组长度,k表示左移位数
  scanf(n,k);
  if(k>n) k=k%n//通过交换数组实现数据左移,通过求余求出数组的长度
  int a[k],b[n-k];//建立两个数组,调换顺序输出达到数据左移的目的 
  int i;
  for(i=0;i小于k;i++)
     scanf(a[i]);
  end for
  for(i=0;i<n-k;i++)
    scanf(b[i])
  end for
   for(i=0;i<n-k;i++)
        if(i不等于0)then 输出空格
        end if
        输出 b[i]
  end for
      if k不等于0  then 输出空格
  for(i=0;i<k;i++)
       输出a[i]
     if(i!=k-1)  then 输出空格
     end if
  end  for

3.1.2 代码截图

3.1.3 PTA提交列表及说明

  • Q1:一开始没有弄明白数组的关系,胡乱作答
  • A1:后来理清思路,往左移其实就是数组拿出一部分放到右边
  • Q2: 当k大于n 时出现错误
  • A2:仔细思考,用求余解决问题

3.2 PTA题目2

输入n个数组,判断是否为上三角形

3.2.1 算法分析

  输入count统计矩阵数目
  for(i=1;i<=count;i++)
              输入行列数row
              定义a[row][row]阶矩阵
              输入数组
           for(j=1;j<row;j++)//判断是否为三角矩阵
              for(k=0;k<j;k++)
        	            if(a[j][k]!=0)    then flag=1;//不是 矩阵,flag=1
                       end if 
               end  for
          end for 
          if 不是第一行  then 换行
          if  flag 为1  tjen输出NO
          else 输出yes 
  end for 

3.2.2 代码

3.2.3 PTA提交列表及说明

  • Q1:这题看起来很简单,实际上我在编译器里调试了很多遍,之前对矩阵的个数考虑不充分,对二维数组运用不熟练,使得我的时间被白白耗费
  • A1:孰能生巧别无捷径,多调试几次得出正确答案

3.3 PTA题目3

输入一个字符串,判断是否是合法邮箱,输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO。

3.3.1 算法分析

  int judge1(char *p);//判断单个字符是否全部合法 
  int judge2(char *p);//判断@周围的字符是否合法 
  int judge3(char *p);//判断.后的字符是否合法 
   int main()
        输入数组a
         if(judge1(a)==0)   then printf("NO");//判断邮箱是否合法 ,合法输出YES,否则输出NO 
   	      else if(judge2(a)==0)    then printf("NO");
   	          else if(judge3(a)==0)    then  printf("NO");
   	                      else printf("YES");
                            end if
                       end if
             end if 
  end 
  int judge1(char *p)
       for(;*p!='\0';p++)
             if(数字不是字母、数字、下划线、@以及.)then return 0
              end if
       end  for 
       return 1
  end
  int judge2(char *p)
       for(;*p!='\0';p++)
            if(@两边的数不是数字或者字母)then return 0;
            end if
       end for
        return  1
 end
  int judge3(char *p)
       	for(;*p!='\0';p++)
              if(.后面不是com)then return 0
              end if
         end for
         return 1
  end

3.3.2 代码


3.3.3 PTA提交列表及说明

  • Q1:没考虑到单个@出现的情况
  • A1:修改条件,一旦@周围没有字符,这判定邮箱不合法
  • Q2: 没有考虑到 . 后的com后还有字符
  • A2 :增加一个限定条件,一旦com后有字符则判定邮箱不合法
  • A3:本题良心出品的解题步骤,有指针有数组有函数,综合性强。

4.代码互评

4.1 代码截图

同学代码:

我的代码:

4.2 二者的不同

  • 1.我的代码运用函数指针数组,整体而言主函数更加精简,结构清晰。
  • 2.同学的代码几乎全部放在主函数中,显得冗余。
  • 3.同学的代码有gets输入数据,同时考虑到空格的情况,想法周密。
  • 4.相对来说我的注释会详细很多,代码更加通俗易懂
posted @ 2018-12-08 20:05  1112+  阅读(191)  评论(0编辑  收藏  举报