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。局部变量的值不能够给别的函数使用,如果要用,要用全局变量去定义,或者通过返回值使用!

  • 相关阅读:
    CentOS7与CentOS8一些区别
    windows下bat脚本记录
    windows server AD增加自定义属性
    vsphere6.7为虚拟机添加硬盘报“目标数据存储 不在存储容器中。”错误
    linux 常用的命令
    CentOS7开机无法启动,报 Failed to load SELinux policy. Freezing错误
    SpringCloudAlibaba笔记06
    SpringCloudAlibaba笔记05
    接触CrackMe 第一个
    HOOK钩子
  • 原文地址:https://www.cnblogs.com/zhouqb/p/10128946.html
Copyright © 2011-2022 走看看