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.进制转换和排序几种方法都挺重要的,还有函数的使用,多多学习
时间: 2024-08-02 01:42:13

C语言作业--数组的相关文章

C语言--一维数组,字符数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { #pragma mark----------数组 //数组是容器,相同数据类型 //构造类型 // int a[3]={5,2,0}; //类型 // int[3]; //变量名 // a; //初值 // {5,2,0}; // int a[4] = {9,8,7,6}; // float b[6] = {2.5,3.14}; // char

day05&lt;Java语言基础--数组&gt;

Java语言基础(数组概述和定义格式说明) Java语言基础(数组的初始化动态初始化) Java语言基础(Java中的内存分配以及栈和堆的区别) Java语言基础(数组的内存图解1一个数组) Java语言基础(数组的内存图解2二个数组) Java语言基础(数组的内存图解3三个引用两个数组) Java语言基础(数组的初始化静态初始化及内存图) Java语言基础(数组操作的两个常见小问题越界和空指针 Java语言基础(数组的操作1遍历) Java语言基础(数组的操作2获取最值) Java语言基础(数

C语言关于数组与指针内容小结

数组的基本概念 什么是数组:数组就是:数组是相同类型的元素的一个集合       类型说明符 数组名 [常量表达式]: 其中,类型说明符是任一种基本数据类型或构造数据类型.数组名是用户定义的数组标识符.方括号中的常量表达式表示数据元素的个数,也称为数组的长度.例如: int a[10]; /* 说明整型数组a,有10个元素 */ float b[10], c[20]; /* 说明实型数组b,有10个元素,实型数组c,有20个元素 */ char ch[20]; /* 说明字符数组ch,有20个元

C语言——字符数组

在C语言编程中,我们一般用一个字符数组来存放一个字符串.例如,我们想存储这个字符串“http://i.cnblogs.com”,这个字符串一共有20个字符,要存放下这个字符串,我们需要一个长度为21的字符数组.为什么是21个而不是20个呢?在C语言中,字符串数组默认以'\0'结尾,所以我们一共需要一个长度为21的字符数组来存储这个变量. unsigned char text[21] = “http://i.cnblogs.com”; 既然我们已经知道了如何存放一个字符串,那下面我们来讨论另外几个

C语言之数组名的含义

一:一维数组 int a[5]; a:就是数组名.a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值:a做右值表示数组首元素(数组的第0个元素,也就是a[0])的首地址(首地址就是起始地址,就是4个字节中最开始第一个字节的地址).a做右值等同于&a[0]; a[0]:表示数组的首元素,也就是数组的第0个元素.做左值时表示数组第0个元素对应的内存空间(连续4字节):做右值时表示数组第0个元素的值(也就是数组第0个元素

【Go语言】【6】GO语言的数组

在<[4]GO语言类型和为类型增加方法>里说过GO语言除了基础类型(如int.float64.complex128等)之外,还有复合类型,其中就包含本文的数组.对于数组大家都不陌生,在C语言中可以这样声明一个一维数组:int arr[10],那么GO语言是怎么定义的呢? 一.数组的声明 1.数组的声明格式为var arrName [num]type,比如: var strArr [10]string     // 声明一个由10个字符串组成的一维字符串数组 var byteArr [32]by

C语言去除数组中重复的字符简单例子

#include <stdio.h> int main(void){ int a[10]={1,2,3,3,4,5,1,3,5,6}; int i,j; int zieo=0; for(i=0;i<10;i++) for(j=i+1;j<10;j++) { if(a[i]==a[j]) { a[j]=0; } } for(i=0;i<10;i++) { if(a[i]!=zieo) { printf("%d\t",a[i]); } } printf(&qu

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

java、C语言实现数组模拟栈

java: public class ArrayStack { private int[] data; private int top; private int size; public ArrayStack(int size) { this.data = new int[size]; this.size = size; this.top = -1; } public boolean isEmpty() { if (this.top == -1) { return true; } return