一、PTA实验作业
题目1:7-1 将数组中的数逆序存放
1. 本题PTA提交列表
2. 设计思路
定义数组数n,循环变量i,j
输入 n
定义数组Num[n]
for j=n-1 to j>=0
共n次
如果j等于0
则输出Num[j]
否则
在输出Num[j]后还要输出空格
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
- 由于是第一题所以没有截图所遇到问题如下
- 格式错误:在最后一个数字后多了空格
- 解决方案:增加一个判断,当判断出是最后一个数时直接输出
题目1:7-3 出生年
1. 本题PTA提交列表
2. 设计思路
定义初始年份Year,不同的数字数量D, 用于储存Year的Y,Y2,求和Sum=0,循环变量i,j,k,g
定义数组d[4]={0}用于储存年份的各个位数,Com[10]={0,1,2,3,4,5,6,7,8,9}用于与d[4]中的数比较,Count[10]={0}用于储存Com[10]与d[4]比较的结果
输入 Year,D;
Y=Year;
Y2=Year;
while(1){
for i=0 to i<4
共4次
对Year取余,减少十倍
对d[i]从0到4分别赋予年份Year的个位数,十位数,百位数,千位数
for j=0 to j<4
共4次
for g=0 to j<4
共4次
如果d[j]==Com[g]
Count[g]++;
for k=0 to k<10
共 10次
如果Count[k]!=0
令Count[k]=0方便下一轮循环
Sum++;统计年份中不同数字的数量
如果 Sum==D,符合题目所要求的不同数字的数量
输出("%d %04d",Y2-Y,Y2);//其中%04d位宽为4,不够往左补0
break;结束循环
Y2+=1;年份加一
Year=Y2;
Sum=0;//不同数字量初始化 方便下一次循环
}
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
这道题想了很久没有思路,后来听了同学的口头思路自己打了代码,在Dev上成功后就提交成功了
题目1:7-4 简化的插入排序
1. 本题PTA提交列表
2. 设计思路
定义非负整数n,插入的数m,中转变量t,循环变量i
输入n
定义数组a[10]
for i=0 to i<n
共n次
数组赋值
输入m
a[n]=m令最后一个数组等于m
for i=0 to i<n
共n次
如果a[n]<=a[i]
交换a[n]与a[i]的值
for i=0 to i<n
共n次
输出a[i]
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
由于忘记了,所以没有截图调剂过程,具体问题如下
- 问题:”在遇到比要求的数大的数后我进行了交换,但导致了原数组中用于交换的数的缺失,即在数组输出时没有该数
- 解决方案:如图所示代码,在循环进行到比要求大的数之后,接下来数组中的数分别向后移动了一位
具体操作如下:
二、截图本周题目集的PTA最后排名。(2分)
三、同学代码结对互评(1分)
1.互评同学名称:王宵莹
2.我的代码、互评同学代码截图
- 我的代码
- 王宵莹的代码
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 不同之处:我与王的思路大体相同,但是我比王宵莹多了一行判断它只有一位数的情况代码
- 我更喜欢王宵莹的,因为我觉得她的代码更加简洁
四、本周学习总结(3分)
1.你学会了什么?
1.1 C中如何存储字符串?
- 使用字符数组存;
char name[] = "字符串";
1.2 字符串的结束标志是什么,为什么要结束标志?
- 字符串的结束标志是'\0'
- 字符串是借助于字符型一维数组来存放的,'\0'ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了,
如果没有的话会数组越界,内存溢出。程序崩溃。
1.3 字符串输入有哪几种方法?
(1)gets(a)
(2)scanf ("%s", a)是读到空格停止。
1.4 数字字符怎么转整数,写个伪代码?
char a
int b
b=(int)a-48;
关于高助教的评论做出的实验
1.5 16进制、二进制字符串如何转10进制?写伪代码?
定义 十六进制数s,十进制sum,储存s数n,s的位数num
输入 s
n=s
while(s!=0)
s/=10;
num++;
计算s的位数
定义数组a[num]
将s的各个位数分别赋值入a[num]
for i=0 to i<num
共num次
sum+=a[i]乘以16的i次方
则sum就是16进制转换得到的10进制
二进制的转换如上,就是将16的i次方改为2的i次方
2.本周的内容,你还不会什么?
- (1).对于二维数组的输入变量赋值,转置
- (2) 数组的左移与右移
3.期中考试小结
3.1 你认为为什么没考好?
- (1)一些基础知识没有掌握,比如静态变量和全局变量,以及数据运算中各种符号的算法
- (2)读代码的能力有待提高,在第二题分析程序上得分甚少
- (3)粗心,有些题目在自己能力范围内因为分析错误,看错变量失分
3.2 罗列错题。
1.选择题11
- 基础知识不牢固
- 要多注重对基础知识的掌握
2.填空题4
- 观察错变量
- 减少对编译器的依赖,增加自己的读代码能力
3改错题
- 还是基础知识没有掌握牢固,还有错题没有及时复习
- 在错了之后,改了之后的一段时间内还要有对这方面复习的计划
4编程题2
- 公式错误
- 对于这次的编程题我还是对自己比较满意的
3.3 下半学期要怎么调整C的学习?
- 对于作业的安排计划还不够合理,现在的作业大部分还是等到周五晚和周末两天完成,预习作业,博客园与pta,搞得时间短任务重,学习效率不高
所以计划至少在周三前完成pta的一半,并写一道到pta中,在编程时遇到什么困难直接记录到博客园中 - 自己的思路经常会很复杂,所以增加一天一篇优秀博客的阅读计划
- 做过的题目再做还是会忘记怎么做,尤其是当时勉强通过pta,但思路混乱,不用多久就不会做了,效率极差,由于前几星期计划不周,做作业都很赶更没什么时间复习,所以增加一天回顾三道题目的计划。