C语言I博客作业08

这个作业属于那个课程 C语言程序设计II
这个作业属于哪个课程 班级的链接
这个作业要求在哪里 作业的要求
我在这个课程的目标是 继续学习string.h,自定义函数。学习指针,使用fgets
这个作业在那个具体方面帮助我实现目标 学会使用while和do-while,熟练使用循环语句,学会优化自己的代码,拓宽知识面
参考文献 c语言程序设计(第三版)
学号 20208927
1.PTA实验作业

1.1 找鞍点
题目内容描述:一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。
如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。
1.1.1数据处理

数据表达:定义整型变量n为输入的行数,定义一个6*6的二维数组,和i,j,i代表行,j代表列
为找出行的最大值和列的最小值,定义min,max,初始化为0。
为判断是否有鞍点,定义ret判断,初始化为0。均为整型变量。
数据处理:(伪代码如下)
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
遍历输入矩阵
后,再次遍历
在for语句里i不变,行变,寻找行最大的数
行不变,列变,寻找列的最小值,
满足存在行最大,列最小的数时,ret=1
判断ret的大小,输出

1.1.2实验代码截图

1.1.3 造测试数据

输入数据 输出数据 说明
2 1 正确
NONE 正确

1.1.4 PTA提交列表及说明

1.编译错误:在for循环输入矩阵数据时,在内部定义i,j,而在for循环遍历数组时没有。所以第二次的i,j是没有定义的变量。
2.部分正确:原if里的判断条件max == 1 || min == 1,更改后的max == 1 &&min == 1。
使用了两种方法,第一种在行里找最大值,在列里找最小值,是否有这么一个数使它成立。第二种,就是先遍历找每一行的最大值,然后在最大值中去寻找最小值。
但是第二种,存在缺陷,就是可能存在一行中有多个最大值。

1.2 梅森数

1.2.1 数据处理

数据表达:定义n为输入的正整数,定义i,t为循环变量,count记录满足条件的数的数量,并初始化为0,。
数据处理:(伪代码如下)
for(i=2;i<=n;i++)
t=pow(2,i)-1
输出所有所有不超过2^n-1的数
在for循环里嵌套循环判断素数
是素数则输出,并且count++
如果for(i=2;i<=n;i++)遍历结束,count=0,
则printf("None")

1.2.2 实验代码截图

1.2.3 造测试数据

输入数据 输出数据 说明
6
1.2.4 PTA提交列表及说明
一次输出,没有错误。

2.代码互评(5分)
找2份同学代码,和自己代码比较,建议互评代码尽量找代码风格差异较大。

同学代码截图

自己代码截图

对比:1.第一位学长的方法非常好,简单又好,值得我好好学习。
2.第二位同学的也比我好,只输入了一次字符串,我看完她的代码,觉得我把问题又复杂化了。

3.学习总结(15分)
3.1 学习进度条(5分)

周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
12.9-12.11 23小时 400 指针 指针的使用,只有概念,不能够去运用
11.30-12.4 24小时 400 排序,指针 string.h
11.23-11.26 22小时 600 string.h gets,puts
11.15-11.21 22小时 500 string.h,接触基础c++ vs和Dev的快捷键不会使用,string
11.10-11.14 26小时 300 自定义函数,二维数组,宏定义,const 不会用复杂的宏定义和const
11.2-11.8 26小时 600 循环嵌套,一维数组,二维数组 如何把问题简单化,灵活调用循环和函数
10.26-11.1 24小时 500 循环嵌套,选择排序,冒泡排序 排序很蒙,逆时针坍缩不懂
10.19-10.25 24小时 200 switch-case,循环
3.2 累积代码行和博客字数(5分)
时间 博客字数 代码行数
---- ---- ----
第八周 1052 200
第九周 1677 500
第十周 3252 600
第十一周 5186 300
第十二周 6824 500
第十三周 8347 600
第十四周 9995 400
第十五周 11595 400

3.3 学习内容总结和感悟(5分)
3.3.1 学习内容总结

3.3.2 学习体会
我觉得pta的作业可以稍微简单一点,我也应该通过给同学解决问题提升语言表达问题,而且要纠正上周的一个错误,我对于伪代码的概念来自于学习别人的博客园,但是是错误的,在一些细节上是不完美的,在处理if,if-else的问题,数组的处理上是错误的。所以以后不能够片面的通过别人的作业了解知识点,还是要更加权威的网站或者书本。然后就是近期的学习,我觉得难度越来越大,我连作业的pta的问题也无法独自解决,以后真的要多利用闲暇的时间,学习别人的代码,拓宽C语言的知识面。

课后提问:如何跳出多重循环?
1.采用goto语句
goto语句也称为无条件转移语句;goto语句的语义是改变程序流向, 转去执行语句标号所标识的语句;
goto语句不推荐使用,但是对于跳出多重循环还是特定方便,逻辑也比较清晰。

2.循环内多增加一个判断条件
对于退出循环不是特别迫切的,允许执行完本轮循环的,建议可以采用这种方式。
但是无法立刻退出循环。

3.可以使用自定义函数

4.使用多个break

posted @ 2020-12-11 14:47  陈谦益  阅读(211)  评论(13编辑  收藏  举报