数组实验报告

一、题目分析

题目一

7-1 数组元素循环右移问题(20 分)

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A?0??A?1???A?N?1??)变换为(A?N?M???A?N?1??A?0??A?1???A?N?M?1??)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:

每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:

在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

  1. 本题pta提交列表

  1. 流程图

最终程序如下:

#include <stdio.h>

#include <stdlib.h>

int main(){

int A[10];

int M, N;

scanf("%d%d", &N, &M);

for (int i = 1; i <= N; i++){

scanf("%d",&A[i]);

}

for (int k = 0; k < M; k++){

int temp = A[N];

for (int j = N; j > 1; j--){

A[j] = A[j - 1];

}

A[1] = temp;

}

for (int i = 1; i <= N; i++){

printf("%d",A[i]);

if(i!=N)

printf(" ");

}

}

  1. 本题调试结果

  1. 题目讨论

在这题的编程中,我花费了较多时间。。。刚开始思路可能不太对。刚开始的思路是把数组元素下表做一些变换。即构造一个元素j,进行下列操作

for(i=0;i<n;i++)

{

j=(i+m)%n;

a[j]=a[i];

}

我觉得我的思路没什么大问题,就是结果不尽人意。

所以我换了另一种较为繁琐的思路。即逐步移动。每次用一个for 循环将N个数移动一次,再用一个for循环移动M次,即

for (int k = 0; k < M; k++){

int temp = A[N];

for (int j = N; j > 1; j--){

A[j] = A[j - 1];

}

A[1] = temp;

}

有一个小疑问:就是我的第一种思路为啥执行出来结果不对。。。。有时间再进行进一步

思考

题目二

7-2 求最大值及其下标(20 分)

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

1.本题提交列表

  1. 设计思路(流程图)

最终程序如下:#include<stdio.h>

int main()

{

int a[101];

int i,n,m,max;

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",&a[i]);

max=a[0];m=0;

for(i=0;i<n;i++)

{

if(a[i]>max)

{

max=a[i];

m=i;

}

}

printf("%d %d",max,m);

}

3.本题调试结果:

  1. 题目讨论

本题较为简单,注意细节就好了,没什么需要特别注意的地方……

题目三

7-3 将数组中的数逆序存放(20 分)

本题要求编写程序,将给定的n个整数存入数组中,将数组中的这n个数逆序存放,再按顺序输出数组中的元素。

输入格式:

