C语言博客作业--数据类型
一、PTA实验作业
题目1:区位码输入法
1. 本题PTA提交列表
2. 设计思路
Begin
1.输入zone_bit_code //int zone_bit_code,high,low
2.high←zone_bit_code/100
3.low←zone_bit_code%100
4.输出字符high+160
5.输出字符low+160
End
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
忘记将输入的区位码变成两个字节,导致错误。
改正:利用取余的方式将区位码变成两个字节,并分别加上160,然后输出,结果正确。
题目2:倒顺数字串
1. 本题PTA提交列表
2. 设计思路
Begin
1.输入n //int n,i,flag
2.for i←1 to n
1)then if flag→1 输出空格
2)输出i
3)flag←1
3.for i←n-1 to 1
1)then if flag→1 输出空格
2)flag←1
3)输出i
End
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
(1)忘记输出要空格
(2)在加上空格后,忽略了题中所说两个数字之间有一个空格,但首尾没有空格
改正:用flag对空格输出做控制
题目3:简单计算器
1. 本题PTA提交列表
2. 设计思路
Begin
1.输入N //N,i,sum,flag皆为整型变量,op为字符型变量
2.sum←0
3.flag←0
4.sum←N
5.while op!='='
1)do 输入op
2)if op→'=' then break
3)输入 i
4)sum←calculate(sum,op,i)
5)if op→'/' and i→0 then flag←1
6)if op!='+' and op!='-' and op!='/' and op!='' then flag←1
6.if flag→1
1)then 输出“ERROR”
7.else
1)输出 sum
8.calculate(a,op,b) //定义整型函数calculate(int a,char op,int b)
1)if op→'+' then Sum←a+b //定义整型变量Sum
2)elseif op→'-' then Sum←a-b
3)elseif op→'' then Sum←a*b
4)elseif op→'/' then if b!=0 then Sum←a/b
5)返回 Sum
End
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
1.题目理解错误,将结果与上一个计算结果相加
改正:sum=calculate(sum,op,i);
2.没考虑只输入一个数的情况
改正:在输入N时,对sum做处理
补充:多个重复错误是为了看错误提示。
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
- 定义的一般形式:类型名 数组名 [数组长度]; 数组长度必须是一个常量
- 初始化的一般形式:类型名 数组名 [数组长度]={初值表};
- 注意:
1.静态数组如果没有初始化,系统自动给所有的数组元素赋0
2.数组的初始化可以只针对部分元素
3.数组初始化时,如果对全部元素都赋了初值,就可以省略数组长度,系统会根据初值的个数自动给出数组的长度。
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
- 数组名表示该数组所分配连续内存空间中第一个单元的地址
- 数组名是一个地址常量,不允许修改。
1.3 为什么用数组?
数组是一组相同类型数据的集合,用数组名和下标可以唯一地确定数组元素,管理数据十分方便。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
- 选择法:
for i ← 1 to n-1 //n为数组长度
key ← a[i]
k = i
for j ← i+1 to n
if A[j] < key
k = j
exchange A[i] and A[k]
- 冒泡法:
for i = 1 to n //n为数组长度
for j = n to i+1
if A[j] < A[j-1]
exchane A[j] and A[j-1]
- 插入法:
for i ← 1 to n-1
for j ← i-1 to 0
if a[i] > a[j] break
if j!=i-1
temp ← a[i]
for k ← i to j+2
a[k] ← a[k-1]
a[j+1] ← temp
1.5 介绍什么是二分查找法?它和顺序查找法区别?
- 二分查找法:假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
- 与顺序法的区别:二分查找的一定是从小到大排列好的表,二分查找法的查找速度快,效率高;
顺序查找是从头到尾逐个查找,与二分法比较,效率较低。
1.6 二维数组如何定义、初始化?
- 二维数组的定义:类型名 数组名[行长度][列长度];
- 初始化:类型名 数组名[行长度][列长度]={{初值表0},...,{初值表k},...};
- 二维数组的初始化也可以只针对部分元素;
- 顺序赋初值:根据数组元素在内存中的存放顺序,把初值表中的数据依次赋给元素,如果只对部分元素赋初值,要注意初值表中数据的书写顺序;
- 二维数组初始化时,如果对全部元素都赋了初值,或分行赋初值时,在初值表中列出了全部行,就可以省略行长度。
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
- 矩阵转置:定义数组a[i][j],那么数组b[j][i]就是数组a[i][j]的转置矩阵;
- 下三角:i>=j
- 上三角:i<=j
- 对称矩阵:i=j
1.8 二维数组一般应用在哪里?
需要输入一组二维数据的时候要用到二维数组,比如数学中的矩阵。
2.本周的内容,你还不会什么?
- 本周PTA数据类型的题目,第八题,对控制条件不是很了解,修改多次,要么判断都是“yes”,要么都是“no”;
- 第九题还没来得及做;
- 关于数组的自定义函数,好像明白,但是写的时候又写不来;
- 关于期中考:看代码找错的能力有点弱,还有手写代码果然要加强。