C语言博客作业--数据类型
一、PTA实验作业
题目1:7-4 打印菱形图案
1. 本题PTA提交列表
2. 设计思路
定义变量n表示菱形高度,i,j,k分别控制循环
for i=1 to n/2+1
打出上三角的*号
for j=1 to (n-1)-2*(i-1)
输出空格
for k=1 to 1+2*(i-1)
输出*号
每递增一次i换一次行
for i=1 to n/2
打出下三角的*号
for j=1 to 2*i
输出空格
for k=1 to (n-2)-2*(i-1)
输出*号
每递增一次i换一次行
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 在找每行号前的空格数时遇到问题 解决办法:把每行的行数,输出号数,空格数写出来,慢慢找规律,发现上三角的规律是空格数=高度-2行数+1 ;下三角的规律是空格数=2行数(从下三角第一行开始的行数)
- 输出最后一行后多一行 解决办法:在下三角的换行条件前加一行判断语句,若下三角的行数已经等于高度的一半直接打破循环语句
题目2:7-6 掉入陷阱的数字
1. 本题PTA提交列表
2. 设计思路
int trap(int n); //函数声明
主函数:
定义number表示输入的数,i来控制循环
输入数字number
for i=1 to 到一个数字和它的产生的新数相等时停止
调用函数输出要求的格式内容(i:trap(number))
将number赋值为它的陷阱新数trap(number)
int trap(int n) //该函数返回陷阱新数N
定义a统计数位,i控制循环 ,N为新数 ,b于n等值用来统计位数
for a=1 to b!=0
b/=10
for i=1 to a //算新数
将其各位数字相加求和,再将其和乘以3后加上1 ,求出新数N
返回N
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 没有任何输出(没有进循环)解决办法:发现是循环条件弄成新老数相等时结束
- 输出到第二个数就错了 解决办法:在trap函数的统计数位那一个循环后面加了输出位数,发现位数都是统计错的,然后看了一下循环结束条件,原来是条件写成b==0了应该是b!=0
- 发现程序不能输出两个相等的数,也就是第三个数和第四个数相等,但是只输出了第三个数,而题目的例子应该是输出第三个和第四个数字 解决办法:我将主函数中的循环输出的结束条件放在了输出之后就实现了
题目1:7-10 简单计算器
1. 本题PTA提交列表
2. 设计思路
定义number1 表示第一个数 number2表示后面的数 op表示符号位
输入number1
for to op=getchar()!= ‘=’
输入number2
如果分母为0时输出错误提示
如果输入符号为+ 计算 total=number1+number2
如果输入符号为- 计算 total=number1-number2
如果输入符号为* 计算 total=number1*number2
如果输入符号为/ 计算 total=number1/number2
如果输入其他符号输出错误提示
最后number1=total 再进行下一轮计算
输出number1
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 刚刚开始不知道该把输入字符数据的那个放在个位置才好 解决办法:询问同学,同学告诉我把它放在循环条件里,同时判断它是否等于‘=’就可以实现循环
- 在部分错误中,只有出现错误提示的条件正确,其他的答案错误 解决办法:在最后把total的值赋给number1继续进行下一轮
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
int a[5],i;//定义数组类型 数组名
for(i=0;i<5;i++){
a[i]=0
}//初始化
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
存储的地址
1.3 为什么用数组?
更方便数据的存储调用,比如一组数据比大小,如果按照学数组前的打法,可能要输入一个比较一个,而用数组就可以输入完一组数据去比较,并且比较的每个数据都还被存储在内存中,方便之后需要用作其他计算时使用。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示
选择法:
for i=0 to i<4
第i轮 k=i 认为第i个数最小
从下一个数到最后一个数与a[k]比较
if(a[k]>a[j])k=j k就赋值小数的下标
if(k!=i) a[k]与dii个位置上的数交换位置
冒泡法:
for i=1:n-1 //总共需要冒n-1次泡
for j=1:i-1 //泡泡的位置
compare a[j],a[j+1], 大的放右边,小的放左边 //比较泡里面两个数大小
直接插入法:
⒈从有序数列和无序数列{a2,a3,…,an}开始进行排序;
⒉处理第i个元素时(i=2,3,…,n),数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
⒊重复第二步,共进行n-i次插入处理,数列全部有序。
1.5 介绍什么是二分查找法?它和顺序查找法区别?
- 二分查找法:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
- 区别:二分查找法优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
1.6 二维数组如何定义、初始化?
int a[3][3],j,k;//定义二维(三行三列)数组
for(j=0;j<3;j++)
for(k=0;k<3;k++)
a[j][k]=0;//初始化
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
- 如一个方阵a[i][k],若i>=k,则属于下三角,i<=k属于上三角,对称矩阵a[i][k]=a[k][i]。
- 互换i和k实现装置
1.8 二维数组一般应用在哪里?
计算方阵问题,结合线性代数解决问题。
2.本周的内容,你还不会什么?
- 字符型数组的使用,在pta第八题中我尝试使用字符型数组来储存变量做题,但是没有能成功完成。
- 直接打出插入法和二分法的代码还是有点困难吧。