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

1.本章学习总结

1.1 思维导图

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

1.2.1 学习体会

  • 这一阶段学习了关于指针的知识,对于指针,个人感觉它比之前学习的知识更加抽象,更加难理解。
  • 这阶段也挺累的,最近学的知识包括指针都是在没预习的情况下老师直接开始上课了,学起来有点儿吃力。但好在可以通过课堂派pta的作业来训练对指针的运用。
  • 很多人都说指针是C语言的灵魂,所以可以突出它的重要性,虽然它很难搞清楚,但是也要努力去学好它。
  • 学了指针之后相比之前有更加好的解题思路,没学指针之前用数组比较多,调用函数时直接把整个数组传过去,但是学了指针之后,可以直接传地址就可以了。
  • 指针最大的优点就是可以提高编程的质量,也就是代码的效率。所以要好好学习对指针的运用。

1.2.2 代码累计

2.PTA总分

2.1截图PTA排名得分

2.2 我的总分:

  • 110分

3.PTA实验作业

3.1 PTA题目1

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

3.1.1 算法分析

  char op[500001];//定义最大情况
  int i,j,len;
  int count=0;//定义计算每个单词的长度
  int flag=1;//控制空格输出
  gets(op);//得到字符串
  len=strlen(op);//得字符串的长度
  for  i=len-1  to  0 //遍历字符串
      if   op[i]!=' '   then   count++   end if  //计算每个单词的长度
      if   op[i]>='A'&&op[i]<='Z'   then
                 //控制空格输出
                 if   flag==1   then   flag=0; end if
                 else  输出空格
                 for  j=i   to  i+count  输出单词  end for
                 count=0//重新计算下一个单词的长度
      end if
      //对最大的情况进行输出      
      if  count>0  then   输出空格
                   for   i=0  to  count   输出单词   end for
      end  if                     

3.1.2 代码截图

3.1.3 PTA提交列表及说明

Q1:第一次提交格式出错,有看了看题目,才发现结尾不可以有空格
A1:后来定义flag来控制空格的输出,第一个单词前不输出空格,后面的单词前都需要输出空格。
Q2:没有考虑到最后一个测试点,就是最大的时候可能没有开头的大写字母就结束了,这样没遇到大写字母就没法输出。
A2:后来继续去考虑count是否大于0,如果大于0就说明还有单词没有输出,再把最后那个输出即可。

4.大作业

4.1.改造函数介绍

1.函数1

begin://以防输入非法字符,可以重新输入
int i=0,j,answer;
double totalTime;//计算每题的答题时间
char op[4]={'+','-','*','/'};定义字符串来随机生成符号
if level=1 then
    生成一步一位数加减乘除计算式,并储存
    end if
else if level==2 orlevel==3 then
    生成两步2/3位加减计算式,并储存
    end if
if  strlen(exp)==3  then//判断是否可以整除,不可以则重新生成表达式
		if  !IsExp(exp)   then  goto begin  end if
end if


2.函数2

int flag=1//控制输出
if  运算符是除号时  then  
    if  结果不能被整除时  flag=0;  end if
end if
if  运算符是减号时  then  
    if  前一个数大于后面一个数时  flag=0;  end if
end if
return flag;

3.函数3

int m,sum=0,i,answer;
char oldc='+';
if  strlen(exp)==3  then//如果是第一级别的情况
   if  中间的符号是+  then  answer=前面的数+后面的数  end if
   if  中间的符号是-  then  answer=前面的数-后面的数  end if
   if  中间的符号是*  then  answer=前面的数*后面的数  end if
   if  中间的符号是/  then  answer=前面的数/后面的数  end if
end if
else//如果是第二,三级别的情况
   for  i=0  to  strlen(exp)
         if  字符在0到9之间  then
             m=10*m+(*(exp+i)-'0');//求每个数的数值
         end if
        else //字符不在0到9之间  
            if  oldc=='+'  then  sum=sum+m;   end if
            else  sum=sum-m;  end else
            m=0;
            oldc=*(exp+i)
         end else
   end for
  answer=sum;
end else
return answer;

4.3 与原有函数代码比较

  • 原来的代码





  • 两者不同:主要的不同就是之前的函数运用得不好,这次有好好运用函数了。改造之前我的创建表达式的代码都是在每个级别的函数里面,之前的代码运用函数使用得不好,整个程序就只有三个函数,分别就是每个级别各一个函数,这样写可读性很差,虽然有达到要实现的功能,但是三个代码里面有很多重复的代码,可以使用函数将代码进行重新构造,就像这次写的代码,就有重新构造了函数,使代码的可读性更好,性能也更加好
  • 两者优点:新函数的分块实现功能很明显比旧函数有更好的可读性以及拓展性,实现分块包装函数,如果有出现错误的话可以更加简单的进行代码的改进,不用到处找哪里出错,很明显的就可以看出哪里出错了。而且如果要对代码进行升级的话,分块包装函数的作用就更明显了。
  • 二者缺点:虽然大部分完成了所需要的功能需求,但是还是存在bug,函数之间参数的传递连接不能够很好的衔接,功能有待完善。且由于函数之间的调用,函数中还嵌套着函数,使函数不便阅读。旧函数的缺点就更明显了,功能集中导致代码很长且各个函数之间有许多重复的内容,可读性差,拓展性也很弱

4.4 改进大作业总结

  • 第一次写大作业时,由于刚学函数没多久,对函数的使用方法不是很了解,使用第一次的大作业只有三个函数,就是不同级别的函数分装在不同的函数里,但是这样的话定义变量的时候又要重新定义与之前相同的变量,导致代码的可读性很差,拓展性也很弱
  • 到了第二次写大作业时,思路由于之前就有了,所以相对于之前有比较轻松,而且这次使用了函数分装的写法,使代码看起来更规范更有可读性。但对于函数的的使用方法还是有点不懂,形参实参的传递以及函数怎么使用还是不太熟练,可能是题目做得不够多,再加上平时的作用都是直接写,很少去使用函数,所以才会导致现在函数使用不是很明白。但好在通过这次的大作业使我对函数的使用有更加深刻的理解,用了函数的分装之后发现,代码看起来美观多了,而且每个函数的功能明确,要修改代码的时候更加的方便,而且如果要拓展函数的话,只要在定义新的函数即可,在进行函数的连接,很快就可以完成函数的拓展。

posted on 2018-12-17 20:26  拜伦。  阅读(331)  评论(1编辑  收藏  举报

导航