zoukankan      html  css  js  c++  java
  • C语言作业数组

    一、PTA实验作业

    题目1:7-5 数组循环左移

    1. 本题PTA提交列表

    2. 设计思路

    定义俩个整数 n,m
        定义循环变量i,j,x
        定义变量k用来存放下标
        定义变量number用于交换数值
    定义整型数组a[100]
        scanf("%d%d",&n,&m);输入m,n
             i=0
                 当i<n时循环输入整数,i递增,并j将整数赋给数组a
                 x=1
                     x递增,只要满足x<=m{
       	        k=0每次设置下标为0
    	         j=n-1,j递减,只要满足j>0{
    		       number=a[k];
    		      a[k]=a[j];
    		       a[j]=number;
                        实现原先排第一个的数与后一个交换,直到排到末尾
                重复m次,得到左移后的数组
               }
                    }
                i=0
                i递增,只要满足i<n{
    	依次输出a中数值
    	在输出最后一个数值前,每个数值后输出一个空格}
    

    3.代码截图

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

    • 1.如何实现左移
      想到了冒泡排序中交换的思想,通过循序实现第一个数调到最后一个数的位置,相当于后面的左移了一个

    • 2.解决1中问题后发现,运行结果变成了最后的数调前面去了,把循环条件由递增改为递减,结果就对了

    • 3.左移数大于一时发现输出数组乱的
      通过多组数据运行结果发现,是因为进入下一次循环后,下一次要后调的数下标是0,而不是误认为的m-1,所以每次循环要将0赋给下标

    题目2:7-7 找鞍点

    1. 本题PTA提交列表

    2. 设计思路

    定义变量 n,i,j,p,q,k;
    输入n
    定义数组a[6][6]
    i定义flag并赋初值0
     i=0
         i递增,只要满足i<n{
    	j=0
                j递增只要满足j<n{
    		输入数值并赋给数组
    	} 
    }
        i=0
        i递增,只要满足i<n{
                    p=0;
    	    j=0
                    j递增,只要j<n{
    		满足a[i][p]<=a[i][j]时
    			下标重新赋值p=j;
                                 找到一行中最大值对应的下标
    		}
    	}
    	q=0;
            k=0
              k递增,只要k<n {
                当(a[k][p]<=a[q][p])
    	          下标重新赋值q=k;	
                          找到该列中最小值的角标
    	如果i==q即为鞍点
    		flag递增
    		输出最大鞍点的下标
                         }
              如果flag==0
              输出NONE
    

    3.代码截图

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

    没有考虑到俩个或者多个鞍点的情况
    增加了a[i][p]<=a[i][j]和a[k][p]==a[q][p]的判断

    题目3:7-6 阅览室

    1. 本题PTA提交列表

    2. 设计思路

    定义变量 n,i,number,hh,mm,number表示书序号,hh表示小时,mm表示分钟
    char op定义字符型变量op来存放E,S,0
    输入n
    i=0
        i递增,满足i<n{
    	定义sum,并赋初值0
    	定义count,并赋初值0
    	定义数组 time[1001]
    	定义flag[1001]并赋初值0
    	while(scanf("%d %c%d:%d",&number,&op,&hh,&mm)){输入信息
    		如果number==0)退出循环
    		判断输入的字符op
    			如果为S{
    				将开始的时间转化成分钟 time[number-1]=hh*60+mm;
    				 flag[number-1]=1表示该书被借
    			}
    			break;
    			如果为E{
    				如果该书被借{
    					flag[number-1]=0表示该书状态为空闲
    					count++记录借书次数
    					sum=sum+hh*60+mm-time[number-1]累加计算读书时间
    				}
    			}
    			break;
    		}
    	}
    	如果count==0即没有借书
                   输出0 0
    	否则输出借书次数count和平均借书时间sum*1.0/count
    

    3.代码截图

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

    这一题主要就是思路的问题,考虑的东西多,用到好几个数组,还有如何用while循环输入信息,还有利用flag变量的值判断

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

    PTA排名

    三、同学代码结对互评

    1.互评同学名称 李梦冰

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

    题目7-7 找鞍点

    我的代码

    梦冰代码

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

    主要不同在判断出行最大后,继续找列最小这一段。我是找出行最大,列最小,如果下标正好相等,那就找到鞍点了。而梦冰是找到行最大后,继续判断该元素所在列,它是不是最小,如果是,则为鞍点。思路上细微的差别吧。但是一开始我的代码是有缺陷的,就是针对出现俩个鞍点的情况,没有判断俩元素相等的情况导致错误。另外由于我行和列比大小是分开的,设的变量名比较多,容易弄错。那梦冰同学的就比较简洁,思路清楚,可读性高

    四、本周学习总结

    1.你学会了什么?

    (1)尾字符添加结束标志 line[k]=‘\0’,结束符\0可以控制循环
    (2)如果对全部元素都赋了初值,就可以省略数组长度
    (3)字符串的有效长度就是有效字符的个数,由有效字符+1个字符组成,数组的长度至少是字符串的有效长度+1
    一维数组定义一般形式:类型名 数组名[数组长度]

    1.1 C中如何存储字符串?

    利用字符数组存放字符数据

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

    ‘\0’ 有了她字符数组的长度就显得不那么重要了,程序往往依靠检测'\0'的位置判断字符串是否结束,而不是字符数组长度,结束符可用来控制循环

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

    (1)scanf("%s",str)
    (2)gets(str)

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

    定义字符变量a
    输入数字字符‘a’
    假设转化为n进制整数
    定义变量number用来存放十进制数,并赋初值0
    numbe=number*n+‘a’-‘0’

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

    定义并输入字符串
    定义变量result,并赋初值result=0
    char ch
    当ch不是终止符\0时
    result=result*10+ch-'0'
    输出result

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

    数组下标一开始还不大习惯从零开始,以及字符串的结束符判断老丢。这次的PTA题目集,用到很多排序,几种排序方式还是有点乱,比较习惯使用冒泡排序

    错题:

    阅读代码:代码前半部分是保证按从小到大的顺序输入,按%4d的格式输出
    后半部分是利用二分查找法,如果找到输出是排第几位,如果没找到,输出没找到

    所以答案:

    pta题目集遇到多组输入还是不能很快想到用while实现

    3.期中考试小结

    3.1 你认为为什么没考好?

    阅读代码能力不强,速度慢。手写代码的格式不标准,写的很乱。这都是平时太依靠编译器的缘故,离开编译器就不知道结果是对是错了。还有像改错这类题,对新题型太陌生了。另外就是基础知识不大牢固,导致丢分

    3.2 罗列错题。

    选择题:

    将十六进制数(1EB)16转换为十进制的数是
    A、272 B、273 C、427 D、491

    E=14 B=11
    011+1614+16161=491

    错误原因:各种进制之间转换不熟,不会运算

    填空题:

    【6】char
    【7】while内对输入的字符判断,所以是(ch=getchar())
    【8】判断输入字符是否为字母:(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')

    我少了括号。。。。。

    改错题:

    (1)n没赋初值,改为int n=1;
    (2)变量类型为double,不是int,改%d为%lf
    (3)计算公式错了,不是term=-termXX/(n+1)(n+2)而是term=-termXX/((n+1)(n+2));
    (4)求和错误:改为sum=sum+term
    (5)根据题目每次n递加2,所以改n++为n=n+2

    编程题:

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

    • 1.课堂派上的预习作业代码先自己阅读,再用编译器验证答案
    • 2.尝试手写代码,用伪代码写思路也不错,像这次写的太乱了,框架都不怎么完整,这补一句,那补一句,更别说注意缩进什么的了
    • 3.进制转换和排序几种方法都挺重要的,还有函数的使用,多多学习
  • 相关阅读:
    LeetCode Array Easy 414. Third Maximum Number
    LeetCode Linked List Medium 2. Add Two Numbers
    LeetCode Array Easy 283. Move Zeroes
    LeetCode Array Easy 268. Missing Number
    LeetCode Array Easy 219. Contains Duplicate II
    LeetCode Array Easy 217. Contains Duplicate
    LeetCode Array Easy 189. Rotate Array
    LeetCode Array Easy169. Majority Element
    LeetCode Array Medium 11. Container With Most Water
    LeetCode Array Easy 167. Two Sum II
  • 原文地址:https://www.cnblogs.com/tajiyu/p/7954808.html
Copyright © 2011-2022 走看看