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

一、PTA实验作业

题目1:7-2 求整数序列中出现次数最多的数

1. 本题PTA提交列表

2. 设计思路

定义变量n,i,j用于循环,count1,count2用于数的重复个数,number表示做为重复次数最多的数
输入n的值并定义a[n]
for i=0 to i<n  输入a[i] end
for i=0 to i<n i=i+2
         for k=0 to k<n
         若a[i]=a[k]
           count1++
        若a[i+1]=a[k]
           count2++
end
          若count1>=count2且count1>=sum
           sum=count1;number=a[i]
         若count1<count2&&count2>=sum
              sum=count2;number=a[i+1]
           count1=count2=0
end
输出number和sum的值

3.代码截图

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


最初的编辑运行结果认为可以,交上后部分正确

调试发现值与理想的不符


位置不同结果有正确与错误的区别,思考后加上与sum的比较后答案正确

题目2:7-3 出生年

1. 本题PTA提交列表




2. 设计思路

定义变量year,year1,n,  k=0,j=0,用于循环x用于存放每次的年份flag=0,count=0;
定义数组 a[4];
输入year,number的值
    year1=year
  while当year>0时
    a[0]=year1/1000;//直接保留每个位的值
    a[1]=year1/100%10;
    a[2]=year1%100/10;
    a[3]=year1%10;
    for j=0 to j<3
    	for k=j+1 to k<=3
    	  若a[k]=a[j]
        	break;
           若k=3
    	   count++
	end
     end 
    若count=n-1
      break;
    year1++;count=0;
 while end
输出year1-year,year1的值

3.代码截图

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



一开始编辑时输出不对,调试发现count不一样,没想象中的结果,改正后pta部分正确

自己在调试的时候感觉a[j]值奇怪,自己用printf让其输出

调整循环后感觉输出正确,但pta显示不正确

自己一开始很奇怪,觉得自己输出正确,后才知道自己的理解有问题,自己没有把赋上去的0很好的考虑进去

自己在借鉴别人代码,思考之后,把对数组a的赋值进行修改,保证都有四个数值,后才调整正确

题目3:7-7 找鞍点

1. 本题PTA提交列表

2. 设计思路

定义变量n变量i,j,k用于循环,flag,count用于判断
输入n的值,并定义数组a[n][n]
定义下标变量row=0,col=0
for i=0 to i<n
       for j=0 to j<n 
            输入a[i][j]
end
end
for i=0 to i<n 
  row=i;flag=0
     for j=0 to j<n
        若a[i][j]>=a[row][col]
   	   col=j;
   	   若j=(n-1))
   		for k=0 to k<n
   			若a[row][col]>a[k][col]
			   flag=1;break
			 若k=n-1
			  count++;
			  输出row与col的值
		 end
	   
end
end
   若flag=1且count=0
   输出NONE

3.代码截图

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

自己一开始输出不正确,读自己代码时发现输出应该是row与col而不是i与j,会变化

改正后输出没有预想的效果,调试之后发现自己的条件设定问题,在count前加了k=n-1的条件


感觉输出可以,pta部分正确


思考后在一个判断条件上加了等号

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

三、同学代码结对互评

1.互评同学名称

林岑

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

  • 林岑的

  • 我的

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

林岑的代码是利用嵌套循环把每个数与所有的数比较,比较巧妙的用flag1和flag2=0初值比较,直接能循环得出最大的值

我的代码是两两比较,找出重复较多的数在比较,用较多的数替代较少的数,直至得出最多的数及其数量

我更喜欢林岑的代码,我觉得她的代码比较简洁易懂,在循环比较,赋值方面的做法比较巧妙

四、本周学习总结

1.你学会了什么?

1.1 C中如何存储字符串?

可以定义字符数组实现,数组长度上限取80,以‘\n‘作为输入结束符

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

字符串的结束标志是‘\0’,‘\0’可以用来控制字符数组的输入与输出,控制循环

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

  • 使用gets()吸收整个字符串遇到回车结束
  • 使用scanf语句输入(注意没有&)遇到空格与回车结束
  • 使用循环如while(link[k]=getchar()!='\n')结尾记得加link[k]='\0'

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

  • 定义数字字符number
  • 输入数字字符number的值
  • number=number-‘0’
  • 输出number的值

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

  • 16进制
定义数组si[60]存放字符串,number存放结果,i用于下标递增
         输入字符串
         如果是0~9的数字字符
         number=number *16+si[i]-‘\0’
         如果是A~F的大写字母
         number=number*16+si[i] - 'A'+10
         如果是a~f的小写字母
         number=number*16+si[i] - 'a'+10
  • 10进制
定义数组str[80]用于存放2进制数,定义number存放转换为十进制的结果,i用于递增
    输入字符串
number=number* 2+str[i]-'0'
输出number的值

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

自己在回答这道题的时候基础不够扎实,i++,所以其判断是从第二个字符开始的,而且scanf输出时遇空格停止,所以空格后不用考虑

自己在改错题查找方面还要加强

自己在本周pta数组方面对于比较复杂的数组会有些找不到思路,考虑不够,在数组的调试方面也不太知道从哪里下手

3.期中考试小结

3.1 你认为为什么没考好?

  • 对于课本的知识没有很好的消化吸收,课堂派的错题也没有好好理解,对待预习作业不够认真
  • 选择题得分不好,自己在一些赋值,运算符的计算顺序上不够扎实
  • 自己手写代码的失误较多,平常有Dev-c++的帮助找错,在自己手写时,就出现许多问题
  • 自己读代码的能力不够,一些题目的要求没有很好的理解
  • 在代码改错方面也应加强,平常要注意小细节

3.2 罗列错题

  • 自己在读这题的时候有些懵,自己对赋值的顺序和!的使用比较模糊
  • 运算顺序是!>&&>||,对于A选项先!b为0判断0==0是1,c选项!(b+b)是0&&(c-a)结果是0,再判断或(a-1)是0

    第一空输出为1.0/(i*i)

    最后的返回值为return a,自己在读题时思考不够

猜数字的编程题,自己的分较低,除了对随机数的不了解之外,自己平常打代码依赖c++而且写题时没有较好的考虑就直接写,思路不够清晰周全

随机数的用法:srand(time(NULL));int num=rand()%100

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

  • 自己要合理安排复习时间,多回归课本,不局限于打代码
  • 多理解,查看自己的错题,减少自身的失误
  • 多读读别人的代码,提高自己的读代码能力
  • 减少对Dev-c++的依赖,自己草稿找错验证
posted @ 2017-12-03 20:56  hahaha233  阅读(365)  评论(1编辑  收藏  举报