输入在第一行中给出一个正整数n(1≤n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出这n个整数的处理结果,相邻数字中间用一个空格分开,行末不得有多余空格。

  1. 本题pta 提交列表

  1. 流程图

最终程序如下:

int main()

{

int i, n, swap, array[10];

scanf("%d", &n);

for (i = 0; i < n; i++)

scanf("%d", &array[i]);

for (i = 0; i < n/2; i++)

{

swap = array[i];

array[i] = array[n-1-i];

array[n-1-i] = swap;

}

for (i = 0; i < n-1; i++)

printf("%d ", array[i]);

printf("%d\n", array[n-1]);

return 0;

}

  1. 本题调试结果

二、同学代码互评

本来应该找别的同学一起来互评

但是我在题目三的运算中使用了两种方法,就针对这两种方法进行评论吧!

自己在思考中对本题的另一种解法

#include<stdio.h>

int main()

{

int a[101],b[101];

int i,n,m,j,max;

scanf("%d",&n);

for(i=0;i<n;i++)

scanf("%d",&a[i]);

for(j=0;j<n;j++)

{ m=n-1-j;

b[j]=a[m];

}for(j=0;j<n;j++)

{

printf("%d ",b[j]);

if(j!=(n-1))

printf("%n");

}

}

思路即定义另外一个数组B,对数组B进行赋值操作。该方法也很好理解。唯一的缺点程序比较不严谨,在pta提交过程中提交显示多出错误,但在c++中 是可以执行 并且结构正确的程序。可能是我对语句的使用不够熟练,对C的编程还不够严谨。。。

三、总结

我学到了什么?

在数组这一章以及这一章的训练中。

记忆最深的就是我之前犯过的一个错误,int n;int a[n];觉得已经定义一个变量n了,就可以定义长度为n的数组,实际上不存在这种操作!会牢记的

还有就是数组的一些基本知识,下标从0开始等等。整体来说,使用数组能简化很多问题。熟练掌握数组在编程中也能方便许多。

原文地址:https://www.cnblogs.com/yfyf/p/8270789.html

时间: 2024-11-04 20:09:03

数组实验报告的相关文章

数组实验报告 张文扬

数组实验报告 题目一:数组元素循环右移问题 1. 本题PTA提交列表 2. 设计思路(含流程图) #3.本题调试过程碰到问题及PTA提交列表情况说明. 本题遇到的的格式错误不知道在哪里,答案没有错,设计思路是分别构造两个函数, 一个输入函数,一个change函数用来平移数组,用取余来实现n(数组长度)<m(平移数) 题目二:A-B 1. 本题PTA提交列表 2. 设计思路(含流程图) 3.本题调试过程碰到问题及PTA提交列表情况说明 设计思路为分别设计两个函数real和delete,real函数

第七章数组实验报告

C程序设计实验报告 实验项目: 数组实验 姓名: 廖云福 实验地点: 514物联网实验室 实验时间:2019年5月29日 一实验项目 7.3.1一维数组的应用 7.3.2二维数组的应用 7.3.3字符数组的应用 一.实验目的和要求 a.掌握一维和多维数组的定义和数组元素的引用方法. b.了解一维数组和多维数组初始化方法. c.学习一维和多维数组的基本算法. d.掌握字符数组的定义.初始化方法和元素的引用方法. e.掌握C语言提供的对字符串进行处理的基本库函数. 二.实验内容 实验练习一.冒泡排序

三、PTA数组实验报告

三.PTA实验作业(数组) 题目一:   1.本题PTA提交列表: 2 2.设计思路(包括流程图),主要描述题目算法 //设计思路,由题目可知 1.先定义一个数组用for()循环用于输入数据 2.再用一个for()循环,用于置换数组中个值得位置(用第一个和最后一个的位置交换,第二个和倒数最后一个交换...) 3.最后再用一个for循环输出就可以 最终代码如下: 流程图如下: 3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中

第七章实验报告(数组实验)

C语言程序设计实验报告 实验项目: 1.一维数组的应用 2.二维数组的应用 3.字符数组应用 姓名:徐溢璠     实验地点: 514实验室       实验时间:2019年5月29日 一.实验目的与要求 1.一维数组的应用 定义一个一维整型数组,其大小为10,即它能存放10个数据: 使用循环语句,利用随机函数产生10个整数存放在数组中: 编写排序函数sort1(): 使用循环语句,将排好序的10个数依次输出. 2.二维数组的应用 怎样定义和使用二维数组: 怎样用循环进行二维数组中值的计算: 使

第七章数组实验实验报告(第一部分)

实验项目:第七章数组实验 姓名:谢丽萍  时间:2019年5月29号   地点:514教室 一.实验目的与实验要求 ①7.3.1-1本实验旨在巩固学生对数组这种数据结构的理解,增强程序设计能力.在这个实验中,学生将练习:定义一个一维整形数组,其大小为10,即它能存放10个数据:使用循环语句,利用随机函数生产10个整数放在数组中:编写排序函数sort1()使用循环语句,将排好序的10个数依次存放在数组中.在强化练习中,学生将练习:将数组定义为全局数组或局部数组:在主函数中,用随机函数生成10个元素

数据结构与算法 第四次实验报告 图

数据结构与算法 第四次实验报告 姓名:许恺 学号:2014011329 班级:计算机14-1     中国石油大学(北京)计算机科学与技术系 1.图的定义,文件为"Graph.h" #ifndef GRAPH_H//定义头文件 #define GRAPH_H #include<string>//引入标准库中的头文件 using namespace std; const int MaxSize=12; struct ArcNode//定义边表结点 { int adjvex;/

第三次实验报告 敏捷开发与XP实践

一.  实验内容 (一)敏捷开发与XP 摘要:一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈.假设简单性.递增更改.提倡更改.优质工作.XP软件开发的基石是XP的活动,包括:编码.测试.倾听.设计. 学习:XP是一种更加灵活的开发方式和理念,通过迅速的反应及时充分修改程序,保证所有团队成员对资源和责任的共享:适用于“小而精”的团队开发.同时,其所倡导的“倾听”也是实现了程序开发“需求至上”的终极目标. (二)编码标准 编码是一个即主观又客观的过程,每个程序员都有他自己的编程

第三次实验报告 之 五子棋

https://github.com/1246251747/3/blob/master/12.txt 实 验 报 告 实验名称:  五子棋实验报告 姓名:     王文政           学 号:  201303011159 班级:计科13-1 学院:   信息学院 五子棋JAVA实验报告 一.实验目的和要求 1.能够用编程语言实现一个简单的五子棋程序 2.在实际系统中使用.实现人工智能的相关算法 3.进一步加深对人工智能算法的理解 二.五子棋的基本常识与原理 1.五子棋的起源 五子棋,是一

结对项目实验报告

结对实验报告 结对人曹文静的地址: http://www.cnblogs.com/liandiexueying/ 一.实践目标: 敏捷方法之结对编程实践 学会与他人合作 基于项目的Github源代码管理 继续学习JUnit4单元测试 形成良好的编码风格 二.结对项目参考题目 连连看小游戏. 三.实验报告内容 1.题目简介 游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题.当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理.在两张想同图片