zoukankan      html  css  js  c++  java
  • 博客作业

    1.本章学习总结

    1.1 思维导图

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

    1.2.1学习体会

      通过这一周的学习,让我明白了指针的重要性,在很多时候运用,会使得代码功能强大。  但我发现,可以用指针的地方,可以用数组,我比较喜欢用数组写,可能是刚刚学习指针,不怎么熟悉的结果。以后的学习中要多运用指针打打代码,这样把这种新的方法通过锻炼,熟悉起来。指针里面重点是处理字符,字符串的问题,我学会了好几个处理的字符串的函数。比如复制strcpy,赋值strcat连接函数,strcmp比较函数,strlen长度函数。这几个函数在处理很多字符串的问题上可以起到很强的作用。今后的学习中要多用指针,多学习一点string文件里面的函数。减少代码的复杂度。
    

    1.2.2代码累计

    2.PTA总分

    2.1

    2.2我的总分:

    总分 :110

    3.PTA实验作业

    3.1题目介绍

    3.1.1算法分析

    定义字符串长度longth;存放尾数poem数组; 输入二维字符数组char 
    - for i=0 to 4  
            scanf("%s",s[i]);//读入
    
    - end for
    
    - for i=0 to 4  //遍历
    	 - longth = strlen(s[i]);//计算每一行的字符串长度
    - 以下2个字节按顺序存放形成汉字
    	 - poem[2*i]= s[i][longth-2];//最后一个汉字的第一个字节存放
    	 - poem[2*i+1]= s[i][longth-1];//最后一个汉字的的第二个字节存放
    
    - end for
    
    

    3.1.2代码截图

    3.1.3测试数据

    3.1.4PTA提交列表和说明

    Q:不知道怎么处理汉字的存放,没理解汉字是如何输出的。
    A:百度后知道了汉字分2个字节存放,连续的2个字节输出就可以打印出一个汉字,然后就用到这种办法,把最后一个字拆分,一个字节一个字节,按顺序存放在一个数组中,形成一个大的字符串,就是结果。

    4.大作业(5分)

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

    4.1改进内容:

    1.构造字符数组存放算术表达式

    2.表达式运算

    4.2改造函数介绍

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

    1.函数1
    
    传入实参 存放算术式的数组exp的地址,用户等级rank, 用户训练题目量num;
    定义 算式和值sum,答对题数yes=0;用户输入值yournum ,循环变量i , 判断是否结束变量flag;存放运算符字符数组char
    - for i=1 to num 
    - do switch rank;
    - case 1://生成一级运算式
     - *(exp+0)=rand()%9+'1';
    - *(exp+1)=ch[rand()%2];//随机产生- + 运算符 生成随机0,对应运算符“-”;随机1,对应运算符“+”
    - *(exp+2)=rand()%9+'1';
    - *(exp+3)='';   break;  //末尾存入.方便运算
    - case 2://生成2级,原理和一级相同
    - *(exp+0)=rand()%9+'1';
    -  ...... 					
    - *(exp+2)=ch[rand()%4];//随机产生4种运算符
    - *(exp+3)=rand()%9+'1';
     - ......       
    - *(exp+5)=ch[rand()%4];
    - *(exp+6)=rand()%9+'1';
    - ...... 
    - *(exp+8)='';   break;
    - case 3://生成3级,原理和一级相同
    - *(exp+0)=rand()%9+'1';
    - ...... 
    - *(exp+11)='';  break;                 
                       
    - end switch  
    - strcat(exp,"=");//连接等号
    - puts(exp);//输出运算式
    - sum=ComputerExp(exp);//调用计算函数计算结果 
    - 嵌入输出的代码,包括结果,正确率等
    - end for
    
    
    截图函数代码:
    函数代码参考上述构造字符数组存放算术表达式
    

    2.函数2

    
    传入存放运算符的数组地址exp
    定义 循环变量i;循环累加值m ; 总和值sum ;存放运算符oldc;
    - do while(*(exp+i))//遍历运算式数组exp
    - if *(exp+i) <='9'&& *(exp+i)>='0' )   then  m=10*m+*(exp+i)-'0';//当字符属于数字时,字符运算把每一个字符转化为数字  
    - else   
    - do switch(oldc) //否则则为运算符。调用switch语句分别进行运算
    - case '+': sum=sum+m;break;
    - case '-': sum=sum-m;break;
    - case '*': sum=sum*m;break;
    - case '/': sum=sum/m;break;
    - end switch
    - m = 0;//运算完后m归0,方便下一次运算
    -  oldc = *(exp+i);//存运算符,方面下一次计算
    -  i++;
    
    - end while
    - return sum;//返回结果 ,方便调用运算结果
    
    
    截图函数代码:
    函数代码参考上述构造表达式运算
    

    4.3 与原有函数代码比较

    改造前函数1和改造后的函数1

    1.改造前的函数3个级别分别要用3个函数分别构造,但是改造后的函数一个函数就可以解决3个级别的问题,
    2.改造前的函数每一种级别都要进行复杂的代数运算,很多个case,一步一步的进行运算,改造后的函数,不管哪一个级别,都可以统一用一个计算函数运算出来,结果返回就行。
    3.改造前的函数,输出提示一个级别运用一次,多次使用了相同的东西,变量每个函数都要定义。改造后的函数,所有的变量,都只要定义一次,另外的函数要用就直接传递实参给函数,直接使用。
    4.改造前的函数没有使用指针地址,改造后的函数使用了地址,在重复使用一个相同的数的情况上,改造后的函数方便很多,可以直接*取地址,直接使用,但是改造前的函数如果要使用,必须定义全局变量。
    5.改造前的函数不管变量上。代码量上都比改造后的函数复杂。改造后的函数简单的2个函数就可以完成所有功能。
    6.改造前的函数输出是这样:



    改造后函数,一个输出函数,一个表达式直接puts(exp)!!!非常方便,简洁!

    改造前函数2和改造后的函数2

    1.改造前的函数运算是这样的:



    改造后的运算函数:
    直接用 m=10m+(exp+i)-'0',这条语句,处理了所有的运算!
    可见用字符数组存放后用字符运算的强大!它的优点很明显,不管一位数,二位数,一步,二步,都可以一下子处理完,不需要分开!

    4.4 改进大作业总结

    回顾两次作业编写过程,总结碰到问题及后续程序编写注意事项。
    总结:第1次编写大作业的时候,很疑惑函数的构造,由于对函数的使用不是很熟悉,所以我第一次并未使用传参数的函数,所有的变量都是在每一个函数定义,虽然在编写的时候简单了很多,但是繁琐很多了,很多变量都重复的在使用,其效果等同与全局变量的使用。在编写的过程中,会碰见取随机值不满足位数的情况,在以后的编写中,要多运用函数传参数的写法,避免多次定义相同变量,只需要在主函数中定义一次,然后可以传参数多次使用。使用函数有个问题,就是多次使用同一个数据,要重复调用,不怎么方便。
    第2次的作业:把全局变量改为地址,函数改为地址传参数,解决了第一次编写大作业的问题,只要有函数的地址,重复使用很方便,但是编写的时候也遇见了传参数出现错误的情况,比如定义形参的类型,在使用存储运算表达式的函数中,我想把和sum直接用在另外一个函数,出现错误。原因是这个sum变量是局部变量,不能够和别的函数共享,所以我想到了返回的方法,把sum作为函数的返回值。这样一更改,我的函数头名void又忘记了更改成对应的整形去定义函数,又出现错误,经过同学的指点,才发现了这一点问题。今后的编写中,要注意形参的传递要符合,有返回值函数不能够定义void。局部变量的值不能够给别的函数使用,如果要用,要用全局变量去定义,或者通过返回值使用!

  • 相关阅读:
    1012 The Best Rank (25 分)(排序)
    1011. World Cup Betting (20)(查找元素)
    1009 Product of Polynomials (25 分)(模拟)
    1008 Elevator (20 分)(数学问题)
    1006 Sign In and Sign Out (25 分)(查找元素)
    1005 Spell It Right (20 分)(字符串处理)
    Kafka Connect 出现ERROR Failed to flush WorkerSourceTask{id=local-file-source-0}, timed out while wait
    flume、kafka、avro组成的消息系统
    Java23种设计模式总结【转载】
    Java编程 思维导图
  • 原文地址:https://www.cnblogs.com/zhouqb/p/10128946.html
Copyright © 2011-2022 走看看