zoukankan      html  css  js  c++  java
  • C语言博客作业5--指针

    C语言博客作业5--指针

    1.本章学习总结(2分)

    1.1思维导图

    请以思维导图总结本周的学习内容,如下图所示:
    

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

    1.2.1学习体会

    描述本周学习感受,也可以在这里提出你不理解地方,对教师教学建议等。
    
    感觉指针真的像指针一样,好绕,让我不能理解,甚至很懵,课后重新看了书,看视频后,理解了一点点,可对于题目,这远远不够啊!深刻的记得星期五晚上,一直在做一个题目,还是做不出来(真的好绝望),问了其他同学也没有解决,第二天早上起来,想到了它还没有做完,就看看,还是不能解决,于是我想到了百度!结果按百度上的做法也是错的!真的好无奈!
    

    1.2.2代码累计

    在excel中画如下表格,保存好,复制到博客随笔。注意要累计所有代码量。
    

    2.PTA总分(2分)

    2.1截图PTA中指针题目集的排名得分

    贴图展示。
    

    2.2我的总分:70分

    填写本次题目集的总得分。
    <span style ="color:red">注意,请把PTA代码展示给批阅助教,并能完整回答助教问题,才能得满分。否则根据回答情况给分。</span>
    

    3.PTA实验作业(1分)

    从PTA中选1题你最满意的题目,题目选难度越大,分值越高:
    

    3.1PTA题目1

    简要介绍题目,如:
    
    7-2 说反话-加强版 (20 分)
    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
    输入格式:
    测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
    输出格式:
    每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
    输入样例:
    Hello World   Here I Come
    输出样例:
    Come I Here World Hello
    
    

    3.1.1算法分析

    以伪代码方式描述算法思路。伪代码注意文字+C语法方式描述,不要纯C代码或者C代码直接翻译,能做到看了伪代码就知道你的思路是如何。
    
    char t[MAX];     //定义一个字符数组
     while ((s=getchar()) != '
    ')     //getchar每次读入一个字符 
    {
         if (s != ' ')
        {
                flag = 1; //表示输入的不是空格
         }
        else if (count > 0)
       {
                continue;       //满足则跳过下一条语句
       }
        else if (flag)
       {
                t[i++] = s;     //只有之前遇到单词的情况下碰到空格才把这个空格写入目标字符串  
      }
      for (i-=1; i>=0; i--)     //i-=1.i=i-1,最后一个标号为i里面是不存东西的 
      { 
            if (t[i] != ' ') 
            {
                count ++;       // 用 count 统计单词中字母的个数 
            } 
           else if (t[i]==' ' && count > 0)
           {
                for (j=i+1; j<=i+count; j++)
                {
                        printf("%c", t[j]);        //遇到空格就输出单词 
    
                 }                                         
                printf(" ");
                count = 0;
            }
        }                       // 还剩最后一个单词没输出,因为最后一个单词可能前方无空格 ,只完成了count++,但是没有遇到 空格,那么逻辑是一样的 
        for (j=i+1; j<=i+count; j++)
        {
               printf("%c", t[j]);      // 倒序输出字符。
         }
    

    3.1.2代码截图

    贴图展示代码,不要复制,如
    

    3.1.3PTA提交列表及说明

    根据提交列表,简要描述下调试程序碰到的问题及解决办法。
    

    Q1:出现编译错误和格式错误。
    A1:定义的数组的长度太小了!编译过不去。
    Q2:最后一个测试点过不了,运行时错误。
    A2:找同学的代码来看,比较代码的不同。
    

    4.大作业(5分)

    题目:实现小学四则运算。

    在函数那章,我们已经实现小学四则运算这份作业,现在要求大家把之前设计函数升级改造,原来的函数大家都是用全局变量实现不同函数参数传递,这次作业要求改地址传递,减少全局变量的使用。
    

    题目要求:

    题目有3个难度级别,分别为:
    
       第一级是1位数的一步加减乘除计算
       第二级是2位数的2步加减运算
       第三级是3位数的2步加减运算
    

    改进内容:

    • 1.构造字符数组存放算术表达式
    • 2.表达式是否合法(选做)
    • 3.表达式运算

    4.1 改造函数介绍

    主要上述三个函数的改造说明
    

    函数1

    • 伪代码介绍函数思路
    把随机数存放到一维数组里面
    
    • 截图函数代码。

    函数2

    • 伪代码介绍函数思路
    产生随机运算符,把运算符存放到字符数组ch[2]里面,求出式子结果;
    
    • 截图函数代码。

    函数3

    • 伪代码介绍函数思路
    Num(class);
    op(class,Num);   //调用两个函数生成式子;
    if(grade==1)
    {
                   srand(time(NULL));
    		k=rand()%4;
    		switch(k)
                    {
                           case 0~3:
                                               ch[0]='  ';
    		                          result=q[0]+q[1];
    				          break;
                     }
    }
    else
    {
                  srand(time(NULL));
    		k=rand()%4;
    		switch(k)
                    {
                                case  0~3:
                                                ch[0]='  ';
    			                    ch[1]='  ';
    			                    result=q[0]+q[1]+q[2];
    				             break;
                      }
    }
    return result;     //返回结果;
    
    • 截图函数代码。


    4.2 与原有函数代码比较

    • 改造前函数1和改造后的函数1
      文字说明2者不同及区别,优缺点。
    改造前:
             不同点:代码直接生成随机数就放在哪儿了,没有返回给主函数。
             优点:代码简洁易懂。
             缺点:代码的步骤基本一样,有点浪费代码行,代码量相对较少。
    改造后:
             不同点:用指针把玩家的等级传进来,把随机数存放到一个数组里面。
             优点:不用使用全局变量来进行计算。
             缺点:在这个函数需要多定义几个变量,和定义一个一维数组。  
    
    • 改造前函数2和改造后的函数2
      文字说明2者不同及区别,优缺点。
    改造前:
             不同:  产生随机运算符和题目都放在一起。
             优点:都放在一个函数里, 整体感很强。
             缺点:代码拢堆在一起,让读者不太好阅读。
    改造后:
             不同:把结果,运算符和式子分开;
             优点:看起来更清晰。
             缺点:分散在两个函数里,使读者跳跃性的阅读,函数调用太繁琐。
    
    • 改造前函数3和改造后的函数3
      文字说明2者不同及区别,优缺点。
    改造前:
              不同:和随机数和运算符放在同一个函数里。
              优点:不用调用其它函数就可以完成。
              缺点:一个函数里的代码行太长,不好阅读,会让读者产生厌恶感,不想读下去。
    改造后:
              不同:单独放在一个函数里面,随机数和运算符通过传参进来,随机数放到一个一维数组里。
              优点:随机数放到数组再用指针传进来使用,大大提高效率和减少了相同步骤的多次运行,也减少了代码量。
              缺点:用指针容易出错。
    

    4.3 改进大作业总结

    回顾两次作业编写过程,总结碰到问题及后续程序编写注意事项。
    
        在编程过程中会碰到,在函数调用传参的时候会有问题,会出现“expected  primary-expression  before 'int'的错误,我不知道这是什么错误,注意:在编程量大的时候要注意花括号对齐,不然容易缺少。函数调用之前一定要声明。在使用变量之前要定义,防止后面忘记了。一定要理清传参的关系。
    
  • 相关阅读:
    Codeforces Round #249 (Div. 2) D. Special Grid 枚举
    图论二
    C语言中的atan和atan2(转)
    BestCoder Round #79 (div.2)
    数学
    LCA
    二分图
    动态规划
    线段树
    树状数组
  • 原文地址:https://www.cnblogs.com/Gejkdj/p/10112114.html
Copyright © 2011-2022 走看看