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. iOS block疑难解答

    1,为什么需要加__block ARC环境下,一旦Block赋值就会触发copy,__block就会copy到堆上,Block也是__NSMallocBlock.ARC环境下也是存在__NSStack ...

  2. 【java】javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序【解决方法】

    JDK安装成功,并且配置了环境变量,java命令正常可以使用,但是javac命令提示 不是内部或外部命令,也不是可运行的程序 解决方法: 产生这个问题的原因,是因为环境变量的配置中,Path中配置使用 ...

  3. file 从InputStream读取byte[]示例

    file 从InputStream读取byte[]示例 分类专栏: java基础   public static byte[] getStreamBytes(InputStream is) throw ...

  4. RookeyFrame2.0发布,UI重构

    RookeyFrame2.0在原来1.0的基础上进行了UI的重构,设计了扁平化的样式风格,看起来更清爽,更赏心阅目,由于之前工作比较忙升级比较慢,后续会投入比较多时间来更新维护,同时针对二次开发项目做 ...

  5. oracle 更新日期字段

    update field set BEGINDATE=to_date('2017-02-03 10:30:20','yyyy-mm-dd hh24:mi:ss')

  6. Celery简介以及Django中使用celery

    目录 Celery简介 消息中间件 任务执行单元 任务结果存储 使用场景 Celery的安装和配置 Celery执行异步任务 基本使用 延时任务 定时任务 异步处理Django任务 案例: Celer ...

  7. .htaccess文件配置理解

    0x00前言.htaccess文件是用于apache服务器下的控制文件访问的配置文件,因此Nginx下是不会生效的 .htaccess可以控制错误重定向,初始页面设置,文件夹的访问权限,文件的跳转等 ...

  8. FPM Search里给查询条件加OVS搜索帮助

    FPM里的OVS用法基本和WDA一致. 1,将OVS类添加到SEARCH.(可以单独写个类,因为这里为了方便,就和SEARCH放一起了) IF_FPM_GUIBB_OVS~HANDLE_PHASE_0 ...

  9. Ubuntu拒绝root用户ssh远程登录

    sudo vim /etc/ssh/sshd_config 找到并用#注释掉这行:PermitRootLogin prohibit-password 新建一行 添加:PermitRootLogin y ...

  10. PHP7.2.6安装sodium扩展

    安装libsodium libsodium是安装sodium扩展的必须依赖条件,我这里提供两种安装方式,编译和直接yum 编译安装libsodium wget https://github.com/j ...