第五次作业---指针

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\n",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\n");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("不对噢  下一题继续努力\n正确答案是 %.2lf\n",answer );
		if(response==answer)
			printf("恭喜你答对啦  继续保持啊\n");
			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("不对噢  下一题继续努力\n 正确答案是 %.2lf\n",answer);
		if(response==answer)
			printf("恭喜你答对啦  继续保持啊\n");
			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\n");break;
    return answer

截图函数代码。

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

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

截图函数代码。

4.3 与原有函数代码比较

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

4.4 改进大作业总结

  • 两次代码最直接的问题就是无从下手吧,不知道要怎么做,头秃。
  • 相比于第一次的代码,这一次的函数运用比上一次的直接三个等级会麻烦一些,然后自己实际上没怎么完整的使用过函数,业务不熟练,老是有这里那里的小错误,导致代码没办法运行。
  • 又因为用了数组,数组在函数的传递自己又不是很明确,老是搞不清楚。不过经过这回的大作业,还是明确了很多。

posted on 2018-12-17 20:36  白居过隙巍澜可期  阅读(188)  评论(4编辑  收藏  举报

导航