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.进制转换和排序几种方法都挺重要的,还有函数的使用,多多学习
  • 相关阅读:
    springmvc文件上传 并读取excel文件基本写法 多文件时参数为 @RequestParam MultipartFile[] myfiles 单文件时直接传File
    谷歌浏览器 js调试方法
    jxl实现文件导入页面例子
    angularjs实现上传文件动态显示文件列表
    文件上传 多个文件上传与单个文件上传
    angularjs实现动态表格的删除与增加
    2017songyunxin
    百万数据导出
    OutProductController
    DownloadUtil
  • 原文地址:https://www.cnblogs.com/tajiyu/p/7954808.html
Copyright © 2011-2022 走看看