1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
换个说法吧,后面的博客,每次都说好难好难也不好。(不过也是事实)
指针,我稍微会用的就是和数组有关联的那一部分。拿着自己写的题目去问同学,他说我指针用的太过了,也的确是,不太会用,就拿做过的课堂派作业照着葫芦画瓢,寻一点点感觉。还是指针,我用了,自己都不知道他跑到哪里去了,看了半天都没毛病,请教大佬后一语道破。目前对指针还是挺迷的,能不用指针我就尽量不用吧。(在你完全熟悉指针之前,尽量不要乱用。----这是大佬对我的寄语)。不过,有的题目用用指针还是蛮方便的。
此次大作业,说实话,真的看得一脸懵逼。本来就不怎么会用,然后有点不知道怎么下手。不过,也不能不做,做了总比没做好,哪怕是看着别人的写的,也比自己不写好,好歹有个印象。后来和同学聊天谈到,不怎么会用指针的话,至少会多少写多少吧,先把一级的写了。后来想想也对,这不就是把大问题分解成小问题嘛,解决起来就没有那么困难。
此次作业,我还是要认真的,上次函数大作业没写好,以至于这次要基本全部重来一遍,非常费劲,如果这次还是那么含糊的话,那下次就是和文件关联,与课设有关了。对中间要求严格一点,做的更好一点,也是为了后面能不学的那么累。
1.2.2 代码累计
2.PTA总分
2.1截图PTA中函数题目集的排名得分
2.2 我的总分:
指针pta总分110
3.PTA实验作业
3.1 PTA题目1
7-3 字符串的冒泡排序 (20 分)
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。
输入格式:
输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。
输出格式:
输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。
3.1.1 算法分析
定义二维字符数组ch[100][20]
for(i=0 to n)
do
scanf("%s",ch[i])//将字符串看做一个整体存放在数组中
end for
定义j
- for(i=0 to k)循环到k轮结束
do
- for(j=0 to n-1-i)//考虑到最大的那个数在最后的情况,要减1
do
- if(ch[j]>ch[j+1])
定义字符数组t[20]
//利用函数strcpy交换ch[j]与ch[j+1]的值
strcpy(t, ch[j]);
strcpy(ch[j], ch[j+1]);
strcpy(ch[j+1], t);
end if
end for
end for
- for(i=0 to n)
do
输出ch[i]
end for
3.1.2 代码截图
3.1.4 PTA提交列表及说明
- Q1:开始一直想着用一位数组循环存放字符串,后面发现不行
- A1:将字符串的存储改为用二维数组
- Q2:对字符串这个整体,不知道该怎么处理,开始想着是,读到空格就结束,前面的字符构成一个数组,就是一个字符串放在一个数组中的意思
后面发现根本不知道该怎么表示,无从下手 - A2:换一种思考方式,将字符串作为一个数组元素存放,将字符串看做一个整体处理
- Q3:冒泡交换两个数的值时,定义一个指针放值,发现不行
- A3:用函数strcpy,进行复制处理,同时将指针改为一个数组去存放相应的字符串
4.大作业
题目:实现小学四则运算,有3个难度级别,分别为:
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算
改进内容:
4.1.改造函数介绍
1.构造字符数组存放算术表达式
定义函数int CreateExp(char *exp,double result)
定义字符ch
调用函数c()生成运算符ch
随机生成两个整数,用rand()%10
- switch(ch) do
case '+':
sprintf(exp,"%d%c%d=",number1,ch,number2);//将运算式子放入指针exp
printf(" %d%c%d=",number1,ch,number2);//输出式子
result=number1+number2
break;
case '-':
sprintf(exp,"%d%c%d=",number1,ch,number2);//将运算式子放入指针exp
printf(" %d%c%d=",number1,ch,number2);//输出式子
result=number1-number2
break;
case '*':
sprintf(exp,"%d%c%d=",number1,ch,number2);//将运算式子放入指针exp
printf(" %d%c%d=",number1,ch,number2);//输出式子
result=number1*number2
break;
case '/':
- if(number2!=0)//分子不为0才有意义
sprintf(exp,"%d%c%d=",number1,ch,number2);//将运算式子放入指针exp
printf(" %d%c%d=",number1,ch,number2);//输出式子
result=number1/number2
break;
end if
return返回result的值
end switch
截图函数代码。
2.表达式运算
根据字符表达式,能计算其结果。有能力同学深入研究表达式优先级。
int ComputeExp(char *exp)
{
}
伪代码介绍函数思路
截图函数代码。
4.2 与原有函数代码比较
改造前函数1和改造后的函数1
文字说明2者不同及区别,优缺点。
改造前函数2和改造后的函数2
文字说明2者不同及区别,优缺点。
改造前函数3和改造后的函数3
文字说明2者不同及区别,优缺点。
等等
4.3 改进大作业总结
回顾两次作业编写过程,总结碰到问题及后续程序编写注意事项。