C语言博客作业--数据类型
一、PTA实验作业
题目1: 掉入陷阱的数字
1. 本题PTA提交列表
2. 设计思路
1.定义变量bit,sum,num,numcopy,count=0,bit各位的数值,sum为运算后结果,num为输入数据,numcopy备份num数据,count统计次数
2.输入num
3.numcopy=num //备份num
4.sum=0
5.bit=num%10;//取出个位
6.sum+=bit;//各位相加
7.num/=10;//划掉个位
8.if num!=0 返回5
9.num=sum*3+1;//进行操作
10.count++;//统计次数
11.输出count和num
12.if numcopy!=num,返回3
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
1.运行超时
没有写入如果与上一轮的操作数相同就退出循环,所以就算已经相同也不会跳出循环
解决方法:用一个numcopy,暂时保留了上一轮的操作数来与这一轮新的操作数比较,相同时即可跳出循环
题目2:发红包
1. 本题PTA提交列表
2. 设计思路
1.定义每种面额纸币数量存放变量和总金额sum
2.输入sum
3.if(hundred=sum/100)sum%=100;//如果sum除100得需要的张数,sum去掉该部分。
4.if(fifty=sum/50)sum%=50;//如果sum除50得需要的张数,sum去掉该部分。
5.if(twenty=sum/20)sum%=20;//如果sum除20得需要的张数,sum去掉该部分。
6.if(ten=sum/10)sum%=10;//如果sum除10得需要的张数,sum去掉该部分。
7.one=sum
8.输出各面额张数
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
1.答案错误
如图没有在该出打出空格,明明答案计算正确但是没分
解决方法:补上空格,对齐
2.刚开始以为该题与之前的题目相同,直接写了好几个for循环,然后因为数据太大,根本走不出循环,后来反应过来,这题应该不是用这种做法,重新考虑才想出来这种解决方法。
题目3:简单计算器
1. 本题PTA提交列表
2. 设计思路
- 主函数
1.定义第一个操作数num1
2.输入num1
3.调用函数 - operation函数
1.传入数据num1
2.定义num2为第二个操作数,flag判断除法分母为0或有非法运算符,字符op为运算符
3.进入无限循环4-11
4.输入op
5.如果op不是‘=’,‘+’,‘-’,‘’,‘/’,flag=0
6.如果op为‘=’结束循环
7.否则输入num2
8.如果op为‘+’num1+=num2;结束循环
9.如果op为‘-’num1-=num2;结束循环
10.如果op为‘’num1*=num2;结束循环
11.如果op为‘/’,如果num20,flag=0,结束循环,否则num1/=num2;结束循环
12.如果flag0,输出ERROR,否则输出num1
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
1.部分正确
没有考虑到error的情况
解决方法:引进了flag变量,当出现不合法运算符或者除数为0时,flag变为0,到最后判断flag的值,为0输出error否则输出最后结果。
二、截图本周题目集的PTA最后排名。
三、本周学习总结
1.你学会了什么?
1.1 一维数组如何定义、初始化?
- 定义:数组类型 数组名[数组长度]
- 初始化:
1.类型名 数组名 [数组长度]={初值表}(特值)
2.利用循环遍历(同一个值)
for(i=0;i<n;i++){
a[i]=0;
}
1.2 一维数组在内存中结构?可画图说明。数组名表示什么?
- 结构:
数组名是一个地址常量,存放数组内存空间的首地址
1.3 为什么用数组?
在程序中使用数组,可以让一批相同类型的变量使用同一个数组变量名,用下标来互相区分,可以存储输入的数据,便于数据重现使用。
1.4 介绍选择法、冒泡法、直接插入排序如何排序?伪代码展示.
1.选择法:
定义变量i,index,k,n,temp;
输入n
定义数组a[n]
for i=0 to n-1
输入a[i]
end
for k=0 to k<n-1
ndex=k;存放最小值下标
for i=k+1 to n
if a[i]小于a[index]
index=i
end
最小元素与下标为k的元素互换
end
for i=0 to n-1
输出a[i]
end
2.冒泡法:
定义变量i,j,k,n
输入n
定义数组a[n]
for i=0 to n-1
输入a[i]
end
for j=0 to n-i-1
if a[j]大于a[j+1]
互换a[j]和a[j+1]
end
for i=0 to n-1
输出a[i]
end
3.直接插入排序
定义变量i,j,k,n,temp
输入n
定义数组a[n]
for i=0 to n-1
输入a[i]
end
for i=1 to n-1
for j=0 to i-1
if a[j]<a[i]
a[i]插入到a[j]的位置
原来a[j]到a[i-1]内的元素右移一位
end
end
for i=0 to n-1
输出a[i]
end
1.5 介绍什么是二分查找法?它和顺序查找法区别?
- 二分法:
(1)首先确定该区间的中点位置
(2)然后将待查的K值与R[mid]比较
(3)若相等,则查找成功并返回此位置
(4)若R[mid]>K,则新的查找区间是R[1..mid-1]
(5)若R[mid]<K,则新的查找区间是R[mid+1..n] - 区别:
二分法只用于数据按顺序排列,但是比顺序法效率高
顺序法可以用于无规律数据查找,但是效率比较低
1.6 二维数组如何定义、初始化?
- 定义:数组类型 数组名[数组行长度][数组列长度]
- 初始化:
1.利用循环遍历(同值)
for(i=0;i<n;i++){
for(j=0;j<n;j++){
a[i][j]=0;
}
}
2.类型名 数组名 [数组行长度][数组列长度]={初值表}(特值)
1.7 矩阵转置怎么实现?方阵中:下三角、上三角、对称矩阵的行标i列标j的关系?请说明。
转置:
//求a的转置矩阵,结果存于b中。
int i,j;
int a[M][N], int b[N][M];//M,N为任意值
for(i = 0; i <M; i ++)
for(j = 0; j < N; j ++)
b[j][i] = a[i][j];//转置运算。
关系:
- 上三角:i<=j
- 下三角:i>=j
- 对称矩阵:a[i][j]==a[j][i]
1.8 二维数组一般应用在哪里?
一般用于数据间有位置规律的情况,如矩阵
2.本周的内容,你还不会什么?
字符数组的定义方法还是有不清楚,考试的结果虽然及格了,但也是刚好在线上,看来之前的学习也不是掌握的很充分,对数组的使用也不是很熟练,做pta时明明很简单的题目,不熟悉使用所以做的很慢,所以慢慢掌握数组的使用,提高效率。