0.





1.本章学习总结

1.1学习内容总结

1.1.1一维数组

  • 1.一般定义形式:类型名 数组名 [数组长度];类型名指定数组中每个元素的类型,数组名是数组变量的名称,是一个合法的标识符,数组长度是一个整型常量表达式,设定数组的大小;

  • 2.数组是一些具有相同类型数据的集合;数组名是一个地址常量,存放数组内存空间的首地址;数组元素的引用要指定下标,它的合理取值范围是[0,数组长度-1],下标不能越界。

  • 3.数组定义时需要初始化,静态数组不全部赋值,未赋值的元素自动为0,动态数组值随机;

1.1.2二维数组

  • 1.一般定义形式:类型名 数组名 [行长度] [列长度];音乐二维数组要指定两个下标,即行下标和列下标;

  • 2.二维数组初始化的方法有两种:a.分行赋初值;b.顺序赋初值;其中分行赋初值的方法直观清晰,不易出错,是二维数组初始化最常用的方法;

    二维数组初始化时,如果对全部元素赋了初值,或分行赋初值时,在初值表中列出了全部行,就可以省略行长度。

  • 3.一般使用二维数组编程时会需要二重循环;

1.1.3一维字符数组

  • 1.一维字符数组用于存放字符型数据,它的定义初始化和引用与其他类型的一维数组一致;

  • 2.字符串就是用一对双引号括起来的字符序列,它有一个结束标志'\0';

    将字符串存入字符数组时,由于它有一个结束符'\0',数组长度至少是字符串的有效长度+1,第一个'\0'后的其他数组元素与该字符串无关;

  • 3.字符串输入:a.scanf:scanf("%s",str);输入参数:字符数组名,不加地址符,遇回车或空格输入结束,并自动将输入的一串字符和'\0'送入数组中;b.fgets函数:fgets(buf,10,stdin);stdin表示标准输入流;fgets函数读取文件当中的n-1个字符到s中,从标准输入流中读取字符串,输入的字符个数超出了字符数组的大小不会导致溢出的问题;gets函数:用于从缓冲区中读取字符串,直到出现换行符或读到文件尾为止,由于gets不检查字符串string的大小,必须遇到换行符或文件结尾才会结束输入,因此容易造成缓存溢出的安全性问题,导致程序崩溃。

  • 4.字符串输出:a.循环输出;b.printf("%s",str),printf("%s","hello");c.puts(str),puts("hello");

1.1.4数组中如何查找数据

  • a.已知需要查找的数据:通过循环,历遍数组,与数组元素比较,直到找到所需要的数据
  • b.已知需要查找数据的地址,直接读取地址找出数据;
  • c.二分查找法

1.1.5数组中如何插入数据

   读取需要插入的数据x;
if (x < a[0])
{
for (k = N - 1 to 0; k--)
挪动数组a[k + 1] = a[k];
end for
a[0] = x;
}
end if else if (x > a[N - 1])
a[N] = x;
end if
else
for (i = 0; i < N - 1; i++)
{
if (a[i]<x && a[i + 1]>x)
{
for (k = N - 1;to i; k--)
挪动数组a[k + 1] = a[k];
end for
a[i + 1] = x;
break;
}
end if
}
end for }``` ###1.1.6数组中如何删除数据
定义循环变量 i, j,m;
定义需要删除的位置的元素x;
for (m= 0 to k)
{ scanf("%d", &x); for (j = x-1 to n-1)
{
a[j] = a[j + 1];
}
end for
n = n - 1; }
end for
若删除数据但不知道位置,方法相似 - 题目例子:PTA一维数组7-6
###1.1.7数组中目前学到排序方法
- a.冒泡法:通过相邻两个数不断交换,将数据往前或者后移动,经历n轮后达到排序的目的
- b.选择法:经过n-1轮循环,依次从下一个数据历遍数组来进行移动,达到排序的目的,需要两层循环
###1.1.8数组做枚举用法
- 寻找重复数据:在数组中寻找重复数据时,有时简单直接的方法就是直接历遍数组,一个个去看元素是否重复出现,将数据一个个列举,方法一个个举出,列出所有可能性,就是枚举,一个个拿出数据,一个个比较就是数组中的枚举 ###1.1.9哈希数组用法
- 重复数据的判断,通过对哈希数组初始化全部赋零,再对需要判断的数组历遍,若出现过则赋1,当再次遇到时哈希数组值已经赋1则确定重复
- 哈希数组是偏向辅助的数组,在代码中作为一个辅助的存在来实现代码功能要求 ##1.2本章学习体会
- 数组的学习对c语言很有用,在大数据型的代码中作用很大,但是多个数组的同时使用,让人觉得眼花缭乱,会出现分不清或者思路突然不清晰的情况,但是数组的学习确实大大缩减了代码量,非常好用。
| 周 | 代码量 |
| ----- | --------- |
| 十一周 | 380~400 |
| 十二周 | 410~430 |
|代码总量|790~~830| #2.PTA实验作业
##2.1数组元素的删除
###2.1.1伪代码
``` 定义数组 a[M],M为最大范围
定义数组的实际范围 n;
定义需要删除的次数k;
定义循环变量 i;
调用具体范围n; for (i 0 to n)
{
调用数组所有元素a[i] }
end for
调用 k; 删除函数Delete(a, n, k); for (i to n-k)
{
判断第几次输出,以控制空格;
输出数组 }
end for return 0; }
删除函数
{
定义循环变量 i, j,m;
int x;
for (m to k)
{ 调用需要删除的位置x for (j x-1 to n-1)
{
将元素后挪
}
end for
n = n - 1; }
}``` ###2.1.2代码截图
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117132701265-657760966.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117132721707-1881492807.png) ###2.1.3造测试数据
| 输入数据 | 输出数据 | 说明 |
| ----- | --------- | ----------- |
| 10 | | |
|1 2 3 4 5 6 7 8 9 10| | |
| 4 ;3 2 4 6 | 1 4 5 7 8 10 | 正常数据 |
| 3 | | |
|3 4 5 | | |
|4 ;1 2 3 4 | | 删除超出数组上限 |
| 3 | | |
|1 2 3| | |
|0 |1 2 3|不删除数据| ###2.1.4 PTA提交说明及说明
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117133843117-105967208.png) 提交列表说明
- 格式错误:输出时数组之间需要空格,我的没有空格; - 格式错误:输出时,最后一个数据最后没有空格,我的最后一个数据仍然有空格; - 答案正确:通过确定是第几次输出,如果是第一次就不要空格,不然就在前面带空格,以保证最后一个数据没有空格; ##2.2 7-3上三角矩阵 ###2.2.1伪代码 ```定义二维数组a[M][M];
定义循环变量,需要判断的矩阵个数;
定义一个初始化为零的矩阵 for (k = 0 to T)
{
调用第i to n个矩阵
for (i = 0to n)
{
for (j = 0 to n)
{
调用二维数组
}
end for
}
end for
for (i = 0 to n)
{
for (j = 0 to n)
{
if (在下三角中出现0以外的数) count++;
end if
}
end for
} end for
if (count == 0)
{
对第k个矩阵赋1
}
else
{
对第k个矩阵赋0
}
初始化count ;
}
end for
for(k=0 to T)
{
if (b[k] == 1)
{
printf("YES\n");
}
end if
else
{
printf("NO\n");
}
end else
}
end for``` ###2.2.2代码截图
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117213444772-1652846597.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117213500936-433985649.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117213513808-1916478256.png) ###2.2.3造测试数据
| 输入数据 | 输出数据 | 说明 |
| ----- | --------- | ----------- |
| 1 2 3 4 5 6| | |
|0 2 3 4 5 6 | |
|0 0 3 4 5 6 | |
|0 0 0 0 0 0 | |
|0 1 0 0 1 0 | |
|1 2 3 4 5 6|NO | 正常数据 |
| 1 2 3 | | |
| 0 4 5 | | |
| 0 0 6 | | |
| 1 0 | | |
|-8 24 | YES;NO | 正常数据 | ###2.2.4PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117214227155-1674015171.png) 提交列表说明 - 答案错误:一开始我的代码是根据题目测试数据写的,但是改变后就不对了,当n最大我的代码就出错了 - 答案错误:改数据后,没有考虑n最小,最大的情况,所以还是错误 - 答案正确:我因为修改一直不对,就直接重新写了一个代码,这个代码比之前的好很多 ##2.3字符串转换成十进制整数
###2.3.1伪代码 定义字符串数组 str[M],十六进制储存 hexad[M];
长整型数据 number;
循环变量 i,j, k=0;
定义两个判断以控制输出数的正负的两个开关
flag = 1;
point = 0; i = 0;
while (读取字符串)
{
通过i自增控制循环
}
str[i] = '\0'; for (i 0 to '\0')
{
if (出现'-',且开关为零)
{
flag = -1; }
end if
if (str[i] 为十六进制数)
{ 改变point值,使后面才出现符号的情况无效 储存十六进制数到hexad函数 k++;
}
end if
}
end for
hexad[k] = '\0'; number = 0; for (hexad!='\0')
{
if (数组元素是数字)
{ number = number * 16 + hexad[i] - '0'; }
end if
else if (数组元素是大写字母)
{
number = number * 16 + hexad[i] - 'A'+10;
}
end if else if (数组元素是小写字母)
{ number = number * 16 + hexad[i] - 'a'+10;
}
end if
}
end for 通过flag控制number正负
number = flag * number;
printf("%ld\n", number);
return 0;
###2.3.2代码截图
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117223238415-1190884629.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117223251149-1027426337.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117223303477-1189377511.png) ###2.3.3造测试数据
| 输入数据 | 输出数据 | 说明 |
| ----- | --------- | ----------- |
| +-P-xf4+-1!#| -3905 | 正常数据,十六进制数前有负号 |
| f4+-1!#| 3905 |正常数据,十六进制数后才出现负号|
| hjkk#| 0| 无十六进制数| ###2.3.4PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191117224056997-1976823497.png) 提交列表说明 - 部分正确:考虑了测试数据,但是造其他测试数据时值正确,正负却不对 - 部分正确:用flag,point后,题目所给数据直接为正 - 答案正确:控制负号出现的同时point为正,并将flag取负,之后不再在意flag,point改变值,若没出现负号,point也改变值,保证flag不能取负 #3.阅读代码
![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191123095847470-980957361.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191123095904048-496454282.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191123095919716-2065559283.png) ![](https://img2018.cnblogs.com/blog/1778794/201911/1778794-20191123095933818-1182431251.png) - 题目大意:该题目意思是确定一张数字为2n的票前n位和与后n位和是否相等若相等则为幸运票,若不相等则计算还需要多少张才买到幸运票 - 代码理解:该代码为c++类,具体是通过数组存放票上的数字,再通过循环将前n为和放到sum[0]后n位放到sum[1],通过比较二者来确定幸运票,以及确定距离幸运票的张数 - 该代码亮点在于对sun[0]sum[1]的大小判断通过temp来计算差距,以及代码尾carry的使用,使代码计算避免了许多麻烦。

c博客作业-数组的更多相关文章

  1. C语言博客作业—数组

    一.PTA实验作业 题目1:简化的插入排序 1. 本题PTA提交列表 2. 设计思路 (1)定义n,number,i,j,temp; (2)输入n; (3)定义数组a[n+1]; //把所有的数都放入 ...

  2. C语言博客作业--数组

    一.PTA实验作业 题目1.求整数序列中出现次数最多的数 1.本题PTA提交列表 2.设计思路 定义整形变量n,max,count分别表示整数个数,出现次数最大值,出现次数.定义循环变量i,j. 输入 ...

  3. C语言第七次博客作业--一二维数组

    一.PTA实验作业 题目1:找鞍点 1. 本题PTA提交列表 2. 设计思路 定义n,i,j,ii,jj,a[7][7],flag,max 输入n for i=0 to i=n for j=0 to ...

  4. Java语言课程设计——博客作业教学数据分析系统(201521123107 张翔)

    #Java语言课程设计--博客作业教学数据分析系统(个人博客) 1.团队课程设计博客链接 [博客作业教学数据分析系统(From:网络五条狗)](http://www.cnblogs.com/fanta ...

  5. C语言最后一次博客作业

    1.当初你是如何做出选择计算机专业的决定的? 一开始选专业的时候,说实话我很纠结也很迷茫,对我来说,中学时代,似乎就只要考好试,做好题就可以了,对于未来想要做啥并没有那么多的规划和想法,偶尔跟基友畅聊 ...

  6. OO第二次博客作业(第二单元总结)

    在我开始写这次博客作业的时候,窗外响起了希望之花,由此联想到乘坐自己写的电梯FROM-3-TO--1下楼洗澡,然后······ 开个玩笑,这么辣鸡的电梯肯定不会投入实际使用的,何况只是一次作业.还是从 ...

  7. C语言博客作业6---结构体&文件

    C语言博客作业6---结构体&文件 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容.如下图所示: 1.2.学习体会 描述本周学习感受,也可以在这里提出你不理解地方.对 ...

  8. C语言博客作业5--指针

    C语言博客作业5--指针 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里 ...

  9. C语言博客作业4--数组

    C语言博客作业4--数组 1.本章学习总结 1.1思维导图 请以思维导图总结本周的学习内容,如下图所示: 1.2本章学习体会及代码量学习体会 1.2.1学习体会 描述本周学习感受,也可以在这里提出你不 ...

随机推荐

  1. SQL忽略重复键作用

    1.插入时如果开启的话,发现重复键会忽略,否则报错 2.更新时不管开启是否都会报错

  2. ElasticSearch如何更新集群的状态

    ElasticSearch如何更新集群的状态 最近发生了很多事情,甚至对自己的技术能力和学习方式产生了怀疑,所以有一段时间没更新文章了,估计以后更新的频率会越来越少,希望有更多的沉淀而不是简单地分享. ...

  3. Redis(九)高可用专栏之Sentinel模式

    本文讲述Redis高可用方案中的哨兵模式--Sentinel,RedisClient中的Jedis如何使用以及使用原理. Redis主从复制 Redis Sentinel模式 Jedis中的Senti ...

  4. SQL Server使用sp_executesql在存储过程中执行多个批处理

    SQL Server中有些SQL语句只能在一个批处理里面完成,例如CREATE SCHEMA语句创建SCHEMA的时候,每个SCHEMA都需要在一个单独的批处理里面完成: CREATE SCHEMA ...

  5. SoapException: Timed out while processing web services request

    情形:动态调用WebService时,语句method.Invoke异常. 异常信息为调用目标发生异常,从异常信息并不能看出问题所在,需要查看InnerException,如标题所述:处理web请求超 ...

  6. PIE SDK影像快速拼接

    1.算法功能简介 快速拼接是对若干幅互为邻接的遥感数字图像拼在一起,构成一幅整体影像的技术过程.PIE支持快速拼接算法功能的执行,下面对快速拼接算法功能进行介绍. 2.算法功能实现说明 2.1 实现步 ...

  7. #pragma once和#ifndef

    C语言中的头文件只是简单的复制粘贴. C语言中变量.函数.结构体的定义和声明两个过程是分离的.声明通常放在头文件中,为了防止重复声明,需要保证头文件中的内容在构建obj文件时只被包含一次.这可以通过# ...

  8. javascript中常用函数

    1.js 获取文件后缀名 <script type="text/javascript"> var filename="www/data/index.php&q ...

  9. 5.css三角的做法

    如上图所示,类似这样的小三角都可以通过以下代码写出: .box1 { width: ; height: ; /* border: 10px solid pink; */ border-top: 10p ...

  10. CSS 总结 [目录]

    一.CSS 基础 1.CSS 初识 2.CSS 用法和特性 二.CSS 选择器 1.基本选择器 2.组合选择器 3.属性选择器 4.伪类选择器 5.伪元素选择器 三.CSS 字体样式 四.CSS 文本 ...