一、PTA实验作业

题目1:

1. 本题PTA提交列表


2. 设计思路

    (2)if(输入的n为奇数){      
                for(行数小于n/2+1时){      
                      for(空格数等于n-2*k+1)                
                              printf(" ");
                      for(星号数等于2*k-1时)                          //上半部分菱形
                              printf("* ");
                      输完一行后换行;
                     }
                 if(中间行){
                      for(星号数等于2*k-1)                         //中间行
                       printf("* ");
                   输完换行;
                   继续k+1行;
                  }
                 for(行数小于n时){
                      for(空格数等于2*k-1-n时)         //下半部分菱形
                           printf(" ");
                      for(星号数等于n-2*(k-n/2-1)时)
                           printf("* ");
                      if(k不等于n)                    
                      putchar('\n');
                 }
            }
      
    (3)输入的n为偶数循环结束后,结束程序。

3.代码截图。

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 这道题目做了很久都没有通过,一开始没有考虑好空格数和行数的关系,输出来的下半部分菱形结果很乱;改正后有菱形的雏形了又发现菱形之间是有空格的;

  • 但是这道题一直过不了的原因是运行后和示例一样,但是一直显示格式错误;各种改空格,运行结果表面看不出有错误,用0代替空格后马上就可以看出问题了;

题目2:掉入陷阱的数字

1. 本题PTA提交列表

2. 设计思路

(1)定义i,number1为自然数,number2为对应的新的自然数,N为各个个位数,temp为每个number1值;
(2)输入number的值;
(3)while(temp不等于number2){                
             i++;                    
             用temp保留number1值;
             number2的值要重新赋为零;
             while(number1不等于0){      
                   N取个位;        
                   number2=number2+N;   
                   number1去个位;   
             }
             得到新的自然数number2
             按示例输出答案;
             number1=number2,进行下一次比较;
        }
(4)条件不满足时结束程序。

3.代码截图。

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 没有程序过程没有读好,number1=number2是为了把得到的新的自然数变成前一个数,进行下一个新的自然数的计算;但是把number1=number2放在while语句的前面就会出现错误,第一次开始时number2还不是新的自然数;把这条语句放到循环结尾就好了。

题目3:

1. 本题PTA提交列表

2. 设计思路

(1)定义变量flag用于判断是否出现错误,total储存运算结果,number为运算数,字符op为运算符
(2)输入运算数,并赋给total;
(3)while(运算符不是等号时,继续运算){  
             输入下一个运算数;            
             判断运算符{                 然后进行相应的运算 
             加号:
                  total=total+number;
                  结束判断;
             减号:
                  total=total-number;
                 结束判断;
             乘号:
                  total=total*number;
                  结束判断;
            除号:
                  if(除数不为0)           
                        total=total/number;
                  else除数为0时出现错误
                         flag=1;
                  结束判断;
            输入其它非法运算符出现错误:                  
                  flag=1;
                  结束判断
            }
       }
(4)输入运算符等号时:
         if(flag等于0)
              没有错误正常输出结果;
         else
               输出出现错误;
(5)结束程序。

3.3.代码截图。


4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 第一次出现一些编译上的小错误,关键词写错,输出的数写错;

  • 没有判断特殊情况,如果除法分母为0或有非法运算符,则输出错误信息“ERROR”;没有判断前:
    运行结果正常:

    分母为0: 有非法运算符:

    改正后:

  • 用flag来区分情况真的会方便很多,简单快捷,不然可能还需要另外判断和说明,导致代码可读性降低。

三、截图本周题目集的PTA最后排名。(2分)

PTA排名

四、本周学习总结(2分)

1.你学会了什么?

1.1 一维数组如何定义、初始化?

       定义: 类型名  数组名 [ 数组长度 ]
       初始化: 类型名  数组名 [ 数组长度 ] = { 初值表 };
        (初值表中依次放着数组元素的初值,规定只有静态数组才能初始化,如果没有系统会自动给元素赋初0)

1.2 一维数组在内存中结构?可画图说明。数组名表示什么?

  • 一维数组在内存中结构:
  • 数组名表示该数组所分配内存空间的首地址,是一个地址常量,不允许修改

1.3 为什么用数组?

  • 让一批相同类型的变量使用同一个数组变量名,用下标来相互区分。它的优点是表达简洁,可读性好,便于使用循环结构。

1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.

  • 选择法
     1.定义整型变量i,k,min,temp; 
     2.输入n;定义 a[n];
     3.for(i=0;i<n;i++),输入n个数;
     4. for(k=0;k<n-1;k++),min=k;
     5.       for(i=k+1;i<n-k;i++);
                      if(a[i]<a[min])    min=i;
               重复执行第5步骤,直到i=n-k为止;
               temp=a[k-1];      a[k-1]=a[min];        a[min]=temp;
          重复执行第4步骤,直到k=n时为止;
     6.输出n个元素数组的值。
  • 冒泡法
    1.定义整型变量i,k,temp,N; 
     2.输入n;定义 a[n];
     3.for(i=0;i<n;i++),输入n个数;
     4. for(k=0;k<n-1;k++),temp=k;
     5.       for(i=k+1;i<n-k;i++);
                       if(a[i]<a[temp])         
                              N=a[itemp];      a[temp]=a[i];        a[i]=N;
               重复执行第5步骤,直到i=n-k为止;
          重复执行第4步骤,直到k=n时为止;
     6.输出n个元素数组的值。
  • 直接插入排序
     1.定义整型变量i,k,bigger,temp; 
     2.输入n;定义 a[n];
     3.for(i=0;i<n;i++),输入n个数;
     4. for(k=0;k<n-1;k++),bigger=k;
     5.       for(i=k+1;i<n;i++);
                      if(a[i]<a[bigger]) 
                            for(j=k;j>=0;j--)
                                 a[ j+1]=a[ j ];
               重复执行第5步骤,直到i=n-k为止;
          重复执行第4步骤,直到k=n时为止;
     6.输出n个元素数组的值。

1.5 介绍什么是二分查找法?它和顺序查找法区别?

  • 二分查找法是在元素按从小到大排列的数组中查找一个数时,取数组的中间值判断是该数比要找的数大还是小,然后进一步锁定相应的范围,直到找到要找的数或者最后一个数并不是该数,没有找到该数。
  • 区别:顺序查找法是从第一个找到最后一个,直到找到要找的数或者最后一个数并不是该数,没有找到该数。顺序查找法比二分查找法要简介明了,更直接;但是二分查找法工作效率更高,如果数组元素比较多的话,顺序查找法的效率就会降低。

1.6 二维数组如何定义、初始化?

       定义: 类型名  数组名 [ 行长度 ]  [ 列长度 ]
       初始化: 类型名  数组名 [ 行长度 ]  [ 列长度 ]={ { 初值表 0 },...,{ 初值表 k },... };
        ( 分行赋初值,顺序赋初值)

1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。

  • 例: 用二维数组 a[ n ][ n ],除对角线上的元素以外,当i小于j时(上三角),a[ j ][ i ]=a[ i ][ j ];即可实现矩阵转置。
  • 上三角:i小于等于j;下三角:i大于等于j。

1.8 二维数组一般应用在哪里?

  • 只知道可以用二维数组表示矩阵,既然数组可以存放多组数据,应该很多方面都可以运用吧。

2.本周的内容,你还不会什么?

  • 字符的运用虽然还是不好,但是相比之前,现在稍微有点进步;像菱形的那道题可以接受,但是判断标识符还是有点问题;
  • 定义函数时传数组的地址的做法还不是很能理解;
  • 选择法、冒泡法、直接插入排序的区别还是不太清楚;
  • 二维数组的掌握还不是很好。
posted on 2017-11-26 21:43  EVOLYM  阅读(197)  评论(6编辑  收藏  举报