C语言二维数组做业

1、PTA实验做业

题目1:7-3 出生年

1. 本题PTA提交列表

2. 设计思路

  • 一、声明一个函数different()用来计算一个年份的不一样数字个数
  • 二、定义y(y是来计算符合要求的年份的量),n(n为题目要求的不一样数字个数),x(x用来存放起始年份),flag(flag是用来表示每一个y值中的不一样数字个数的量)
  • 三、输入起始年份y和题目要求的n
  • 四、x=y(存放起始年份)
  • 五、do {flag计算y中不一样数字个数;若是flag=n,符合题意,输出相应结果,并结束循环;若是不符合,y自增一}while(1)
  • 六、对函数different(y)定义:
  • 首先定义一个数组a[4]和不一样数字个数count等于4;
  • a[4]存放y的每一位;
  • for(int i=0;i<4;i++) {for(int j=i+1;j<4;j++)若是a[i]=a[j,count减一,结束j的循环;
  • 函数结果返回count

3.代码截图


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

  • 一、题目要求不足4位的年份要在前面补零,一开始不知道这个要怎么输出,百度后明白了只要输出中使用%04d就能使不足的前面补零
  • 二、函数中j的循环内,若是a[i]=a[j,count减一,就要马上结束j的循环;我漏告终束循环,使得在年份不是四位的状况下,count会被多减小好几回

题目2:7-7 找鞍点

1. 本题PTA提交列表

2. 设计思路

  • 一、定义二维数组a[6][6]和n
  • 二、输入n
  • 三、 for(i=0; i<n; i++) for(j=0; j<n; j++) { scanf("%d",&a[i][j]); } 输入二维数组
  • 三、定义k=0,q=0,p=0(k,q,p都是下面循环要使用的),flag=1(flag是来判断鞍点存不存在的)
  • 四、for(i=0; i<n; i++) { q=i(下面须要用来判断此行最大值是否是列所在最小值); 。。。。。。}
  • 五、 for(p=0; p<n; p++) { if(a[i][k]<=a[i][p]) //数组元素之间比较,若比a[i][k]大,则将数组列标赋给k k=p; } } 这里找出行最大值,并将该最大值所在列的值赋给k,以便进行下一步行最小值的查找
  • 六、for(j=0; j<n; j++){ if(a[q][k]>a[j][k])//若此行最大值不是列所在最小值,把小的行标赋给q { q=j; break; } } 这里找列最小值,并将最小值所在列的值赋给q
  • 七、找到后只需比较i和j是否相等,相等则说明此行最大值是列所在最小值,让flag等于0,结束循环
  • 八、if(flag==0) 输出结果 else 输出none

3.代码截图


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

  • 一、循环最开始,必须让q=i,不然鞍点在最后一个时就会发生错误
  • 二、这里循环有点多,我常常输出错误后更改代码不当心把某些循环的大括号删了,致使编译错误= =

题目3:7-10 杨辉三角

1. 本题PTA提交列表

2. 设计思路

  • 一、定义数组a[10][10].i,j,n
  • 二、输入n
  • 三、for(i=0;i<10;i++) 将行头及对角线中存入1(a[i][i]=a[i][0]=1)
  • 四、for(i=2;i<n;i++){for(j=1;j<i;j++){}a[i][j]=a[i-1][j-1]+a[i-1][j];//将第三行起的数存入 } }存入第三行起除对角线外的全部数
  • 五、输出数组

3.代码截图

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

  • 一、我一开始j用的是小于等于i,结果把对角线上的数改变了
  • 二、第一次作的时候忘了换行,输出结果错误

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

3、同窗代码结对互评

1.互评同窗名称

李于程编程

2.个人代码、互评同窗代码截图

  • 个人代码
    数组

  • 于程同窗代码
    app

3.我和同窗代码不一样在哪里?有哪些各自优点?你更喜欢哪一种代码风格?若是同窗代码有错的也请帮忙指出来哪里出问题。

  • 于程同窗是经过使用一个变量diff来进行累加,而我是将为1的元素先赋值好,而后中间的数用规律对数组进行加法获得
  • 我可能会更喜欢于程同窗的代码,由于其代码比较短,用到的循环较少(我我的循环较多时容易乱)

4、本周学习总结(3分)

1.你学会了什么?

1.1 C中如何存储字符串?

  • 使用字符数组储存字符串

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

  • 结束标志为‘\0'
  • 结束标志是用来判断是否结束循环的

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

  • 一、直接输入,如a[5]={"happy};
  • 二、使用scanf函数,格式控制为%s,输入参数为字符数组名,遇回车或空格结束
  • 三、使用gets函数,输入参数为字符数组名,遇回车结束

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

  • 一、数字单个转换:数字字符-‘0’
  • 二、多位转换:
  • 1.定义循环变量i,sum=0
  • 2.i=0
  • 3.while(a[i]!=‘\0‘) sum=sum*10+(a[i]-‘0‘)
  • 4.i++

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

  • 一、16进制
  • 1.定义循环变量i,sum=0
  • 2.i=0
  • 3.while(a[i]!=‘\0‘)if(a[i]是数字字符)sum=sum16+(a[i]-‘0‘) if(a[i]是A-F)sum=sum16+(a[i]-‘A‘+10) if(a[i]是a-f) sum=sum*16+(a[i]-‘a‘+10)
  • 4.i++
  • 二、2进制
  • 1.定义循环变量i,sum=0
  • 2.i=0
  • 3.while(a[i]!=‘\0‘)sum=sum*2+(a[i]-‘0‘)
  • 4.i++

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

  • 一、虽然基本掌握了数组,但对其运用并不熟练
  • 二、数组的运用常常要使用不少循环,致使我常常将循环的量搞混(即便有注释也常常没注意到= =)
  • 三、虽然可以理解排序法,但对于它的应用不够熟练

3.期中考试小结

3.1 你认为为何没考好?

  • 一、个人选择题只得了8分,这说明我基础知识掌握不够扎实,要多看课本,增强对基本知识的了解和掌控
  • 二、个人改错也不是很好,主要是一些逻辑错误看得出来,殊不知道怎么修改,这一点我认为应该只有经过多作题增长经验来解决
  • 三、编程题我作得尚可,但在一些涉及数学公式的因果应用上,我容易忽然短路(例如其中编程第二题,我作的时候竟然忘了怎么解x了= =),我想这可能有心理因素的缘由,或许是几个月没经历过考试有点紧张了,这一点要尽力克服
  • 四、填写代码的题目虽然作得能够,但一些简单的地方却错了,这是不该该的,究其缘由,我认为仍是基础的问题,要多回归课本,掌握好最简单的知识

3.2 罗列错题。请在选择题、填空题、改错题、编程题分别举一题说明为何错了,怎么改?

  • 一、选择题:

第一题我题目意思理解错误,我觉得他问的是C语言能够输出的数的进制位= =函数

  • 二、填空题:

第七空为ch=getchar(),我只写了ch,这是我没把上课内容充分理解的缘由,之后上完课我应该进行复习学习

  • 三、改错题:

改错比较尴尬,由于我知道它错了,错在哪,殊不知道怎么改,我认为这是由于我阅读程序能力不够的缘由,之后我要多读程序,学会看程序设计

  • 四、编程题:

编程题其余两题我作得不错,这一题我也知道怎么作,可是可能考试比较紧张了,我忘了怎么求x的值了= =,考试时时间比较紧迫,就没仔细去想,但愿下次作题可以保持头脑清晰,不要着急3d

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

  • 一、基础知识要先掌握好,即课本的内容先精通,再来谈更进一步的深奥内容
  • 二、经过期中,我明白了c的学习不仅是pta上作编程题而已,一些基础的理论的简单知识也要明白
  • 三、下半学期,要在搞好基础知识的状况下,将这些知识运用于编程中
相关文章
相关标签/搜索