1.本章学习总结

1.1思维导图

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

1.2.1学习体会

本周代码感受:
可能是上次数组作业拖太久了,指针的练习比较少,加上指针比较难,现在感觉学习起来比较吃力(当然,最近学习懈怠也占一大比例原因)。
指针是C语言的灵魂,它使C语言有了其他编程语言没有的魅力,指针是函数的传递更加灵活了,之前函数只能有一个返回值,指针可以用来传送多个地址。
不过,学习指针这一章,最大的收获还是对字符串的进一步了解,#include<string.h>这个头文件让字符串在我心中有了和一般的变量有了平起平坐的地位,它可以执行之前一般的变量一样的东西,甚至一般变量做不了的一些有趣的是,它可以做到。如strcmp,strcat,strmat之类的函数。

1.2.2代码累计

PTA总分

2.1排名截图

2.2我的总分:

100(可能会变动)

PTA作业

3.1

7-3 字符串的冒泡排序 (20 分)
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

3.1.1算法分析

输入n,k//n代表字符串的数量,k表示要冒泡的次数
char a[1000][100]
for i=0 to n;
scanf("%s",a[i]);//输入字符串
end for
static char temp[1000]//定义临时数组,用于交换
for j=1 to k
for j=1 to k
if a[i+1]<a[i]
交换a[i+1]和a[i]
end if
end for
end for
for i=0 to n
输出啊a[i]
end for

3.1.2代码截图

3.1.3数据测试

3.1.4提交列表

本来这道题我是有思路的,因为以前做过一维数组的冒泡法排序,但是这个题要输入多个字符串,一开始我是没有思路的,后来意识到可以用二维数组来存放字符串,问题也就解决了。
int n,k

4大作业

对各种操作数和运算符,以及正确答案和输入结果都存放在数组中,可以对游戏的过程进行数据保存,最重要的是用一个函数生成运算式,而不是用三个函数生成三种级别的式子。
这次把代码改成了指针版,其实还是数组用的比较多,还是指针掌握的不熟练。还有,这次的函数封装要比上一次要多。

4.1改造函数介绍

4.1.1函数1——生成算式并计算结果

void Question(char degree)//把上一级选择难度函数的选择级别传入
{
char ques[1000]//放算式
int level = degree-'0'//将难度级别的字符转换成常数
int m,n//n为运算符个数
char a[100]//把数转换成字符串
switch level do
case 1 do n=4;i=3;break;
case 2 do n=2;i=5;break;
case 3 do n=2;i=5;break;
end switch
for i to i>0 j=0,a
m=rand()%n;
if i为奇数
switch m do
m=rand()%4;
1,2,3,4分别代表+,-,*,/ //strcat(ques,"+")连接字符串
end switch
else i为偶数
swtich level do
case 1 do 生成一位数,break;//生成的数放在x[j]中
case 2 do 生成二位数,break;
case 3 do 生成三位数,break;
end switch
if语句排除除法结果不存在和得到小数的情况
itoa(x[j],a,10);
strcat(ques,a)
end if
j++;
end for

代码截图

这段代码主要借鉴了俊伟的,itoa函数减少了不少工作量,这段代码可以让三个级别的式子在一个函数里面生成,用三个函数出算式的代码我也有写,但是…………写代码的时候没有看清老师的要求,以为要写一个生成算式的函数,之前的代码也就删了……呜呜呜,以后一定好好看作业要求。

查看成绩函数

代码截图

这次作业新加的,毫无技术可言,这次的程序的退出到要返回主界面才能退出……也算是一个改动吧,让退出不再那么随意。

代码比较

函数1

原来的算式生成函数

感受到以前的三个函数多赘余了吧……将不得不说,把输出从数转化成字符串真的可以使代码简洁许多。
以前的方法在输出的时候要挨个输出,现在用循环就可以,不过要注意……没完成一个循环,记得对字符串初始化。

总结

这次虽然名义上是把上次的函数封装改成指针版,但是……说句实话,*这个符号,我在我的代码里面只让它充当了乘号和修饰的作用,指针掌握的不够熟练,不敢贸然用指针,但指针毕竟是c语言一个很重要的东西,以后还是要多加练习。
其实这次代码我改动是比较大的(还是叫重写吧),把主要精力都放在了生成算式上,一些提示性话语和非法输入处理方面做得可能差强人意……
在生成算式的时候,一开始忘记了最后的初始化字符串……额……改了好久,而且在写代码的时候经常犯一些特别无聊的错误,比如if判断条件后加分号。