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

    C语言博客05--指针

    1.本章学习总结

    1.1 思维导图

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

    1.2.1 学习体会

    在本周的学习过程中,我们学习了指针的用法。说实话,指针的用法有点绕,之前一直没搞懂指针的传参,不懂指针与数组之间的关系和用法,导致做PTA时很吃力,最后还是先静下心把课本和笔记再看了一遍,才分清楚他们的用法。但是对于指针的运用还是很不熟练,并且思想上第一时间不会去考虑使用指针,且觉得指针相对于数组比较麻烦,可能是我们现在接触的题目还没有体现出指针的优势吧。
    

    1.2.2 代码累计

    2.PTA总分

    2.1截图PTA中函数题目集的排名得分

    2.2 我的总分:

    总分:125分

    3.PTA实验作业

    3.1 PTA题目1

    给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
    函数接口定义:
    char *fun (char *s, char *t );
    其中 s和t 是用户传入的参数。函数求 t指针所指的字符串在s指针所指的字符串中最后一次出现的地址,并返回,若未找到,则函数值为NULL。
    

    3.1.1 算法分析

    • 定义i,j,k为循环变量
    • 定义count=0来统计字符串的有效长度,flag来控制返回值
    • 定义字符型指针p;
    • 用for循环统计传入的字符串的有效长度
    • for i=0 to s[i]=='' do
      • count++;
    • end for
    • 遍历字符串数组(母串)for i=0 to s[i]='' do
      • 用k来控制子串的序号k=0;
      • for j=i to s[j]不等于t[k]或s[j]='' do
        • if 子串结束t[k+1]='' then
          • 令p指针指向s[j-count+1]所在的地址;
          • 令flag=1;
        • end if
      • end for
    • end for
    • 若找到子串,则返回在字符串中最后一次出现的子字符串的地址;
    • 若找不到,则返回NULL;

    3.1.2 代码截图

    3.1.4 PTA提交列表及说明

    • Q1:第一次做的时候,认为是用指针先指向母串,然后再到最后一个字串出现的地方停下来,再返回指针所在的位置,但是我发现这样很难实现.
    • A1:按上面的思路来,指针会随着遍历母串移动,很难确定什么时候是最后一次出现子串,所以此路不通。思路是没有问题的,可以稍微换一下实现的方法,可以先找出子串出现的最后一次地址,再令p指向最后一次出现子串的地址。
    • Q2:当找到最后一次出现子串时,令p=&s[j]为什么不对?
    • A2:当时的s[j]表示的时子串的最后一个字符,应该再减去子串的有效长度。

    4.大作业

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

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

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

    改进内容:
    1.构造字符数组存放算术表达式
    2.表达式是否合法
    对于不合法或者超出该级别小学生学习范围的表达式,视为不合法,需重造一个。不合法表达式体现有除数为0的表达式、1,2级别中出现不能整除的除法表达式或其他不合法情况

    4.1.改造函数介绍

    1.函数1

    伪代码

    传入num1,num2,op,指针posture;
    定义算式的答案result;
    定义一个临时数组temp,用于存放由数字转换成的字符;
    利用_itoa函数,num1由整型转换成字符型;        //_itoa函数的具体用法 ——itoa(num,str,base)将num按十进制转为字符串存在str中
    将temp复制到posture;
    通过判断op随机得到的值,来赋予op运算符号;
    if op=0 then
        result=num1+num2;
        将posture与‘+’连接起来;
    end if
    if op=1 then
        result=num1-num2;
        将posture与‘-’连接起来;
    end if
    if op=2 then
        result=num1*num2;
        将posture与‘*’连接起来;
    end if
    if op=3 then
        result=num1/num2;
        将posture与‘/’连接起来;
    end if
    将num2转换为字符并存在temp中;
    将posture与由num2转换后的temp连接;
    将posture与‘=’连接;
    返回result;
    第二、三级一次相似 
    

    代码截图

    2.函数2

    伪代码

    在等级1的除法运算若产生的表达式不合法,则重新产生一个表达式
    

    代码截图

    待上一个函数返回result的值之后
    if result为小数 then
        清屏
        返回到等级1中,重新生成一个式子
    end if
    

    4.3 与原有函数代码比较

    函数1:
    先前的代码:

    改进之后的代码:

    1.改进前的代码是用数字进行输出,而改进之后的数组是用字符数组存放
    2.改进前有多个输出口,而改进之后代码使每一个等级的式子的输出都只有单一出口,改进之后的代码提高了代码的运行速率和可读性
    

    函数2:
    (由于之前并没有实现这个功能,我就直接截图后来的代码)

    这段代码可以有效的避免出现不符合用户做题的式子,提高了用户的体验感。但是从代码上看,因为用了goto out,所以是代码的可读性下降了。并且,若过多是使用goto out很容易造成混乱。但是我还没想到怎么用指针来实现该功能。
    

    4.4 改进大作业总评

    因为在对指针的用法不熟悉,所以这次的大作业我做的非常吃力。并且并没有将整个大作业全部改为指针,主要是我认为,在这些部分,直接传参就可以解决了,不需要硬用指针。
    还有就是在改的过程中,卡在了不知道如何将整型转换为字符串。后来,,,,上网问完百度之后,发现用一个——itoa函数就可以轻轻松松解决,所以,学会利用百度这个巨大的资源库是一个非常重要的技能。
    
  • 相关阅读:
    jquery总结01-基本概念和选择器
    git学习笔记总结
    git学习笔记12-标签管理-版本
    vue 图片下载到本地,图片保存到本地
    Failed to mount component: template or render function not defined.
    javascript 错误监控
    javascript 跨域 的几种方法
    解决跨域脚本攻击 XSS
    标准时间转YYYY-MMM-DD
    javascript时间戳和日期字符串相互转换
  • 原文地址:https://www.cnblogs.com/yhy949/p/10134128.html
Copyright © 2011-2022 走看看