C语言博客作业--数据类型
一、PTA实验作业
题目1: 区位码输入法
1. 本题PTA提交列表
2. 设计思路
定义变量row,bit,number;
定义字符型变量r,p;
输入number
取出后两位数bit=number%100;
取出前两位数row=number/100
r=row+160;b=bit+160;
putchar(r);putchar(b);输出
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题思路清晰,PTA提交一遍就过,并没有调试问题。
题目2:打印菱形图案
1. 本题PTA提交列表
2. 设计思路
定义变量n,i,j;
输入n;
for i=0 to n/2
for j=1 to n-1-2*i 输出空格 end
for j=1 to 1+2*i 输出*加空格 end
换行 end
for i=1 to n/2
for j=1 to 2*i 输出空格 end
for j=1 to n-2*i 输出*加空格 end
换行 end
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
提交到PTA时提示格式错误,运行结果如下图,并没有发现什么问题;
根据经验,格式错误可能是空格的输出有些问题,于是把空格换成#号输出,结果如下图
发现第一列有空格,而题目是没有的,发现问题后改变相应的j起始值,消掉第一列的空格。
题目3:简单计算器
1. 本题PTA提交列表
2. 设计思路
main函数:
定义变量number1,number2,sum,字符型变量op
输入number1,并赋值给sum
while op不等于=
输入number2
if number2 == 0 && op == '/'
输出ERROR,结束程序
if op为四则运算符
如果是,调用函数operation,并赋值给number1
否则,输出ERROR,结束程序
end
输出sum
operation函数:
定义变量sum
switch(op)
op是+,sum = number1 + number2
; break;
op是-,sum = number1 - number2
; break;
op是*,sum = number1 * number2
; break;
op是/,sum = number1 / number2
; break;
返回sum的值
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
提交前两次提示编译错误,随即就想到我scanf写成了scanf_s,因为那时我是用VS写这题的,不知道为什么VS提示我要用scanf_s输入;再次提交,结果如下图
于是我就一个一个调,当只输一个操作数时输出为0,于是我就把第一个操作数赋给sum,这样就解决了这个问题;分母为0时,输出ERROR后,只是通过break跳出了循环,还是会继续输出sum的值,于是把break换成return 0,直接结束循环,非法字符也是同样的问题。
二、截图本周题目集的PTA最后排名
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
一位数组定义的一般形式为:类型名 数组名 [数组长度];
初始化:类型名 数组名 [数组长度]={初值表};初值表依次放数组的初值;初始化也可针对部分元素;静态数组如果没有初始化,系统会自动赋0。
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。
1.3 为什么用数组?
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来相互区分,表达简洁,可读性好,便于使用循环结构。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
1.选择法:
定义变量i,index,k,n,temp;
输入n,定义数组a[n],利用循环输入n个值,依次赋给数组a的每个元素
for k=0 to k<n-1
index=k;/存放最小值下标/
for i=k+1 to n
if a[i]小于a[index]
如果是,则index=i end
temp=a[index];a[index]=a[k],a[k]=temp最小元素与下标为k的元素互换 end
输出n个数组元素的值
2.冒泡法:
定义变量i,j,k,n
输入n,定义数组a[n],利用循环输入n个值,依次赋给数组a的每个元素
for i=0 to n-1
for j=0 to n-i-1
if a[j]大于a[j+1]
互换a[j]和a[j+1]
end
输出n个数组元素的值
3.直接插入排序
定义变量i,j,k,n,temp
输入n,定义数组a[n],利用循环输入n个值,依次赋给数组a的每个元素
for i=1 to n-1
for j=0 to i-1
if a[j]大于a[i] 跳出循环 end
if j不等于i-1
temp=a[i]//将比a[i]大的数据向后移
for k=j to i-1
a[k+1]=a[k] end
a[k+1]=temp//将a[i]放到正确位置上
end
输出n个数组元素的值
1.5 介绍什么是二分查找法?它和顺序查找法区别?
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.
区别:二分查找法只适用于有序的一组数,在查找时是折半查找;而顺序查找法也适用与无序的数组,把要查的的数和这一组数一个一个比较,从而查出所在位置。
1.6 二维数组如何定义、初始化?
定义:类型名 数组名 [行长度] [列长度]
初始化:类型名 数组名 [行长度] [列长度]={ {初值表0},···,{初值表k},···},也可顺序赋值;二维数组初始化也可针对部分元素
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明
通过循环让矩阵的行列互换,交换a[i][j]和a[j][i];
下三角:i<=j 上三角:i>=j 对称矩阵:a[i][j]=a[j][i]
1.8 二维数组一般应用在哪里?
主要运用于表示二维表和矩阵等具有行和列的表示形式
2.本周的内容,你还不会什么?
这题我做的时候都看不懂到底是用来实现什么的,所以做错了,后来才发现原来是进制转换;
这题是因为太粗心大意了,都没看到C选项就选了D