zoukankan      html  css  js  c++  java
  • 第五次作业---指针

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

    1.1 思维导图

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

    1.2.1 学习体会

    实际上还是没怎么明白该怎么用指针,指针的题集实际上都是用数组写的,感觉没什么区别又好像很有区别,令人头疼。感觉进度好快,有点赶不上,题集刷得慢,概念不清晰,甚至连有的编译错误都因为概念上的不清晰难以找出错误。整个写题过程都充满了不确定,不自信,不明白。明明自己写得没有问题,但却老觉得都是问题。特别难受。如果光是看的话,多多少少是可以看明白的,自己写就有一点点悬。
    

    1.2.2 代码累计

    2.PTA总分(2分)

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

    2.2 我的总分:

    110分
    

    3.PTA实验作业(1分)

    3.1 PTA题目1

    字符串的冒泡排序

    3.1.1 算法分析

    int i,j;
    int N,K;
    char s[110][20],temp[20];
    scanf("%d %d",&N,&K);
    i from 0 to N   scanf("%s",s[i]);
    i from 0 to K
        j from 0 to N-i-1
          if(strcmp(s[j],s[j+1])>0)       //字符串比较
            strcpy(temp, s[j]);              //字符串复制
            strcpy(s[j], s[j+1]);
            strcpy(s[j+1], temp);
          end if
    i from 0 to N     printf("%s
    ",s[i]);
    

    3.1.2 代码截图

    3.1.4 PTA提交列表及说明


    - 整个代码就是对字符串函数运用理解不够清晰,所以老是错,本来整体是不会有什么大问题,但是因为理解不清晰,所以有的时候直接进行比较或者=,就导致结果总是不对。

    4.大作业(5分)

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

    题目要求:
    题目有3个难度级别,分别为:

    第一级是1位数的一步加减乘除计算
    第二级是2位数的2步加减运算
    第三级是3位数的2步加减运算
    改进内容:
    1.构造字符数组存放算术表达式
    不管哪个级别的算式,请都生成一个字符数组存放。不管用户选择哪个级别题目,都能在表达式生成函数中生成一个算术式子。具体函数接口
    j=0;
    exp[j]=rand()%9+1;
    j++;
    cr[0]=ch[rand()%4];
    exp[j]=rand()%9+1;
    j++;
    printf("%d%c%d",exp[0],cr[0],exp[1]);
    printf("=");
    2.表达式是否合法(选做)
    对于不合法或者超出该级别小学生学习范围的表达式,视为不合法,需重造一个。不合法表达式体现有除数为0的表达式、1,2级别中出现不能整除的除法表达式或其他不合法情况

    double calculate(int *exp,char *c,int n)
    {
    double answer=0;
    int i;
    answer=exp[0];
    for(i=1;i<n;i++)
        switch(c[i-1])
      {
    	 case '+':answer+=(double)exp[i];
    	 break;
    	 case '-':answer-=(double)exp[i];
    	 break;
    	 case '*':answer*=(double)exp[i];
    	 break;
    	 case '/':if(exp[i]!=0) answer/=(double)exp[i];
    	else  printf("ERROR
    ");break;
      }
    
    return answer;
    }
    

    3.表达式运算
    根据字符表达式,能计算其结果。有能力同学深入研究表达式优先级。

    这块代码可以参考这题做法:

    #include <stdio.h>
    int main()
    { 
      int m=0, sum=0;
      char c, oldc='+';
      do {
        c = getchar();
        if( c<='9'&&c>='0' ) 
            m = 10*m + c - '0';//1
        else 
             {
              if( oldc == '+' )
               sum += m;
              else 
               sum -= m;
              m = 0;//2
              oldc = c;
             }
    } while(c!='=');
    printf("sum=%d", sum);
    return;
    }
    

    4.1.改造函数介绍

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

    1.函数1
    伪代码介绍函数思路

            int a,b,c,i,t,m,j=0;
    	char ch[4]={'+','-','*','/'},cr[3];
    	int exp[100],right=0;
    	double answer,response;
    	if(implement==1)
               i from 0 to num
    	       j=0;
    	       exp[j]=rand()%9+1;
    	       j++;
    	       cr[0]=ch[rand()%4];
    	       exp[j]=rand()%9+1;
    	       j++;
    	       printf("%d%c%d",exp[0],cr[0],exp[1]);
                   printf("=");
            answer=calculate(exp,cr,2);
    		scanf("%lf",&response); 
    		if(response==0&&answer!=0)  break;
    		if(response!=answer)
    			printf("不对噢  下一题继续努力
    正确答案是 %.2lf
    ",answer );
    		if(response==answer)
    			printf("恭喜你答对啦  继续保持啊
    ");
    			right++;
            end if
    	if(implement==2||implement==3)
    		for(i=0;i<num;i++)
    			j=0;
    		if(implement==2)
    			exp[j++]=rand()%90+10;
    			cr[0]=ch[rand()%2];
    			exp[j++]=rand()%90+10;
    			cr[1]=ch[rand()%2];
    			exp[j++]=rand()%90+10;
    	  else if(implement==3)
    	  	    exp[j++]=rand()%900+100;
    			cr[0]=ch[rand()%2];
    			exp[j++]=rand()%900+100;
    			cr[1]=ch[rand()%2];
    			exp[j++]=rand()%90+10;
    		
            printf("%d%c%d%c%d",exp[0],cr[0],exp[1],cr[1],exp[2]);
            printf("=");
            answer=calculate(exp,cr,3);
    		scanf("%lf",&response); 
    		if(response==0&&answer!=0)  break;
    		if(response!=answer)
    			printf("不对噢  下一题继续努力
     正确答案是 %.2lf
    ",answer);
    		if(response==answer)
    			printf("恭喜你答对啦  继续保持啊
    ");
    			right++;
    	  end if
       	 doExercise( right,num);
    

    截图函数代码。


    2.函数2
    伪代码介绍函数思路

        double answer=0;
          int i;
          answer=exp[0];
          i from 1to n
             switch(c[i-1])
               case '+':answer+=(double)exp[i];
               break;
               case '-':answer-=(double)exp[i];
               break;
               case '*':answer*=(double)exp[i];
               break;
               case '/':if(exp[i]!=0) answer/=(double)exp[i];
               else  printf("ERROR
    ");break;
        return answer
    

    截图函数代码。

    3.函数3
    伪代码介绍函数思路

        double correctRate;
        printf("您一共做了%d道题,共做对%d道题",num,right);
        correctRate=(1.0*right)/num;
        printf("您的正确率是 %.2lf",correctRate)
    

    截图函数代码。

    4.3 与原有函数代码比较

    改造前的函数主要是按照三个等级来直接分类,比较直接且暴力,而且使用了大量的全局变量;改造后的就是按照等级,计算和判断正确率来分类,然后就是一层套一层,其实好像也挺暴力的。但是,第一种就每个函数其实做的事情都差不多,像是其实就在重复三件相同的事情,没有起到函数应该有的效果。
    

    4.4 改进大作业总结

    • 两次代码最直接的问题就是无从下手吧,不知道要怎么做,头秃。
    • 相比于第一次的代码,这一次的函数运用比上一次的直接三个等级会麻烦一些,然后自己实际上没怎么完整的使用过函数,业务不熟练,老是有这里那里的小错误,导致代码没办法运行。
    • 又因为用了数组,数组在函数的传递自己又不是很明确,老是搞不清楚。不过经过这回的大作业,还是明确了很多。
  • 相关阅读:
    Linux Bash常用命令记录
    Ubuntu 环境 openMVG+openMVS 配置
    GDB调试系列之了解GDB
    OpenCV4系列之图像梯度
    ffmpeg基本功能使用
    GDB调试系列之基础入门
    STL std::pair基本用法
    判断机器CPU的大小端模式并将数据转换成小端形式
    由对象集合创建各种映射_流
    静态类型与函数重载
  • 原文地址:https://www.cnblogs.com/056lu/p/10127777.html
Copyright © 2011-2022 走看看