实验六 一维数组程序设计
- 格式:doc
- 大小:25.50 KB
- 文档页数:4
实验报告课程名称:高级语言程序设计实验六:一维数组和二维数组班级:学生姓名:学号:专业:指导教师:学期:2015-2016学年上学期云南大学信息学院一、实验目的1、掌握一、二维数组的定义及初始化2、掌握数组元素的输入、输出及引用方法3、掌握使用循环对数组元素进行访问4、掌握一、二维数组的简单应用 二、知识要点1、一、二维数组的定义与赋值(初始化、循环键盘输入)2、访问数组元素(下标的正确使用)3、数组的典型应用(复制、求和、统计某种元素个数、求数组中的最大/最小值、元素的查找与排序)三、实验预习 (要求做实验前完成)1、定义一个有四个元素的float 型数组:float a[4];2、定义一个具有五个元素的整型数组并将其初始化为{1,2,3,4,5}:inta[5]={1,2,3,4,5};3、要用循环从键盘输入整型数组s 的元素值(共6个),应该使用语句:4、交换数组元素d[2]和d[4],使用语句:5、语句for(k=0;k<3;k++) x[2][k] = 0; 将把哪些元素变为0? 四、实验内容 (要求提供:① 算法描述或流程图 ② 源程序 )1、已知一个数组有10个元素,值分别是3,6,8,4,5,66,80,72,69,70。
编程,将数组元素逆置后输出。
(提示:第一个与最后一个交换位置,第二个与倒数第二个交换位置,……)2、编程序求Fibonacci 数列的前30项,Fibonacci 数列的定义为:⎪⎩⎪⎨⎧>+===--)2()2(1)1(121n f f n n f n n n 要求将数列存放在数组中,并按每行5个数的格式输出该数列。
3、输入14 一个4行4列的二维数组,统计偶数的个数,并输出所有小于5的数。
4、已知一个二维数组:{{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}},编程,输出该二维数组的最小元素的行下标与列下标。
实验6 一维数组实验要求:使用Visual C++ 6.0开发环境,完成以下习题。
1. (此题可不使用数组)输出1~100之间的不能被7整除的数。
(要求使用continue语句,如果其能被7整除则continue)。
源程序保存为6-1.c。
运行效果截图保存为6-1p.jpg。
2. 对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。
源程序保存为6-2.c。
运行效果截图保存为6-2p.jpg。
3. 定义一个100个元素的数组,依次赋值为1 ~ 100。
先输出其中能被3整除的数。
再输出其中能被5整除的数。
(注意数组的下标是从0开始。
)源程序保存为6-3.c。
运行效果截图保存为6-3p.jpg。
4. 让用户输入学生的人数n,然后输入这n个学生的语文成绩,保存在数组中。
然后分别计算输出:(1)统计语文成绩平均分。
(2)不及格的学生序号及成绩、并统计不及格人数。
(3)最高分的成绩及最高分的学生的序号。
源程序保存为6-4.c。
运行效果截图保存为6-4p.jpg。
5. 定义一个数组A存放6个学生的高数成绩,定义一个数组B存放这6个学生的英语成绩, 再定义一个数组C存放这6个学生的C++成绩。
在输入时,要求逐个学生的三门课成绩输入(即先输入第1个学生的三门课成绩,再输入第2个学生的三门课成绩,以此类推)。
求这6个同学三科的总分存放在数组D中,并输出。
源程序保存为6-5.c。
运行效果截图保存为6-5p.jpg。
6. 编程实现:简单版成绩管理系统1。
程序首先显示菜单,让用户选择1则添加一个学生的的记录,选择2则查看一个学生的记录,选择3则修改一个学生的记录,选择4则浏览所有学生记录。
每个学生记录由其学号、高数成绩、英语成绩、C++成绩组成。
(提示:定义一个100个元素的数组,存放学生的学号;定义一个100个元素的数组存放高数成绩,定义一个100个元素的数组存放英语成绩;定义一个100个元素的数组存放C++成绩;定义一个变量记录当前已经总共添加了多少个学生)当用户选择1之后,让用户输入要添加的学生的学号、高数成绩、英语成绩、C++成绩。
***软件类实验报告课程名称:C语言程序设计学号:姓名:班级:指导教师:开课学期:学院:***教务处⑷一维数组排序。
四、实验过程及内容:(运行结果请抓图到对应题目的下方)1. 先分析以下程序,写出运行结果,再上机检验。
2.程序填空题。
下面程序的功能是9个评委给某个参赛选手打分,去掉一个最高分和一个最低分,求该参赛选手的平均分。
填空完成程序。
实验结果:3. 程序填空题。
有数列1,1,2,4,7,13,24…,该数列的规律是从第4项起,每项是它的前三项之和。
下列程序的功能是将该数列的前30项存放在一维数组中,输出时每行输出5个数。
填空完成程序。
实验结果:4. 程序改错题。
下面程序的功能是将数组中的数按从大到小排序后输出。
改正程序中的错误。
实验结果:5. 程序改错题。
某公司从用公用电话传递数据,数据是四位的整数,在传递过程中需要加密,加密规则为每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
改正程序中的错误。
实验结果:6. 小楚参加了一个研究生考试培训班,共30次课,由于路途较远,每次都是打车去上课,来回的车费分别存储在数组a和b中,其中-1表示未去上课。
编程计算小楚参加培训班共打车花费多少钱?(要求保留1位小数,用循环实现)输出结果的形式为:s=1234.5a数组和b数组定义如下:doublea[30]={31.0,32.0,30.3,32.8,30.5,30.6,31.0,32.8,-1,31.8,31.9,31.5,32.3,32.3,31.8,32.5 ,31.5,30.3,30.4,32.5,30.2,30.2,30.7,32.1,32.1,31.4,31.9,31.9,-1,30.5};doubleb[30]={30.2,30.2,30.3,31.6,32.7,31.5,30.4,32.4,-1,31.0,31.8,32.1,31.6,31.4,32.4,32.1 , 32.5,32.3,32.5,31.4,31.2,30.3,32.3,30.7,31.3,30.2,31.1,30.5,-1,31.9};五、实验小结。
实验六函数一,实验目的:1,掌握定义函数的方法.2,掌握函数实参与形参的对应关系,以及"值传递"的方式.3,掌握函数的嵌套调用和递归调用的方法.4,掌握全局变量和局部变量动态变量,静态变量的概念和使用方法.二,实验准备:1,复习函数调用的基本理论知识.2,复习函数的嵌套调用和递归调用的方法.3,复习全局变量,局部变量;静态变量,动态变量;外部变量等概念和具体使用. 4,源程序.三,实验步骤及内容:1,运行程序并回答问题(1)程序main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n")}void print_message(){ printf("Good Friend! \n");}void play(n)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}}问题:运行后出现什么错误为什么应如何修改请上机调试.修改:main(){ play(3);}void print_star(){ printf("* * * * * * * * * *\n");(缺少分号)}void print_message(){ printf("Good Friend! \n");}play(n)(原先void的与声明类型不同)int n;{ int i;for(i=1;i<=n;++i){ print_star();print_message();}getch();}运行结果(2)以下程序用于计算1+2+3+4+5.main(){ int i,sum;for(i=1;i<=5;++i)sum=add(i);printf("sum=%d\n",sum);getch();}add (a)int a;{static int s=0;s=s+a;return(s);}运行结果:问题:此程序能否得到正确结果为什么请在不增加语句的条件下,修改程序并上机调试.(3)程序int x=567,y=890;main(){ printf("x=%d,y=%d\n",x,y);}运行结果:问题:运行程序后出现什么错误为什么如何修改答:定义位置出错,y的定义在主函数之后了,将y的定义改在和x一样的位置处。
C语言程序设计教案课程:C程序设计制订日期:2015-11-7例如:定义数组int a[10];表示定义了一个整型的数组a,含有10个元素(每个元素都是整型)。
其说明如图6.1所示。
图6.1 数组定义的说明数组一旦定义,各数组元素名就确定了。
数组元素的一般形式为:数组名[下标]数组的第一个元素的下标总是从0开始的。
对于上面所定义的数组a[10],其元素依次为a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]。
其实,数组名代表的是数组的首地址,下标则是数组元素到数组开始的偏移量。
系统为数组在内存分配的是一片连续的存储的单元,如定义了“int a[10];”,则它的10个元素在内存中的排列情况如图6.2所示:图6.2 一维数组元素在内存中的排列情况2.一维数组的初始化数组初始化是指在数组定义时给数组元素赋予初值。
数组初始化是在编译阶段进行的。
这样将减少运行时间,提高效率。
数组初始化赋值的一般形式为:数据类型数组名[常量表达式] = {值,值,……,值};其中在{ }中的各数据值依次为各元素的初值,各值之间用逗号间隔。
例如:int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };相当于a[0] = 0; a[1] = 1; ...; a[9] = 9;数组初始化赋值的几点说明:(1)可以只给部分元素赋初值。
当{ }中数据值的个数少于元素个数时,只给前面部分元素赋值。
例如:int a[10] = {0, 1, 2, 3, 4};表示只给a[0]~a[4]这5个元素赋值,而后5个元素将被编译器自动赋0值。
如图6.3所示。
图6.3 未赋值的元素自动被0填充(2)只能给元素逐个赋值,不能给数组整体赋值。
例如:给十个元素全部赋1值,只能写为:int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};而不能写为:int a[10]=1;(3)如在定义数组时给全部元素赋初值,则在数组定义的说明中,可以不显式的指出数组容量,系统会以给出的数值个数默认为数组容量。
实验6 数组【实验目的】1. 熟练掌握使用数组编程的方法。
2. 熟练掌握排序算法。
3. 熟练掌握字符串的存储和操作方法。
【实验内容】一、一维数组实验1. 以下程序功能为:输入一个正整数n,再输入n个整数,将它们排序后由小到大输出。
找出并改正以下源程序中错误,得出正确的运行结果。
源程序(有错误的程序)#include <stdio.h>void main(){int i,j,num,a[num];int change,t;printf("Enter Number: ");scanf("%d",&num);printf("Enter Data: \n");for(i=0;i<num;i++)scanf("%d",&a[i]);for(i=num-1,change=1;i>0 && change;i--){change=0;for(j=0;j<=i;j++)if(a[j]>a[j+1]){t=a[j]; a[j]=a[j+1]; /*调试时设置断点*/a[j+1]=t; change=1;}}printf("Sorted data:\n"); /*调试时设置断点*/for(i=0;i<num;i++)printf("%d ",a[i]);printf("\n");}运行结果(改正后程序的运行结果)623 77 14 89 6 686 14 23 68 77 89说明:程序编译时出现的错误信息是指定义数组a时,数组长度必须是常量,把a[num]改为a[50]即可,重新编译连接没有错误,但是输出结果有误。
为了找出程序的问题,关闭运行窗口,准备调试程序。
调试程序的步骤:(1)设置断点:设置2个断点,具体位置见源程序的注释。
1、编写程序,从任意n个数中找出最大数和最小数,并将它们相互交换后输出。
#include <iostream>using namespace std;int main( ){int n,a[100],temp,i,maxi=0,mini=0;cin>>n;for(i=0;i<n;i++)cin>>a[i];for(i=1;i<n;i++){if(a[i]>a[maxi])maxi=i;if(a[i]<a[mini])mini=i;}temp=a[maxi];a[maxi]=a[mini];a[mini]=temp;for(i=0;i<n;i++)cout<<a[i]<<" ";return 0;}2、编写程序,将一个数组中的数循环左移。
注意:要让数组元素的值真正发生改变,而不是通过调整输出顺序实现。
#include <iostream>using namespace std;int main( ){int n,a[100],temp,i;cin>>n;for(i=0;i<n;i++)cin>>a[i];temp=a[0];for(i=1;i<n;i++)a[i-1]=a[i];a[n-1]=temp;for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<sum;return 0;}3、编写程序计算Fibonacci数列前n项和,n由键盘输入。
Fibonacci数列为一整数序列,其中数列前2项值都为1,从第3项开始,每一项为前两项之和,即:1,1,2,3,5,8,13……#include <iostream>using namespace std;int main( ){int n,a[100],sum=0,i;cin>>n;a[1]=1;a[2]=1;for(i=3;i<=n;i++)a[i]=a[i-1]+a[i-2];for(i=1;i<=n;i++)sum+=a[i];cout<<sum;return 0;}4、编写程序,输入任意个学生的成绩,输入0或负数结束输入。
实验六一维数组程序设计
一、实验学时 2学时
二、实验目的
(一)掌握一维数组的定义、初始化方法;
(二)掌握一维数组中数据的输入和输出方法;
(三)掌握与一维数组有关的程序和算法;
(四)了解用数组处理大量数据时的优越性。
三、预习要求
(一)理解数组的概念、利用数组存放数据有何特点;
(二)一维数组的定义、初始化方法;
(三)一维数组中数据的输入和输出方法。
四、实验内容
(一)下面的几个程序都能为数组元素赋值,请输入程序并运行。
比较一下这些赋值方法的异同。
1.在定义数组的同时对数组初始化。
/* c6-1.c */
/*在定义数组的同时对数组初始化*/
#include "stdio.h"
void main( )
{ int a[4]={0,1,2,3};
printf("\n%d %d %d %d\n",a[0],a[1],a[2],a[3]);
}
2.不使用循环对单个数组元素赋值。
/* c6-2.c */
/*不使用循环对单个数组元素赋值*/
#include "stdio.h"
void main( )
{ int a[4]; a[0]=2;a[1]=4;a[2]=6;a[3]=8;
printf("\n%d %d %d %d\n",a[0],a[1],a[2],a[3]);
}
3.用循环结构,从键盘输入为每个数组元素赋值,输出各数组元素。
/* c6-3.c */
/*利用循环通过键盘对数组元素赋值*/
#include "stdio.h"
void main( )
{ int i,a[4];
for(i=0; i<4; i++)
scanf("%d",&a[i]);
printf("\n");
for(i=0; i<4; i++)
printf("%d ",a[i]);
printf("\n");
}
(二)编写一程序,为一维数组a中的元素赋值,并按照逆序输出。
编程提示:通过对一维数组的输入输出来实现。
1. 首先复习教材上知识点,充分理解例题。
2. 对一维数组的输入可以参照实验内容(一)中的三种方法,选择其一输出,用循环结构来实现。
3. 注意是逆序输出,可以通过输出时,在for语句中利用循环变量递减的方法来实现。
/* c6-4.c */
/*利用循环实现一维数组的输入输出*/
#include "stdio.h"
void main( )
{ int i,a[10]; /* 定义循环变量i和一维数组a */
for (i=0;i<=9;i++)
scanf("%d",&a[i]);
for ( ____ _) /* 请补充完整循环语句 */
printf("%d ",a[i]); /* 按照逆序输出 */
printf("\n");
}
(三)编写程序,输出一维数组a中的元素最小值及其下标。
编程提示:
1.定义一个整型变量存放最小值下标,将其初始化为0 ,例如:int p=0;即从数组第零个元素开始判断。
2.通过循环,依次判断数组中的每一个元素a[i]是否小于a[p],如果是,则将p和a[p]的值作相应的改变。
/* c6-5.c */
/*输出一维数组中元素的最小值及其下标*/
#include "stdio.h"
void main( )
{ int i,m,p,a[10]={9,8,7,6,1,3,5,18,2,4}; /* m为最小值,p为其下标 */
m=a[0];
p=0;
for(i=1;i<10;i++)
if (a[i]<m)
{ ; p=i;} /* 请补充完整此语句 */
printf("%d,%d\n",a[p],p); /* 输出一维数组a中的最小值及其下标 */ }
(四)编写一程序,求一维数组中下标为偶数的元素之和。
编程提示:
1.定义一个数组a并初始化。
2.定义一个整型变量sum,存放下标为偶数的元素和,并初始化为0。
3.从数组的第0个元素开始,每次循环变量递增2,一直到数组的最后一个元素,将其累加到sum变量。
4.输出sum变量即为下标为偶数的元素之和。
/* c6-6.c */
/*求一维数组中下标为偶数的元素之和*/
#include "stdio.h"
void main( )
{ int i,sum=0; /* 初始化sum为0 */
int a[]={2,3,4,5,6,7,8,9};
for(i=0; i<8; ) /* 请补充完整循环语句 */ sum+=a[i];
printf("sum=%d\n",sum);
}
(五)编写一程序,将100以内的素数存放到一个数组中。
编程提示:这是一个双层循环嵌套的程序。
1.首先复习教材上的内容,掌握判断素数的方法。
2.定义一个数组存放100以内的素数,想一想该数组的大小应该为多少?
3.定义一个整型变量作循环变量。
4.定义一个整型变量作为数组元素下标的计数器,想一想该变量应赋什么样的初值?
5.在外层循环中,对1~100之间的所有整数进行判断;内层循环则判断每个整数是否为素数。
如果是素数,存放到数组中,并使数组下标变量加1;否则继续判断下一个整数。
6.用循环语句输出数组中的所有素数,注意循环变量的初值和终值如何确定。
(六)将一个数组中的值按逆序重新存放。
例如,原来的顺序为8,6,5,4,1,2,要求改为按2,1,4,5,6,8的顺序存放(注意是逆序存放而不是逆序输出)。
编程提示:
1.定义一个数组,为该数组赋值(可以在定义时初始化,也可以用循环语句)。
2.在循环中,使第0个元素与第5个元素交换,第1个元素与第4个元素交换,第2个元素与第个3元素交换(注意循环次数按n/2确定,n为数据个数)。
3.输出逆序存放后的各数组元素(使用循环语句)。
五、实验注意事项
(一)C规定,数组的下标下界为0,因此数组元素下标的上界是该数组元素的个数减1。
例如,有定义:int a[10]; 则数组元素的下标上界为9。
(二)由于数组的下标下界为0,所以数组中下标和元素位置的对应关系是:第一个元素下标为0,第二个元素下标为1,第三个元素下标为2,依次类推,第n个元素下标为n-1。
(三)数值型数组要对多个数组元素赋值时,使用循环语句,使数组元素的下标依次变化,从而为每个数组元素赋值。
例如:int a[10],i;
for(i=0;i<10;i++) scanf("%d",&a[i]);
不能通过如下的方法对数组中的全部元素赋值。
int a[10],i;
scanf("%d",&a[i]);
六、思考题
(一)定义一个数组名为ftop且有5个int类型元素的一维数组,同时给每个元素赋初值为0,请写出数组的定义语句。
(二)下面程序的功能是:为一维数组a中的元素赋值,并按照逆序输出。
请在程序中的横线上填入正确的内容。
#include "stdio.h"
void main( )
{ int i,a[10]; /* 定义循环变量i和一维数组a */
for(i=0;i<=9;i++)
scanf("%d",&a[i ]);
for( ;i>=0;i--)
printf("%d ",a[i]); /* 按照逆序输出 */
printf("\n");
}
(三)下面程序的功能是:输出一维数组a中的最小值及其下标。
请在程序中的横线上填入正确的内容。
#include "stdio.h"
void main( )
{ int i,p=0,a[10]; /* 定义a为数组名,p为下标名 */
for(i=0; i<10; i++)
scanf("%d",&a[i]);
for(i=1; i<10; i++)
if (a[i]<a[p]) { ; }
printf("%d,%d",a[p],p); /* 输出一维数组a中的最小值及其下标 */ }
(四)下面程序的功能是:求一维数组中下标为偶数的元素之和并输出。
请在程序中的横线上填入正确的内容。
#include "stdio.h"
void main( )
{ int i,sum=0;
int a[ ]={2,3,4,5,6,7,8,9};
for(i=0; i<8; )
sum+=a[i];
printf("sum=%d\n",sum);
}。