1.本章思考总结

1.1思维导图

1.2本章学习体会及代码量

1.2.1学习体会

这一个多星期将近两个星期的时间一直在学习指针,其实就跟老师说的一样,从函数开始题会变得难一些,然后需要我们思考的越多,然后是数组,最后就是指针。我

认为指针的难度很大,我也不是很清楚具体的操作,只能硬着头皮,看翁恺视频,看学校c 语言的书去打代码,这次pta的题集题虽然不多,但都很有难度,每一道题都

需要我花很多的时间去写。再有,我认为,指针是一种方法,老师说这也是c语言的灵魂,与下学期要学的数据结构联系很大,所以我要用心学习,在这方面打好基础

,争取不拖以后学习的后腿。

1.2.2代码累计

2.PTA总分

2.1得分与排名:

2.2我的总分:100分

3.PTA实验作业

3.1PTA题目1

下列程序中,函数fun的功能是:在字符串str中找出ASCII码值最大的字符,将该字符前的所有字符向后顺序移动一个位置,然后将该字符放到第一个位置上。

3.1.1算法分析

定义void类型函数 fun

定义	int型变量 i,t;

定义 字符指针数组char max指向指针p;

  	for  i=0到数组结束
                          依次判断ASCII码值最大的字符,使之变成max;

  	for  i=t-1到i=0
  	                  p数组的第i+1个等于第i个
	
	p[0]=max;让ASCII码值最大的字符变成数组的第一个
	

3.1.2代码截图

3.1.3PTA提交列表及说明

Q1:编译错误?

A1:我对于字符数组使用的还不是很熟练,在让字符数组为零这个方面的语法产生了错误。

Q2:答案错误?

A2:这次是循环中的循环条件,应该到t-1结束,下一个等于前一个。

4.1大作业

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

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

地址传递,减少全局变量的使用。

题目要求:

题目有3个难度级别,分别为:
•第一级是1位数的一步加减乘除计算
•第二级是2位数的2步加减运算
•第三级是3位数的2步加减运算

4.1改造函数介绍

1.函数1


	 定义指针数组exp;

	 输入能产生随机数字的函数

         定义静态数组ch[2];

	 定义number1,number1产生0-9的随机数字,number2同理

	 用一个函数itoa(number1, exp, 10)将 number1放进数组exp中;
                                                                                    //百度出来的强制类型转换,将int类型数字转换为char型
	 定义number3产生1-4的随机数;

	用switch case,将1,2,3,4分别表示符号加减乘除

	用函数strcat(exp, ch),将number1和符号连接

	定义字符数组Num为空数组,将number2存进去

        用函数strcat(exp, Num),将exp与number2连接

	用函数strcat(exp, "=")将与等号连接
        最后用puts输出指针

2.函数2

        定义int temp=0; 
	定义int Result=0;

        当(exp[0]<='9'&&exp[0]>='0' ) 即数字number1为0-9时, 结果 Result =number1

	               if 
                                                (第一个运算符=='+')
                                                Result=number1+number2

                      else if
                                                (第一个运算符=='-')
                                                 Result=number1-number2

                     else if
                                                (第一个运算符=='*')
                                                Result=number1*number2

                    else
		                               Result=number1/number2
	    	
	  返回结果   Result;

4.2与原有函数比较

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

我原有的函数是这种类型,当时只会定义变量,不会使用数组和指针,就一个劲儿的用switch case,将依次运算的结果加啊加,一次两次还好,如果是多次运算,代码

会很长,虽然不繁琐,但是重复的会很多,代码看起来很不舒服,我用了数组和指针就不会。首先,长度会缩小,我只需要定义字符数组就好,不用一次次的加减运

算,其次,用数组的话,让运算符号,即加减乘除的表示方便了很多。

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

改造前的函数2在上图中,还是那句话,改造前计算结果时,我要一次次的表示出来,不停的写number1啊number2啊这些,改造后就不用,我只需要把整型数变成字符

型数,再用strcat这个函数将函数连接起来就好。但是我觉得不足的,也是我现在还没有想到办法的就是运算次数的问题,一次两次还好,要是运算次数多了,不停的定

义数组也是一个麻烦事,还要不停的把数组连接起来,也挺麻烦的。

4.3改进大作业总结

1.首先我遇到的麻烦是在函数1中,因为我当时定义的number1,number2这些都是整型数字,但是我想把他们放进一个字符型的数组里,在这块我不知道怎么用强制类

型转换,然后我一个舍友告诉我百度,于是我就查到了itoa这个函数,可以将整形数字变成字符,在百度的同时呢,我还看到了很多可以用来将整型变成浮点型或者将浮

点型变成字符型的这些函数,学到了不少知识,同时也让我知道了,在遇到不懂得问题时,查百度不失为一个好方法。

2.然后还是在函数1中,第一开始我的连接有毛病,加减乘除运算符怎么弄都无法尽到数组里,导致输出的时候一直不对,后来询问大佬,他说strcat传进去的是地址,我

第一开始定义了一个野指针,当时很不理解,我就问他既然我定义了数组,指针的意义在哪里,他说,对于数组指针可能没意义,但是对于整型什么的就有意义,大数

据传指针可以增加运行速度,听得似懂非懂的我只能以后自己慢慢去摸索了。

3.在函数2中,我计算的结果总是不对,后来发现是运算符优先级的问题,我将字符型数字变成整型数字时,要减去“0”,可是我却忘了加括号,这就导致运算出现了错

误,这次知道了,下次就不能再犯这种毛病了。

4.在这次修改大作业的过程中,我发现了我之前代码的许多问题,比如重复啊,函数较少啊,运算较麻烦等等,我知道大作业是一项大工程,自己不能总是犯懒,要尽量

改正这些问题与毛病。