一、PTA实验作业
题目1:7-4 打印菱形图案
1. 本题PTA提交列表
2. 设计思路
定义整型变量 n,i,space,m,q,其中n表示行数,space表示空格
输入一个奇数n
菱形上半部分
space=1
满足space<=(n+1)/2-i
space递增,实现循环输出空格
m=1
满足m<=2*i-1
m递增,实现循环输出星号后跟空格
循环结束后换行
菱形下半部分
space=1
满足space<=i-(n+1)/2
space递增,循环输出空格
q=1
满足q<=2*n-2*i+1
q递增,实现循环输出星号后跟空格
循环结束后换行
i递增,直到不满足i<=n
return 0;
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
主要就格式问题,明明不管怎么输都是正确的图案,提交一直显示是格式错误。。。包括换行,包括空格都有考虑进去,但是图案是越改越离奇。就从代码开始分析,发现利用if语句判断后实现循环结束换行完全是多余的,转换成循环体外加一个输出换行就可以实现我们想要的效果了。删掉后,提交显示正确。
题目2:7-6 掉入陷阱的数字
1.本题PTA提交列表
2.设计思路
函数声明int fun(int a);
int i,N0,其中N0表示第一个数
输入N0
int a[3000];
把N0的值赋给a数组第一个元素
调用函数计算 fun(N0),并将它赋值给a[i]
i=2;
满足要求a[i-1]!=a[i-2],输出行数i-1和a[i=1]
不满足条件,执行a[i]=fun(a[i-1]),i递增
函数int fun(int a)
定义变量ones表示末尾数字,sum表示各数字和,result表示计算结果
sum=0;
当a不等于0时
计算末尾数字ones=a%10;
去除末尾数字a=a/10;
各数字和sum=sum+ones;
计算结果result=sum*3+1;
返回计算结果result
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
这一题没遇到什么问题,主要就是利用了刚学的数组,不太熟悉,就写下怎么写的吧
这一题阅读完题目后发现下标很重要,而数组特别适合用来表示下标,于是选择了数组。另外计算result的过程有多次,选择利用函数,这样通过引用函数来进行计算代码比较清晰
题目3:7-10 简单计算器
1.本题PTA提交列表
2.设计思路
定义俩个整型变量 m,n;
定义整型变量 result表示是计算结果
定义字符型变量op
scanf("%d",&m);
result=m;
读入的字符不是等号时
scanf("%d",&n);
如果字符为 ‘+‘:result=m+n;跳出循环
如果字符为‘-‘:result=m-n;跳出循环
如果字符为 ‘*‘:result=m*n;跳出循环
如果字符为 ‘/‘:
如果n不为0
计算result=m/n;
如果n为0,输出ERROR,程序结束
如果字符不是加减乘除 printf("ERROR"),程序结束
m=result
输出result
程序结束
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
问题:没有判断输入m后输入的字符是= 这种情况
解决办法:增加if语句,判断输入字符是=,但是运行发现这个问题是解决了,但是正常输入,结果都是ERROR,经过调试发现直接跳到default这个分支,输出ERROR.。可以将m赋值给result,就可以实现输出类似1=1这种情况
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
一维数组定义一般形式: 类型名 数组名 [数组长度] 如 int a[10]
(1)类型名指定数组中每个元素的类型
(2)数组名是数组变量的名称,是一个合法的标识符
(3)数组长度是一个整型常量表达式,设定数组大小
初始化
数组中有若干元素,可以在{}中给出各数组初值,各初值之间用逗号隔开,把{}中初值依次赋值给各元素
注意:初始化的数据个数不能超过数组元素的个数,否则出错,如 int a[4]={1,2,3,4,5}是错的
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
数组名是一个地址常量,存放数组内存空间的首地址
1.3 为什么用数组?
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分。表达简洁,可读性好,便于使用循环结构
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
(1)选择法排序
定义整型变量i,index,k,n,temp,index存放最小值所在的下标
定义数组a[10]
输入n
i=0
当i<n时,输入数, i递增
将输入的数依次赋给数组a的n个元素
k=0;k<n-1,用index来存放最小值所在下标
判断数组a中元素与a[index]大小
如果a[i]<a[index],index=i,最小元素与下标为k的元素交换
temp=a[index];
a[index]=a[k];
a[k]=temp;
输出排好后的n 个数组元素的值
(2)冒泡法排序
定义数组a[n]
定义整型变量i,j,temp,n
i=0
满足i<=n-1时
输入数
i++
将这组数据依次赋值给a[n]
判断相邻俩个数据,如果a[j]>a[j+1]
temp=a[j]
a[j]=a[j+1]
a[j+1]=temp
像这样的过程要重复n=q-i次
循环结束后输出新数组
(3)直接插入法排序
定义数组a[n]
定义整型变量i,j,k,temp
i=0;
满足i<=n-1时
输入数
i=0;
temp表示最小值的角标
判断数据a[j]和temp的大小
如果temp<a[j],a[j]=temp
通过a[k+1]=a[k]实现插入位置后的数据整体往右挪
重复n -1次,输出新数组
1.5 介绍什么是二分查找法?它和顺序查找法区别?
对一组有序的数字中进行查找,传递相应的数据,比较与元数据相同的数据,查找到后返回对应数组下标
区别:顺序查找的特点是从第一个元素开始一个一个往下查找,如果和目标一致的元素,则查找成功,如果到最后一个元素仍没有目标元素,则查找失败。而二分查找就是从表的中间查找目标元素,如果找到一致元素,这查找成功,如果中间元素比目标元素小,仍用二分查找表的后半部分,反之,中间元素比目标元素大,则查找表的前半部分。
1.6 二维数组如何定义、初始化?
二维数组定义形式:类型名 数组名 [行长度][列长度]
初始化:
(1)分行赋初值
一般形式:类型名 数组名 [行长度][列长度]={{初值表0},...,{{初值表k},...}
把初值表中的K中所有数据依次赋给第k行的元素
(2)顺序赋值法
一般形式:类型名 数组名 [行长度][列长度] = {初值表}
根据数组元素在内存中的存放顺序,把初值表中的数据依次赋给元素
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
行下标与列下标互换。 下三角:i<=j 上三角:i>=j 对称矩阵: a[i][j]=a[j][i]
1.8 二维数组一般应用在哪里?
(1)矩阵的转置
(2)求最大元素值及其行列号
2.本周的内容,你还不会什么?
开始接触伪代码,明白代码意思,但是不熟悉伪代码要如何表达,写的很混乱,尤其是像冒泡,插入,顺序排序这种,看上面的就知道是个什么状态了