您的位置:首页 > 编程语言 > C语言/C++

C语言博客作业--一二维数组

2017-12-03 20:03 423 查看

一、PTA实验作业

题目1:简化的插入排序

1. 本题PTA提交列表



2.设计思路

int N,i,j,k,number
输入N
定义一个长度位为N+1的整形数组
输入数组,将要插入的数放在数组最后一项
for i=0 to i<N+1
if a
<=a[j]如果要插入的数小于数组中的最小数
number=a

for k=N to k>j
a[k]=a[k-1]数组后移一位
a[j]=number
break
for i=0 to i<N+1
输出a[i]每个数字后面跟一个空格

3.代码截图



4.本题调试过程碰到问题及PTA提交列表情况说明

一开始写的代码是这样的


要判断数组是否只有两位,然后排序,循环又多又难以读懂,导致了错误

题目2:判断上三角矩阵

1. 本题PTA提交列表



2.设计思路

int T,n,i,j,k,flag=0;flag为判断是否为上三角的标志
输入T
for k=0 to k<=T
flag=0
输入n
定义行列都为n的整形二维数组a
for i=0 to i<n
for j=0 j<n j++
输入a[i][j]
if n不为1
for i=0 to i<n
for j=0 to j<i 上三角
if a[i][j]不为0
flag=1即不为上三角
else if n为1并且a[0][0]为0
flag=0
if flag为0
输出Yes并换行
否则
输出No并换行

3.代码截图



4.本题调试过程碰到问题及PTA提交列表情况说明

(1)一开始记错了以为上三角矩阵是对角线一下全都不为0,对角线以上不全为0导致错误

(2)没有判断它为空矩阵以及为1阶矩阵的情况


题目3:装箱问题

1. 本题PTA提交列表



2.设计思路

int n,i,j,number=0,count=1 count为箱子序号,number为装了几个箱子
输入n
定义一个长度为1000的整形数组a
for i=1 to i<=n
输入a[i]
for i=1 to i<=n
forj=1 to j<count
if a[i]+a[j]<=100 即箱子够装没超过100
a[j]=a[i]+a[j] 把a[j]装到a[i]里去
输出a[i]和j即第几个箱子
break
if j>=count 如果a[i]不够装
number++ 箱子数量加1
count++ 箱子的排序加1
输出a[i]和j
输出number

3.代码截图



4.本题调试过程碰到问题及PTA提交列表情况说明

一开始的代码是这样的


在原有的箱子不够放时,新箱子增加后,没有把a[i]放入箱子导致错误

二、截图本周题目集的PTA最后排名



三、同学代码结对互评

1.互评同学名称

严伟杰

2.我的代码、互评同学代码截图





3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题

不同点:

我是用数学规律来判断它有几位是不同的,而严伟杰同学用到了两个数组a和b,通过数4个数字中出现的0到10之间数的个数来判断这个四位数有几位不同。

各自优势:

尽管我的更加简洁,可是他的代码更加偏向c语言的知识,而且他的代码可读性高,我的代码必须要通过一定的计算才能理解,所以我更喜欢他的代码。

四、本周学习总结

1.你学会了什么?

1.1 C中如何存储字符串?

定义一个字符数组循环输入字符串的每一个字符。

1.2 字符串的结束标志是什么,为什么要结束标志?

结束标志为
'\0'
。因为我们无法知道字符串的长度所以需要结束标志让它可以在接下来遍历数组时作为一个循环结束的标志比如
for(i=0;a[i]!='\0';i++;


1.3 字符串输入有哪几种方法?

设a为数组。第一种:
gets(a)
可以将输入的数据和'\0'送入数组中,可以吸收空格,遇回车结束。

第二种:
scnaf("%s,"a);
可以将输入的数据和'\0'送入数组中,遇回车或空格输入结束。

第三种:通过循环如
while((a[i]=getchar())!='\n')
的方式输入。

1.4 数字字符怎么转整数,写个伪代码?

char a[10]
int number=0,i
gets(a)输入字符串
for i=0 to a[i]!='\0'
number=number*10+a[i]-'0';

1.5 16进制、二进制字符串如何转10进制?写伪代码?

十六进制:

char a[10]
int i,number=0
gets(a)输入字符串
for i=0 to a[i]!='0'遍历数组
if a[i]为数字字符
number=number*16+a[i]-'0'
else if a[i]为a到f的十六进制数
number=number*16+a[i]-'a'+10
else if a[i]为A到F的十六进制数
number=number*16+a[i]-'A'+10

二进制:

char a[10]
int i,number=0
gets(a)输入字符串
for i=0 to a[i]!='0'遍历数组
number=number*2+a[i]-'0'

2.本周的内容,你还不会什么?

pta中字符串的冒泡排序不会做,请教了吴军霖同学并且看了他的代码以后才会做,对字符串的理解不够。

#include<stdio.h>
main()
{
int i ,j, k,count;
char  str1[20],str2[20];
printf("zhu chuan:");
gets(str1);
printf("zi chuan:");
gets(str2);
【1】;
for(i=0;str1[i];i++)
for(j=i,k=0;str1[j]==str2[k];j++,k++)
if ( 【2】 )
count++;
printf("chuxian  cishu=%d\n",count);
}

课堂派中的这道题第二个空填错,写成str1[j+1]!= str2[k+1],这样不能遍历完字串从而判断母串是否含有字串,答案为 tr2[k+1]=='\0'

3.期中考试小结

3.1 你认为为什么没考好?

时间安排有问题,编程题没有时间去做,并且会做的编程题也没有认真看题目导致了错误,时间太赶。而且编程题代码没有注释,导致应得分的点没有得分,阅卷不仔细。

3.2 罗列错题



这一题题目要求循环输入计算多个数,而我由于时间紧张而没看清,导致简单题出错。只要在主函数中写一个while就能改正



我以为float的输出格式为%lf,所以选了A,其实float输出格式就是为%f



应该写getchar()而不是scanf,scanf会导致错误



这一题没有把return b改出来,以为r就是最大公约数即为b,其实r在循环结束时为0,while的循环条件题目给出的是错误的,虽然找出来了,但是被干扰

3.3 下半学期要怎么调整C的学习?

不能只做pta,书本的基础内容更要掌握,同时接触更高的平台,做更有深度的题目让自己成长。少玩游戏,多做作业,认真读书,多读书多看报,少吃零食,多睡觉。我希望能成为吴军霖大佬一样的人,代码打得又快,游戏玩的又好。并且我要改善自己做作业的方式,不会做的写出思路而不是一直盯着看一直想,导致耗时长,难度高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: