C语言博客作业04数组

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

本章学习相对指针来说好理解,但想对前面的知识来说就有一个新的提升,有一定的挑战,
pta作业也比较多,题型也多,但基本都是一些基础的东西,数组在学之前有过一定的使用,
所以在使用时也不会感觉很陌生,总之本章学习比较顺利,一些比较难理解的题目通过一
定时间的研究后也顺利解决。

1.2.2 代码累计

2.PTA总分

2.1截图PTA三次题目集

2.2 我的总分

一维数组:200
二维数组:105 字符数组:150 我的总分:455

3.PTA实验作业

3.1 PTA题目1

7-8 找出不是两个数组共有的元素20 分)
给定两个整型数组,本题要求找出不是两者共有的元素。
输入格式:
输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。 
输出格式:
在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。 

3.1.1 算法分析

```c
定义数组c[40],m,n,i,j,count=-1,flag
输入第一行个数m
定义数组a[m]用于存放第一行的数
for i=0 to i=m-1 do
        输入第一行的数
end for
输入第二行个数n
定义数组b[n]用于存放第二行的数
for i=0 to i=n-1 do
        输入第二行的数
end for
for i=0 to i=m-1 do    //将a数组中有b数组中没有的数存入c数组中
        flag=0
        for j=0 to j=n-1 do
                if a[i]=b[j] then 
                        flag=1
                        break
        end for
        if flag=0 then
                count++
                c[count]=a[i]
end for
for i=0 to i=n-1 do    //将b数组中有a数组中没有的数存入c数组中
        flag=0
        for j=0 to j=m-1 do
                if b[i]=a[j] then 
                        flag=1
                        break
        end for
        if flag=0 then
                count++
                c[count]=a[i]
end for

for i=0 to i=count-1 do   //c数组中有重复的数据不多输出
        for j=0 to j=i-1 do
                if c[j]=c[i] then
                        flag=1
                        break
         end for
        if c[i]=c[count] then  //与最后一个数据相等的都不输出
                flag=1
        if flag=0 then
        输出c[i]
end for
输出c[count]
```        

3.1.2 代码截图

3.1.3 PTA提交列表及说明

Q1:刚开始题目较长,以为没有对重复数据只输出一个进行规定
A1:后来发现进行解决
Q2:后来的代码输出最后一个会带有一个空格
A2:用了多个方法及时解决

3.2 PTA题目2

7-4 阅览室20 分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
输入格式:
输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:
书号([1, 1000]内的整数) 键值(S或E) 发生时间(hh:mm,其中hh是[0,23]内的整数,mm是[0, 59]内整数)
每一天的纪录保证按时间递增的顺序给出。
输出格式:
对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。

3.2.1 算法分析

```c
定义静态数组time1[1001],book[1001]
定义i,N,num,r,hour,min,count=0
定义 time=0
输入天数N
for N to N=1 do
        输入 书号num,借还标志r,点数hour,分钟数min
        while num!=0 do
                if r=='S' then
                        book[num]=1
                        time1[num]=hour*60+min     //记录借的时间
                else if r=='E'&&book[num]==1 then
                        book[num]=0
                        count++                         //计算有效总次数
                        time=hour*60+min-time1[num]+time  //计算总时间
                 输入 书号num,借还标志r,点数hour,分钟数min
end for
if count!=0 then
输出次数和时间
else
输出0 0
time=0,count=0
```

3.2.2 代码

3.2.3 PTA提交列表及说明

Q1:刚开始的时候用二维数组去尝试
A1:作了挺久感觉并没有什么思路,一直有部分错误
Q2:后来改为用一维数组尝试
A2:经过了几番敲推后终于get了

3.3 PTA题目3

7-4 查验身份证 15 分)
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:
首先对前17位数字加权求和,权重分配为:{7910584216379105842};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

3.3.1 算法分析

```c
定义 N,i,k,sum,flag=0,c[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}
输入身份证数N
getchar()
定义 a[20],b[11]={'1','0','X','9','8','7','6','5','4','3','2'}
for k=1 to k=N do
        sum=0,i=0
        while 输入a[i]!='\n' do
                i++
        a[i]='\0'
        for i=0 to i=16 do
                if a[i]>'9'||a[i]<'0' then
                        输出字符串a
                        换行
                        flag=2
                        break
        if flag=2 then
                flag=1
                continue
        for i=0 to i=16 do
                sum=sum+(a[i]-'0')*c[i]
        end for
        sum=sum%11
        if b[sum]!=a[17] then
                输出字符串a
                换行
                flag=1
end for
if flag=0 then
输出 All passed
```

3.3.2 代码

3.3.3 PTA提交列表及说明

Q1:题目所说的无法理解
A1:用百度去查了,明白意思
Q2:flag搞混乱了
A2:对代码进行逐条分析,找到了关系

4.代码互评

4.1 代码截图

同学代码

我的代码

4.2 二者的不同

1.这位同学定义的变量多,看起来比较不直观
2.这位同学用a,b,c,d来作为每行或者每列来赋值的个数,我是用从1到M再从M到1的方式来
赋值,所以减少了变量的定义
3.我们都利用了规律对每圈进行拆分后,进行赋值
原文地址:https://www.cnblogs.com/putianliuzhong/p/10089578.html