1 目前自己学习中存在的薄弱的知识点具体有哪些?每个薄弱的知识点都是如何获知的,每个薄弱的知识点需要列举具体的例子说明。
目前遇到的问题有局部变量的存储类型,二维数组与指针。
(1)局部变量的存储类型有以下三种,知识点由书本获知。
自动变量(auto),关键字auto可以省略,即默认为自动变量。若没有明确的赋值,其初值不确定,如:int b 中b没有确定的初值。
静态变量(static),关键字static,在函数调用结束后不消失而保留原值。如下面的代码,在第一次调用结束后a的值为a+x,在
int fun(int x) 第二次调用时,a的初值就变为了a+x。
{
static int a=3;
a+=x;
return a;
}
(2)二维数组和指针,知识点通过书本和同学获知。
方法是将二维数组看成由多个一维数组组成,还有元素指针和行指针。
可以用a[i][j],*(a[i]+j),*(*(a+i)+j)来表示二维数组元素a[i][j]的值,用 &a[i][j],a[i]+j,*(a+i)+j来表示元素的地址。
该部分的知识点主要在理解方面有点问题,之后会多回看课本。
2 从第五章函数到第七章数组的函数题和编程题(主要是在PTA)中选出至少一道你觉得比较有挑战的题(已解决且不是奇奇的题)。写出解题报告包括:(1)题目大意;(2)解题思路;(3)代码思路,比如画出流程图;(4)核心技术总结;(5)解题过程中存在的问题,以及如何得到解决的。
练习5 7-3 打印沙漏
(1)本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印。
(2)找出可以打印沙漏数目与行数之间的规律:需要打印符号数(temp)=第(n-1)个图形所需要的符号数+2*(n+3)。
可以将沙漏分成四个部分,从左上部分中可以得知,列数j,行数i,只要j=i,输出特定字符*。
(3)先定义temp=7,是打印沙漏图形至少所需的符号量,最小的沙漏为a=3行.
输入一个数后要判断是否可以打印出沙漏,还有是否可以打印一个更大的沙漏,如果可以行数a加2.
在打印过程中,如果行数大于a/2(即中心行),那么将该行转化为与此行一样的更小的行,
如果列数大于a/2(即中心列),那么将该列转化为与此列一样的更小的列。
(4)判断所给的数大小可以打印出多大的沙漏,什么时候要用*,什么时候输出空格。
(5)如何判断沙漏的大小,如何利用数组打印出图形,都是通过上网查阅资料解决问题。