一、PTA实验作业
题目1:7-2 区位码输入法
1. 本题PTA提交列表
2. 设计思路
- 1.定义整型变量a,h,l分别存放区位码,高字节和低字节
- 2.输入a
- 3.h=区位码a的前两位+160,l=区位码a的后两位+160
- 4.putchar(h),putchar(l)
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
(1)定义了两个整型变量a和b分别表示区码和位码使得输入时需要输入两个数字与题目不符导致答案错误
解决办法:只定义一个变量表示区位码然后以其前两位表示区码后两位表示位码
题目2:7-7 发红包
1. 本题PTA提交列表
2. 设计思路
- 1.定义整型数组a[7]存放100,50,20,10,5,2,1金额的钞票,变量m存放红包金额,r存放张数
- 2.输入m
- 3.for i=0,i<7,i++
r←m/a[i];
输出xx元:xx张\n
m←m-r*a[i];
end
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
(1)开始时想用嵌套循环和if语句来做,真正实现起来过于繁琐 解决办法:使用整型数组存放各金额钞票
(2)没有定义输出格式,使得答案格式错误 解决办法:定义输出格式左对齐
题目3:7-10 简单计算器
1. 本题PTA提交列表
s
2. 设计思路
- 1.定义变量a,b放操作数,字符变量ch存放运算符,cnt=1,cnt判断运算符和分母是否合理,result存放结果
- 2.输入a,result←a,
- 3.do
输入ch
if ch≠‘ ’ 输入b
switch(ch)
ch=‘+’ result←a+b a←result break
ch=‘-’ result←a-b a←result break
ch=‘’ result←ab a←result break
ch=‘/‘ if b≠0 result←a/b a←result
else 输出ERROR cnt=0
break
default if ch≠‘=‘ 输出ERROR cnt=0 break
if cnt=0 break
while ch≠’=‘
end
if cnt=1 输出result
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
(1)当只有一个操作数时出现错误
解决办法:在进入循环前将a的值赋给result并添加变量cnt判断是否继续输入下一个操作数
(2)result=a+b,a的值没有变动过导致答案错误
解决办法:在每个case语句里加入a=result实现result的累加计算
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
一维数组定义的一般形式:类型名 数组名 【数组长度】
初始化就是赋初值,举例 int a [3]={1,2,3} 就是给a[0]到a[2]分别按顺序赋初值。静态数组如果没有初始化会自动赋值为0,动态元素的值若没有赋初值则不确定。如果对全部元素都赋了初值则额可以省略数组长度
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
C语言规定数组名表示该数组分配连续内存空间中第一个单元的地址,即首地址。只要知道了数组第一个元素的地址以及每个元素所需的字节数,其余各个元素的存储地址均可计算得到。
1.3 为什么用数组?
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分。他的优点是表达简洁,可读性好,便于使用循环结构。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
选择法
定义整型变量i,index,k,n,temp分别存放循环次数,最小值所在下标,所交换的下标,正整数个数,交换中介数,定义数组a[10]存放10个正整数
输入整数n
for(i=0;i<n;i++)
输入a[i]的值
for(k=0;k<n-1;k++)
最小值所在下标←k
for(i=k+1;i<n;i++)
IF a[i]<a[index],最小值所在下标←i;
最小元素←→a[k]
end
冒泡法
定义整型变量i,j存放循环次数,n存放整数个数,定义数组a[10]
输入n
for(i=0;i<n-3;i++)
for(j=0;j<n-2;j++)
IF a[j]>a[j+1]
a[j]←→a[j+1]
end
直接插入法排序
定义变量k,i,j循环次数,n存放整数个数,数组 a [ i ];
for( i =1 ;i<n;i++)
for( j= i-1;j>=0;j--)
IF a[j]<a[i] break
IF (j!=i-1) for(k=i-1;k>j;k--)
a[k+1]←→a[k]
end
1.5 介绍什么是二分查找法?它和顺序查找法区别?
二分查找法:
前提(数据是从小到大或从大到小排序)
①先找数组中间的数,判断是否为要寻找的数。
②如果不是,判断它与要寻找的数的关系。
③如果大于寻找的数,则返回中间数的下标,在其左边继续循环步骤①②。
④如果小于寻找的数,则返回中间数的下标,在其右边继续循环步骤①②。
区别:
①二分查找法适用于排序过的数组,速度快。
②顺序查找法对数组本身没有要求,但数组大时效率低。
1.6 二维数组如何定义、初始化?
定义:
二维数组定义的形式:类型名 数组名[行长度][列长度]
初始化
(1)分行赋初值
一般形式:类型名 数组名[行长度][列长度]={{初值表0},…,{初值表k},…};
(2)顺序赋初值
一般形式:类型名 数组名[行长度][列长度]={初值表};
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
矩阵转置:即数组的行下标与数组的列下标互换,交换a [ i ] [ j ] 和a [ j ] [ i ]
上三角:i ≤ j
下三角:i ≥j
对称矩阵:a [ i ] [ j ] =a [ j ] [ i ]
1.8 二维数组一般应用在哪里?
一般用于列表和矩阵
2.本周的内容,你还不会什么?
- (1)对于函数中定义数组还不太熟练
- (2)pta 7-9 不懂如何判断()内的是运算式还是负数