C语言博客作业--指针

1.本章学习总结

1.1.思维导图

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

1.2.1 学习体会

感受:指针这一节开始学习的时候一知半解的,自己的知识点理解不够到位,不太理解函数接口的指针与数组之间的联系,做题时也感觉概念模模糊糊的,指针比较抽象,不好理解,调试的过程中有时候走到哪里都不知道了,现在的练习量不够所以感觉不习惯用指针。如果说计算机领域是星辰大海的话,那么我现在应该在纳米吧,呃,说不定是个微米。希望自己还是多多理解一些概念,多看看别人优秀的代码。
学到的知识:1.一些函数的使用,比如strcpy,strcat等。2.一些函数与指针之间的关系。3.更加具体的了解变量内存的形态,地址与指针的关系。

1.2.2 代码累计

2.PTA总分

2.1截图PTA中指针题目集的排名得分

2.2 我的总分:110

3.PTA实验作业

3.1 PTA题目1

题目简介:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

3.1.1 算法分析

char ch[500010];字符数组
 int count ;用来计单词个数
 for (i=len(ch)to  0)//从尾部读入
 {
    if (ch[i]!=' ')如果遇到的不是空格的话,单词个数加
       count ++;
        if(ch[i]>='A'&&ch[i]<'Z')遇到字符的话
        {
           立flag控制空格
           for(j=i  to i+count )
             printf 单词
             立count重新为0
             }
            if(count>0)
            {
            printf空格;
            for(i=0 to count-1)
                printf最后单词

3.1.2 代码截图

3.1.3 PTA提交列表及说明

- Q1.一开始的思路做单词顺序也是倒的
- A1.参考了同学的代码用数组的方式来做
- Q2.输出最后一个单词只有第一个字母
- A2.之后查看是否是最后控制输出的是时候的范围不对,结果就发现最后控制输出应该是直接到ch[i].

4.大作业

题目:实现小学四则运算。

4.1改造函数介绍

1.函数1

int num1,num2,num3;//分别是三位计算数产生随机数范围
   switch(data)
     {
    case 1:num1,num2,num3rand()%10;
    case 2:num1,num2,num3rand()%100;
    case 3:num1,num2,num3rand()%1000;
    }
  if(num2>num1)//防止负数结果 
             {
             	交换num1,num2;
             }
        if(data==1)
        {
        	int jk=rand()%4;//随机产生两个随机式子 
        	switch(jk)
        	{
        		case 1:strcpy(exp,"+");*answer=num1+num2;printf("%d %s %d=__?__\n",num1,exp,num2);
        		case 2:strcpy(exp,"-");*answer=num1-num2;printf("%d %s %d=__?__\n",num1,exp,num2);
        		case 3:strcpy(exp,"*");*answer=num1*num2;printf("%d %s %d=__?__\n",num1,exp,num2);
        		case 4:strcpy(exp,"/");*answer=num1/num2;printf("%d %s %d=__?__\n",num1,exp,num2);       		
			}
		}
              data==2||data==3 与data==1处理方式相同,不过我多加成两步运算
              else if(data==2||data==3)
		{
			int jk=rand()%4;
			switch(jk)
			{
				case 1:strcpy(exp,"+");*answer=num1+num2;printf("%d %s %d=__?__\n",num1,exp,num2);
				case 2:strcpy(exp,"-");*answer=num1-num2;printf("%d %s %d=__?__\n",num1,exp,num2);
				case 3:strcpy(exp,"+");*answer=num1+num2+num3;printf("%d %s %d %s %d=__?__\n",num1,exp,num2,exp,num3);
				case 4:strcpy(exp,"-");*answer=num1-num2-num3;printf("%d %s %d %s %d=__?__\n",num1,exp,num2,exp,num3);
			}
		}

2.函数2

if  a[i]=='/'    num1%num2!=0  and num2!=0  and  num3!=0
    否则  continue   ;//跳出while循环
    防止负数的步骤在函数1中

3.函数3

int wong,right;//正确答案与错误答案
   int result;
    用户输入答案
     比较用户答案与正确答案;
      if (results == *answer)
            {
             CorrectResponse();//调用正确答案评语
             right++;
            }
      else
           {
              IncrrectResponse();
              wrong++;
            }
             int ch;
             printf("\n\t\t\t提示:输入2结束游戏,输入其他数字继续游戏\n"); 
             scanf("\n\t\t\t%d",&ch);
             while(1)
			 {
			 	if(ch==1)
			 continue;
			 else if(ch==2)
			 goto end;//中途玩家不想玩在提示处输入2则结束游戏
			 }
                    int correct;
	             printf("\n\t\t\t回答正确%.f题,回答错误%.f题\n", right, wrong);//
                  correct=right/(right+wrong)*100.0;
                  gettimeofday(&end, NULL);
	             printf("\n\t\t\t\t做题总用时%ld秒\n",timer);	
                  printf("\n\t\t\t正确率为百分之%.f",correct); 

4.2与原有函数代码比较

函数1:函数1是改动最大的地方,开始的做法是三级分别处理,封装为三个函数,改动之后三级产生随机产生式子封装在一个函数中,代码量大大减少,不过修改之后的代码问题是当两步运算时候运算符是一样的。之前的代码加减乘除给出正确答案是用四个函数来封装,修改之后直接在产生运算式那里给出正确答案。
函数2:
函数二在之前的作业中没有实现,这次修改没有用到指针,而是直接用暴力解决,虽然知道这样做很容易导致循环程序崩溃,但一时没有好的改进方法和我的代码结合,看了其他同学的代码,我觉得方法很值得我学习,接下来也会进一步完善。
函数3:
函数3在原来的基本上是没做太大的修改的,基本思路是给用户输入答案,判断答案是否正确,给出正确或错误的评语,计算正确和做错误答案的个数,结束页面。

4.3 改进大作业总结

这次的大作业修改蛮大的,不过修改之前的代码的一些不足,比如考虑了输入非法字符,外加了计算用户回答答案的时间函数。最开始的代码因为main中需要做太多的功能,我就先把main分解在几个函数中,发现三个级别的运算都相差不太大,就想着在把三级运算产生随机数那部分修改在一个函数在一块就好了,结果我太天真了,那样做之后发现我三级运算就要算乘除运算,考虑用户计算有难度,就再次修改了。还有加减乘除那四个函数运算正确答案那一块本来想着不做修改的,一改就不可收拾了,我不太会使用指针,要用指针修改,难度对我来说就大大加大了,虽然强硬改了之后的代码量少了许多,不过感觉自己代码很丑,而且有些乱。接下来还要改为文件版的,希望这次的修改能够稍微方便一点下一的改进吧。
posted @ 2018-12-17 22:03  WHOUG  阅读(277)  评论(1编辑  收藏  举报