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

一、PTA实验作业

题目一.简化的插入排序

1.本题PTA提交列表

2. 设计思路(采用二分法进行插入)

  • (1)定义一个数N为数组宽度并输入这个数,定义两个数据分别保留左端和右端的数left=0;right=N-1,和他们的中间数
  • (2)定义一个数组n[80]。
  • (3)定义一个循环变量i,for(i=0;i<N;i++){输入数组中的数n[i];
  • (4)定义插入的数为a,输入这个数
  • (5)while(left<=right)
  • (6){mid=(left+right)/2;
  • (7)
    if(a>n[mid])left=mid+1;
    else if(a<n[mid])right=mid -1;}
  • (8)然后开始重构数组for(right=N;right>=left;right--)
  • (9)最后将a插入即n[i]=a;
  • (10)输出结果for(i=0;i<N;i++)printf("%d",a[i])

3.代码截图

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

我在PTA上用的是一开始用的是顺序排序法。后来知道二分法效率更改改的因为没有看到题目中的格式要求错了一下其他的大体正确。

题目二.找鞍点

1.本题PTA提交列表

2.设计思路

  • (1)定义n为方阵的规模并输入n,定义循环变量i,j来控制输入输出,定义d来保存方阵中每一个位置对应的数,定义m用来行比较定义falg=0用来判断是否输出过.
  • (2)定义二维数组c[n][n].
  • (3) for(i=0;i<n;i++){
    for(j=0;j<n;j++){输入c[i][a]}}
  • (4)for(i=0;i<n;i++){
    for(j=0;j<n;j++){ 将c[i][j]的值赋给d;
  • (5)for(m=0;m<n;m++){
    然后将d与该行的所有元素比较如果d大于这一行中的某一个数,跳出这一层循环。}
  • (6)如果mn for(g=0;g<n;g++){再将该元素与这一列进行比较然后将d与该列的所有元素比较如果d小于这一列中的某一个数跳出循环;)当gn时输出i j并让flag=1}}
  • (7)如果flag=0输出NONE。

3.代码截图

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

行列柔和在一起写的很乱后来做了注释就没那么乱了总体来说不是很难。

题目三 猴子选大王

1.本题PTA提交列表

2.设计思路(大体看了一下题目,一开始就有一个思路就是让数据一直增加不是一直重复虽然不符合题意但是结果一定是对的。)让数据不断重新也是可以操作的可是我认为会比较麻烦。

  • (1)输入N为猴子的个数,定义a=0为报的数,定义count来记录不为0的个数,定义s用来保存猴子编号;
  • (2)定义一个数组长度为d[N+1]因为没有0号猴子所以这样操作会简单一点舍弃d[0],然后对数组进行遍历赋初值所有输都为1.
  • (3)for(i=1;i<N+1;i++){count=0;
  • (4)如果d[i]=0跳过本次循环
  • (5)否则让a++;并让d[i]=a如果d[i]取余3时让d[i]=0;
  • (6)for(i=1;i<N+1;i++)当d[i]!=0如果d[i]!=0,count+1;并且让s等于i}如果count=1跳出循环并且输出s}

3.代码截图

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

本题就是跨越那个已经是7的猴子第二次报数比较难操作其他的都不是难题

二、截图本周题目集的PTA提交列表及最后排名。

PTA排名

三、同学代码结对互评

1.互评同学名称

张志鑫

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

张志鑫:
我:

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

他可能是没有看到题目。他的做法就是重新定义了一个数组虽然说很方便,但是浪费空间。不是很认同。我的代码就比较复杂但是节约了空间但是应该还可以再优化就是将移位个数和n/2对比看是怎么输出。

四、本周学习总结

1.你学会了什么?

1.1. C中如何存储字符串?

1、在c语言中存储一个字符串,一般有两种方法,一种是字符指针,一种是使用字符数组。

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

0,因为字符型数组中的每一个字符都是随机的如果没有结束标志无法判断到哪里读取结束。

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

三种 getchar gets scanf

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

char c
int a;a=c-'0'.prinft("%d,a);

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

a=0;
for(i=0;c[i];i++){
a=a*2(16就是16)+c[i]-'0'}

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

学会多种不同排序查找法。

3.期中考试小结

3.1 你认为为什么没考好?

没有好好复习,掌握的知识不算很牢固。考试技巧有所缺失。就是写的特别乱。

3.2 罗列错题。

选择题1不懂8421码这种东西是10进制的。
输出结果第二题没学过递归,以为是从内函数到外函数实际相反。
填空题第一题题号看错了。
编程题第一题考试忘记了随机数是怎么产生的

include <stdlib.h>
include <stdio.h>
include <time.h>           //使用当前时钟做种子
void main( void )
{int i;
srand( time( NULL ) );          //初始化随机数
 rand() 就是随机数
posted @ 2017-12-03 17:32  这个人有毒啊  阅读(330)  评论(1编辑  收藏  举报